3 डी में रोटेशन और स्केलिंग का प्रतिनिधित्व करने के लिए क्वाटरन का उपयोग कब किया जाना चाहिए?


13

क्वाटरनियन्स (जटिल संख्याओं का एक चार-आयामी विस्तार) का उपयोग 3 डी वेक्टर के रोटेशन और स्केलिंग को दर्शाने के लिए किया जा सकता है, और 3 डी वेक्टर पर एक चतुर्भुज के अनुप्रयोग में दो चतुष्कोणीय गुणन शामिल हैं, इस प्रकार संबंधित परिवर्तन मैट्रिक्स द्वारा गुणन के कम संचालन की आवश्यकता होती है। हालांकि, रैखिक और affine परिवर्तन मैट्रिक्स अक्सर बजाय shader कोड में उपयोग किया जाता है।

कब उपयुक्त और बेहतर है (गति, स्थिरता, आदि के कारण) इसी परिवर्तन मैट्रिक्स के बजाय, तीन आयामों में स्केलिंग और रोटेशन का प्रतिनिधित्व करने के लिए एक चतुर्भुज का उपयोग करना है?


जवाबों:


8

मैं गलतफहमी से शुरू करना चाहता हूं:

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

इसके अतिरिक्त, बहु-जोड़ की तरह आदिम संचालन की गिनती करना, एक वेक्टर द्वारा एक वेक्टर को बदलने की तुलना में एक quaternion द्वारा वेक्टर को बदलना अधिक महंगा है। एक 3x3 मैट्रिक्स द्वारा एक वेक्टर को बदलना 3 गुणक और 6 गुणा-जोड़ है, और एक वेक्टर को एक चतुर्धातुक में बदलना दो चतुष्कोणीय गुणन है, जिनमें से प्रत्येक में 4 गुणक और 12 गुणा-जोड़ होते हैं। (आप इस से कम भोले हो सकते हैं - यहाँ एक तेज़ तरीके से राइटअप है -लेकिन यह अभी भी एक मैट्रिक्स द्वारा वेक्टर को गुणा करने के रूप में सस्ता नहीं है।)

हालाँकि, प्रदर्शन हमेशा ALU संचालन की संख्या की गणना करके निर्धारित नहीं किया जाता है। समकक्ष मैट्रिक्स से कम स्थान की आवश्यकता होती है (यह मानते हुए कि आप केवल शुद्ध रोटेशन / स्केल कर रहे हैं), और इसका मतलब है कि कम संग्रहण स्थान और कम मेमोरी ट्रैफ़िक। यह अक्सर एनीमेशन में महत्वपूर्ण है (जो कि सुविधाजनक रूप से भी अक्सर होता है, जहां चतुर्भुज के अच्छे प्रक्षेप गुण दिखाई देते हैं)।

उसके अलावा:

  • मैट्रिस अधिक स्थान का उपयोग करते हैं क्योंकि वे अधिक संचालन का समर्थन करते हैं। एक 3x3 मैट्रिक्स में गैर-समान पैमाने, तिरछा, प्रतिबिंब और ऑर्थोगोनल प्रक्षेपण हो सकता है।
  • मैट्रिस को स्वाभाविक रूप से आधार वैक्टर के रूप में सोचा जा सकता है, और आसानी से उन वैक्टर से निर्माण किया जा सकता है।
  • एक बटेरियन को दूसरे से गुणा करना (दो घुमाव की रचना) एक मैट्रिक्स को दूसरे से गुणा करने की तुलना में कम संचालन है।

मजेदार, और इंटेल हैसवेल GPU पर ARBfp का DP3निर्देश 3 गुणन और 2 परिवर्धन के रूप में लागू होता है, INTEL_DEBUG=fsIntel Linux ड्राइवर से आउटपुट देखें : paste.ubuntu.com/23150494 । यह सुनिश्चित नहीं है कि यह सिर्फ गरीब ड्राइवर है या एचडब्ल्यू वास्तव में विशेष वेक्टर मूल निर्देश नहीं है।
रुस्लान

@Ruslan बहुत संभावना है कि हार्डवेयर में विशेष वेक्टर मूल निर्देश नहीं हैं। अधिक सटीक रूप से, हालांकि, वे करते हैं , लेकिन वे आर्किटेक्चर (लेन) की सिमड चौड़ाई में सदिशीकृत होते हैं, न कि vec3 / vec4 आयाम में सदिश।
जॉन Calsbeek

4

(यहाँ बहुत सी जानकारी मैंने बेशर्मी से पूजा के और उधार के लकीरों के जवाबों से उधार ली है, मेरे अपने कुछ नोट्स के साथ।)

मैट्रिक्स के फायदे

  • गैर वर्दी स्केलिंग और घुमाव, तिरछा, प्रक्षेपण
  • अनुवाद (जब तक कि दोहरे उद्धरण चिह्नों का उपयोग न किया जाए)
  • नेटिव हार्डवेयर सपोर्ट
  • Quaternions को अक्सर निर्माण के लिए पारलौकिक कार्यों की आवश्यकता होती है
  • समझने में आसान

