您当前的位置: 首页 >  ar

Jave.Lin

暂无认证

  • 3浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

Jave.Lin 发布时间:2019-06-22 22:37:37 ,浏览量:3

目录: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(正向渲染 ForwardBase 和 ForwardAdd 的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光源颜色。_LightMatrix0float4x4float4x4unity_WorldToShadowfloat4x4[4]世界转阴影空间的矩阵。一个矩阵用于聚光灯,多达四个矩阵用于方向光级联。

Spherical harmonics(球谐函数)系数(用在环境光与光探测器)为 ForwardBase,PrePassFinal 和 Deferred 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)而自动设置该参数。
关注
打赏
1664331872
查看更多评论
立即登录/注册

微信扫码登录

0.0402s