Eu quero começar com conceitos errados:
As GPUs modernas (NVIDIA por um bom tempo e AMD desde as Ilhas do Sul) não oferecem suporte significativo às operações de vetores / matrizes nativamente no hardware. São arquiteturas de vetores em uma direção diferente: cada componente de um vetor (x, y, z) geralmente possui valores de 32 ou 64, contendo valores para cada elemento em uma faixa. Portanto, um produto de ponto 3D geralmente não é uma instrução, é uma multiplicação e duas multiplicações.
Além disso, contar operações primitivas como adição múltipla, transformar um vetor por um quaternion é mais caro do que transformar um vetor por uma matriz. Transformar um vetor por uma matriz 3x3 é 3 multiplicações e 6 multiplicações, e transformar um vetor por um quaternion é duas quaternion multiplies, cada uma das quais consiste em 4 multiplicações e 12 multiplicações. (Você pode ser menos ingênuo que isso - aqui está um artigo de maneira mais rápida -, mas ainda não é tão barato quanto multiplicar um vetor por uma matriz.)
No entanto, o desempenho nem sempre é determinado simplesmente contando o número de operações da ALU que ele executa. Quaternions requerem menos espaço que a matriz equivalente (supondo que você esteja fazendo apenas rotação / escala pura), e isso significa menos espaço de armazenamento e menos tráfego de memória. Isso geralmente é importante na animação (que também é conveniente também onde as boas propriedades de interpolação dos quaterniões aparecem).
Fora isso:
- Matrizes usam mais espaço porque suportam mais operações. Uma matriz 3x3 pode conter escala não uniforme, inclinação, reflexão e projeção ortogonal.
- Matrizes podem ser naturalmente consideradas como vetores de base e facilmente construídas a partir desses vetores.
- Multiplicar um quaternion por outro (compondo duas rotações) é menos operações do que multiplicar uma matriz por outra.