चतुर्धातुक लाभ

  • एक वेक्टर को बदलने के लिए कम संचालन की आवश्यकता होती है (या नहीं - जॉन का उत्तर देखें)
  • एक अन्य क्वाट द्वारा ट्रांसफ़ॉर्म करने के लिए कई कम संचालन की आवश्यकता होती है
  • चतुर्भुज 4 फ़्लोट्स पर कब्जा करता है, (8 यदि यह एक दोहरी है), लेकिन मैट्रिसेस 9-16 फ़्लोट्स पर कब्जा कर लेता है

यदि आप जानते हैं कि आप केवल एक समान कठोर शरीर परिवर्तन करने जा रहे हैं, तो वेक्टर / क्वाट जोड़ी आमतौर पर भंडारण स्थान (वेक्टर / क्वैट: 7 या 8 फ़्लोट्स मैट 3x4: 12 फ़्लोट्स) के मामले में 3x4 मैट्रिक्स पर एक ठोस जीत होती है। और प्रसंस्करण की गति। यदि Quaternions अभी भी आप के लिए रहस्यमय जादू कर रहे हैं, तो उन पर इस वेब श्रृंखला का प्रयास करें


3

मैटरिस चतुर्धातुक से अधिक संभव परिवर्तनों की पेशकश करते हैं, यह तिरछा, दर्पण और गैर-समान रूप से मैट्रिक्स को स्केल करना संभव है। ऐसा कुछ भी नहीं है जो कहता है कि आप अपने इंजन को केवल क्वाटरनियन आधारित ट्रांसफ़ॉर्म नहीं कर सकते हैं, अगर आपको अतिरिक्त ट्रांसफ़ॉर्म सुविधाओं की कोई आवश्यकता नहीं है।

मैट्रिस बस बहुत सुविधाजनक हैं जब आपको रिक्त स्थान बनाने की आवश्यकता होती है जहां आप आधार वैक्टर को जानते हैं। जैसे कि ऑर्थोग्राफिक में अनुमान लगाते समय। इसके अलावा मैट्रिक्स स्पेस में पर्सपेक्टिव ट्रांसफॉर्म करना आसान है। प्रोजेक्टिंग स्टफ की बात आती है तो मैट्रिस बेहतर हैं।

एक तरह से मैट्रिसेस का उपयोग आमतौर पर किया जाता है क्योंकि वे सबसे आम संप्रदाय का प्रतिनिधित्व करते हैं और मास्टर और समझने में बहुत जटिल नहीं होते हैं। मानकीकरण के लाभ अब तक आपको एक कस्टम वर्कफ़्लो के रूप में मिलने वाले लाभ से आगे निकल जाते हैं। यह अच्छी तरह से जाना जाता है कि मैट्रिक्स ऑपरेशन कैसे करें। जबकि quats कुछ नहीं हैं सबसे uni में तत्काल परिचय मिलता है। बस के आसपास पूछें कि कितने एक quaternion को पलटना जानते हैं, जबकि आप उच्च शिक्षा में कई छात्रों को नहीं पाते हैं जो एक मैट्रिक्स को पलटना नहीं जानते हैं।

ध्यान दें कि ग्राफिक्स कार्ड में मैट्रिक्स ऑपरेशन के लिए समर्पित पाइप भी हैं।


मैं वास्तव में इस बारे में सोच रहा हूं। Ive को यह पूछने पर भी ध्यान दिया जाता है कि मैट्रिक्स और क्वाट पदानुक्रमों की तुलना में मॉडलिंग पाइप कौन से अन्य तरीकों का उपयोग कर सकते हैं।
पूजा 17

3

एक चतुर्भुज केवल एक समान स्केलिंग और रोटेशन का प्रतिनिधित्व कर सकता है, इसलिए यदि आपको किसी और चीज की आवश्यकता है तो आपको प्रतिनिधित्व करने के लिए कुछ जोड़ना होगा।

अनुवाद एक एकल अतिरिक्त vec3 (या दोहरे चतुर्भुज का उपयोग करके ) के साथ किया जा सकता है । हालांकि गैर-समान स्केलिंग और शेअरिंग को एक मैट 4 द्वारा बेहतर रूप से दर्शाया गया है। प्रोजेक्शन रूपांतरण (अनिवार्य रूप से गैर-समान स्केलिंग और स्वैपिंग z और w) को एक चतुर्धातुकता द्वारा प्रस्तुत नहीं किया जा सकता है।

प्रक्षेप करते समय चतुर्भुज का एक बड़ा लाभ है। स्लैरप को क्वाटर्न्स के उपयोग से सबसे आसानी से गणना की जाती है।

एक चतुर्धातुक (या दोहरी चतुर्धातुक) को GPU में नहीं बनाया गया है, इसलिए आपको वेक्टर ऑपरेशन का उपयोग करके इसे लागू करने की आवश्यकता होगी। अधिकांश चतुर्धातुक पुस्तकालयों का मानना ​​है कि आप पैमाने का प्रतिनिधित्व करने के लिए चतुर्भुज का उपयोग नहीं करेंगे ताकि कुछ देखने के लिए हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.