US2S3L1——CG语句书写位置及指定着色器函数

本章代码关键字

1
2
3
4
5
CGPROGRAM        //CG语句起始指令
ENDCG //CG语句结束指令
//cg语句指令
#pragma vertex //这个预处理器指令会指定实现顶点着色器的函数
#pragma fragment //这个预处理器指令会指定实现片元着色器的函数

CG语句写在哪里

对于顶点/片元着色器来说,CG语句需要写在 Pass​ 渲染通道语句块中
我们需要在Pass​语句块中,加入指令:CGPROGRAM​ 和 ENDCG

在这两个指令之间 就是我们书写CG代码的地方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Shader "TeachShader/Lesson13"
{
Properties {...}
SubShader
{
Tags { ... }
//...

Pass
{
CGPROGRAM
//...CG语句写在这里
ENDCG
}
}
}

重要的编译指令 —— 指定着色器函数

在真正书写CG代码之前,我们需要先使用 #pragma​ 声明编译指令
我们目前只学习 指定 顶点\片元着色器函数 的 编译指令,其他相关编译指令我们以后再学习

定义实现 顶点/片元着色器 代码的函数名称:

  • #pragma vertex name​(name​是实现顶点着色器的函数名)
  • #pragma fragment name​(name​是实现片元着色器的函数名)

这两个编译指令的作用是将顶点/片元着色器实现定位到两个函数中
之后我们只需要在这两个函数中书写Shader逻辑即可

例如下方的代码,分别指定了 vert​ 作为实现顶点着色器的函数,同时指定了 frag​ 作为实现片元着色器的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CGPROGRAM

#pragma vertex vert //指定vert作为实现顶点着色器的函数
#pragma fragment frag //指定frag作为实现片元着色器的函数

struct appdata { /*结构体逻辑*/ };
struct v2f { /*结构体逻辑*/ };

v2f vert (appdata v)
{
v2f o;
//在这里实现顶点着色器的逻辑
return o;
}

fixed4 frag (v2f i) : SV_Target
{
fixed4 col;
//在这里实现片元着色器的逻辑
return col;
}

ENDCG

对于顶点/片元着色器的CG逻辑部分,这一步是必须的!

对于顶点/片元着色器函数的基本结构,详见:US2S3L8——顶点-片元着色器基本结构