Shader "FullScreen/#SCRIPTNAME#" { HLSLINCLUDE #pragma vertex Vert #pragma target 4.5 #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassCommon.hlsl" // The PositionInputs struct allow you to retrieve a lot of useful information for your fullScreenShader: // struct PositionInputs // { // float3 positionWS; // World space position (could be camera-relative) // float2 positionNDC; // Normalized screen coordinates within the viewport : [0, 1) (with the half-pixel offset) // uint2 positionSS; // Screen space pixel coordinates : [0, NumPixels) // uint2 tileCoord; // Screen tile coordinates : [0, NumTiles) // float deviceDepth; // Depth from the depth buffer : [0, 1] (typically reversed) // float linearDepth; // View space Z coordinate : [Near, Far] // }; // To sample custom buffers, you have access to these functions: // But be careful, on most platforms you can't sample to the bound color buffer. It means that you // can't use the SampleCustomColor when the pass color buffer is set to custom (and same for camera the buffer). // float4 CustomPassSampleCustomColor(float2 uv); // float4 CustomPassLoadCustomColor(uint2 pixelCoords); // float LoadCustomDepth(uint2 pixelCoords); // float SampleCustomDepth(float2 uv); // There are also a lot of utility function you can use inside Common.hlsl and Color.hlsl, // you can check them out in the source code of the core SRP package. float4 FullScreenPass(Varyings varyings) : SV_Target { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(varyings); float depth = LoadCameraDepth(varyings.positionCS.xy); PositionInputs posInput = GetPositionInput(varyings.positionCS.xy, _ScreenSize.zw, depth, UNITY_MATRIX_I_VP, UNITY_MATRIX_V); float3 viewDirection = GetWorldSpaceNormalizeViewDir(posInput.positionWS); float4 color = float4(0.0, 0.0, 0.0, 0.0); // Load the camera color buffer at the mip 0 if we're not at the before rendering injection point if (_CustomPassInjectionPoint != CUSTOMPASSINJECTIONPOINT_BEFORE_RENDERING) color = float4(CustomPassLoadCameraColor(varyings.positionCS.xy, 0), 1); // Add your custom pass code here // Fade value allow you to increase the strength of the effect while the camera gets closer to the custom pass volume float f = 1 - abs(_FadeValue * 2 - 1); return float4(color.rgb + f, color.a); } ENDHLSL SubShader { Tags{ "RenderPipeline" = "HDRenderPipeline" } Pass { Name "Custom Pass 0" ZWrite Off ZTest Always Blend SrcAlpha OneMinusSrcAlpha Cull Off HLSLPROGRAM #pragma fragment FullScreenPass ENDHLSL } } Fallback Off }