我的纹理资源应该是线性的还是 sRGB?无论哪种情况,导入它们的正确方法是什么?
(在 r/godot 上有一个类似的问题,但我没有看到任何彻底的答案。)
Godot 似乎假设所有 PNG 纹理都是线性的,无论嵌入在 PNG 中的任何伽马或 sRGB 信息如何。我通过十六进制编辑PNG来测试它以具有各种类型gAMA
和sRGB
块。这与大多数图像编辑器不一致,它们往往默认使用非线性色彩空间。因此,如果您在例如 Gimp 中创建一个 PNG 并将其粘贴到 Sprite3D 上,默认情况下它看起来会褪色。
Godot(至少在 3.2 中)有一个Srgb
导入选项,当设置为 时Enable
,会使此类纹理看起来正常。但我担心的是:
- 此选项似乎已从主干中删除。
- 如果 sRGB > 线性转换发生在 uint8 > float32 转换之前,这将丢弃很多颜色精度。
- 如果它没有检测到实际的 sRGB PNG,那么它
Srgb
的默认设置有什么意义?Detect
还有hint_albedo
,但我希望用户不必编写着色器只是为了使纹理按预期工作。
推荐的纹理工作流程是什么?