Singularity/Library/PackageCache/com.unity.render-pipelines..../Shaders/PostProcessing/FinalPost.shader
2024-05-06 11:45:45 -07:00

143 lines
4.8 KiB
Plaintext

Shader "Hidden/Universal Render Pipeline/FinalPost"
{
HLSLINCLUDE
#pragma exclude_renderers gles
#pragma multi_compile_local_fragment _ _POINT_SAMPLING _RCAS
#pragma multi_compile_local_fragment _ _FXAA
#pragma multi_compile_local_fragment _ _FILM_GRAIN
#pragma multi_compile_local_fragment _ _DITHERING
#pragma multi_compile_local_fragment _ _LINEAR_TO_SRGB_CONVERSION
#pragma multi_compile _ _USE_DRAW_PROCEDURAL
#pragma multi_compile_fragment _ DEBUG_DISPLAY
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Debug/DebuggingFullscreen.hlsl"
#include "Packages/com.unity.render-pipelines.universal/Shaders/PostProcessing/Common.hlsl"
TEXTURE2D_X(_SourceTex);
TEXTURE2D(_Grain_Texture);
TEXTURE2D(_BlueNoise_Texture);
float4 _SourceSize;
float2 _Grain_Params;
float4 _Grain_TilingParams;
float4 _Dithering_Params;
#if SHADER_TARGET >= 45
#define FSR_INPUT_TEXTURE _SourceTex
#define FSR_INPUT_SAMPLER sampler_LinearClamp
#include "Packages/com.unity.render-pipelines.core/Runtime/PostProcessing/Shaders/FSRCommon.hlsl"
#endif
#define GrainIntensity _Grain_Params.x
#define GrainResponse _Grain_Params.y
#define GrainScale _Grain_TilingParams.xy
#define GrainOffset _Grain_TilingParams.zw
#define DitheringScale _Dithering_Params.xy
#define DitheringOffset _Dithering_Params.zw
half4 Frag(Varyings input) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
float2 uv = UnityStereoTransformScreenSpaceTex(input.uv);
float2 positionNDC = uv;
int2 positionSS = uv * _SourceSize.xy;
#if _POINT_SAMPLING
half3 color = SAMPLE_TEXTURE2D_X(_SourceTex, sampler_PointClamp, uv).xyz;
#elif _RCAS && SHADER_TARGET >= 45
half3 color = ApplyRCAS(positionSS);
// When Unity is configured to use gamma color encoding, we must convert back from linear after RCAS is performed.
// (The input color data for this shader variant is always linearly encoded because RCAS requires it)
#if UNITY_COLORSPACE_GAMMA
color = GetLinearToSRGB(color);
#endif
#else
half3 color = SAMPLE_TEXTURE2D_X(_SourceTex, sampler_LinearClamp, uv).xyz;
#endif
#if _FXAA
{
color = ApplyFXAA(color, positionNDC, positionSS, _SourceSize, _SourceTex);
}
#endif
#if _FILM_GRAIN
{
color = ApplyGrain(color, positionNDC, TEXTURE2D_ARGS(_Grain_Texture, sampler_LinearRepeat), GrainIntensity, GrainResponse, GrainScale, GrainOffset);
}
#endif
#if _LINEAR_TO_SRGB_CONVERSION
{
color = LinearToSRGB(color);
}
#endif
#if _DITHERING
{
color = ApplyDithering(color, positionNDC, TEXTURE2D_ARGS(_BlueNoise_Texture, sampler_PointRepeat), DitheringScale, DitheringOffset);
}
#endif
half4 finalColor = half4(color, 1);
#if defined(DEBUG_DISPLAY)
half4 debugColor = 0;
if(CanDebugOverrideOutputColor(finalColor, uv, debugColor))
{
return debugColor;
}
#endif
return finalColor;
}
ENDHLSL
/// Standard FinalPost shader variant with support for FSR
/// Note: FSR requires shader target 4.5 because it relies on texture gather instructions
SubShader
{
Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline"}
LOD 100
ZTest Always ZWrite Off Cull Off
Pass
{
Name "FinalPost"
HLSLPROGRAM
#pragma vertex FullscreenVert
#pragma fragment Frag
#pragma target 4.5
ENDHLSL
}
}
/// Fallback version of FinalPost shader which lacks support for FSR
SubShader
{
Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline"}
LOD 100
ZTest Always ZWrite Off Cull Off
Pass
{
Name "FinalPost"
HLSLPROGRAM
#pragma vertex FullscreenVert
#pragma fragment Frag
ENDHLSL
}
}
}