在顶点和片段着色器中,至少要有一个pass通道。
在CGPROGRAM 和 ENDCG中嵌入语言
在顶点和片段着色器中,要求顶点和片段两个片段级都要编写函数 :
#pragma vertex(关键字) vert(方法名)
#pragma fragment frag
顶点函数中,必须要有POSITION语义 。
void vert(in float2 objPos : POSITION, out float4 pos : POSITION, out float4 col : COLOR)
{
pos = float4(objPos , 0 , 1);
col = float4(0 , 0 , 1 ,1);
}
顶点函数vert是在编译指令中定义好的函数名,参数列表中 :in表示引擎输入,out表示输出。float2表示变量的数据类型,objPos是变量名,POSITION是语义 :描述这个变量是用来做什么的
片段程序最终的目的就是为了计算颜色。所以,必须要有COLOR语义。 片段函数接收了顶点函数的信息
void frag(inout float4 col : COLOR)
{
col = float4(0,1,0,1); // 可以从顶点程序接收,也可以自己定义
}
inout表示这个变量即是从顶点程序中输入的,又要输出。
在CG中,数据类型相同,但是语义不相同的两个变量,是可以互相赋值的
本文介绍了Unity Shader编程的基础知识,包括如何在顶点和片段着色器中编写函数,以及如何正确使用CGPROGRAM和ENDCG来嵌入语言。特别强调了顶点函数中必须包含POSITION语义以及片段函数中需要包含COLOR语义。


被折叠的 条评论
为什么被折叠?



