Files
2026-02-23 22:01:07 +07:00

65 lines
1.7 KiB
HLSL

#ifndef ALLIN13DSHADER_URP_DEPTHONLYPASS
#define ALLIN13DSHADER_URP_DEPTHONLYPASS
struct DepthOnlyVertexData
{
float4 positionOS : POSITION;
float2 uv : TEXCOORD0;
float2 uvLightmap : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct DepthOnlyFragmentData
{
float4 positionCS : SV_POSITION;
float3 positionWS : TEXCOORD1;
float4 mainUV : TEXCOORD2;
float4 interpolator_01 : TEXCOORD3;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
DepthOnlyFragmentData DepthOnlyVertex(DepthOnlyVertexData input)
{
DepthOnlyFragmentData res;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_TRANSFER_INSTANCE_ID(input, res);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(res);
res.interpolator_01 = float4(0, 0, 0, 0);
res.mainUV = float4(0, 0, 0, 0);
UV_LIGHTMAP(res) = input.uvLightmap;
SCALED_MAIN_UV(res) = CUSTOM_TRANSFORM_TEX(input.uv, UV_DIFF(res), _MainTex);
res.positionWS = GetPositionWS(input.positionOS);
res.positionCS = TransformObjectToHClip(input.positionOS.xyz);
return res;
}
float DepthOnlyFragment(DepthOnlyFragmentData input) : SV_TARGET
{
UNITY_SETUP_INSTANCE_ID(input);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
float4 screenPos = ComputeScreenPos(input.positionCS);
float camDistance = distance(input.positionWS, _WorldSpaceCameraPos);
float4 baseColor = SAMPLE_TEX2D(_MainTex, input.mainUV.xy);
baseColor = ApplyAlphaEffects(baseColor,
SCALED_MAIN_UV(input), UV_LIGHTMAP(input), input.positionWS,
1.0, camDistance, screenPos);
float alphaClip = saturate(baseColor.a);
#ifdef _ALPHA_CUTOFF_ON
clip((alphaClip - ACCESS_PROP_FLOAT(_AlphaCutoffValue)) - 0.01);
#endif
return input.positionCS.z;
}
#endif