材质来自 glTF,并保持在 glTF 的模型里:金属-粗糙度,外加法线、 遮蔽和自发光贴图。没有材质编辑器,也没有着色器图——你在 Blender 里制作的表面,就是引擎渲染的表面。
每个不透明和透明表面都经过同一个金属-粗糙度 BRDF。这是 刻意的收窄:没有材质排列组合矩阵,没有需要预热的着色器 变体,在 glTF 查看器里看起来正确的资产,在这里看起来也正确。
| 输入 | 处理方式 |
|---|---|
| 基础色 + 因子 | sRGB 纹理,乘以逐材质的因子和逐实例的颜色。 |
| 金属度 / 粗糙度 | 打包的 glTF 通道,直接采样;没有重映射层。 |
| 法线贴图 | 切线空间,带可选的 Toksvig 法线方差 mip,用于抑制镜面混叠。 |
| 遮蔽 | 只应用于间接漫反射,因此不会与 GTAO 重复计算。 |
| 自发光 | 在光照之后叠加,不受阴影和 AO 影响。 |
| Alpha | 不透明、遮罩和混合模式;混合几何体在同一通道中于不透明之后绘制。 |
| 无光照 | Model.Unlit 完全绕过光照——适用于调试标记和世界内 UI。 |
导入的材质是起点,不是合同。Model 上每个贴图和
因子都有覆盖项,因此共享资产可以逐实例重新着色或重新贴图,
而无需改动 GLB。
| 属性 | 类型 | 替换内容 |
|---|---|---|
MaterialColor | Vector4? | 全模型颜色乘数,叠加在基础色因子上。 |
BaseColorOverride | TextureUpdateSource | 基础色贴图。 |
NormalOverride | TextureUpdateSource | 法线贴图。 |
MetallicRoughnessOverride | TextureUpdateSource | 打包的金属-粗糙度贴图。 |
OcclusionOverride | TextureUpdateSource | 环境光遮蔽贴图。 |
EmissiveTextureOverride | TextureUpdateSource | 自发光贴图。 |
MetallicOverride | float? | 金属度因子。 |
RoughnessOverride | float? | 粗糙度因子。 |
EmissiveFactorOverride | Vector4? | 自发光因子。 |
Unlit | bool | 跳过整个模型的光照。 |
覆盖项默认可空或为空,意思是「使用文件里写的值」。纹理覆盖接受
一个 TextureUpdateSource,因此替换来源可以是文件、
解码后的缓冲区,或另一个特效生成的纹理。
采样质量是项目级的决定,而不是逐材质的决定,因此它位于
RenderQuality 上。
| 设置 | 默认值 | 效果 |
|---|---|---|
TextureMipmaps | on | 上传时生成 mip 链。 |
TextureMipMinSize | 64 | 低于此边长时停止生成 mip。 |
TextureMaxAnisotropy | 16 | 各向异性过滤采样数,钳制到设备报告的值。 |
TextureNormalVariance | on | 法线贴图 mip 中的 Toksvig 式粗糙度加宽。 |
TextureLodBias | -0.5 | 轻微锐化偏移;额外的混叠由 TAA 吸收。 |
负 LOD 偏移和法线方差 mip 是刻意配对的。偏向更锐利的 mip 会重新 引入镜面闪烁,而在法线贴图密集处加宽粗糙度正是为此付出的代价。 关掉其中一个,你多半也应该关掉另一个。
场景颜色默认为 HDR。光照在线性空间中以浮点精度累积,Post 通道 在去往交换链的路上应用曝光和色调映射——这让泛光能以真实辐射值 而不是被截断的值做阈值判断。
| 设置 | 默认值 | 说明 |
|---|---|---|
HdrSceneColor | on | 关闭则回退到 8 位场景目标;泛光和 TAA 质量随之下降。 |
HdrExposure | 1.0 | 在色调映射曲线之前应用的线性乘数。 |
KhrLightIntensityScale | 0.05 | 缩放从 glTF 导入的点光源,后者的光度单位远大于引擎的单位。 |
KhrLightIntensityScale 存在的原因是
KHR_lights_punctual 用坎德拉和勒克斯指定强度,
而以那种量级导出的光会让以引擎单位照明的场景过曝。模型还可以用
Model.LightIntensityScale 进一步缩放它自己导入的
光源。
恒定环境光是默认且最便宜的选择。当场景值得更好的处理时,
EnvironmentMap 加载六个立方体面,并将它们投影成
球谐函数用于漫反射环境光,可选地保留辐射立方体用于镜面反射。
| 模式 | 应用内容 |
|---|---|
Off | 仅来自 SceneLighting.Ambient 的恒定环境光。 |
Diffuse | 九系数辐照度球谐函数替换恒定环境光项。 |
DiffuseSpecular | 如上,再加上用于镜面环境光的辐射立方体。 |
立方体面以 Rgba8Unorm 或
Rgba16Float 加载;
SkyIntensity 和
DiffuseIntensity 独立缩放两项贡献,
这是防止 HDRI 让同时有太阳的场景过曝的常用方法。