尝试编写第一个shader
一、代码示例1
新建shader脚本,代码如下:
Shader "Unlit/color"
{
Properties
{
//属性
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
float4 vert(float4 v:POSITION) :SV_POSITION
{
return UnityObjectToClipPos(v);
}
fixed4 frag() :SV_Target
{
return fixed4(1.0,1.0,1.0,1.0);
}
ENDCG
}
}
Fallback "VertexLit"
}
二、代码含义
第一行Shader "Unlit/color"
,含义是申明shader的引用位置,在材质的检视器面板处可以进行选择:
Properties
语义块,申明可在材质面板上直接调整的属性
SubShader
语义块,子着色器,可定义多个。GPU执行渲染时,会按顺序遍历SubShader列表,根据显卡性能选择一个执行,若所有SubShader的需求均超过显卡实际性能,执行Fallback
Pass
语义块,渲染,可定义多个,一个Pass代表一次渲染
CGPROGRAM ~ ENDCG
语义块,写在Pass块内,在其中进行顶点着色器和片元着色器的代码编写。
#pragma
申明变量
:SV_POSITION :SV_Target
函数名()后加冒号,更便捷地规范了输出的格式。在上述代码中,vert和frag函数分别返回顶点位置和像素颜色
UnityObjectToClipPos
函数,将模型空间顶点转化为裁剪空间顶点,理解为只渲染视野内的图像。