[toc]

# 内置包含文件

类似于 C++ 中的头文件,在 Unity 中,文件后缀是 .cginc , 形如下

1
2
3
4
5
CGPROGRAM
//...
#include "UnityCG.cginc"
//...
ENDCG

它们放在 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