Скелетная анимация и нормали GPU. Есть ли быстрый способ получить транспонирование (инверсия (m))?

Написание аппаратного скина для моей игры, а также анимация нормалей. Из этой статьи я узнал, что обычно для преобразования нормалей вам нужно что-то вроде этого:

transformed_normal = transpose(inverse(bone[i])) * normal;

Я не могу передать второй набор предварительно рассчитанных транспозиций (обратных (костей)) в шейдер через юниформы, потому что у меня недостаточно юниформ для этого. Так что я должен вычислить это транспонирование (обратное (кость [i])) в вершинном шейдере (снова и снова для каждой из тысяч вершин), не так ли? Есть ли более быстрый способ сделать это? Какое-то дешевое и грязное приближение этой операции?

Редактировать: Нашел это классное решение https://stackoverflow.com/a/46518010/9173149


person Tony Forge    schedule 04.01.2018    source источник


Ответы (1)


Типичный способ справиться с этим — не масштабировать костные матрицы. Если преобразования костей имеют только вращение и перемещение, выполнение инверсии/транспонирования не требуется.

person Nicol Bolas    schedule 04.01.2018