8.3 透明度测试
Shader "Custom/chap8.3/Alpha Test"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color("Main Color", Color) = (1,1,1,1)
_Cutoff("Alpha Cutoff", Range(0, 1)) = 0.5
}
SubShader
{
Tags { "RenderPipeLine"="UniversalRenderPipeline" "RenderType"="TransparentCutout" "Queue"="AlphaTest" "IgnoreProjector"="True" }
Pass
{
Tags { "LightMode"="UniversalForward" }
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/SpaceTransforms.hlsl"
CBUFFER_START(UnityPerMaterial)
sampler2D _MainTex;
float4 _MainTex_ST;
half4 _Color;
half _Cutoff;
CBUFFER_END
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal: NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float3 worldNormal: TEXCOORD1;
float3 worldPos: TEXCOORD2;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = TransformObjectToHClip(v.vertex);
o.worldNormal = TransformObjectToWorldNormal(v.normal);
o.worldPos = TransformObjectToWorld(o.vertex).xyz;
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
float4 frag (v2f i) : SV_Target
{
float3 worldNormal = normalize(i.worldNormal);
Light light = GetMainLight();
float4 texColor = tex2D(_MainTex, i.uv);
clip(texColor.a - _Cutoff);
float3 albedo = texColor.rgb * _Color.rgb;
float3 ambient = _GlossyEnvironmentColor.xyz * albedo;
float3 worldLightDir = TransformObjectToWorldDir(light.direction);
float3 diffuse = LightingLambert(light.color.rgb, worldLightDir, worldNormal) * albedo;
return float4(ambient + diffuse, 1.0);
}
ENDHLSL
}
}
}