58 lines
1.6 KiB
Plaintext
58 lines
1.6 KiB
Plaintext
Shader "Hidden/OIT/WBOITBlend"
|
||
{
|
||
|
||
SubShader
|
||
{
|
||
ZTest Always Cull Back ZWrite Off Fog { Mode Off }
|
||
Pass
|
||
{
|
||
CGPROGRAM
|
||
#pragma vertex vert
|
||
#pragma fragment frag
|
||
|
||
#include "UnityCG.cginc"
|
||
|
||
struct v2f
|
||
{
|
||
float2 uv : TEXCOORD0;
|
||
float4 vertex : SV_POSITION;
|
||
};
|
||
|
||
sampler2D _CameraColorTex;
|
||
sampler2D _AccumTex;
|
||
sampler2D _RevealageTex;
|
||
|
||
v2f vert (uint vertexID: SV_VertexID)
|
||
{
|
||
v2f o;
|
||
float2 uv = float2((vertexID << 1) & 2, vertexID & 2);
|
||
// 如果 ZWrite Off,在 gl 下 CCW 逆时针环绕,dx 默认 CW 顺时针环绕,需要 uv.xy = uv.yx;
|
||
float4 pos = float4(uv * 2.0 - 1.0, UNITY_NEAR_CLIP_VALUE, 1.0);
|
||
#ifdef UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION
|
||
pos = ApplyPretransformRotation(pos);
|
||
#endif
|
||
|
||
#if UNITY_UV_STARTS_AT_TOP
|
||
uv = float2((vertexID << 1) & 2, 1.0 - (vertexID & 2));
|
||
#endif
|
||
|
||
o.vertex = pos;
|
||
o.uv = uv;
|
||
return o;
|
||
}
|
||
|
||
fixed4 frag (v2f i) : SV_Target
|
||
{
|
||
fixed4 background = tex2D(_CameraColorTex, i.uv);
|
||
float4 accum = tex2D(_AccumTex, i.uv);
|
||
float r = tex2D(_RevealageTex, i.uv).r;
|
||
|
||
fixed4 col = float4(accum.rgb / clamp(accum.a, 1e-4, 5e4), r);
|
||
|
||
return (1.0 - col.a) * col + col.a * background;
|
||
}
|
||
ENDCG
|
||
}
|
||
}
|
||
}
|