glTF - 设置颜色 - baseColorFactor

问题描述 投票:0回答:2

我正在尝试操作 gltf 3D 模型,但是我不确定颜色是如何导出的。

baseColorFactor
中所有介于 0 到 1(或小于 1)之间的数字。

这肯定不是RGB也不是RGBA(我将此页面作为参考:https://www.december.com/html/spec/colorrgbadec.html

"materials" : [
  {
      "doubleSided" : true,
      "name" : "Material",
      "pbrMetallicRoughness" : {
          "baseColorFactor" : [
              0.8000000715255737,
              0.91026470959186554,
              0.909551368653774261,
              1
          ],
          "metallicFactor" : 0,
          "roughnessFactor" : 0.4000000059604645
      }
  },
]

任何指点将不胜感激。

colors gltf
2个回答
5
投票

这确实是红色、绿色、蓝色和 Alpha,映射到 0.0 到 1.0 范围,但还进行了额外的转换:这些值已使用 sRGB 传输函数从 sRGB 色彩空间转换为线性。 (这里的背景是, baseColorTexture 应该存储在 sRGB 色彩空间中并接受硬件 sRGB 解码,但 baseColorFactor 没有硬件解码器,因此直接指定为线性值。)

如果您的值在 0 到 255 之间,则其简单版本是除以 255.0 并得到 2.2 次方。这是一个近似值,但效果很好。例如,如果您的红色值为 200,您可以运行以下公式,此处显示为 JavaScript,但可以适用于任何语言:

Math.pow(200 / 255, 2.2)

这将给出大约

0.58597
的线性红色值。

请注意,alpha 值不受 sRGB 传输函数的影响,因此您只需除以 255 即可。

有些软件包会自动进行此转换。例如,在 Blender 中,如果单击“基色”颜色选择器,您将看到它有一个显示典型 CSS 样式颜色的“十六进制”选项卡,以及一个具有数字线性值的“RGB”选项卡。

这可用于快速将典型的 CSS 颜色转换为线性空间。

VSCode glTF Tools(我是其中的贡献者)还可以 将 glTF 颜色因子显示为 CSS 值(反之亦然)。


1
投票

它是RGBA格式,但数字在0到1之间。如果你想在格式中插入颜色:

  • RGB (255, 255, 255) [=白色] 将所有值除以
    255
    并使用
    1
    (=最后一个值完全不透明
  • RGBA (255, 0, 0, 255) [=完全不透明的红色] 将所有分量除以
    255

可以在此处找到文档。

实际上,唯一的区别是,您可以插入更多颜色细微差别,因为每个通道有多个

255
可能的值。

© www.soinside.com 2019 - 2024. All rights reserved.