| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #ifndef SSR_SOLVE
- #define SSR_SOLVE
- // Copyright 2021 Kronnect - All Rights Reserved.
- TEXTURE2D_X(_MainTex);
- float4 _MainTex_TexelSize;
- TEXTURE2D_X(_RayCastRT);
- float4 _SSRSettings2;
- #define ENERGY_CONSERVATION _SSRSettings2.y
- #define REFLECTIONS_MULTIPLIER _SSRSettings2.z
- float4 _SSRSettings4;
- #define REFLECTIONS_MIN_INTENSITY _SSRSettings4.y
- #define REFLECTIONS_MAX_INTENSITY _SSRSettings4.z
- #define VIGNETTE_SIZE _SSRSettings2.w
- struct AttributesFS {
- float4 positionHCS : POSITION;
- float2 uv : TEXCOORD0;
- UNITY_VERTEX_INPUT_INSTANCE_ID
- };
- struct VaryingsSSR {
- float4 positionCS : SV_POSITION;
- float2 uv : TEXCOORD0;
- UNITY_VERTEX_INPUT_INSTANCE_ID
- UNITY_VERTEX_OUTPUT_STEREO
- };
- VaryingsSSR VertSSR(AttributesFS input) {
- VaryingsSSR output;
- UNITY_SETUP_INSTANCE_ID(input);
- UNITY_TRANSFER_INSTANCE_ID(input, output);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
- output.positionCS = float4(input.positionHCS.xyz, 1.0);
- #if UNITY_UV_STARTS_AT_TOP
- output.positionCS.y *= -1;
- #endif
- output.uv = input.uv;
- return output;
- }
- half4 FragResolve (VaryingsSSR i) : SV_Target {
- UNITY_SETUP_INSTANCE_ID(i);
- UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
- i.uv = SSRStereoTransformScreenSpaceTex(i.uv);
- half4 reflData = SAMPLE_TEXTURE2D_X(_RayCastRT, sampler_PointClamp, i.uv);
- half4 reflection = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, reflData.xy);
- reflection.rgb = min(reflection.rgb, 1.0); // stop NAN pixels
- half vd = dot2( (reflData.xy - 0.5) * 2.0 );
- half vignette = saturate( VIGNETTE_SIZE - vd * vd );
- half reflectionIntensity = clamp(reflData.a * REFLECTIONS_MULTIPLIER, REFLECTIONS_MIN_INTENSITY, REFLECTIONS_MAX_INTENSITY) * vignette;
- reflection.rgb *= reflectionIntensity;
- reflection.rgb = min(reflection.rgb, 1.2); // clamp max brightness
- // conserve energy
- half4 pixel = SAMPLE_TEXTURE2D_X(_MainTex, sampler_LinearClamp, i.uv);
- reflection.rgb -= pixel.rgb * reflectionIntensity;
- // keep blur factor in alpha channel
- reflection.a = reflData.z;
- return reflection;
- }
- #endif // SSR_SOLVE
|