Обычное Хранилище Карт (Не Длина Единицы)

  • Автор темы Kolkin
  • Обновлено
  • 21, Oct 2024
  • #1

Просматривая различные ресурсы (модели/текстуры/сцены), доступные в Интернете, я заметил тенденцию, которая противоречит моим предположениям. Многие карты нормалей содержат текселы, длина вектора которых значительно отличается от единичной длины.

Например, это изображение с Wikimedia Commons (https://commons.wikimedia.org/wiki/File:Normal_map_example_-_Map.png) содержит множество векторов (сотни), которые примерно на 15%+ короче единичной длины, и вряд ли это выброс (фактически, похоже, что он был выбран в качестве образцового базового примера). В других случаях я нашел карты нормалей, где компонент z равномерно установлен на 1,0.

Что касается спецификации, отмечу, что GLTF 2.0 просто утверждает (https://github.com/KhronosGroup/glTF/issues/993), что реализация шейдера должна перенормироваться после выборки, но сами карты не обязаны иметь векторы единичной длины.

Мне кажется, это создает проблему точности. Конечно, если нормали выбираются с использованием билинейной фильтрации, результат обычно будет короче, чем текселы, использованные для его генерации, и, следовательно, потребуется перенормировка. Однако если это аргумент в пользу того, почему нет необходимости хранить векторы единичной длины, то мне это кажется недальновидным.

При отборе проб, например, При билинейной фильтрации, если не все текселы имеют одинаковую длину, результирующая нормаль будет смещена в сторону образцов с большей длиной. Следовательно, даже если вы выполните перенормировку после выборки, вы не сможете восстановить утраченную точность, если вообще не начнете с единичных нормалей.

Поэтому я хотел бы знать, почему такой низкий приоритет, по-видимому, придается созданию текстур карт нормалей, которые содержат только нормали единичной длины. Это просто потому, что потеря точности не считается достаточно значительной субъективно/перцептивно, или здесь есть что-то еще, чего мне не хватает?

#отображение нормалей

Kolkin


Рег
10 Mar, 2005

Тем
82

Постов
178

Баллов
648
  • 26, Oct 2024
  • #2

Карты с z = 1.0 везде вероятны карты частных производных. Это вариант обычных карт, получивший довольно широкое распространение. Есть несколько причин, по которым его следует предпочесть, но, вероятно, самая важная из них — это то, что он позволяет хранить карту всего в двух каналах (красном и зеленом), что позволяет использовать более качественное сжатие BC5 и при этом обходится дешевле в декодировании в шейдере. Нормали в такой карте обязательно имеют не всю единичную длину, и, как вы отметили, это немного повлияет на интерполяцию и смешивание, но обычно это считается приемлемым компромиссом.

Однако, если это традиционная карта нормалей старой школы и ее пиксели значительно отличаются от единичной длины, это звучит странно и, вероятно, непреднамеренно. Я не уверен, почему это произошло в конкретном примере Wikimedia .png, на который вы ссылаетесь. Однако нормали неединичной длины обычно можно ввести, выполняя операции фильтрации/смешивания/композиции изображения без последующей повторной нормализации (например, если карта нормалей визуализировалась с более высоким разрешением, а затем уменьшалась с использованием стандартного алгоритма повторной выборки изображения). . Они также могут быть введены путем сжатия с потерями.

 

Deny234


Рег
10 Feb, 2016

Тем
70

Постов
207

Баллов
617
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно