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
| 命名 | 参数类型 | 描述 |
MatrixM | mat4 | 当前的 模型矩阵(Model Matrix)。模型的顶点在 模型空间(Model Space)中的坐标等信息乘以 模型矩阵(Model Matrix),可以得到该顶点在 世界空间(World Space)中显示的世界坐标等信息。 |
MatrixV | mat4 | 当前渲染摄像机的 视图矩阵(View Matrix)。某个顶点在 世界空间(World Space)中的坐标等信息乘以 视图矩阵(View Matrix),可以得到该顶点在 视觉空间(View Space)中显示的坐标等信息。 |
MatrixP | mat4 | 当前渲染摄像机的 投影矩阵(Projection Matrix)。某个顶点在 视觉空间(View Space)中的坐标等信息乘以 投影矩阵(Projection Matrix),可以得到该顶点在 剪裁空间(Clip Space)中显示的坐标等信息。 |
MatrixVP | mat4 | 当前渲染摄像机的 视图矩阵(View Matrix)* 投影矩阵(Projection Matrix)得到的 VP 矩阵。某个顶点在 世界空间(World Space)中的坐标等信息乘以 VP 矩阵,可以得到该顶点在 剪裁空间(Clip Space)中显示的坐标等信息。 |
MatrixMVP | mat4 | 当前的 模型矩阵(Model Matrix)* 视图矩阵(View Matrix)* 投影矩阵(Projection Matrix)得到的 MVP 矩阵。模型的顶点坐标等信息乘以 MVP 矩阵可以得到该顶点在屏幕上显示的坐标等信息。 |
MatrixInvM | mat4 | 当前的 逆模型矩阵(Inverse Model Matrix)。 |
MatrixInvV | mat4 | 当前的 逆视图矩阵(Inverse View Matrix)。 |
MatrixInvP | mat4 | 当前的 逆投影矩阵(Inverse Projection Matrix)。 |
MatrixInvVP | mat4 | 当前渲染摄像机的 视图矩阵(View Matrix)* 投影矩阵(Projection Matrix)得到的 VP 矩阵的逆矩阵。 |
MatrixInvMVP | mat4 | 当前的 模型矩阵(Model Matrix)* 视图矩阵(View Matrix)* 投影矩阵(Projection Matrix)得到的 MVP 矩阵的逆矩阵。 |
CameraToWorld | mat4 | 当前摄像机的世界矩阵。值得注意的是,本矩阵与 逆视图矩阵(Inverse View Matrix)不同,本矩阵的 Z 轴不相反。 |
相机和屏幕相关 Uniform
| 命名 | 参数类型 | 描述 |
ViewPosition | vec4 | 当前摄像机在 世界空间(World Space)的位置。 |
ProjectionParams | vec4 | 投影参数。 x 判断是否需要 翻转(Flipped) 投影矩阵(Projection Matrix)。 · 值为 1.0 表示不需要翻转, 只有 OpenGL 不需要翻转。 · 值为 -1.0 表示需要翻转。 y 摄像机 近剪裁面(Near)属性值。属性定义请参阅 摄像机组件 章节。 z 摄像机 远剪裁面(Far)属性值。属性定义请参阅 摄像机组件 章节。 w 远剪裁面属性值的倒数( 1 / Far)。 |
ScreenParams | vec4 | 屏幕参数。 x 摄像机目标纹理的宽度(Width),以 像素(Pixel)为单位。 y 摄像机目标纹理的高度(Height),以 像素(Pixel)为单位。 z 1.0 + 1.0 / Width w 1.0 + 1.0 / Height |
ScreenSize | vec4 | 屏幕尺寸。 x 屏幕宽度(Width),以 像素(Pixel)为单位。 y 屏幕高度(Height),以 像素(Pixel)为单位。 z 屏幕宽度(Width)的倒数( 1 / Width)。 w 屏幕高度(Height)的倒数( 1 / Height)。 |
ZBufferParams | vec4 | 用于线性化 Z 缓冲区(Z Buffer)值。当前版本无需使用 REVERSED_Z 。 x 1 - Far / Near y Far / Near z x / Far w y / Far其中: · Far 表示摄像机 远剪裁面(Far)属性值。· Near 表示摄像机 近剪裁面(Near)属性值。· 具体属性含义请参阅 摄像机组件 章节。 |
OrthoParams | vec4 | 正交相机参数。 x 正交相机的 宽度(Width)。 y 正交相机的 高度(Height)。 z 0 <预留位>。 w 判断当前摄像机是否为正交摄像机。 · 值为 1.0 表示当前渲染的摄像机是正交摄像机。 · 值为 0.0 表示当前渲染的摄像机是透视摄像机。 |
光照相关 Uniform
| 命名 | 参数类型 | 描述 |
AmbientColor | vec4 | 环境光的颜色值。 |
DLightDirection | vec4 | 游戏项目中如果存在光源类型为 定向光(Directional Lights)的光源,则表示该定向光的方向。 |
DLightColor | vec4 | 游戏项目中如果存在光源类型为 定向光(Directional Lights)的光源,则表示该定向光的颜色值。 |
ShadowData | vec4 | 阴影属性,启用 #pragma shader_feature_shadow 命令的时候默认使用了此 Uniform。x 阴影强度。 |
雾效相关 Uniform
| 命名 | 参数类型 | 描述 |
FogData | vec4 | 雾的参数。 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)属性值。· 具体属性含义请参阅 光照编辑窗口 章节关于环境模块的内容。 |
FogColor | vec4 | 雾的颜色值。 |
时间相关 Uniform
时间(Time)以秒为单位,并受到 项目设置 中 时间(Time)类别的 时间缩放(Time Scale)参数影响,相当于 Type Script 脚本逻辑中的 Time.frameTime。当前版本没有内置变量可以访问未缩放的时间。
| 命名 | 参数类型 | 描述 |
Time | vec4 | 常用时间。 x Time / 20 y Time z Time * 2 w Time * 2 |
SinTime | vec4 | 常用时间的正弦值。 x Sin(Time / 8) y Sin(Time / 4) z Sin(Time / 2) w Sin(Time) |
DeltaTime | vec4 | 间隔时间。 x DTime y 1 / DTime z Smooth_DTime w 1 / Smooth_DTime 其中: · DTime 表示以秒为单位统计从上一帧到当前帧的时间间隔,相当于 Type Script 脚本逻辑中的 Time.deltaTime。· Smooth_DTime 表示在多个帧上适当向前后帧的 DTime 靠拢,使得每帧的时间间隔变化更平缓。 |
