请写出一个Unity Shader
Shader "Custom/MyShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Main Color", Color) = (1,1,1,1)
_Cutoff ("Alpha Cutoff", Range(0, 1)) = 0.5
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex; //纹理贴图变量声明
struct Input //定义一个输入结构体,用来从Unity传入数据到shader的内部
{
float2 uv_MainTex; //uv坐标变量
};
fixed4 _Color; //颜色变量声明,用于混合纹理贴图颜色和shader颜色
half _Cutoff; //α剪裁变量声明,用于实现α通道的剪裁效果
void surf (Input IN, inout SurfaceOutput o) //定义一个surf函数,该函数必须存在于shader中,此函数由Unity自动调用来处理像素颜色
{ //此处表示开始函数体 //以下代码表示将_MainTex这张图片上的相应uv位置的像素颜色读取出来,并保存到fixed4这个变量中。 fixed4 c = tex2D (_MainTex, IN.uv_MainTex); //以下代码表示将c.a这个通道的像素和_Cutoff这个剪裁参数比对大小;如果小于_Cutoff则将c.a=0 否则不作处理。 if(c.a < _Cutoff){ c.a = 0; } o.Albedo = c.rgb * _Color; //最后我们将c的rgb三通道乘上shader中定义的_Color来得到期望的最后显示颜色。 o.Alpha= c.a ; } ENDCG } FallBack "Diffuse" }
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!