110 lines
3.5 KiB
Plaintext
110 lines
3.5 KiB
Plaintext
Shader "Hidden/CopyDepth"
|
|
{
|
|
SubShader
|
|
{
|
|
ZTest Off
|
|
ZWrite Off
|
|
|
|
Pass
|
|
{
|
|
HLSLPROGRAM
|
|
#pragma vertex Vertex
|
|
#pragma fragment DownsampleDepthFrag
|
|
#pragma enable_d3d11_debug_symbols
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
|
|
|
struct Attributes
|
|
{
|
|
float4 positionOS : POSITION;
|
|
float2 texcoord : TEXCOORD0;
|
|
};
|
|
|
|
struct Varyings
|
|
{
|
|
float2 uv : TEXCOORD0;
|
|
float4 positionCS : SV_POSITION;
|
|
};
|
|
|
|
Varyings Vertex(Attributes input)
|
|
{
|
|
Varyings output = (Varyings)0;
|
|
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
|
|
output.uv = input.texcoord;
|
|
return output;
|
|
}
|
|
|
|
#if UNITY_REVERSED_Z
|
|
# define MIN_DEPTH(l, r) min(l, r)
|
|
#else
|
|
# define MIN_DEPTH(l, r) max(l, r)
|
|
#endif
|
|
|
|
TEXTURE2D_FLOAT(_InputDepth);
|
|
SAMPLER(sampler_InputDepth);
|
|
float4 _InputScaleAndMaxIndex;//xy: inputeTexsize/outputTextureSize , zw:textureSize - 1
|
|
|
|
half4 DownsampleDepthFrag(Varyings input) : SV_Target
|
|
{
|
|
int2 texCrood = int2(input.positionCS.xy) * _InputScaleAndMaxIndex.xy;
|
|
uint2 maxIndex = _InputScaleAndMaxIndex.zw;
|
|
int2 texCrood00 = min(texCrood + uint2(0, 0), maxIndex);
|
|
int2 texCrood10 = min(texCrood + uint2(1, 0), maxIndex);
|
|
int2 texCrood01 = min(texCrood + uint2(0, 1), maxIndex);
|
|
int2 texCrood11 = min(texCrood + uint2(1, 1), maxIndex);
|
|
float p00 = LOAD_TEXTURE2D_LOD(_InputDepth,texCrood00,0);
|
|
float p01 = LOAD_TEXTURE2D_LOD(_InputDepth,texCrood10,0);
|
|
float p10 = LOAD_TEXTURE2D_LOD(_InputDepth,texCrood01,0);
|
|
float p11 = LOAD_TEXTURE2D_LOD(_InputDepth,texCrood11,0);
|
|
return MIN_DEPTH(MIN_DEPTH(p00 ,p01), MIN_DEPTH(p10, p11));
|
|
}
|
|
|
|
ENDHLSL
|
|
}
|
|
|
|
Pass
|
|
{
|
|
HLSLPROGRAM
|
|
#pragma vertex Vertex
|
|
#pragma fragment CopyDepthFrag
|
|
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
|
|
|
struct Attributes
|
|
{
|
|
float4 positionOS : POSITION;
|
|
float2 texcoord : TEXCOORD0;
|
|
};
|
|
|
|
struct Varyings
|
|
{
|
|
float2 uv : TEXCOORD0;
|
|
float4 positionCS : SV_POSITION;
|
|
};
|
|
|
|
Varyings Vertex(Attributes input)
|
|
{
|
|
Varyings output = (Varyings)0;
|
|
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
|
|
output.uv = input.texcoord;
|
|
return output;
|
|
}
|
|
|
|
#if UNITY_REVERSED_Z
|
|
# define MIN_DEPTH(l, r) min(l, r)
|
|
#else
|
|
# define MIN_DEPTH(l, r) max(l, r)
|
|
#endif
|
|
|
|
TEXTURE2D_FLOAT(_InputDepth);
|
|
SAMPLER(sampler_InputDepth);
|
|
|
|
half4 CopyDepthFrag(Varyings input) : SV_Target
|
|
{
|
|
return SAMPLE_TEXTURE2D(_InputDepth, sampler_InputDepth, input.uv);
|
|
}
|
|
|
|
ENDHLSL
|
|
}
|
|
}
|
|
}
|