2026-01-31 12:25:51 +08:00

62 lines
1.6 KiB
Plaintext

Shader "Hidden/WBOIT/WBOITBlend"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
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 _MainTex;
float4 _MainTex_ST;
sampler2D _AccumTex;
sampler2D _RevealageTex;
v2f vert (uint vertexID: SV_VertexID)
{
v2f o;
float2 uv = float2((vertexID << 1) & 2, vertexID & 2);
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(_MainTex, 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
}
}
}