diff --git a/CHANGELOG.md b/CHANGELOG.md index ebbc5a2..5f8360b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ - Added indirect lighting modifier. +### Changed + +- Improved cone tracing direction selection. +- Removed cone tracing bias. + ### Fixed - Fixed the gizmos being drawn in Game View. diff --git a/ShaderLibrary/Radiances/Pixel.cginc b/ShaderLibrary/Radiances/Pixel.cginc index 75c56ed..2eee857 100644 --- a/ShaderLibrary/Radiances/Pixel.cginc +++ b/ShaderLibrary/Radiances/Pixel.cginc @@ -80,7 +80,7 @@ float3 unit = Directions[i]; float NdotL = dot(data.vecN, unit); - if (NdotL <= 0.0) continue; + if (NdotL < ConeDirectionThreshold) continue; float4 incoming = 0.0; float size = 1.0; @@ -89,7 +89,7 @@ for ( float3 coordinate = apex + direction; incoming.a < 0.95 && TextureSDF(coordinate) > 0.0; - size *= 1.5, direction *= 1.5, coordinate = apex + direction + size *= 2.0, direction *= 2.0, coordinate = apex + direction ) { incoming += 0.5 * (1.0 - incoming.a) * SampleRadiance(coordinate, size); } @@ -98,6 +98,6 @@ cones++; } - return data.diffuseColor * radiance * 2.0 / cones; + return data.diffuseColor * radiance / cones; } #endif diff --git a/ShaderLibrary/Radiances/Voxel.cginc b/ShaderLibrary/Radiances/Voxel.cginc index f530cc1..7a0fc0e 100644 --- a/ShaderLibrary/Radiances/Voxel.cginc +++ b/ShaderLibrary/Radiances/Voxel.cginc @@ -55,7 +55,7 @@ float3 unit = Directions[i]; float NdotL = dot(data.vecN, unit); - if (NdotL <= 0.0) continue; + if (NdotL < ConeDirectionThreshold) continue; float4 incoming = 0.0; float size = 1.0; @@ -64,7 +64,7 @@ for ( float3 coordinate = apex + direction; incoming.a < 0.95 && TextureSDF(coordinate) > 0.0; - size *= 1.5, direction *= 1.5, coordinate = apex + direction + size *= 2.0, direction *= 2.0, coordinate = apex + direction ) { incoming += 0.5 * (1.0 - incoming.a) * SampleRadiance(coordinate, size); } @@ -73,7 +73,7 @@ cones++; } - return radiance * 2.0 / cones; + return radiance / cones; } float3 VoxelRadiance(VoxelLightingData data) diff --git a/ShaderLibrary/Variables.cginc b/ShaderLibrary/Variables.cginc index 1b33537..91f446a 100644 --- a/ShaderLibrary/Variables.cginc +++ b/ShaderLibrary/Variables.cginc @@ -11,6 +11,8 @@ SamplerState linear_clamp_sampler; StructuredBuffer LightSources; + static float ConeDirectionThreshold = sin(atan(1.0/3.0)); + // Cone tracing direction for indirect diffuse calculations static float3 Directions[32] = { float3(+0.000000, +1.000000, +0.000000),