Линейная гамма и sRGB текстура рабочего процесса в Годо? - PullRequest
0 голосов
/ 06 апреля 2020

Должны ли мои текстурные активы быть линейными или sRGB? В любом случае, как правильно их импортировать?

(Есть такой же вопрос по r / godot , но я не вижу подробных ответов.)

Годо, похоже, предполагает, что все текстуры PNG являются линейными, независимо от информации о гамме или sRGB, встроенной в PNG. Я проверил это путем шестнадцатеричного редактирования PNG, чтобы иметь различные типы фрагментов gAMA и sRGB. Это противоречит большинству графических редакторов, которые по умолчанию используют нелинейные цветовые пространства. Поэтому, если вы создаете PNG, например, в Gimp и вставляете его в Sprite3D, по умолчанию он будет выглядеть размытым.

Годо (по крайней мере в 3.2) имеет параметр импорта Srgb, который при установке Enable, делает такие текстуры нормальными. Но я обеспокоен тем, что:

  • Эта опция, кажется, была удалена из транка.
  • Если линейное преобразование sRGB> происходит до того, как uint8> float32 преобразование, это приведет к потере точности цвета.
  • Какой смысл установки Detect по умолчанию Srgb, если он не обнаруживает фактические PNG-файлы sRGB?

Также есть hint_albedo, но я надеюсь, что пользователям не придется писать шейдеры только для того, чтобы текстуры работали как положено.

Какой рекомендуемый рабочий процесс для текстур?

1 Ответ

0 голосов
/ 06 апреля 2020

Рабочий процесс выглядит следующим образом:

  • В 2D HDR по умолчанию не используется. Текстуры будут импортированы как не-sRGB, если не обнаружено, что они используются в 3D.
  • В 3D HDR используется по умолчанию. Текстуры будут автоматически импортированы как sRGB, если они будут каким-либо образом использованы в 3D. В 3D их также можно обнаружить как карты нормалей, поэтому они используют сжатие RGT C (которое более эффективно и выглядит лучше, чем общие алгоритмы сжатия текстур c).

Эта опция, кажется, была удалена из ствола.

Это предназначено, так как рендерер Vulkan использует bindless текстуры. Теперь преобразование sRGB выполняется непосредственно при рендеринге текстуры, а не при ее импорте. Это позволяет использовать одну и ту же текстуру как в 2D, так и в 3D контекстах и ​​иметь ее правильную форму в обоих. Аналогично, в Godot 4.0 вы сможете использовать одну и ту же текстуру с фильтрацией и без нее, не создавая ее копию.

...