[toc]
# 内置包含文件
类似于 C++ 中的头文件,在 Unity 中,文件后缀是 .cginc
, 形如下
1 | CGPROGRAM |
它们放在 Unity安装路径/Data/CGIncludes
路径下
# Unity 常用包含文件
# UnityCG.cginc
包含了最常使用的帮助函数、宏和结构体等
# UnityShaderVariables.cginc
在编译 Unity Shader 时,会被自动包含进来。包含了许多内置的全局变量,如
UNITY_MATRIX_MVP
等
# Lighting.cginc
包含了各种内置的光照模型,如果编写的是 Surface Shader 的话,会自动包含进来
# HLSLSupport.cginc
在编译 Unity Shader 时,会被自动包含进来。声明了很多用于跨平台编译的宏和定义
故其实有些文件即使没有使用 #include, 仍然会被自动包含进来.
# UnityCG.cginc 中一些常用的结构体
名称
描述
包含的变量
appdata_base
可用于顶点着色器的输入
顶点位置、顶点法线、第一组纹理坐标
appdata_tan
可用于顶点着色器的输入
顶点位置、顶点切线、第一组纹理坐标
appdata_full
可用于顶点着色器的输入
顶点位置、顶点切线、顶点法线、四组 (或更多) 纹理坐标
appdata_img
可用于顶点着色器的输入
顶点位置、第一组纹理坐标
v2f_img
可用于顶点着色器的输出
裁剪空间中的位置,纹理坐标
# 还有一些常用的函数
# 支持语义
从应用阶段传递模型数据给顶点着色器时 Unity 支持的常用语义
- POSITION: 模型空间中的顶点位置,通常是 float4 类型
- NORMAL: 顶点法线,通常是 float3
- TANGENT: 顶点切线,通常是 float4
- TEXCOORDn (如 TEXCOORD0): 该顶点的纹理坐标,0 表示第一组,依次类推,通常是 float2 或 float4
- COLOR: 顶点颜色,通常是 fixed4 或 float4
n 的上限由 Shader Model 决定
从顶点着色器传递数据给片元着色器时 Unity 使用的常用语义
- SV_POSITION: 裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。等同于 DirectX9 中的 POSITION, 但最好使用 SV_POSITION
- COLOR0: 通常用于输出第一组顶点颜色,但不是必须的
- COLOR1: 通常用语输出第二组顶点颜色,但不是必须的
- TEXCOORD0~7: 通常用于输出纹理坐标,但不是必须的
片元着色器输出时 Unity 支持的常用语义
- SV_Target: 输出值将会存储到渲染目标 (render target) 中。等同于 DiretX9 中的 COLOR 语义,但最好使用 SV_Target
# 定义复杂变量类型
一个语义最多只能处理四个浮点值
# 调试
# 假彩色图像
假彩色图像可以用来可视化一些数据
即将数据映射到一张图片上,映射区间为 [0-1]
# Frame Debugger
Window->Analysis->Frame Debugger