MineGraph Docs Help

LabPBR 材质标准

这是一个利用资源包中仅有的两张纹理存储材质信息的标准。其信息由光影进行解码,并使用这些信息进行基于物理的渲染 (PBR) 。但是需要注意法线纹理和反射纹理本身并不与 PBR 有任何直接关联。

这个格式由 shaderLABS Discord 服务器于 2019 年 4 月末发起创建并维护至今,旨在统一过去混乱的光影和资源包材质格式。
为了便捷,这个 转换器 可以帮助纹理创作家从绝大多数旧格式转换到 LabPBR。

如果你在寻找官方光影包灵动视效(Vibrant Visuals)所使用的 PBR 格式,请移步 MERS 材质标准。

反射纹理 _s

光影只需要满足能正确处理光滑度(红)和 F0 (绿)即为 LabPBR 完备,其他定义的材质信息是可选项。

红色通道

  • 代表“感知”平滑度。

    • 使用 粗糙度 = pow(1.0 - 感知平滑度, 2.0) 来将感知平滑度转换到线性粗糙度。

    • 使用 感知平滑度 = 1.0 - sqrt(粗糙度) 来将线性粗糙度转化为感知平滑度。

对于纹理创作者

值 255(100%)表示材质完全光滑(例如磨制花岗岩);值 0(0%)则是粗糙的材质(例如石头)。

绿色通道

  • 值 0 ~ 229 表示 F0 ,也叫(基础)反射率。

    • 这个属性以线性存储。 请注意值 229 实际上表示 229/255 ,即约 90%,而不是 100%.

  • 值 230 ~ 255 表示特定的硬编码金属。

对于纹理创作者

这个值可以视为材质的最小反射强度,因此当正视材质时小的值会产生更弱的反射,而大的值则会产生更强和更明显的反射。不同于传统高光度的是,这并不是反射强度的倍率,意味着平视材质(视线与表面接近平行时)时反射总是更强(称为“菲涅尔效应”,关于这个现象的更多信息见: 菲涅尔效应原理)。

蓝色通道

  • 对于非金属/绝缘体:

    • 值 0 ~ 64 表示孔隙率。 这里 有一些示例。

    • 值 65 ~ 255 表示次表面散射强度。

    • 孔隙率和次表面散射强度均以线性存储。

  • 对于金属/导体:

    • 暂留,以备将来使用。

对于纹理创作者

孔隙率表示材质可以吸收多少水分,这个值越高,被打湿(如下雨时)后表面颜色就会更暗并产生更弱的反射。这可以让同时支持孔隙率和基于天气变化的湿度(如雨天水坑)的光影产生更加准确的效果。下面是一些示例值。

材质

孔隙率

沙子

64

羊毛

38

木头

12

金属和其他不透水材料

0

孔隙率的示例可以在 这里 找到。

Alpha 通道

  • 可以设置为 0 ~ 254。0 表示 0% 发光强度,254 表示 100% 发光强度。

  • 这个值以线性存储。

对于纹理创作者

低的值意味着更弱的自发光,高的值会产生更强的光照,但 255(不透明)会被忽略。

金属的工作原理

为了能够以有限的信息量更准确地表示金属,一些金属已被预定义,并且通过将绿色通道设置为 230 到 254 的特定值来选择。此时,反照率(颜色纹理)将用于对反射进行着色,而不是对漫反射着色。

如果你需要一个没有被预定义的金属,你也可以将绿色通道设置为 255。这样反照率依旧会被用作 F0 ,这不太准确,但是也能产生相当不错的效果。

考虑到一些光影可能不支持预定义金属,这个区间的值都将被视为 255。

金属

颜色值

N (R, G, B)

K (R, G, B)

铁

230

2.9114, 2.9497, 2.5845

3.0893, 2.9318, 2.7670

金

231

0.18299, 0.42108, 1.3734

3.4242, 2.3459, 1.7704

铝

232

1.3456, 0.96521, 0.61722

7.4746, 6.3995, 5.3031

铬

233

3.1071, 3.1812, 2.3230

3.3314, 3.3291, 3.1350

铜

234

0.27105, 0.67693, 1.3164

3.6092, 2.6248, 2.2921

铅

235

1.9100, 1.8300, 1.4400

3.5100, 3.4000, 3.1800

铂

236

2.3757, 2.0847, 1.8453

4.2655, 3.7153, 3.1365

银

237

0.15943, 0.14512, 0.13547

3.9291, 3.1900, 2.3808

布局原理

对于红色和绿色通道的安排相当简单:

  • 在大多数以前的格式中,红色代表平滑度。没有什么理由改变这一点。

  • 在大多数以前的格式中,绿色表示金属性。定义“半金属”虽然不写实,但通常可以用于在一定程度上控制 F0。

然后,我们只剩下两个通道用于自发光、孔隙率和次表面散射,所以其中必然有两个要存储在同一通道中。我们最终选择了孔隙率和次表面散射。

最后,将自发光存在 Alpha 通道中,允许纹理创作者更方便地将自发光与其余通道分离,然后将其并入反射纹理的 Alpha 通道,就像法线纹理中的高度图一样。

法线纹理 _n

法线纹理中不仅包含了法向量,还包含了环境光遮蔽和高度/置换图。法向量应被编码为 DirectX 格式(Y-),这通常被称为自上而下法线,表征为X轴/红色通道指向右,Y轴/绿色通道指向下。

材质环境光遮蔽(下称材质 AO)

  • AO 强度被存储于法线纹理的蓝色通道中。

    • 法向量的第三分量 .z 可以使用 sqrt(1.0 - dot(normal.xy, normal.xy)) 进行重建。

  • 这个属性以线性存储;0 表示 100% 遮蔽,255 表示 0% 。

高度图

  • 被用于计算 POM 的高度图存储在法线纹理的 Alpha 通道中。值 0(在高度图中为纯黑色)表示方块的 25% 深度。

    • 注意:高度图值为 0 会导致一些光影的 POM 出现问题,所以建议值至少为 1 。

布局原理

AO 存储在蓝色通道中,因为法线纹理中每个像素的前三个分量表示长度为 1 的矢量。由于我们知道长度,我们只需要三个分量中的两个即可重建向量(感谢毕达哥拉斯)。这意味着三个通道中的一个可以用于其他用途,比如将 AO 存储在蓝色通道中。

版本历史

LabPBR v1.3

  • F0 现在以线性存储。

  • 过去的线性 F0 通过取其平方根来存储,并通过平方来解码。

LabPBR v1.2

  • 更改了材质 AO 在法线纹理中的存储方法。

  • 过去的材质 AO 以下列方法编码:

    • 将法线调整到 并归一化。

    • 将值域为 ,以 sqrt() 存储的材质 AO 乘入。

    • 将法线调整回 。

    • 在将法线贴图的范围调整到 后,AO 和法线按以下方式解码:

      • 法线 = normalize(法线纹理.rgb)

      • ao = length(法线纹理.rgb)

LabPBR v1.1

  • 新增硬编码金属。

  • 重新安排了自发光、次表面散射和孔隙率,依照其重要性和用途分配精度。

LabPBR v1.0

  • 初次规范。

29 April 2026