Files
2026-11-01 23:39:55 +02:00

42 lines
1.5 KiB
HLSL

#ifndef SAMPLE_SCREEN_SPACE_REFLECTION_INCLUDED
#define SAMPLE_SCREEN_SPACE_REFLECTION_INCLUDED
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ScreenSpaceReflectionCommon.hlsl"
// SSR reflection color
TEXTURE2D_X(_ScreenSpaceReflectionTexture);
half4 SampleScreenSpaceReflection(float2 normalizedScreenSpaceUV, float3 positionWS, float perceptualRoughness)
{
float2 uv = UnityStereoTransformScreenSpaceTex(normalizedScreenSpaceUV);
// Fade out reflections for pixels that have smoothness below our minimum.
float perceptualSmoothness = PerceptualRoughnessToPerceptualSmoothness(perceptualRoughness);
float fadeStart = _ScreenSpaceReflectionParam.y;
float fadeEnd = _ScreenSpaceReflectionParam.z;
float fade = smoothstep(fadeStart, fadeEnd, perceptualSmoothness);
float4 reflColor = float4(0,0,0,0);
if (fade > 1e-3)
{
// Map roughness to mip level to get blur.
float mipLevel = GetSSRMipLevelFromPerceptualRoughness(positionWS, perceptualRoughness);
reflColor = SAMPLE_TEXTURE2D_X_LOD(_ScreenSpaceReflectionTexture, sampler_TrilinearClamp, uv, mipLevel);
reflColor.a *= fade;
}
return reflColor;
}
half4 GetScreenSpaceReflection(float2 normalizedScreenSpaceUV, float3 positionWS, float perceptualRoughness)
{
#if _SCREEN_SPACE_REFLECTION_KEYWORD_DECLARED
if (_SCREEN_SPACE_REFLECTION)
return SampleScreenSpaceReflection(normalizedScreenSpaceUV, positionWS, perceptualRoughness) * _ScreenSpaceReflectionParam.x;
else
#endif
return 0;
}
#endif