这个系列主要是通过阅读《Unity Shader入门精要》之后的一些感想,给读者一些启发。
联系邮箱:glasirius@gmail.com
ShaderLab是Unity结合CG和HLSL的一些语义,开发出来的可编程管线语言,主要优势是能基于Unity实现跨平台。
整体上来看,跟脚本语言有些类似,例如CG外的部分大小写不敏感,不需要分隔符等等。
所以,可以当成类似JavaScript学习,CG部分当成C语言来看,会熟悉很多,有些规则是一样的。
//取个名字
Shader "test/5/simple_shader_test"
{
//定义属性,可以通过外部的c#语言传值
Properties
{
//_color:变量名
//"color":编辑器里显示的tips
//COLOR:变量类型
_color("color",COLOR)=(1,1,1,1)
}
//子着色器,可以存在多个
SubShader
{
//一次渲染
Pass
{
//使用cg代码段
CGPROGRAM
//预编译,顶点/片元着色器指定函数
#pragma vertex vert
#pragma fragment frag
//外部变量引用,跟Properties同名
float4 _color;
//从应用阶段拿数据结构
struct a2v
{
//float4:cg变量类型
//POSITION:unity的变量类型
float4 pos:POSITION;
};
//从顶点着色器拿数据结构
struct v2f
{
float4 pos:SV_POSITION;
};
v2f vert(a2v i)
{
v2f o;
//UNITY_MATRIX_MVP:unity提供的宏,代表模型空间到裁切空间的变换矩阵
o.pos = mul(UNITY_MATRIX_MVP,i.pos);
return o;
}
//SV_TARGET:表示返回值给系统
float4 frag(v2f i):SV_TARGET
{
float4 o;
o = _color;
return o;
}
ENDCG
}
}
}