Skip to content

Uniform 定义

GLSL 中使用 uniform 限定符声明 全局着色器变量(Global Shader Variable)。该变量充当 着色器(Shader)程序中可以传递给任意着色器程序的参数,该变量的值存储在程序对象中。

使用 uniform 限定符声明的全局着色器变量称之为 Uniform。

使用 Uniform

由于 SandMod 不支持您使用 uniform 或 UBO(Uniform Buffer Object)定义、读取全局着色器变量,因此您可以通过使用 using 命令使用全局着色器变量 Uniform,如果需要使用多个 Uniform,请使用半角逗号(即英文逗号)隔开。

c++
//着色器(Shader)中需要使用命名为 MatrixM 和 MatrixMVP 的两个 Uniform;
#pragma using MatrixM, MatrixMVP

内置 Uniform

通用 Uniform

命名参数类型描述
MatrixMmat4当前的 模型矩阵(Model Matrix)。模型的顶点在 模型空间(Model Space)中的坐标等信息乘以 模型矩阵(Model Matrix),可以得到该顶点在 世界空间(World Space)中显示的世界坐标等信息。
MatrixVmat4当前渲染摄像机的 视图矩阵(View Matrix)。某个顶点在 世界空间(World Space)中的坐标等信息乘以 视图矩阵(View Matrix),可以得到该顶点在 视觉空间(View Space)中显示的坐标等信息。
MatrixPmat4当前渲染摄像机的 投影矩阵(Projection Matrix)。某个顶点在 视觉空间(View Space)中的坐标等信息乘以 投影矩阵(Projection Matrix),可以得到该顶点在 剪裁空间(Clip Space)中显示的坐标等信息。
MatrixVPmat4当前渲染摄像机的 视图矩阵(View Matrix)* 投影矩阵(Projection Matrix)得到的 VP 矩阵。某个顶点在 世界空间(World Space)中的坐标等信息乘以 VP 矩阵,可以得到该顶点在 剪裁空间(Clip Space)中显示的坐标等信息。
MatrixMVPmat4当前的 模型矩阵(Model Matrix)* 视图矩阵(View Matrix)* 投影矩阵(Projection Matrix)得到的 MVP 矩阵。模型的顶点坐标等信息乘以 MVP 矩阵可以得到该顶点在屏幕上显示的坐标等信息。
MatrixInvMmat4当前的 逆模型矩阵(Inverse Model Matrix)。
MatrixInvVmat4当前的 逆视图矩阵(Inverse View Matrix)。
MatrixInvPmat4当前的 逆投影矩阵(Inverse Projection Matrix)。
MatrixInvVPmat4当前渲染摄像机的 视图矩阵(View Matrix)* 投影矩阵(Projection Matrix)得到的 VP 矩阵的逆矩阵。
MatrixInvMVPmat4当前的 模型矩阵(Model Matrix)* 视图矩阵(View Matrix)* 投影矩阵(Projection Matrix)得到的 MVP 矩阵的逆矩阵。
CameraToWorldmat4当前摄像机的世界矩阵。值得注意的是,本矩阵与 逆视图矩阵(Inverse View Matrix)不同,本矩阵的 Z 轴不相反。

相机和屏幕相关 Uniform

命名参数类型描述
ViewPositionvec4当前摄像机在 世界空间(World Space)的位置。
ProjectionParamsvec4投影参数。
x 判断是否需要 翻转(Flipped) 投影矩阵(Projection Matrix)。
   · 值为 1.0 表示不需要翻转, 只有 OpenGL 不需要翻转。
   · 值为 -1.0 表示需要翻转。
y 摄像机 近剪裁面(Near)属性值。属性定义请参阅 摄像机组件 章节。
z 摄像机 远剪裁面(Far)属性值。属性定义请参阅 摄像机组件 章节。
w 远剪裁面属性值的倒数(1 / Far)。
ScreenParamsvec4屏幕参数。
x 摄像机目标纹理的宽度(Width),以 像素(Pixel)为单位。
y 摄像机目标纹理的高度(Height),以 像素(Pixel)为单位。
z 1.0 + 1.0 / Width
w 1.0 + 1.0 / Height
ScreenSizevec4屏幕尺寸。
x 屏幕宽度(Width),以 像素(Pixel)为单位。
y 屏幕高度(Height),以 像素(Pixel)为单位。
z 屏幕宽度(Width)的倒数(1 / Width)。
w 屏幕高度(Height)的倒数(1 / Height)。
ZBufferParamsvec4用于线性化 Z 缓冲区(Z Buffer)值。当前版本无需使用 REVERSED_Z 。
x 1 - Far / Near
y Far / Near
z x / Far
w y / Far

其中:
· Far 表示摄像机 远剪裁面(Far)属性值。
· Near 表示摄像机 近剪裁面(Near)属性值。
· 具体属性含义请参阅 摄像机组件 章节。
OrthoParamsvec4正交相机参数。
x 正交相机的 宽度(Width)。
y 正交相机的 高度(Height)。
z 0 <预留位>。
w 判断当前摄像机是否为正交摄像机。
   · 值为 1.0 表示当前渲染的摄像机是正交摄像机。
   · 值为 0.0 表示当前渲染的摄像机是透视摄像机。

光照相关 Uniform

命名参数类型描述
AmbientColorvec4环境光的颜色值。
DLightDirectionvec4游戏项目中如果存在光源类型为 定向光(Directional Lights)的光源,则表示该定向光的方向。
DLightColorvec4游戏项目中如果存在光源类型为 定向光(Directional Lights)的光源,则表示该定向光的颜色值。
ShadowDatavec4阴影属性,启用 #pragma shader_feature_shadow 命令的时候默认使用了此 Uniform。
x 阴影强度。

雾效相关 Uniform

命名参数类型描述
FogDatavec4雾的参数。
x 根据雾效的模式此值会输出不同结果:
   · 雾效模式是 线性(Linear)模式,此值的结果为 -1 / (End - Start)
   · 雾效模式是 指数(Exponential)模式,此值的结果为 Density / ln2 。
   · 雾效模式是 指数平方(Exponential Squared)模式,此值的结果为 Density / sqrt(ln2) 。
y 雾效模式是 线性(Linear)模式,此值的结果为 End / (End - Start)。否则为 0。

其中:
· End 表示光照编辑窗口设置的 雾效结束距离(Fog End Distance)属性值。
· Start 表示光照编辑窗口设置的 雾效起始距离(Fog Start Distance)属性值。
· Density 表示光照编辑窗口设置的 雾效密度(Fog Density)属性值。
· 具体属性含义请参阅 光照编辑窗口 章节关于环境模块的内容。
FogColorvec4雾的颜色值。

时间相关 Uniform

时间(Time)以秒为单位,并受到 项目设置 中 时间(Time)类别的 时间缩放(Time Scale)参数影响,相当于 Type Script 脚本逻辑中的 Time.frameTime。当前版本没有内置变量可以访问未缩放的时间。

命名参数类型描述
Timevec4常用时间。
x Time / 20
y Time
z Time * 2
w Time * 2
SinTimevec4常用时间的正弦值。
x Sin(Time / 8)
y Sin(Time / 4)
z Sin(Time / 2)
w Sin(Time)
DeltaTimevec4间隔时间。
x DTime
y 1 / DTime
z Smooth_DTime
w 1 / Smooth_DTime

其中:
· DTime 表示以秒为单位统计从上一帧到当前帧的时间间隔,相当于 Type Script 脚本逻辑中的 Time.deltaTime
· Smooth_DTime 表示在多个帧上适当向前后帧的 DTime 靠拢,使得每帧的时间间隔变化更平缓。