- 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), что реализация шейдера должна перенормироваться после выборки, но сами карты не обязаны иметь векторы единичной длины.
Мне кажется, это создает проблему точности. Конечно, если нормали выбираются с использованием билинейной фильтрации, результат обычно будет короче, чем текселы, использованные для его генерации, и, следовательно, потребуется перенормировка. Однако если это аргумент в пользу того, почему нет необходимости хранить векторы единичной длины, то мне это кажется недальновидным.
При отборе проб, например, При билинейной фильтрации, если не все текселы имеют одинаковую длину, результирующая нормаль будет смещена в сторону образцов с большей длиной. Следовательно, даже если вы выполните перенормировку после выборки, вы не сможете восстановить утраченную точность, если вообще не начнете с единичных нормалей.
Поэтому я хотел бы знать, почему такой низкий приоритет, по-видимому, придается созданию текстур карт нормалей, которые содержат только нормали единичной длины. Это просто потому, что потеря точности не считается достаточно значительной субъективно/перцептивно, или здесь есть что-то еще, чего мне не хватает?
#отображение нормалей