diff --git a/Shaders/deferred_indirect/deferred_indirect.frag.glsl b/Shaders/deferred_indirect/deferred_indirect.frag.glsl index b17d6b4d..0dbcccde 100644 --- a/Shaders/deferred_indirect/deferred_indirect.frag.glsl +++ b/Shaders/deferred_indirect/deferred_indirect.frag.glsl @@ -101,7 +101,6 @@ void main() { vec3 indirectSpecular = traceSpecular(voxpos, n, v, metrough.y); indirectSpecular *= f0 * envBRDF.x + envBRDF.y; - indirectSpecular = vec3(0.0); fragColor.rgb = indirectDiffuse.rgb * voxelgiDiff * g1.rgb + indirectSpecular * voxelgiSpec; diff --git a/Shaders/std/conetrace.glsl b/Shaders/std/conetrace.glsl index 6ad41d7f..223a12d9 100755 --- a/Shaders/std/conetrace.glsl +++ b/Shaders/std/conetrace.glsl @@ -53,9 +53,9 @@ vec4 traceCone(const vec3 origin, vec3 dir, float aperture, const float maxDist, float mip = max(log2(diam * voxelgiResolution), 0); // vec4 mipSample = sampleVoxel(samplePos, dir, indices, mip); vec4 mipSample = textureLod(voxels, samplePos * 0.5 + vec3(0.5), mip); -// #ifdef _Cycles - // mipSample.rgb = min(mipSample.rgb * 0.9, vec3(0.9)) + max((mipSample.rgb - 0.9) * 200.0, 0.0); // Higher range to allow emission -// #endif +#ifdef _VoxelGIEmission + mipSample.rgb = min(mipSample.rgb * 0.9, vec3(0.9)) + max((mipSample.rgb - 0.9) * 200.0, 0.0); // Higher range to allow emission +#endif // Blend mip sample with current sample color sampleCol += ((1 - sampleCol.a) * mipSample) * (1.0 / max(voxelgiOcc, 0.1)); dist += max(diam / 2, VOXEL_SIZE); // Step size diff --git a/blender/arm/make_renderer.py b/blender/arm/make_renderer.py index 01c3cec2..9b510257 100644 --- a/blender/arm/make_renderer.py +++ b/blender/arm/make_renderer.py @@ -133,6 +133,7 @@ def set_preset(self, context, preset): rpdat.rp_greasepencil = False rpdat.rp_gi = 'Voxel GI' rpdat.rp_voxelgi_resolution = '256' + rpdat.rp_voxelgi_emission = True rpdat.rp_render_to_texture = True rpdat.rp_supersampling = '2' rpdat.rp_antialiasing = 'TAA' @@ -275,6 +276,42 @@ def set_preset(self, context, preset): rpdat.arm_rp_resolution = 'Display' rpdat.arm_texture_filter = 'Anisotropic' rpdat.arm_diffuse_model = 'Lambert' + elif preset == 'Max': + rpdat.rp_renderer = 'Deferred' + rpdat.rp_shadowmap = '8192' + rpdat.rp_translucency_state = 'Auto' + rpdat.rp_overlays_state = 'Auto' + rpdat.rp_decals_state = 'Auto' + rpdat.rp_sss_state = 'Auto' + rpdat.rp_blending_state = 'Off' + rpdat.rp_hdr = True + rpdat.rp_background = 'World' + rpdat.rp_stereo = False + rpdat.rp_greasepencil = False + rpdat.rp_gi = 'Voxel GI' + rpdat.rp_voxelgi_resolution = '128' + rpdat.arm_voxelgi_revoxelize = True + rpdat.arm_voxelgi_camera = True + rpdat.rp_voxelgi_emission = False + rpdat.rp_render_to_texture = True + rpdat.rp_supersampling = '1' + rpdat.rp_antialiasing = 'TAA' + rpdat.rp_compositornodes = True + rpdat.rp_volumetriclight = False + rpdat.rp_ssao = True + rpdat.rp_ssr = True + rpdat.rp_dfrs = False + rpdat.rp_dfao = False + rpdat.rp_dfgi = False + rpdat.rp_bloom = False + rpdat.rp_eyeadapt = False + rpdat.rp_rendercapture = True + rpdat.rp_motionblur = 'None' + rpdat.arm_rp_resolution = 'Display' + rpdat.arm_material_model = 'Full' + rpdat.arm_pcss_state = 'On' + rpdat.arm_texture_filter = 'Anisotropic' + rpdat.arm_diffuse_model = 'OrenNayar' updating_preset = False set_renderpath(self, context) diff --git a/blender/arm/make_world.py b/blender/arm/make_world.py index 6722a699..0db99abf 100755 --- a/blender/arm/make_world.py +++ b/blender/arm/make_world.py @@ -140,6 +140,7 @@ def build_node_tree(world): wrd.world_defs += '_VoxelGICone5' wrd.world_defs += '_Rad' # Always do radiance for voxels wrd.world_defs += '_Irr' + if voxelgi: assets.add_khafile_def('arm_voxelgi') if rpdat.arm_voxelgi_shadows: @@ -148,8 +149,9 @@ def build_node_tree(world): if rpdat.arm_voxelgi_refraction: wrd.world_defs += '_VoxelGIDirect' wrd.world_defs += '_VoxelGIRefract' + if rpdat.arm_voxelgi_emission: + wrd.world_defs += '_VoxelGIEmission' wrd.world_defs += '_VoxelGI' - elif voxelao: wrd.world_defs += '_VoxelAO' diff --git a/blender/arm/material/make_voxel.py b/blender/arm/material/make_voxel.py index 5dfc7871..3f09f529 100644 --- a/blender/arm/material/make_voxel.py +++ b/blender/arm/material/make_voxel.py @@ -198,8 +198,8 @@ def make_gi(context_id): frag.write('vec3 color = basecol * visibility * lightColor * dotNL;') frag.write('vec3 voxel = voxposition * 0.5 + 0.5;') - # if rpdat.arm_material_model == 'Cycles': - # frag.write('color = min(color * 0.9, vec3(0.9)) + min(color / 200.0, 0.1);') # Higher range to allow emission + if rpdat.arm_voxelgi_emission: + frag.write('color = min(color * 0.9, vec3(0.9)) + min(color / 200.0, 0.1);') # Higher range to allow emission # if rpdat.rp_voxelgi_hdr: # frag.write('imageStore(voxels, ivec3(voxelgiResolution * voxel), vec4(color, 1.0));') diff --git a/blender/arm/props.py b/blender/arm/props.py index 728f0047..3ea6d366 100755 --- a/blender/arm/props.py +++ b/blender/arm/props.py @@ -171,6 +171,7 @@ def init_properties(): ('Deferred Plus', 'Deferred Plus (experimental)', 'Deferred Plus'), ('Grease Pencil', 'Grease Pencil', 'Grease Pencil'), ('Render Capture', 'Render Capture', 'Render Capture'), + ('Max', 'Max', 'Max'), ], name="Preset", description="Render path preset", default='Deferred', update=update_preset) bpy.types.World.arm_voxelgi_diff = bpy.props.FloatProperty(name="Diffuse", description="", default=1.0, update=assets.invalidate_shader_cache) diff --git a/blender/arm/props_renderpath.py b/blender/arm/props_renderpath.py index c8ca78ed..107c58d4 100644 --- a/blender/arm/props_renderpath.py +++ b/blender/arm/props_renderpath.py @@ -202,6 +202,7 @@ class ArmRPListItem(bpy.types.PropertyGroup): # arm_voxelgi_anisotropic = bpy.props.BoolProperty(name="Anisotropic", description="Use anisotropic voxels", default=False, update=update_renderpath) arm_voxelgi_shadows = bpy.props.BoolProperty(name="Trace Shadows", description="Use voxels to render shadows", default=False, update=update_renderpath) arm_voxelgi_refraction = bpy.props.BoolProperty(name="Trace Refraction", description="Use voxels to render refraction", default=False, update=update_renderpath) + arm_voxelgi_emission = bpy.props.BoolProperty(name="Emission", description="Encode emission into voxelized data", default=False, update=update_renderpath) arm_samples_per_pixel = EnumProperty( items=[('1', '1X', '1X'), ('2', '2X', '2X'), diff --git a/blender/arm/props_ui.py b/blender/arm/props_ui.py index 7136348a..f7447a09 100644 --- a/blender/arm/props_ui.py +++ b/blender/arm/props_ui.py @@ -984,6 +984,8 @@ class ArmRenderPathPanel(bpy.types.Panel): layout.prop(rpdat, 'arm_voxelgi_shadows') layout.prop(rpdat, 'arm_voxelgi_refraction') # layout.prop(rpdat, 'rp_voxelgi_hdr') + if rpdat.rp_gi == 'Voxel GI': + layout.prop(rpdat, 'arm_voxelgi_emission') layout.separator() layout.prop(rpdat, "rp_render_to_texture")