65 lines
1.7 KiB
HLSL
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 |