簡體   English   中英

Godot中的線性伽瑪與sRGB紋理工作流程?

[英]Linear gamma v.s. sRGB texture workflow in Godot?

我的紋理資源應該是線性的還是 sRGB? 無論哪種情況,導入它們的正確方法是什么?

在 r/godot 上有一個類似的問題,但我沒有看到任何徹底的答案。)

Godot 似乎假設所有 PNG 紋理都是線性的,無論嵌入在 PNG 中的任何伽馬或 sRGB 信息如何。 我通過對 PNG 進行十六進制編輯來測試這一點,使其具有各種類型的gAMAsRGB塊。 這與大多數圖像編輯器不一致,它們往往默認使用非線性色彩空間。 因此,如果您在例如 Gimp 中創建一個 PNG 並將其粘貼到 Sprite3D 上,默認情況下它看起來會褪色。

Godot(至少在 3.2 中)有一個Srgb導入選項,當設置為Enable時,會使此類紋理看起來很正常。 但我擔心的是:

  • 此選項似乎已從主干中刪除。
  • 如果 sRGB > 線性轉換發生在 uint8 > float32 轉換之前,這將丟棄很多顏色精度。
  • 如果Srgb的默認Detect設置沒有檢測到實際的 sRGB PNG,它的意義何在?

還有hint_albedo ,但我希望用戶不必為了使紋理按預期工作而編寫着色器。

推薦的紋理工作流程是什么?

工作流程如下:

  • 在 2D 中,默認情況下不使用 HDR。 如果未檢測到紋理在 3D 中使用,則紋理將作為非 sRGB 導入。
  • 在 3D 中,默認使用 HDR。 如果檢測到紋理以某種方式在 3D 中使用,紋理將自動導入為 sRGB。 在 3D 中,它們也可以被檢測為法線貼圖,因此它們使用 RGTC 壓縮(這比通用紋理壓縮算法更高效、更好看)。

此選項似乎已從主干中刪除。

這是有意的,因為 Vulkan 渲染器使用無綁定紋理。 sRGB 轉換現在在渲染紋理時直接完成,而不是在導入時完成。 這允許在 2D 和 3D 上下文中使用相同的紋理,並使其在兩者中看起來都正確。 同樣,在 Godot 4.0 中,您將能夠使用具有或不具有過濾功能的相同紋理,而無需復制它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM