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?
transformations
es1024
fuente
fuente
Respuestas:
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:
fuente
DP3
instrucciones Intel Haswell GPU ARBfp aparece implementado como 3 multiplicaciones y 2 adiciones, verINTEL_DEBUG=fs
salida 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.(Mucha información aquí la tomé descaradamente de las respuestas de Joojaa y Ratchet Freak, con algunas notas propias).
Ventajas de la matriz
Ventajas de Quaternion
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 .
fuente
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.
fuente
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.
fuente