1

我的纹理资源应该是线性的还是 sRGB?无论哪种情况,导入它们的正确方法是什么?

在 r/godot 上有一个类似的问题,但我没有看到任何彻底的答案。)

Godot 似乎假设所有 PNG 纹理都是线性的,无论嵌入在 PNG 中的任何伽马或 sRGB 信息如何。我通过十六进制编辑PNG来测试它以具有各种类型gAMAsRGB块。这与大多数图像编辑器不一致,它们往往默认使用非线性色彩空间。因此,如果您在例如 Gimp 中创建一个 PNG 并将其粘贴到 Sprite3D 上,默认情况下它看起来会褪色。

Godot(至少在 3.2 中)有一个Srgb导入选项,当设置为 时Enable,会使此类纹理看起来正常。但我担心的是:

  • 此选项似乎已从主干中删除。
  • 如果 sRGB > 线性转换发生在 uint8 > float32 转换之前,这将丢弃很多颜色精度。
  • 如果它没有检测到实际的 sRGB PNG,那么它Srgb的默认设置有什么意义?Detect

还有hint_albedo,但我希望用户不必编写着色器只是为了使纹理按预期工作。

推荐的纹理工作流程是什么?

4

1 回答 1

0

工作流程如下:

  • 在 2D 中,默认情况下不使用 HDR。如果未检测到纹理用于 3D,则纹理将作为非 sRGB 导入。
  • 在 3D 中,默认使用 HDR。如果检测到纹理以某种方式用于 3D,则纹理将自动导入为 sRGB。在 3D 中,它们也可以被检测为法线贴图,因此它们使用 RGTC 压缩(这比通用纹理压缩算法更高效、更美观)。

此选项似乎已从主干中删除。

这是有意的,因为 Vulkan 渲染器使用无绑定纹理。sRGB 转换现在在渲染纹理时直接完成,而不是在导入时完成。这允许在 2D 和 3D 上下文中使用相同的纹理,并使其在两者中看起来都正确。同样,在 Godot 4.0 中,您将能够使用具有或不具有过滤功能的相同纹理,而无需复制它。

于 2020-04-06T07:09:59.457 回答