Unity Shader - Built-in shader variables 内置shader变量

目录: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_MVPmodel * view * projection 的矩阵。
UNITY_MATRIX_MVmodel * view 矩阵
UNITY_MATRIX_Vview 矩阵。
UNITY_MATRIX_Pprojection 矩阵。
UNITY_MATRIX_VPview * projection 矩阵。
UNITY_MATRIX_T_MVmodoel * view 矩阵的转置矩阵
UNITY_MATRIX_IT_MVmodel * view 矩阵的转置逆矩阵。
unity_ObjectToWorldmodel 矩阵。
unity_WorldToObjectmodel 矩阵的逆矩阵。

这里我总结一下:多数的空间变换都是这样的

  • 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投影的"虚拟相机"的数值。

名称类型
_WorldSpaceCameraPosfloat3相机的世界空间坐标。
_ProjectionParamsfloat4x 是1.0或-1.0(如果投影翻转了就是-1.0),y 是相机近截面,z 是远截面,w 是 1/FarPanel(1/z)。
_ScreenParamsfloat4x 是相机渲染目标的像素宽width,y 是像素高height,z 是1 + 1.0/width,w 是 1 + 1.0/height。
_ZBufferParamsfloat4用于是z-buffer数值线性化。x 是(1-far/near),y 是(far/near),z 是(x/far)和 w 是(y/far)。
unity_OrthoParamsfloat4x是正交相机宽,y 是正交相机高,z 未使用,w 当相机是正交值为1.0,透视的话值为0.0。
unity_CameraProjectionfloat4x4相机的投影矩阵。
unity_CameraInvProjectionfloat4x4相机的投影矩阵的逆矩阵。
unity_CameraWorldClipPlanes[6]float4相机世界空间的视椎,6个面,分别按索引顺序是:左,右,底,顶,近,远面。

Time

时间

名称类型
_Timefloat4你可以理解为,t = unity开始加载运行就计时的数值,_Time.xyzw4个分量分别对应:t/20, t, t2, t3,一般用于shader动画。
_SinTimefloat4t同上,4个分量分别对应:sin(t/8), sin(t/4), sin(t/2), sin(t)
_CosTimefloat4t同上,4个分量分别对应:cos(t/8), cos(t/4), cos(t/2), cos(t)
unity_DeltaTimefloat4dt是该帧增量时间,smoothdt是相对dt处理过平滑的,4个分量分别对应,dt, 1/dt, smoothdt, 1/smoothdt。

Lighting

光照

光照参数传入shader有不同的方式,依赖于使用的Rendering Path(渲染路径),和Shader中Pass Tag的LightMode设置。

Forward rendering(正向渲染 ForwardBaseForwardAdd 的pass类型):

名称类型
_LightColor0(定义在Lighting.cginc)fixed4光源颜色。
_WorldSpaceLightPos0float4方向光:(world pos.xyz, 0)。其他类型的光源:(world poso.xyz, 1)。
_LightMatrix0(定义在AutoLight.cginc)float4x4世界到光源空间的转换矩阵。用于采样shadowmap与衰减纹理。
unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0float4(仅正向渲染用)首4个非重要点光源的世界坐标。
unity_4LightAtten0float4(仅正向渲染用)首4个非重要点光源的衰减因子。
unity_LightColorhalf4[4](仅正向渲染用)首4个非重要点光源的颜色。
unity_WorldToShadowfloat4x4[4]世界转阴影空间的矩阵。一个矩阵用于聚光灯,多达四个矩阵用于方向光级联。

延迟着色和延迟光照,用于shader光照的pass(所有都定义在UnityDeferredLibrary.cginc):

名称类型
_LightColorfloat4光源颜色。
_LightMatrix0float4x4float4x4
unity_WorldToShadowfloat4x4[4]世界转阴影空间的矩阵。一个矩阵用于聚光灯,多达四个矩阵用于方向光级联。

Spherical harmonics(球谐函数)系数(用在环境光与光探测器)为 ForwardBasePrePassFinalDeferred pass类型而设置的。它们包含三阶球谐,用在时间空间下的法线来采样(查看 UnityCG.cginc中的ShadeSH9)。所有变量都是half4类型的,和 unity_SHAr 变量类似的名称。

Vertex-lit rendering(顶点光照渲染 Vertex 类型的pass):

Vertex 类型的pass最多8个光源可设置;它们的排序是按亮度来排的。所以如果你想渲染对象仅被两个光源作用一次,你可以取数组中的两个元素。如果作用于对象上的光源数量少于8个,那么剩余的将会应用黑色来替代。

名称类型
unity_LightColorhalf4[8]光源颜色。
unity_LightPositionfloat4[8]视角空间的光源坐标。(-direction,0)是方向光源的;(position,1)是点光源或聚灯光源的。
unity_LightAttenhalf4[8]光源的衰减因子。x 是cos(spotAngle/2) 或是非聚灯光源的为-1;y 是 1/cos(spotAngle/4) 或是非聚灯光源的为1;z 是二次衰减; w 是光源范围的平方。
unity_SpotDirectionfloat4[8]视角空间的聚灯光方向;(0,0,1,0) 是非聚灯光的。

Fog and Ambient

雾化与环境光

名称类型
unity_AmbientSkyfixed4在gradient模式的天空环境光颜色。
unity_AmbientEquatorfixed4在gradient模式的赤道环境光颜色。
unity_AmbientGroundfixed4在gradient模式的地面环境光颜色。
UNITY_LIGHTMODEL_AMBIENTfixed4环境光颜色(在gradient模型的天空环境光情况)。旧版的变量。
unity_FogColorfixed4雾化颜色。
unity_FogParamsfloat4计算雾化的参数:(density/sqrt(ln(2)),density/ln(2), -1/(end-start))。 x 是Exp2 雾化模型时使用,y 是Exp模型使用,z 和 w 是线性模型使用。

Various

其他变量

名称类型
unity_LODFadefloat4用于LODGroup 的层及细节的过渡。x 是 (0到1)的过渡,y 是可量化的1/16, z和w都没有使用。
_TextureSampleAddfloat4仅用于Unity UI,基于纹理是否使用 Alpha8格式(值为(1,1,1,0))或其他的(值为(0,0,0,0)而自动设置该参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值