Shader学习笔记(四)

时间:2021-04-21 19:37:55

Unity Shader中的结构体

用法:

1.结构体的声明以关键字Struct开始,然后紧跟结构体的名字,然后是大括号和代码块,最后大括号后以分号结尾

2.使用时“.引用结构体中的成员变量”

相当于是将一些变量进行了封装,比如在shader代码中用到的语义对参数进行解释说明时,提前在结构体中封装好,将会使结构变得清晰,方便。

代码演示

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "MyShader/Demo3"{
Properties{

}
SubShader{
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct a2v {
float4 vertex:POSITION;//语义:把模型空间下的顶点坐标填充给vertex
float3:normal:NORMAL;//语义:吧模型空间下的发现方向填充给normal
float4 texcoord:TEXCOORD0;//语义:告诉unity把第一套纹理坐标填充给texcoord
};
float4 vert(a2v v):SV_POSITION{
return UnityObjectToClipPos(v.vertex);
}
fixed4 frag() :SV_Target{
return fixed4(0.5,1,1,1);
}
ENDCG
}
}
FallBack"VertexLit"
}


从应用程序传递到顶点函数的语义有哪些a2v

POSITION 顶点坐标(模型空间下的)
NORMAL 法线( 模型空间下)
TANGENT 切线(模型空间)
TEXCOORD0 ~n 纹理坐标
COLOR 顶点颜色


从顶点函数传递给片元函数的时候可以使用的语义
SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)
COLOR0 可以传递一组值 4个
COLOR1 可以传递一组值 4个
TEXCOORD0~7 传递纹理坐标


片元函数传递给系统
SV_Target 颜色值,显示到屏幕上的颜色