मैं गलतफहमी से शुरू करना चाहता हूं:
आधुनिक GPU (थोड़ी देर के लिए NVIDIA, और दक्षिणी द्वीप समूह के बाद से AMD) सार्थक रूप से हार्डवेयर में वेक्टर / मैट्रिक्स संचालन का समर्थन नहीं करते हैं। वे एक अलग दिशा में वेक्टर आर्किटेक्चर हैं: वेक्टर के प्रत्येक घटक (x, y, z) आमतौर पर 32- या 64-वैल्यू के होते हैं, जिसमें प्रत्येक तत्व के लिए मान शामिल होते हैं। तो एक 3 डी डॉट उत्पाद आमतौर पर एक निर्देश नहीं है, यह एक गुणा और दो गुणा-जोड़ है।
इसके अतिरिक्त, बहु-जोड़ की तरह आदिम संचालन की गिनती करना, एक वेक्टर द्वारा एक वेक्टर को बदलने की तुलना में एक quaternion द्वारा वेक्टर को बदलना अधिक महंगा है। एक 3x3 मैट्रिक्स द्वारा एक वेक्टर को बदलना 3 गुणक और 6 गुणा-जोड़ है, और एक वेक्टर को एक चतुर्धातुक में बदलना दो चतुष्कोणीय गुणन है, जिनमें से प्रत्येक में 4 गुणक और 12 गुणा-जोड़ होते हैं। (आप इस से कम भोले हो सकते हैं - यहाँ एक तेज़ तरीके से राइटअप है -लेकिन यह अभी भी एक मैट्रिक्स द्वारा वेक्टर को गुणा करने के रूप में सस्ता नहीं है।)
हालाँकि, प्रदर्शन हमेशा ALU संचालन की संख्या की गणना करके निर्धारित नहीं किया जाता है। समकक्ष मैट्रिक्स से कम स्थान की आवश्यकता होती है (यह मानते हुए कि आप केवल शुद्ध रोटेशन / स्केल कर रहे हैं), और इसका मतलब है कि कम संग्रहण स्थान और कम मेमोरी ट्रैफ़िक। यह अक्सर एनीमेशन में महत्वपूर्ण है (जो कि सुविधाजनक रूप से भी अक्सर होता है, जहां चतुर्भुज के अच्छे प्रक्षेप गुण दिखाई देते हैं)।
उसके अलावा:
- मैट्रिस अधिक स्थान का उपयोग करते हैं क्योंकि वे अधिक संचालन का समर्थन करते हैं। एक 3x3 मैट्रिक्स में गैर-समान पैमाने, तिरछा, प्रतिबिंब और ऑर्थोगोनल प्रक्षेपण हो सकता है।
- मैट्रिस को स्वाभाविक रूप से आधार वैक्टर के रूप में सोचा जा सकता है, और आसानी से उन वैक्टर से निर्माण किया जा सकता है।
- एक बटेरियन को दूसरे से गुणा करना (दो घुमाव की रचना) एक मैट्रिक्स को दूसरे से गुणा करने की तुलना में कम संचालन है।