Saya ingin memulai dengan kesalahpahaman:
GPU modern (NVIDIA cukup lama, dan AMD sejak Southern Islands) tidak mendukung operasi vektor / matriks secara native dalam perangkat keras. Mereka adalah arsitektur vektor dalam arah yang berbeda: setiap komponen vektor (x, y, z) umumnya bernilai 32- atau 64, berisi nilai untuk setiap elemen dalam jalur. Jadi produk 3D dot biasanya bukan instruksi, itu adalah gandakan dan dua gandakan.
Selain itu, menghitung operasi primitif seperti multiply-add, mengubah vektor dengan angka empat lebih mahal daripada mengubah vektor dengan matriks. Mengubah vektor dengan matriks 3x3 adalah 3 kali lipat dan 6 kali lipat, dan mentransformasikan vektor dengan angka empat adalah dua kali lipat angka empat, yang masing-masing terdiri dari 4 kali lipat dan 12 kali lipat menambahkan. (Anda bisa mendapatkan lebih sedikit naif dari ini — ini adalah penulisan pada cara yang lebih cepat — tapi itu masih tidak semurah mengalikan vektor dengan matriks.)
Namun, kinerja tidak selalu ditentukan hanya dengan menghitung jumlah operasi ALU yang dilakukannya. Kuasi membutuhkan lebih sedikit ruang daripada matriks yang setara (dengan asumsi Anda hanya melakukan rotasi / skala murni), dan itu berarti lebih sedikit ruang penyimpanan dan lalu lintas memori yang lebih sedikit. Ini sering penting dalam animasi (yang juga nyaman sering di mana sifat interpolasi yang bagus dari angka empat muncul).
Selain itu:
- Matriks menggunakan lebih banyak ruang karena mereka mendukung lebih banyak operasi. Matriks 3x3 dapat berisi skala tidak seragam, condong, refleksi, dan proyeksi ortogonal.
- Matriks dapat secara alami dianggap sebagai vektor basis, dan mudah dibangun dari vektor tersebut.
- Mengalikan satu angka empat dengan yang lain (menyusun dua rotasi) lebih sedikit operasi daripada mengalikan satu matriks dengan yang lain.