Страница 1 из 1

использование нормалей, посчитанных в вертексном шейдере

СообщениеДобавлено: 16 ноя 2010, 23:00
gnoblin
привет,

в вертексном шейдере (не surface шейдер) пересчитываю нормали для своей поверхности,
потом в пиксельном шейдере эти нормали использую.

Проблема в том, что интерполируются они как-то странно :).
Уже не первый раз наступаю на такие грабли... в прошлый раз проблемы были когда я считал ув-координаты в вертексном шейдере.

Есть какие-то хитрости в таких делах? b-(

Re: использование нормалей, посчитанных в вертексном шейдере

СообщениеДобавлено: 17 ноя 2010, 03:24
Battle Angel Alita
как-то странно

Как странно? Нормаль ренормализировал?

Re: использование нормалей, посчитанных в вертексном шейдере

СообщениеДобавлено: 17 ноя 2010, 08:49
Phoenics
gnoblin писал(а):Проблема в том, что интерполируются они как-то странно :).
Есть какие-то хитрости в таких делах? b-(


Нормально там всё интерполируется, просто оно работает не совсем так как Вы по всей видимости себе представляете. Там линейная интерполяция, поэтому когда интерплируются векторы, такие как нормаль например надо понимать что:
1. Интерполированный вектор между двумя нормализованными векторами скорее всего не будет нормализованным. Более того в общем случае он даже может быть нулевым.
2. Угловая скорость интерполиваронного вектора может быть неравномерна особенно если вектора между которыми происходит интерполяция не нормализованы. Хотя это нечасто нужно.

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

Re: использование нормалей, посчитанных в вертексном шейдере

СообщениеДобавлено: 17 ноя 2010, 15:19
gnoblin
1. запощу проблемный примерчик
2. спасибо, интересно
3. чем отличается lerp от интерполяции линейно? b-(

Re: использование нормалей, посчитанных в вертексном шейдере

СообщениеДобавлено: 17 ноя 2010, 15:36
Phoenics
gnoblin писал(а):3. чем отличается lerp от интерполяции линейно? b-(

Прошу прощения за опечатку. Имелся ввиду slerp.
lerp - http://en.wikipedia.org/wiki/Lerp_(computing)
slerp - http://en.wikipedia.org/wiki/Slerp
Разница видна в общем-то даже из картинок

Re: использование нормалей, посчитанных в вертексном шейдере

СообщениеДобавлено: 17 ноя 2010, 16:16
Battle Angel Alita
Раз гноб говорил что подобная проблема возникает и на обычных текс.координатах. Думаю это не из-за линейной/сферической интнрполиции, а из-за интерполяции именно по треугольникам, а не по четырёхугольникам, как ожидают моделлеры. Ну или из-за аффинного/перспективного преобразования текс.координат, что в принципе тоже самое только вид с боку.
texcoord.png

Re: использование нормалей, посчитанных в вертексном шейдере

СообщениеДобавлено: 17 ноя 2010, 16:40
Phoenics
Ну да, было бы неплохо уточнить что именно топикстартер имеет ввиду под "станным"

Re: использование нормалей, посчитанных в вертексном шейдере

СообщениеДобавлено: 17 ноя 2010, 17:02
gnoblin
Battle Angel Alita писал(а):Раз гноб говорил что подобная проблема возникает и на обычных текс.координатах. Думаю это не из-за линейной/сферической интнрполиции, а из-за интерполяции именно по треугольникам, а не по четырёхугольникам, как ожидают моделлеры. Ну или из-за аффинного/перспективного преобразования текс.координат, что в принципе тоже самое только вид с боку.
texcoord.png


а как с этим бороться?

p.s. топик стартер был очень сонный :)

Re: использование нормалей, посчитанных в вертексном шейдере

СообщениеДобавлено: 17 ноя 2010, 21:59
AndrewSt
gnoblin писал(а):
Battle Angel Alita писал(а):Раз гноб говорил что подобная проблема возникает и на обычных текс.координатах. Думаю это не из-за линейной/сферической интнрполиции, а из-за интерполяции именно по треугольникам, а не по четырёхугольникам, как ожидают моделлеры. Ну или из-за аффинного/перспективного преобразования текс.координат, что в принципе тоже самое только вид с боку.
texcoord.png


а как с этим бороться?

p.s. топик стартер был очень сонный :)


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