나는 오해로 시작하고 싶습니다 :
최신 GPU (NVIDIA, 그리고 남섬 이후 AMD)는 기본적으로 하드웨어에서 벡터 / 매트릭스 연산을 의미있게 지원하지 않습니다. 그것들은 다른 방향의 벡터 아키텍처입니다 : 벡터의 각 구성 요소 (x, y, z)는 일반적으로 레인의 각 요소에 대한 값을 포함하는 32 또는 64 값입니다. 따라서 3D 내적은 일반적으로 지침이 아니며 곱하기와 곱하기 2 개입니다.
또한 곱하기-덧셈과 같은 기본 연산 계산, 벡터를 쿼터니언으로 변환하는 것은 벡터를 행렬로 변환하는 것보다 비용이 많이 듭니다. 3x3 행렬로 벡터를 변환하는 것은 3 곱하기와 6 곱하기 덧셈이고, 쿼터니언으로 벡터를 변환하는 것은 두 쿼터니언 곱입니다. 각 쿼터니언 곱은 4 곱하기 12와 곱하기 덧셈으로 구성됩니다. (이보다 더 순진한 방법으로 얻을 수 있습니다. 여기에는 더 빠른 방법으로 작성된 글이 있지만) 벡터에 행렬을 곱하는 것만 큼 저렴하지는 않습니다.
그러나 수행하는 ALU 조작 수를 계산하여 성능을 항상 판별하지는 않습니다. 쿼터니언은 동등한 매트릭스보다 적은 공간을 필요로하며 (순수한 회전 / 스케일 만 수행한다고 가정), 이는 스토리지 공간과 메모리 트래픽이 적다는 의미입니다. 이것은 애니메이션에서 종종 중요합니다 (편리한 쿼터니언의 보간 속성이 나타나는 경우도 편리합니다).
그 이외의:
- 행렬은 더 많은 작업을 지원하기 때문에 더 많은 공간을 사용합니다. 3x3 행렬에는 비 균일 스케일, 기울기, 반사 및 직교 투영이 포함될 수 있습니다.
- 행렬은 기본적으로 기본 벡터로 생각할 수 있으며 이러한 벡터로 쉽게 구성 할 수 있습니다.
- 하나의 쿼터니언에 다른 쿼터니언을 곱하면 (두 회전 구성) 한 매트릭스에 다른 매트릭스를 곱하는 것보다 작업이 줄어 듭니다.