${VFXBegin:VFXPassDepth}"DepthForwardOnly"${VFXEnd} ${VFXBegin:VFXPassForward}"ForwardOnly"${VFXEnd} ${VFXBegin:VFXPassShadow}"ShadowCaster"${VFXEnd} ${VFXBegin:VFXPassVelocity}"MotionVectors"${VFXEnd} ${VFXBegin:VFXPassDepthDefine} #define SHADERPASS SHADERPASS_DEPTH_ONLY #if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION #define SCENESELECTIONPASS #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING #define SCENEPICKINGPASS #endif ${VFXEnd} ${VFXBegin:VFXPassForwardDefine}#define SHADERPASS SHADERPASS_FORWARD_UNLIT${VFXEnd} ${VFXBegin:VFXPassShadowDefine}#define SHADERPASS SHADERPASS_SHADOWS${VFXEnd} ${VFXBegin:VFXPassVelocityDefine}#define SHADERPASS SHADERPASS_MOTION_VECTORS${VFXEnd} ${VFXBegin:VFXPassDepthAdditionalPragma}#pragma multi_compile _ WRITE_MSAA_DEPTH${VFXEnd} ${VFXBegin:VFXPassForwardAdditionalPragma}#pragma multi_compile _ DEBUG_DISPLAY${VFXEnd} ${VFXBegin:VFXPassVelocityAdditionalPragma}#pragma multi_compile _ WRITE_MSAA_DEPTH${VFXEnd} ${VFXBegin:VFXShaderGraphFunctionsInclude} #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Packing.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/EntityLighting.hlsl" #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/BuiltinGIUtilities.hlsl" #ifndef SHADERPASS #error Shaderpass should be defined at this stage. #endif #include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderGraphFunctions.hlsl" ${VFXEnd} ${VFXBegin:VFXPassDepthCommonFragmentLit} #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR ${VFXPassVelocityDefine} #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW ${VFXPassShadowDefine} #else ${VFXPassDepthDefine} #endif ${VFXIncludeRP("VFXLit.template")} ${SHADERGRAPH_PIXEL_CODE_DEPTHONLY} #if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION int _ObjectId; int _PassValue; #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING float4 _SelectionID; #endif #pragma fragment frag void frag(ps_input i #if USE_DOUBLE_SIDED , bool frontFace : SV_IsFrontFace #endif #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR #ifdef WRITE_MSAA_DEPTH // We need the depth color as SV_Target0 for alpha to coverage , out float4 outDepthColor : SV_Target0 , out float4 outMotionVector : SV_Target1 #ifdef WRITE_NORMAL_BUFFER , out float4 outNormalBuffer : SV_Target2 #endif #else // When no MSAA, the motion vector is always the first buffer , out float4 outMotionVector : SV_Target0 #ifdef WRITE_NORMAL_BUFFER , out float4 outNormalBuffer : SV_Target1 #endif #endif #elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL #ifdef WRITE_MSAA_DEPTH // We need the depth color as SV_Target0 for alpha to coverage , out float4 outDepthColor : SV_Target0 #ifdef WRITE_NORMAL_BUFFER , out float4 outNormalBuffer : SV_Target1 #endif #elif defined(WRITE_NORMAL_BUFFER) , out float4 outNormalBuffer : SV_Target0 #endif #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION || VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING , out float4 outColor : SV_Target0 #endif ) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); VFXTransformPSInputs(i); ${VFXComputeNormalWS} #ifdef VFX_SHADERGRAPH ${VFXAdditionalInterpolantsPreparation} ${SHADERGRAPH_PIXEL_CALL_DEPTHONLY} float alpha = OUTSG.${SHADERGRAPH_PARAM_ALPHA}; #else float alpha = VFXGetFragmentColor(i).a; #if HDRP_USE_BASE_COLOR_MAP_ALPHA alpha *= VFXGetTextureColor(VFX_SAMPLER(baseColorMap),i).a; #endif #if VFX_MATERIAL_TYPE_SIX_WAY_SMOKE #ifndef VFX_VARYING_NORMAL const VFXUVData uvData = GetUVData(i); #endif alpha *= SampleTexture(VFX_SAMPLER(positiveAxesLightmap),uvData).a; #if VFX_SIX_WAY_USE_ALPHA_REMAP alpha = SampleCurve(i.VFX_VARYING_ALPHA_REMAP, alpha); #endif #endif #endif VFXClipFragmentColor(alpha,i); #ifdef WRITE_NORMAL_BUFFER #ifndef VFX_SHADERGRAPH VFXComputePixelOutputToNormalBuffer(i,normalWS,uvData,outNormalBuffer); #else #if HAS_SHADERGRAPH_PARAM_NORMAL float3 n = OUTSG.Normal_8; normalWS = mul(n,tbn); #endif SurfaceData surface = (SurfaceData)0; surface.normalWS = normalWS; EncodeIntoNormalBuffer(ConvertSurfaceDataToNormalData(surface), outNormalBuffer); #endif #endif #ifdef WRITE_MSAA_DEPTH outDepthColor = i.VFX_VARYING_POSCS.z; #if VFX_USE_ALPHA_TO_MASK outDepthColor.a = alpha; #endif #endif #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR ${VFXComputeOutputMotionVector} outMotionVector = encodedMotionVector; #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION // We use depth prepass for scene selection in the editor, this code allow to output the outline correctly outColor = float4(_ObjectId, _PassValue, 1.0, 1.0); #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING outColor = _SelectionID; #elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL //void #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW //void #else #error VFX_PASSDEPTH undefined #endif } ${VFXEnd} ${VFXBegin:VFXPassFullScreenDebugCommonVertex} #if !defined(SHADER_API_METAL) if (_DebugFullScreenMode == FULLSCREENDEBUGMODE_VERTEX_DENSITY) IncrementVertexDensityCounter(o.VFX_VARYING_POSCS); #endif ${VFXEnd} ${VFXBegin:VFXPassFullScreenDebugCommonFragment} #pragma fragment frag [earlydepthstencil] void frag(ps_input i #if defined(PLATFORM_SUPPORTS_PRIMITIVE_ID_IN_PIXEL_SHADER) , uint primitiveId : SV_PrimitiveID #endif ) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); VFXTransformPSInputs(i); VFX_FRAG_SETUP_INSTANCE_ID(i); #ifdef PLATFORM_SUPPORTS_PRIMITIVE_ID_IN_PIXEL_SHADER if (_DebugFullScreenMode == FULLSCREENDEBUGMODE_QUAD_OVERDRAW) { IncrementQuadOverdrawCounter((uint2)i.VFX_VARYING_POSCS.xy, primitiveId); } #endif } ${VFXEnd}