Unity创建SurfaceShader注解
程序员文章站
2022-03-29 16:04:46
...
Shader "Loong/SurfaceShader" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader {
Tags { "RenderType"="transparent" "Queue"="transparent"} //RenderType描述渲染类型,Opaque(不透明),Transparent(半透明),TransparentCutout(蒙皮透明),Background(天空盒),Overlay(光晕),还有部分地形引擎中的渲染类型
LOD 200 //层级细节
CGPROGRAM //CG代码块
//#pragma surface surf Standard fullforwardshadows //#pragma编译指令,surface是指按照surface方式进行编译,surf是指下面的运算函数surf,Standard是指光照模型(LightModel,也是一个函数),后面可以添加多个参数,fullforwardshadows是指在forward渲染模式下支持所有阴影,添加alpha使shader支持透明通道
#pragma surface surf Standard alpha //添加alpha使shader支持透明通道
#pragma target 3.0 //使用3.0的shader model,以获取更绚丽的视觉效果
struct Input { //纹理坐标的结构体,结构体内部uv变量命名要注意以uv开头,后续跟上贴图纹理名称,否则无法完成纹理采样
float2 uv_MainTex;
};
//属性说明
sampler2D _MainTex; //二维纹理声明,sampler2D与属性中2D对应
half _Glossiness; //浮点值声明, half与属性中float对应
half _Metallic;
fixed4 _Color; //四维向量声明,fixed4与属性中color对应
void surf (Input IN, inout SurfaceOutputStandard o) { //inout既是输入又是输出,SurfaceOutputStandard结构体可查看Unity官方文档
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; //从纹理中采样获取颜色
o.Albedo = c.rgb; //漫反射颜色
o.Metallic = _Metallic; //用于计算金属光泽
o.Smoothness = _Glossiness; //用于计算高光强度
o.Alpha = c.a; //描述采样过后alpha值
}
ENDCG
}
FallBack "Diffuse" //若硬件不支持以上算法则用默认shader替换
}