最近刚开始学shader。

unity为我们封装了许多很实用的变量、函数。

先mark一下,方便以后使用的时候查看。(只记录目前经常用到的,以后会不断更新、整理)

 

首先,这些变量函数都是封装在一些文件里的。

Unity中的着色器包含文件具有.cginc扩展名,内置的文件是(其中自动包含的已用绿色标记):

  • HLSLSupport.cginc- 声明了很多用于跨平台编译的宏和定义
  • UnityShaderVariables.cginc- 常用的全局变量。
  • UnityCG.cginc- 常用的辅助函数。
  • AutoLight.cginc- 照明和阴影功能,例如表面着色器内部使用此文件。
  • Lighting.cginc- 包含各种内置的光照模型,如果编写的是表面着色器的话,会自动包含进来。
  • TerrainEngine.cginc- 地形辅助功能和植被着色器。

 

这些文件放在:Unity/Editor/Data/CGIncludes文件夹下,可以随时查看里面的内容。

 

包含在UnityShaderVariables.cginc中:

变换矩阵(描述中的x代指“顶点/方向矢量”)

名称

描述

UNITY_MATRIX_MVP

当前模型*视图*投影矩阵,用于将x从模型空间变换到裁剪空间

UNITY_MATRIX_MV

当前模型*视图矩阵,用于将x从模型空间变换到视图空间

UNITY_MATRIX_V

当前视图矩阵,用于将x从世界空间变换到视图空间

UNITY_MATRIX_P

当前投影矩阵。用于将x从观察空间变换到裁剪空间

UNITY_MATRIX_VP

当前视图*投影矩阵。用于将x从世界空间变换到裁剪空间

UNITY_MATRIX_T_MV

UNITY_MATRIX_MV矩阵的转置

UNITY_MATRIX_IT_MV

UNITY_MATRIX_MV的逆转置,用于将法线从模型空间变换到观察空间

unity_ObjectToWorld

当前模型矩阵,用于将x从模型空间变换到世界空间

unity_WorldToObject

unity_ObjectToWorld的逆矩阵,用于将x从世界空间变换到模型空间

 

灯光:

光参数以不同的方式传递给着色器,具体取决于渲染路径中使用,以及着色器中使用的LightMode 。
ForwardBaseForwardAdd传递类型:

名称

类型

_LightColor0 (在Lighting.cginc中声明)

fixed4

访问该Pass处理的光源的颜色和强度信息

_WorldSpaceLightPos0

float4

光源方向(只适用于单光源)

 

雾和环境:

 

 

 

名称

类型

UNITY_LIGHTMODEL_AMBIENT

fixed4

环境照明颜色(渐变环境中的天空颜色)。

 

在UnityCG.cginc中声明的函数:

UnityCG.cginc中的顶点变换功能

功能:

描述:

float4 UnityObjectToClipPos(

float3 pos)

将点从对象空间转换为相机在齐次坐标系中的剪裁空间。

这相当于mul(UNITY_MATRIX_MVP,float4(pos,1.0))

float3 UnityObjectToViewPos( float3 pos)

将点从对象空间转换为视图空间。这相当于

mul(UNITY_MATRIX_MV,float4(pos,1.0)).xyz

UnityCG.cginc中的通用助手函数

功能:

描述:

float3 WorldSpaceViewDir (float4 v)

给定一个模型空间顶点位置,返回世界空间中从该点到摄像机的

观察方向(未归一化)。

float3 ObjSpaceViewDir (float4 v)

给定一个模型空间顶点位置,返回模型空间中从该点到摄像机的

观察方向(未归一化)。

在UnityCG.cginc中转发渲染辅助函数

这些函数仅在使用正向渲染时有用(ForwardBase或ForwardAdd传递类型)。

功能:

描述:

float3 WorldSpaceLightDir (float4 v)

给定一个模型空间顶点位置,返回世界空间中从该点到光源的光照方向。(未归一化)

float3 ObjSpaceLightDir (float4 v)

给定一个模型空间顶点位置,返回模型空间中从该点到光源的光照方向。(未归一化)