2026-02-05 21:13:37 +08:00

58 lines
1.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}
}