前言:
本文总结记录了Shader片元着色器的基本框架,标注了每个部分的含义,在写Shader时先搭起基本框架,再根据想要效果的物理模型等填充内容。
框架:
1 Shader "HQY2/01"{ //路径
2 Properties { //属性,出现在材质面板
3 _Diffuse ("Diffuse", Color) = (1,1,1,1) //漫反射颜色
4 _MainTex ("MainTex", 2D) = "white" {} //主贴图
5 _Specular("Specular", Color) = (1,1,1,1) //高光反射颜色
6 _Gloss("Gloss", Range(8,256)) = 20 //高光反射范围
7 }
8 SubShader { //针对显卡A的SubShader
9 Tags {} //SubShader的标签
10 Pass{
11 Tags { "RenderType"="Opaque" "LightMode"="ForwardBase"} //Pass的标签
12 LOD 200
13 CGPROGRAM //代码片段编译指令
14 #pragma vertex vert //告诉unity这个函数包含了顶点着色器的代码
15 #pragma fragment frag //告诉unity这个函数包含了片元着色器的代码
16 #include "Lighting.cginc" //头文件
17 fixed4 _Diffuse;
18 sampler2D _MainTex;
19 fixed4 _Specular;
20 float _Gloss;
21 struct a2v{ //结构体定义顶点着色器的输入
22 float4 vertex:POSITION;
23 float3 normal:NORMAL;
24 };
25
26 struct v2f{ //结构体定义顶点着色器的输出
27 float4 pos:SV_POSITION; //SV_POSITION语义告诉Unity,pos里包含了顶点在裁剪空间中的位置信息
28 float3 worldNormal:TEXCOORD0;
29 float3 worldPos:TEXCOORD1;
30 };
31
32 v2f vert(a2v v){
33 v2f o; //声明输出结构
34
35 return o;
36 }
37
38 fixed4 frag(v2f i):SV_TARGET{
39
40 }
41 ENDCG //结束代码片段
42 }
43 }
44 FallBack "Diffuse" //若SubShader失败后用于回调的Unity Shader
}
内容:
- 漫反射
- 高光反射
- 主贴图
- 凹凸贴图
- 渐变纹理
- 遮罩纹理
- 透明度测试
- 透明度混合
- 纹理动画(SpriteSheet)
- 顶点动画