Коли кватерніони слід використовувати для зображення обертання та масштабування в 3D?


13

Кватерніони (чотиривимірне розширення складних чисел) можуть використовуватися для зображення обертання та масштабування 3D-вектора, а застосування кватерніона на 3D-вектор включає два кватерніонних множення, таким чином, вимагаючи меншої кількості операцій, ніж множення відповідною матрицею перетворення. Однак часто застосовуються лінійні та афінні матриці перетворення, особливо в шейдерному коді.

Коли доцільно і бажано (через швидкість, стійкість тощо) використовувати кватерніон для зображення масштабування та обертання в трьох вимірах замість відповідної матриці перетворення?


Відповіді:


8

Я хочу почати з помилок:

Сучасні графічні процесори (NVIDIA досить довгий час та AMD з Південних островів) не мають суттєвого значення підтримувати векторні / матричні операції в апараті. Вони є векторними архітектурами в іншому напрямку: кожен компонент вектора (x, y, z) зазвичай має 32- або 64-значення, що містять значення для кожного елемента в смузі. Тож продукт із 3D-крапками зазвичай не є інструкцією, це множення та два множення-додавання.

Крім того, підрахунок примітивних операцій, таких як множення-додавання, перетворення вектора кватерніоном дорожче, ніж перетворення вектора за допомогою матриці. Трансформація вектора за допомогою матриці 3x3 - це 3 множення та 6 множинних додавань, а перетворення вектора кватерніоном - це два кватерніонних множення, кожне з яких складається з 4 множень та 12 множинних додавань. (Ви можете бути менш наївним, ніж це - ось запис швидше - але це все ще не так дешево, як множення вектора на матрицю.)

Однак продуктивність не завжди визначається просто підрахунком кількості операцій ALU, які вона виконує. Кватерніонам потрібно менше місця, ніж еквівалентна матриця (припускаючи, що ви робите лише чисте обертання / масштаб), а це означає менше місця для зберігання та менше трафіку пам'яті. Це часто важливо в анімації (що зручно також часто, коли проявляються приємні інтерполяційні властивості кватерніонів).

Крім того, що:

  • Матриці використовують більше місця, оскільки вони підтримують більше операцій. Матриця 3x3 може містити неоднорідну шкалу, косий відбиток та ортогональну проекцію.
  • Матриці природним чином можна вважати основними векторами і легко будувати з цих векторів.
  • Множення одного кватерніона на інший (складання двох обертів) - це менше операцій, ніж множення однієї матриці на іншу.

Смішно, і в DP3інструкції Intel Haswell GPU ARBfp видається реалізована у вигляді 3- х множин та 2 доповнень, див. INTEL_DEBUG=fsВихід з драйвера Intel Linux: paste.ubuntu.com/23150494 . Не впевнений, що це просто поганий драйвер або HW насправді не має спеціальних інструкцій щодо векторної мульти.
Руслан

@Ruslan Дуже ймовірно, що апаратне забезпечення просто не має спеціальних інструкцій щодо векторних муль. Більш точно, хоча, вони роблять , але вони векторизованних по всій ширині SIMD архітектури (смуги руху), а не впоперек векторизованних vec3 / vec4 вимірювання.
Джон Калсбек

4

(Багато інформації тут я безсоромно запозичив у відповідях джуджая та храповиків, з деякими власними нотами.)

Переваги матриці

  • Неоднакове масштабування та обертання, перекос, проекція
  • Переклад (за винятком випадків використання подвійних кватерніонів)
  • Рідна апаратна підтримка
  • Кватерніони часто вимагають трансцендентних функцій для побудови
  • Легше зрозуміти

Переваги Кватерніона

  • Трансформація вектора вимагає меншої кількості операцій (Або ні - див. Відповідь Джона)
  • Перетворення на інший кват вимагає набагато менше операцій
  • Кватерніони займають 4 поплавця (8, якщо це подвійний), але Матриці займають 9-16 плавців

Якщо ви знаєте, що ви будете робити лише рівномірні жорсткі перетворення тіла, пара векторів / кватів зазвичай є суттєвою виграшею на матриці 3x4 з точки зору місця для зберігання (вектор / кват: 7 або 8 плаває проти mat3x4: 12 плавців) та швидкість обробки. Якщо кватерніони все ще для вас містичний вуду, спробуйте цей веб-серіал на них .


3

Матриці пропонують більше можливих перетворень, ніж кватерніони, можна перекосити, дзеркально та нерівномірно масштабувати матрицю. Ніщо не говорить про те, що ви не можете змусити ваш двигун робити просто перетворення на основі кватерніона, якщо у вас немає необхідності в додаткових функціях перетворення.

Матриці просто дуже зручні, коли вам потрібно побудувати простори, де ви знаєте основні вектори. Наприклад, коли робиться проекція на ортографічну. Також зробити перспективне перетворення в матричному просторі легко. Матриці є кращими, коли справа доходить до проектування матеріалів.

Таким чином зазвичай використовуються матриці, оскільки вони представляють найпоширеніші номінали і не надто складні для освоєння та розуміння. Переваги стандартизації набагато перевищують вигоду, яку ви отримуєте від спеціального робочого процесу. Добре відомо, як робити матричні операції. Тоді як квати - це не те, що найбільше негайно знайомиться з університетом. Просто запитайте навколо, скільки знає, як перетворити кватерніон, тоді як ви не знайдете багатьох студентів вищих навчальних закладів, які не знають, як перетворити матрицю.

Зауважте, що відеокарти також мають спеціальні труби для матричних операцій.


Я насправді про це думав. Я також роздумував над запитаннями, які інші підходи до моделювання труб, ніж ієрархії матриць і кватів, можна використати.
joojaa

3

Кватерніон може представляти лише рівномірне масштабування та обертання, тому якщо вам потрібно щось інше, вам потрібно буде щось додати, щоб це зобразити.

Переклад можна здійснити за допомогою одного додаткового vec3 (або з використанням подвійних кватерніонів ). Однак нерівномірне масштабування та нахил зображено краще матом4. Проекційні перетворення (по суті, нерівномірне масштабування та заміна z і w) не можуть бути представлені кватерніоном.

Кватерніони мають головну перевагу при інтерполяції. Серп легко обчислити за допомогою кватерніонів.

Застосування кватерніона (або подвійного кватерніона) не вбудовано в GPU, тому вам потрібно буде реалізувати це за допомогою векторних операцій. Більшість бібліотек кватерніона припускають, що ви не будете використовувати кватерніон для представлення масштабу, тому на це потрібно дивитися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.