Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package/Shaders/Common/PBR.hlsli
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ namespace PBR
// Apply ambient occlusion with multi-bounce approximation
lobeWeights.diffuse *= MultiBounceAO(material.BaseColor, material.AO);
float alpha = material.Roughness * material.Roughness;
lobeWeights.specular *= SpecularOcclusion(NdotV, alpha, material.AO);
lobeWeights.specular *= SpecularOcclusionGTSO(NdotV, material.AO);
}
}

Expand Down
7 changes: 7 additions & 0 deletions package/Shaders/Common/Shading.hlsli
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ float3 MultiBounceAO(float3 baseColor, float ao)
return max(ao, ((ao * a + b) * ao + c) * ao);
}

// [Jimenez et al. 2016, "Practical Realtime Strategies for Accurate Indirect Occlusion"]
float SpecularOcclusionGTSO(float NdotV, float ao)
{
float d = NdotV + ao;
return saturate(d * d - 1.0 + ao);
}

// [Lagarde et al. 2014, "Moving Frostbite to Physically Based Rendering 3.0"]
float SpecularAOLagarde(float NdotV, float ao, float roughness)
{
Expand Down
5 changes: 1 addition & 4 deletions package/Shaders/DeferredCompositeCS.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,7 @@ void SampleSSGI(uint2 pixCoord, float3 normalWS, out float ao, out float3 il)
void SampleSSGISpecular(uint2 pixCoord, sh2 lobe, inout float ao, out float3 il, in float3 normal, in float3 view, in float roughness)
{
float NdotV = dot(normal, view);
float alpha = roughness * roughness;
ao = SpecularOcclusion(saturate(NdotV), alpha, ao);
ao = SpecularOcclusionGTSO(saturate(NdotV), ao);

float4 ssgiIlYSh = SsgiYTexture[pixCoord];
float ssgiIlY = SphericalHarmonics::FuncProductIntegral(ssgiIlYSh, lobe);
Expand Down Expand Up @@ -145,8 +144,6 @@ void SampleSSGISpecular(uint2 pixCoord, sh2 lobe, inout float ao, out float3 il,

float3 multiBounceSSGIAo = MultiBounceAO(linAlbedo, ssgiAo);

linDiffuseColor *= sqrt(multiBounceSSGIAo);

diffuseColor = Color::IrradianceToGamma(linDiffuseColor);

diffuseColor += Color::IrradianceToGamma(Color::IrradianceToLinear(directionalAmbientColor) * multiBounceSSGIAo);
Expand Down
Loading