Нормальные вопросы картографии

Я реализую нормальное отображение касательного пространства в своем приложении OpenGL, и у меня есть несколько вопросов.

1) Я знаю, что, естественно, матрица TBN не всегда ортогональна, потому что координаты текстуры могут иметь перекос. Я знаю, что вы можете повторно ортогонализировать это, используя процесс Грамма-Шмидта. У меня такой вопрос: вводит ли процесс Грамма-Шмидта видимые артефакты? Получу ли я лучшее визуальное качество, используя чистый неизмененный нормальный / касательный / битангент?

2) Я заметил, что во многих уроках они выполняют расчеты освещения в касательном пространстве вместо пространства просмотра. Почему это? Я планирую использовать отложенный рендер, поэтому мои нормали должны быть сохранены в буфер, я прав в том, что они должны быть в поле зрения при сохранении? Чего бы мне не хватало, если бы в расчетах использовалось пространство представления вместо касательного пространства? Если я использую пространство просмотра, нужна ли обратная матрица TBN?

3) В шейдерном фрагменте нужно ли повторно нормализовать тангенс и битангенс? После умножения входящей (нормализованной) карты рельефа на нормальную, нужно ли ее перенормировать? Повлияет ли на это ортогональность (см. Вопрос 1)? Какие векторы нужно или не нужно перенормировать во фрагментном шейдере?

1

Решение

Вносит ли процесс Грамма-Шмидта видимые артефакты?

Это зависит от желаемого результата. Но обычный ответ — да, поскольку векторы нормалей отображаются в касательном пространстве. Ортогонализация касательного пространства искажает вычисления нормального отображения, если координаты текстуры определяют неортогональное основание.

Я заметил, что во многих уроках они выполняют расчеты освещения в касательном пространстве вместо пространства просмотра. Почему это?

Выполнение отображения нормалей в пространстве вида потребует преобразования каждого текселя карты нормалей в пространство просмотра. Это дороже, чем преобразование световых векторов в касательное пространство в вершинном шейдере и запуск стадии барицентрической интерполяции (что гораздо эффективнее).

В шейдерном фрагменте нужно ли повторно нормализовать тангенс и битангенс?

Нет. Вы должны нормализовать отдельные векторы после их преобразования (карта нормалей, направление на источник света и точку обзора), но перед выполнением расчетов освещенности.

3

Другие решения


По вопросам рекламы [email protected]