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.