Render.ru

dPdu (tangent) на различных типах примитивов

stpg

Пользователь сайта
Рейтинг
2
#1
Для некоторых типов шейдеров необходимо использовать вектор dPdu (его ещё называют tangent).
В частности без этого вектора нельзя сделать анизотропное освещение.

Теперь проблема:
на польгональных моделях dPdu получается дискретным (при сферическом или боксовом UVMap-е) и совершенно ужасным (случайные вектора) при использовании кастомного UV.
При использовании NURBS - tangent нормально интерполируется.

Каким образом получить полигональную модель (с кастомными текстурными координатами) у которой tangent вектор будет гладким???

ЗЫ. Я приблезительно понимаю почему проблема возникает: dPdu - это производная по параметру меша модели. Если это простая полигональная модель (не параметрическая как NURBS) - то в качестве параметров берутся u == s и v == t (тоесть текстурные координаты).

ЗЫЫ. Я написал простой шейдер чтоб проилюстрировать проблему:
surface tangent()
{
Ci = color(normalize(dPdu));
Oi = Os;
}

Рендер двух торов (Polygons и NURBS) в атаче
 

Вложения

Сверху