colors - glTF - 设置颜色 - baseColorFactor
问题描述
我正在尝试操作 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
}
},
任何指针将不胜感激。
解决方案
这确实是红色、绿色、蓝色和 Alpha,映射到 0.0 到 1.0 的范围,但还进行了额外的转换:这些值已使用sRGB 传递函数从 sRGB 颜色空间转换为线性。(这里的背景是,baseColorTexture应该存储在 sRGB 颜色空间中并经过硬件 sRGB 解码,但baseColorFactor没有硬件解码器,因此直接指定为线性值。)
如果您的值介于 0 和 255 之间,则其简单版本是除以 255.0 并将其提高到 2.2 次方。这是一个近似值,但效果很好。因此,例如,如果您的 Red 值为 200,您可以运行以下公式,此处显示为 JavaScript,但可以适应任何语言:
Math.pow(200 / 255, 2.2)
这将给出大约 的线性红色值0.58597
。
请注意,alpha 值不受 sRGB 传递函数的影响,因此您只需将它们除以 255 并停在那里。
一些包会自动进行这种转换。例如,在 Blender 中,如果您单击 Base Color 颜色选择器,您会看到它有一个显示典型 CSS 样式颜色的“Hex”选项卡和一个具有数值线性值的“RGB”选项卡。
这可用于将典型的 CSS 颜色快速转换为线性空间。
VSCode glTF 工具(我是其中的贡献者)也可以将 glTF 颜色因子显示为 CSS 值(反之亦然)。
推荐阅读
- google-bigquery - bigQuery 中分片表和通配符表的区别。如何在 bigquery 中创建分片表
- postgresql - 安装 PgBouncer 时遇到问题(postgresql12-libs)
- git - .gitignore 不忽略文件夹内的文件
- javascript - Laravel 翻译文件中的 Javascript 调用
- mysql - 我尝试获取一些按日期、编号排序的数据,并获取每件商品的最新价格
- android - 无法在 Android 应用上播放此视频错误
- javascript - Chrome 提示出现过快
- python - 字符串问题/在熊猫数据框中选择所有值> 8000
- python - 如何使 Jupyter Notebook 指向与 Ubuntu 上的终端相同的 Python 安装?
- azure - 登录 Azure 应用服务运行实例