UnityShader学习笔记
各种基本上手
- 基本的格式
Shader"UnityShaderForLSH/DemoShader1"{
Properties{
}
SubShader{
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
ENDCG
}
//else Pass
}
//else SubShader
}
- 跟着教程走就行,而后我们注意下这个函数
#include "UnityCG.cginc"
appdata_full
其含义为:
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;//第二纹理坐标
float4 texcoord2 : TEXCOORD2;//第三纹理坐标
float4 texcoord3 : TEXCOORD3;//第四纹理坐标
fixed4 color : COLOR;//顶点颜色
UNITY_VERTEX_INPUT_INSTANCE_ID
};
提供了很多现成的东西去使用
唯一不足的是这个UnityCG.cginc是放在我们的Unity安装目录下的,而不是项目下。不能Ctrl+左键定位,查看比较麻烦。(倒也方便后续魔改)
//所以代码会变得简单,例子:
Shader"UnityShaderForLSH/DemoShader1"{
Properties{
}
SubShader{
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
//appdata_full
struct v2f{
float4 pos:SV_POSITION;
fixed3 color:COLOR0;
};
v2f vert(appdata_full v){
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
//o.color = v.normal*0.5+fixed3(0.5,0.5,0.5);
o.color = v.normal*0.7;
return o;
}
fixed4 frag(v2f i) : SV_TARGET{
return fixed4(i.color,1.0);
}
ENDCG
}
//else Pass
}
//else SubShader
}
- 语义
//不懂就查
https://docs.unity.cn/cn/2018.4/Manual/SL-ShaderSemantics.html
- 色彩查询器 ColorPicker 和 帧调试器