自定义材质

阅读时间:2分钟更新于 2026-04-03 15:27

自定义 Shader 内置 Uniform

Effects Runtime 引擎在渲染时自动注入的全局 Uniform(Global Uniform)。这些变量由引擎每帧根据当前相机状态自动设置,所有 Shader 均可直接声明使用,无需手动赋值。


Global Uniform 列表

Uniform 名称

类型

说明

effects_MatrixV

mat4

视图矩阵(View Matrix),将世界坐标变换到相机空间

effects_MatrixInvV

mat4

视图矩阵的逆矩阵(Inverse View Matrix),即相机的世界变换矩阵

effects_MatrixVP

mat4

视图投影矩阵(View-Projection Matrix),V × P 组合矩阵

effects_ObjectToWorld

mat4

模型矩阵(Model Matrix),将局部坐标变换到世界坐标(每次 drawcall 单独设置)

effects_WorldSpaceCameraPos

vec3

相机在世界空间中的位置


详细说明

effects_MatrixV — 视图矩阵

将世界空间坐标变换到相机(眼睛)空间。由 camera.getViewMatrix() 提供。

uniform mat4 effects_MatrixV;

// 示例:将世界坐标转换到视图空间
vec4 viewPos = effects_MatrixV * vec4(worldPosition, 1.0);

effects_MatrixInvV — 视图逆矩阵

视图矩阵的逆矩阵,等价于相机的世界变换矩阵。由 camera.getInverseViewMatrix() 提供。常用于从视图空间反算世界空间方向,或提取相机坐标轴。

uniform mat4 effects_MatrixInvV;

// 示例:提取相机的右方向和上方向
vec3 camRight = effects_MatrixInvV[0].xyz;
vec3 camUp    = effects_MatrixInvV[1].xyz;

effects_MatrixVP — 视图投影矩阵

视图矩阵与投影矩阵的组合,将世界坐标直接变换到裁剪空间。由 camera.getViewProjectionMatrix() 提供。

uniform mat4 effects_MatrixVP;

// 示例:将世界坐标变换到裁剪空间
gl_Position = effects_MatrixVP * vec4(worldPosition, 1.0);

effects_ObjectToWorld — 模型矩阵

将物体局部坐标变换到世界坐标。与上述相机相关的全局 uniform 不同,该矩阵在每次 drawGeometry 调用时由引擎为当前绘制对象单独设置。

uniform mat4 effects_ObjectToWorld;

// 示例:将顶点从局部空间变换到世界空间,再投影到裁剪空间
vec4 worldPos = effects_ObjectToWorld * vec4(aPos, 1.0);
gl_Position = effects_MatrixVP * worldPos;

effects_WorldSpaceCameraPos — 相机世界位置

相机在世界空间中的位置坐标。常用于计算视线方向、菲涅尔效果、镜面反射等。

uniform vec3 effects_WorldSpaceCameraPos;

// 示例:计算从物体表面到相机的视线方向
vec3 viewDir = normalize(effects_WorldSpaceCameraPos - worldPosition);
Preview