diff --git a/Res/Shader/volume.hlsl b/Res/Shader/volume.hlsl index 9c156d50..e2f05418 100644 --- a/Res/Shader/volume.hlsl +++ b/Res/Shader/volume.hlsl @@ -85,6 +85,11 @@ bool get_hdda_hit(inout pnanovdb_readaccessor_t acc, inout float tmin, float3 or return hit; } +float phase_function() +{ + return 1.0; +} + PSInput MainVS(VSInput input) { PSInput output; @@ -167,9 +172,12 @@ float4 MainPS(PSInput input) : SV_TARGET continue; } - float3 S = density * float3(1, 1, 1); - color += transmittance * S * _StepSize; - transmittance *= exp(-density * _StepSize); + float sigmaS = density; + float sigmaE = max(0.000001, sigmaS); + float3 S = sigmaS * phase_function() * float3(1, 1, 1); + float3 Sint = (S - S * exp(-sigmaE * _StepSize)) / sigmaE; + color += transmittance * Sint; + transmittance *= exp(-sigmaE * _StepSize); tmin += _StepSize; }