目录:Unity Shader - 知识点目录(先占位,后续持续更新)
原文:Built-in shader variables
版本:2019.1
Built-in shader variables
内置shader变量
Unity提供便于你编写shader的内置全局变量:如:将当前对象变换用的矩阵,光源参数,当前时间相关,等等。你可以在shader programs中使用他们,就像使用其他变量一样似的,唯一不同的是你不需要定义它们,因为它们都定义在自动include进来的头文件:UnityShaderVariables.cginc。
Transformations
变换
所有这些矩阵都是 float4x4 类型。
(以下所有的矩阵中的值描述中,model对应的是world matrix,就是对象空间的矩阵,或是叫:世界空间矩阵)
名称 | 值 |
---|---|
UNITY_MATRIX_MVP | model * view * projection 的矩阵。 |
UNITY_MATRIX_MV | model * view 矩阵 |
UNITY_MATRIX_V | view 矩阵。 |
UNITY_MATRIX_P | projection 矩阵。 |
UNITY_MATRIX_VP | view * projection 矩阵。 |
UNITY_MATRIX_T_MV | modoel * view 矩阵的转置矩阵 |
UNITY_MATRIX_IT_MV | model * view 矩阵的转置逆矩阵。 |
unity_ObjectToWorld | model 矩阵。 |
unity_WorldToObject | model 矩阵的逆矩阵。 |
这里我总结一下:多数的空间变换都是这样的
- object space : vertex data
- model/world space : mul(obj2worldMatrix, object space)
- view/eye/camera space : mul(world2viewMatrix, mul(obj2worldMatrix, object))
- clip/projection space : mul(view2projectionMatrix, mul(world2viewMatrix, mul(obj2worldMatrix, object)))
object space=>view space=>clip space
Camera and screen
相机与屏幕
这些变量都是相对正在渲染的Camera(相机)使用的。例如,在渲染shadowmap期间,它们将会引用相机的一些分量数值,而不是使用用于shadowmap投影的"虚拟相机"的数值。
名称 | 类型 | 值 |
---|---|---|
_WorldSpaceCameraPos | float3 | 相机的世界空间坐标。 |
_ProjectionParams | float4 | x 是1.0或-1.0(如果投影翻转了就是-1.0),y 是相机近截面,z 是远截面,w 是 1/FarPanel(1/z)。 |
_ScreenParams | float4 | x 是相机渲染目标的像素宽width,y 是像素高height,z 是1 + 1.0/width,w 是 1 + 1.0/height。 |
_ZBufferParams | float4 | 用于是z-buffer数值线性化。x 是(1-far/near),y 是(far/near),z 是(x/far)和 w 是(y/far)。 |
unity_OrthoParams | float4 | x是正交相机宽,y 是正交相机高,z 未使用,w 当相机是正交值为1.0,透视的话值为0.0。 |
unity_CameraProjection | float4x4 | 相机的投影矩阵。 |
unity_CameraInvProjection | float4x4 | 相机的投影矩阵的逆矩阵。 |
unity_CameraWorldClipPlanes[6] | float4 | 相机世界空间的视椎,6个面,分别按索引顺序是:左,右,底,顶,近,远面。 |
Time
时间
名称 | 类型 | 值 |
---|---|---|
_Time | float4 | 你可以理解为,t = unity开始加载运行就计时的数值,_Time.xyzw4个分量分别对应:t/20, t, t2, t3,一般用于shader动画。 |
_SinTime | float4 | t同上,4个分量分别对应:sin(t/8), sin(t/4), sin(t/2), sin(t) |
_CosTime | float4 | t同上,4个分量分别对应:cos(t/8), cos(t/4), cos(t/2), cos(t) |
unity_DeltaTime | float4 | dt是该帧增量时间,smoothdt是相对dt处理过平滑的,4个分量分别对应,dt, 1/dt, smoothdt, 1/smoothdt。 |
Lighting
光照
光照参数传入shader有不同的方式,依赖于使用的Rendering Path(渲染路径),和Shader中Pass Tag的LightMode设置。
Forward rendering(正向渲染 ForwardBase 和 ForwardAdd 的pass类型):
名称 | 类型 | 值 |
---|---|---|
_LightColor0(定义在Lighting.cginc) | fixed4 | 光源颜色。 |
_WorldSpaceLightPos0 | float4 | 方向光:(world pos.xyz, 0)。其他类型的光源:(world poso.xyz, 1)。 |
_LightMatrix0(定义在AutoLight.cginc) | float4x4 | 世界到光源空间的转换矩阵。用于采样shadowmap与衰减纹理。 |
unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0 | float4 | (仅正向渲染用)首4个非重要点光源的世界坐标。 |
unity_4LightAtten0 | float4 | (仅正向渲染用)首4个非重要点光源的衰减因子。 |
unity_LightColor | half4[4] | (仅正向渲染用)首4个非重要点光源的颜色。 |
unity_WorldToShadow | float4x4[4] | 世界转阴影空间的矩阵。一个矩阵用于聚光灯,多达四个矩阵用于方向光级联。 |
延迟着色和延迟光照,用于shader光照的pass(所有都定义在UnityDeferredLibrary.cginc):
名称 | 类型 | 值 |
---|---|---|
_LightColor | float4 | 光源颜色。 |
_LightMatrix0 | float4x4 | float4x4 |
unity_WorldToShadow | float4x4[4] | 世界转阴影空间的矩阵。一个矩阵用于聚光灯,多达四个矩阵用于方向光级联。 |
Spherical harmonics(球谐函数)系数(用在环境光与光探测器)为 ForwardBase,PrePassFinal 和 Deferred pass类型而设置的。它们包含三阶球谐,用在时间空间下的法线来采样(查看 UnityCG.cginc中的ShadeSH9)。所有变量都是half4类型的,和 unity_SHAr 变量类似的名称。
Vertex-lit rendering(顶点光照渲染 Vertex 类型的pass):
在 Vertex 类型的pass最多8个光源可设置;它们的排序是按亮度来排的。所以如果你想渲染对象仅被两个光源作用一次,你可以取数组中的两个元素。如果作用于对象上的光源数量少于8个,那么剩余的将会应用黑色来替代。
名称 | 类型 | 值 |
---|---|---|
unity_LightColor | half4[8] | 光源颜色。 |
unity_LightPosition | float4[8] | 视角空间的光源坐标。(-direction,0)是方向光源的;(position,1)是点光源或聚灯光源的。 |
unity_LightAtten | half4[8] | 光源的衰减因子。x 是cos(spotAngle/2) 或是非聚灯光源的为-1;y 是 1/cos(spotAngle/4) 或是非聚灯光源的为1;z 是二次衰减; w 是光源范围的平方。 |
unity_SpotDirection | float4[8] | 视角空间的聚灯光方向;(0,0,1,0) 是非聚灯光的。 |
Fog and Ambient
雾化与环境光
名称 | 类型 | 值 |
---|---|---|
unity_AmbientSky | fixed4 | 在gradient模式的天空环境光颜色。 |
unity_AmbientEquator | fixed4 | 在gradient模式的赤道环境光颜色。 |
unity_AmbientGround | fixed4 | 在gradient模式的地面环境光颜色。 |
UNITY_LIGHTMODEL_AMBIENT | fixed4 | 环境光颜色(在gradient模型的天空环境光情况)。旧版的变量。 |
unity_FogColor | fixed4 | 雾化颜色。 |
unity_FogParams | float4 | 计算雾化的参数:(density/sqrt(ln(2)),density/ln(2), -1/(end-start))。 x 是Exp2 雾化模型时使用,y 是Exp模型使用,z 和 w 是线性模型使用。 |
Various
其他变量
名称 | 类型 | 值 |
---|---|---|
unity_LODFade | float4 | 用于LODGroup 的层及细节的过渡。x 是 (0到1)的过渡,y 是可量化的1/16, z和w都没有使用。 |
_TextureSampleAdd | float4 | 仅用于Unity UI,基于纹理是否使用 Alpha8格式(值为(1,1,1,0))或其他的(值为(0,0,0,0)而自动设置该参数。 |