4.《unityshader中级篇》Unity Shader内置
2017-08-05 本文已影响15人
一壶开心酒
1、Unity提供的内置文件和变量
我们知道一个简单的顶点/片元着色器很简单。复杂的着色器可能需要我们处理法线,光照,阴影等。为了方便开发者的编码,Unity提供了很多内置文件,包含了提前定义的函数、变量和宏等。下面我们逐一讲解。
内置包含文件:类似于C++的include。在Unity中,包含文件的后缀是.cginc。这样我们就可以使用该包含文件为我们提供的变量和函数。写法如下:
CGPROGRAM
//...
#include "UnityCG.cginc"
//...
EndCG
CGIncludes文件夹中包含的是内置的包含文件。我们以后需要常去查阅一些内置函数的写法,就在这里找对应的包含文件。
2.CGIncludes中主要的包含文件及其用处
文件名 | 概要 |
---|---|
UnityCG.cginc | 我们常用的结构体和函数基本都在里面 |
UnityShaderVariables.cginc | 即使我们没用#include包含进来,它们也会自动包含进来,例如UnityShaderVariables.cginc里的UNITY_MATRIX_MVP,我们可以直接用 |
HLSLSupport.cginc | 即使我们没用#include包含进来,它们也会自动包含进来 |
Lighting.cginc | 包含了内置的一些光照模型 ,编写表面着色器会被自动包含进来 |
3.UnityCG.cginc是最常接触的包含文件。我们常用的结构体和函数基本都在里面。例如,我们可以直接使用其中预定义的结构体作为顶点着色器的输入和输出,如下:
名称 | 描述 | 包含的信息 |
---|---|---|
appdata_base | 可用于顶点着色器输入 | 顶点位置,法线,第一组纹理坐标 |
appdata_tan | 可用于顶点着色器输入 | 顶点位置,法线,切线,第一组纹理坐标 |
appdata_full | 可用于顶点着色器输入 | 顶点位置,法线,切线,四组纹理坐标 |
v2f_img | 可用于顶点着色器输出 | 裁剪空间中的位置,纹理坐标 |
appdata_img | 可用于顶点着色器输入 | 顶点位置,第一组纹理坐标 |