一、一个简单的顶点/片元着色器
Shader "Custom/Chapter 5/Simple Shader" {
Properties {
//属性
}
SubShader{
Pass{
//1.设置渲染状态和标签
//2.开始CG代码片段
CGPROGRAM
//3.该代码片段的编译指令
#pragma vertex vert //顶点着色器
#pragma fragment frag //片元着色器
//4.cg代码
float4 vert(float4 v:POSITION): SV_POSITION{
return UnityObjectToClipPos (v);//把顶点坐标从模型空间转换到剪裁空间
}
float4 frag() : SV_Target{ //颜色值
return fixed4(1, 1, 0.5f, 1);
}
ENDCG
//5.其他设置
//6.其他需要的pass
}
}
SubShader{
//针对不同显卡有不同的方案
}
//上述SubShader都失败后,用于回调的Unity Shader
FallBack "Diffuse"
}
二、Unity Shader的分类
使用的是ShaderLab编写Unity中的Shader
1,表面着色器 Surface Shader
2,顶点/片元着色器 Vertex/Fragment Shader
3,固定函数着色器 Fixed Function Shader
三、Unityshader中属性的类型有哪些
_Color("Color",Color)=(1,1,1,1)
_Vector("Vector",Vector)=(1,2,3,4)
_Int("Int",Int)= 34234
_Float("Float",Float) = 4.5
_Range("Range",Range(1,11))=6
_2D("Texture",2D) = "red"{}
_Cube("Cube",Cube) = "white"{}
_3D("Texure",3D) = "black"{}
四、Unity支持的语义
从应用程序传递到顶点函数的语义有哪些a2v
POSITION 顶点坐标(模型空间下的)
NORMAL 法线( 模型空间下)
TANGENT 切线(模型空间)
TEXCOORD0 ~n 纹理坐标
COLOR 顶点颜色从顶点函数传递给片元函数的时候可以使用的语义
SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)
COLOR0 可以传递一组值 4个
COLOR1 可以传递一组值 4个
TEXCOORD0~7 传递纹理坐标片元函数传递给系统
SV_Target 颜色值,显示到屏幕上的颜色