¿Cuándo deben usarse los cuaterniones para representar la rotación y la escala en 3D?


13

Los cuaterniones (una extensión de cuatro dimensiones de números complejos) se pueden usar para representar la rotación y el escalado de un vector 3D, y la aplicación de un cuaternión en un vector 3D implica dos multiplicaciones de cuaterniones, lo que requiere menos operaciones que la multiplicación por la matriz de transformación correspondiente. Sin embargo, las matrices de transformación lineal y afines a menudo se usan en su lugar, especialmente en el código de sombreador.

¿Cuándo es apropiado y preferible (debido a la velocidad, estabilidad, etc.) usar un cuaternión para representar la escala y la rotación en tres dimensiones, en lugar de la matriz de transformación correspondiente?


Respuestas:


8

Quiero comenzar con ideas falsas:

Las GPU modernas (NVIDIA durante bastante tiempo y AMD desde las Islas del Sur) no admiten de manera significativa las operaciones de vector / matriz de forma nativa en el hardware. Son arquitecturas vectoriales en una dirección diferente: cada componente de un vector (x, y, z) generalmente tiene valores de 32 o 64, que contienen valores para cada elemento en un carril. Por lo tanto, un producto de puntos 3D no suele ser una instrucción, es una multiplicación y dos sumas múltiples.

Además, contar operaciones primitivas como multiplicar-sumar, transformar un vector por un cuaternión es más costoso que transformar un vector por una matriz. La transformación de un vector por una matriz 3x3 es 3 multiplicaciones y 6 sumas múltiples, y la transformación de un vector por un cuaternión es dos multiplicaciones cuaterniones, cada una de las cuales consta de 4 multiplicaciones y 12 sumas múltiples. (Puede ser menos ingenuo que esto, aquí hay un resumen más rápido, pero aún así no es tan barato como multiplicar un vector por una matriz).

Sin embargo, el rendimiento no siempre se determina simplemente contando el número de operaciones de ALU que realiza. Los cuaterniones requieren menos espacio que la matriz equivalente (suponiendo que solo esté haciendo rotación / escala pura), y eso significa menos espacio de almacenamiento y menos tráfico de memoria. Esto a menudo es importante en la animación (que es conveniente también a menudo donde se muestran las buenas propiedades de interpolación de los cuaterniones).

Aparte de eso:

  • Las matrices usan más espacio porque admiten más operaciones. Una matriz de 3x3 puede contener escala no uniforme, sesgo, reflexión y proyección ortogonal.
  • Las matrices se pueden considerar naturalmente como vectores base, y se pueden construir fácilmente a partir de esos vectores.
  • Multiplicar un cuaternión por otro (componer dos rotaciones) es menos operaciones que multiplicar una matriz por otra.

Divertido, y en las DP3instrucciones Intel Haswell GPU ARBfp aparece implementado como 3 multiplicaciones y 2 adiciones, ver INTEL_DEBUG=fssalida del controlador Intel Linux: paste.ubuntu.com/23150494 . No estoy seguro de si es solo un controlador pobre o el HW realmente no tiene instrucciones especiales de vectores mul.
Ruslan

@Ruslan Muy probable que el hardware simplemente no tenga instrucciones especiales de vectores mul. Sin embargo, lo hacen con mayor precisión, pero están vectorizados a través del ancho SIMD de la arquitectura (los carriles), no vectorizados a través de la dimensión vec3 / vec4.
John Calsbeek

4

(Mucha información aquí la tomé descaradamente de las respuestas de Joojaa y Ratchet Freak, con algunas notas propias).

Ventajas de la matriz

  • Escalado y rotación no uniformes, sesgo, proyección
  • Traducción (a menos que use cuaterniones duales)
  • Soporte de hardware nativo
  • Los cuaterniones a menudo requieren funciones trascendentales para construir
  • Más fácil de entender

Ventajas de Quaternion

  • Transformar un vector requiere menos operaciones (o no, ver la respuesta de John)
  • La transformación por otro quat requiere muchas menos operaciones
  • Los cuaterniones ocupan 4 flotadores (8 si es un doble) pero las Matrices ocupan entre 9 y 16 flotadores.

Si sabe que solo va a realizar transformaciones uniformes de cuerpo rígido, un par vector / quat suele ser una ganancia sólida en una matriz de 3x4 en términos de espacio de almacenamiento (vector / quat: 7 u 8 flotadores frente a mat3x4: 12 flotadores) y velocidad de procesamiento. Si los Quaterniones siguen siendo vudú místico para ti, prueba esta serie web en ellos .


3

Las matrices ofrecen más transformaciones posibles que los cuaterniones, es posible sesgar, reflejar y escalar de manera no uniforme la matriz. No hay nada que indique que no puede hacer que su motor realice solo transformaciones basadas en cuaterniones, si no necesita las funciones de transformación adicionales.

Las matrices son muy convenientes cuando necesitas construir espacios donde conoces los vectores base. Como cuando se hacen proyecciones en ortografía. También hacer transformación de perspectiva en un espacio matricial es fácil. Las matrices son superiores cuando se trata de proyectar cosas.

En cierto modo, las matrices se usan generalmente porque representan la denominación más común y no son demasiado complicadas de dominar y comprender. Los beneficios de la estandarización superan con creces el beneficio que obtiene de un flujo de trabajo personalizado. Es bien sabido cómo hacer las operaciones matriciales. Mientras que los quats no son algo a lo que la mayoría se introduce de inmediato en uni. Simplemente pregunte cuántos saben cómo invertir un cuaternión, mientras que no encuentran muchos estudiantes de educación superior que no sepan invertir una matriz.

Tenga en cuenta que las tarjetas gráficas también tienen tuberías dedicadas para operaciones matriciales.


De hecho, he estado pensando en esto. También me pregunté qué otros enfoques modelan tuberías que las jerarquías de matriz y quat que uno podría usar.
joojaa

3

Un cuaternión solo puede representar una escala y rotación uniformes, por lo que si necesita algo más, deberá agregar algo para representar eso.

La traducción se puede hacer con un solo vec3 adicional (o usando cuaterniones duales ). Sin embargo, la escala y el corte no uniformes están mejor representados por un tapete4. Las transformaciones de proyección (esencialmente escala no uniforme e intercambio de z y w) no pueden representarse por un cuaternión.

Los cuaterniones tienen una gran ventaja al interpolar. El slerp se calcula más fácilmente usando cuaterniones.

La aplicación de un cuaternión (o cuaternión doble) no está integrado en la GPU, por lo que deberá implementarlo mediante las operaciones vectoriales. La mayoría de las bibliotecas de quaternion asumen que no usará el quaternion para representar la escala, por lo que es algo a tener en cuenta.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.