Оптимизация преобразований для скелетной анимации - page 2

С.А. Ивлиев
,
А.А. Павельев
,
Н.Ю. Рязанова
2
вания родителя с ее собственным преобразованием. Соответственно,
при изменении положения кости-родителя все ее кости-потомки так-
же изменят свое положение.
Для моделирования более реалистических движений в скелетную
модель вводится понятие веса. Вес определяет вклад той или иной
кости в задание конечного положения. Введение веса позволяет фор-
мировать более реалистические изображения, но увеличивает объем
требуемых вычислений. Для генерации движения все преобразования
необходимо выполнять как минимум 24 раза в секунду.
В настоящее время известно два основных подхода к заданию
преобразований: матрицей переходов и при помощи набора — ква-
тернион, коэффициенты масштабирования, перенос. Первый подход
не позволяет изменять только один из параметров преобразования,
что исключает возможность интерполировать переход от одного по-
ложения к другому. Однако, поскольку матричные преобразования
являются часто выполняемыми преобразованиями в компьютерной
графике, фирма Intel ввела расширения набора команд, такие как
AMD 3D Now и SSE, позволяющие ускорить выполнение преобразо-
ваний. Второй подход помогает легко выполнять интерполяцию, од-
нако требует большого количества вычислений, которые аппаратно
не поддерживаются.
Как было отмечено, матричные преобразования выполняются ча-
сто, поэтому фирма Intel уже в набор команд процессора Pentium 3
включила набор инструкций SSE (англ. Streaming SIMD Extensions —
потоковое SIMD-расширение) — это SIMD (англ. Single Instruction,
Multiple Data — «одна инструкция — множество данных»), аппарат-
но поддерживающий вычисления с плавающей точкой. SSE состоит
из восьми 128-битных XMM-регистров (от xmm0 до xmm7). Каждый
регистр определяет набор из четырех последовательных значений с
плавающей точкой одинарной точности. SSE включает в себя ин-
струкции, которые производят операции со скалярными и упакован-
ными типами данных. SSE позволяет выполнять операции над че-
тырьмя 32-битными числами с плавающей точкой параллельно.
Улучшенное расширение SSE — SSE2 появилось в процессорах
Pentium 4 и выполняет потоковые вычисления с вещественными чис-
лами двойной точности (2 числа по 64 бита в одном регистре SSE).
Однако большинство графических приложений не нуждаются в до-
полнительной точности данных.
Для умножения вектора на матрицу и матрицы на матрицу исполь-
зуются следующие функции SSE: movups — пересылка выровненных
по 16-байтовой границе 128-разрядных операндов c использованием
XMM-регистров; xorps — параллельная операция «исключающего
или», shufps — параллельное перемещение 32-разрядных упакованных
операндов с использованием маски; addps — параллельное сложение
1 3,4,5,6,7,8
Powered by FlippingBook