ग्राफिक्स पाइपलाइन

कंप्यूटर चित्रलेख में, एक कंप्यूटर ग्राफ़िक्स पाइपलाइन, रेंडरिंग पाइपलाइन या बस ग्राफ़िक्स पाइपलाइन, एक वैचारिक मॉडल है जो वर्णन करता है कि एक 3डी दृश्य को 2डी स्क्रीन पर रेंडर करने (कंप्यूटर ग्राफ़िक्स) करने के लिए ग्राफ़िक्स सिस्टम को किन चरणों का प्रदर्शन करना होगा। एक बार एक मॉडल की गिनती बन जाने के बाद, उदाहरण के लिए एक वीडियो गेम या किसी अन्य 3डी कंप्यूटर एनीमेशन में, ग्राफिक्स पाइपलाइन उस 3डी मॉडल को कंप्यूटर में प्रदर्शित करने की प्रक्रिया है।

क्योंकि इस ऑपरेशन के लिए आवश्यक चरण उपयोग किए गए सॉफ़्टवेयर और हार्डवेयर और वांछित प्रदर्शन विशेषताओं पर निर्भर करते हैं, सभी मामलों के लिए उपयुक्त कोई सार्वभौमिक ग्राफिक्स पाइपलाइन नहीं है। हालाँकि, ग्राफ़िक्स अप्लिकेशन प्रोग्रामिंग अंतरफलक | एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) जैसे Direct3D और OpenGL समान चरणों को एकीकृत करने और किसी दिए गए हार्डवेयर त्वरण के ग्राफ़िक्स पाइपलाइन को नियंत्रित करने के लिए बनाए गए थे। ये एपीआई अंतर्निहित हार्डवेयर को अमूर्त करते हैं और ग्राफिक्स हार्डवेयर त्वरक (उन्नत माइक्रो डिवाइसेस/इंटेल/ए NVIDIA इत्यादि) में हेरफेर करने के लिए प्रोग्रामर को कोड लिखने से दूर रखते हैं।

ग्राफिक्स पाइपलाइन का मॉडल आमतौर पर रीयल-टाइम प्रतिपादन में उपयोग किया जाता है। अक्सर, अधिकांश पाइपलाइन चरण हार्डवेयर में कार्यान्वित किए जाते हैं, जो विशेष प्रोग्राम अनुकूलन की अनुमति देता है। पाइपलाइन शब्द का उपयोग प्रोसेसर में पाइपलाइन के समान अर्थ में किया जाता है: पाइपलाइन के अलग-अलग चरण समानांतर में तब तक चलते हैं जब तक कि किसी दिए गए चरण में इसकी आवश्यकता होती है।

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

संरचना
एक ग्राफिक्स पाइपलाइन को तीन मुख्य भागों में विभाजित किया जा सकता है: अनुप्रयोग, ज्यामिति और रेखांकन।



आवेदन
एप्लिकेशन चरण को मुख्य प्रोसेसर ( CPU ) पर सॉफ्टवेयर द्वारा निष्पादित किया जाता है। एप्लिकेशन चरण के दौरान, आवश्यकतानुसार दृश्य में परिवर्तन किए जाते हैं, उदाहरण के लिए, इनपुट उपकरणों के माध्यम से या एनीमेशन के दौरान उपयोगकर्ता के संपर्क में। इसके सभी ज्यामितीय आदिम, आमतौर पर त्रिकोण, रेखाओं और बिंदुओं के साथ नया दृश्य, पाइपलाइन में अगले चरण पर पारित किया जाता है।

आम तौर पर अनुप्रयोग चरण में किए जाने वाले कार्यों के उदाहरण हैं टकराव का पता लगाना, एनीमेशन, मॉर्फिंग, और त्वरण तकनीक जैसे चतुर्भुज ज़ या ऑक्ट्रीस जैसे स्थानिक उपखंड योजनाओं का उपयोग करना। इनका उपयोग एक निश्चित समय में आवश्यक मुख्य मेमोरी की मात्रा को कम करने के लिए भी किया जाता है। एक आधुनिक कंप्यूटर गेम की दुनिया एक बार में मेमोरी में फिट होने की तुलना में कहीं अधिक बड़ी है।

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



परिभाषाएँ
एक वर्टेक्स (बहुवचन: वर्टिकल) दुनिया में एक बिंदु है। सतहों में शामिल होने के लिए कई बिंदुओं का उपयोग किया जाता है। विशेष मामलों में, बिंदु बादल सीधे खींचे जाते हैं, लेकिन यह अभी भी अपवाद है।

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

विश्व समन्वय प्रणाली
विश्व 3डी विश्व समन्वय प्रणाली वह समन्वय प्रणाली है जिसमें आभासी दुनिया बनाई जाती है। निम्नलिखित गणित को आसानी से लागू करने के लिए इसे कुछ शर्तों को पूरा करना चाहिए: समन्वय प्रणाली की इकाई को कैसे परिभाषित किया जाता है, यह डेवलपर पर छोड़ दिया जाता है। इसलिए, सिस्टम का यूनिट वेक्टर वास्तव में एक मीटर या एंग्स्ट्रॉम के अनुरूप होना चाहिए, यह एप्लिकेशन पर निर्भर करता है।
 * यह एक आयताकार कार्टेशियन समन्वय प्रणाली होनी चाहिए जिसमें सभी कुल्हाड़ियों को समान रूप से स्केल किया गया हो।
 * बाएं हाथ की समन्वय प्रणाली | दाएं हाथ या बाएं हाथ की समन्वय प्रणाली का उपयोग किया जाना है या नहीं, यह ग्राफिक लाइब्रेरी द्वारा निर्धारित किया जा सकता है।


 * उदाहरण: यदि हमें एक उड़ान सिम्युलेटर विकसित करना है, तो हम विश्व समन्वय प्रणाली का चयन कर सकते हैं ताकि उत्पत्ति पृथ्वी के मध्य में हो और इकाई एक मीटर पर सेट हो। इसके अलावा, वास्तविकता के संदर्भ को आसान बनाने के लिए, हम परिभाषित करते हैं कि एक्स अक्ष को भूमध्य रेखा को शून्य भूमध्य रेखा पर काटना चाहिए, और जेड अक्ष ध्रुवों से होकर गुजरता है। दाएँ हाथ की प्रणाली में, Y-अक्ष 90°-पूर्वी मध्याह्न (हिंद महासागर में कहीं) से होकर गुजरता है। अब हमारे पास एक समन्वय प्रणाली है जो पृथ्वी पर प्रत्येक बिंदु को त्रि-आयामी कार्टेशियन निर्देशांक में वर्णित करती है। इस समन्वय प्रणाली में, अब हम अपनी दुनिया के सिद्धांतों, पहाड़ों, घाटियों और महासागरों को मॉडल कर रहे हैं।


 * नोट: कंप्यूटर ज्यामिति के अलावा, भौगोलिक निर्देशांक का उपयोग पृथ्वी के लिए किया जाता है, धरती ात, अक्षांश और देशांतर, साथ ही समुद्र तल से ऊँचाई। अनुमानित रूपांतरण - यदि कोई इस तथ्य पर विचार नहीं करता है कि पृथ्वी एक सटीक गोला नहीं है - सरल है:
 * $$\begin{pmatrix}

x\\ y\\ z \end{pmatrix}=\begin{pmatrix} (R+{hasl})*\cos({lat})*\cos({long})\\ (R+{hasl})*\cos({lat})*\sin({long})\\ (R+{hasl})*\sin({lat}) \end{pmatrix} $$ R = पृथ्वी की त्रिज्या [6.378.137m], lat = अक्षांश, दीर्घ = देशांतर, hasl = समुद्र तल से ऊँचाई।
 * निम्नलिखित सभी उदाहरण दाएँ हाथ की प्रणाली में लागू होते हैं। बाएं हाथ की प्रणाली के लिए संकेतों को आपस में बदलने की आवश्यकता हो सकती है।

सरल मॉडलिंग के कारणों के लिए दृश्य (घरों, पेड़ों, कारों) के भीतर निहित वस्तुओं को अक्सर अपने ऑब्जेक्ट समन्वय प्रणाली (जिसे मॉडल समन्वय प्रणाली या स्थानीय समन्वय प्रणाली भी कहा जाता है) में डिज़ाइन किया जाता है। इन वस्तुओं को विश्व समन्वय प्रणाली या संपूर्ण दृश्य के वैश्विक समन्वय प्रणाली में समन्वयित करने के लिए, वस्तु निर्देशांक को अनुवाद, रोटेशन या स्केलिंग के माध्यम से रूपांतरित किया जाता है। यह संबंधित रूपांतरण मैट्रिक्स को गुणा करके किया जाता है। इसके अलावा, एक वस्तु से कई अलग-अलग रूपांतरित प्रतियाँ बनाई जा सकती हैं, उदाहरण के लिए एक पेड़ से जंगल; इस तकनीक को इंस्टेंसिंग कहा जाता है।
 * दुनिया में एक विमान का मॉडल रखने के लिए, हम पहले चार मैट्रिक्स निर्धारित करते हैं। चूंकि हम त्रि-आयामी अंतरिक्ष में काम करते हैं, इसलिए हमें अपनी गणनाओं के लिए चार-आयामी सजातीय निर्देशांक की आवश्यकता होती है।

सबसे पहले, हमें तीन रोटेशन मैट्रिक्स की आवश्यकता है, अर्थात् तीन विमान अक्षों (ऊर्ध्वाधर अक्ष, अनुप्रस्थ अक्ष, अनुदैर्ध्य अक्ष) में से प्रत्येक के लिए एक।


 * एक्स अक्ष के आसपास (आमतौर पर वस्तु समन्वय प्रणाली में एक अनुदैर्ध्य अक्ष के रूप में परिभाषित)

$$R_x=\begin{pmatrix} 1 & 0 & 0 & 0\\ 0 & \cos(\alpha) & \sin(\alpha) & 0\\ 0 & -\sin(\alpha) & \cos(\alpha) & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}$$
 * Y अक्ष के आसपास (आमतौर पर वस्तु समन्वय प्रणाली में अनुप्रस्थ अक्ष के रूप में परिभाषित)

$$R_y=\begin{pmatrix} \cos(\alpha) & 0 & -\sin(\alpha) & 0\\ 0 & 1 & 0 & 0\\ \sin(\alpha) & 0 & \cos(\alpha) & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}$$
 * Z अक्ष के आसपास (आमतौर पर वस्तु समन्वय प्रणाली में ऊर्ध्वाधर अक्ष के रूप में परिभाषित)

$$R_z=\begin{pmatrix} \cos(\alpha) & \sin(\alpha) & 0 & 0\\ -\sin(\alpha) & \cos(\alpha) & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}$$ हम एक अनुवाद मैट्रिक्स का भी उपयोग करते हैं जो विमान को हमारी दुनिया में वांछित बिंदु पर ले जाता है: $$T_{x,y,z}=\begin{pmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ x & y & z & 1 \end{pmatrix}$$.
 * टिप्पणी: उपरोक्त मैट्रिसेस लेख रोटेशन मैट्रिक्स में मैट्रिक्स के संबंध में मैट्रिक्स स्थानान्तरण  हैं। स्पष्टीकरण के लिए आगे नीचे देखें क्यों।

अब हम प्रत्येक बिंदु को इन चार आव्यूहों से क्रमिक रूप से गुणा करके विश्व निर्देशांक में वायुयान के शीर्षों की स्थिति की गणना कर सकते हैं। चूंकि मैट्रिक्स गुणन काफी महंगा (समय लेने वाला) है, इसलिए आमतौर पर कोई दूसरा रास्ता अपनाता है और पहले चार मैट्रिक्स को एक साथ गुणा करता है। दो मैट्रिक्स का गुणन और भी महंगा है, लेकिन पूरे ऑब्जेक्ट के लिए केवल एक बार निष्पादित किया जाना चाहिए। गुणन $$((((v*R_x)*R_y)*R_z)*T)$$ और $$(v*(((R_x*R_y)*R_z)*T))$$ समकक्ष हैं। इसके बाद, परिणामी मैट्रिक्स को कोने पर लागू किया जा सकता है। व्यवहार में, हालांकि, वर्टिकल के साथ गुणन अभी भी लागू नहीं होता है, लेकिन कैमरा मेट्रिसेस (नीचे देखें) पहले निर्धारित किए जाते हैं।


 * ऊपर से हमारे उदाहरण के लिए, हालांकि, अनुवाद को कुछ अलग तरीके से निर्धारित करना होगा, क्योंकि शरीर सापेक्ष दिशा का सामान्य अर्थ - उत्तरी ध्रुव के अलावा - सकारात्मक Z अक्ष की हमारी परिभाषा के साथ मेल नहीं खाता है और इसलिए मॉडल को अवश्य ही पृथ्वी के केंद्र के चारों ओर भी घुमाया जा सकता है: $$T_{Kugel} = T_{x,y,z}(0,0,R+{hasl})*R_y(\Pi/2-{lat})*R_z({long})$$ पहला कदम मॉडल की उत्पत्ति को पृथ्वी की सतह के ऊपर सही ऊंचाई तक धकेलता है, फिर इसे अक्षांश और देशांतर से घुमाया जाता है।

जिस क्रम में मैट्रिसेस लागू होते हैं वह महत्वपूर्ण है, क्योंकि मैट्रिक्स गुणन क्रमविनिमेय गुण नहीं है। यह तीन घुमावों पर भी लागू होता है, जिसे एक उदाहरण द्वारा प्रदर्शित किया जा सकता है: बिंदु (1, 0, 0) X-अक्ष पर स्थित है, यदि कोई इसे पहले X- और फिर Y- के चारों ओर 90° घुमाता है। अक्ष, यह Z-अक्ष पर समाप्त होता है (X-अक्ष के चारों ओर घूमने का उस बिंदु पर कोई प्रभाव नहीं पड़ता है जो अक्ष पर है)। यदि, दूसरी ओर, कोई पहले Y-अक्ष के चारों ओर और फिर X-अक्ष के चारों ओर घूमता है, तो परिणामी बिंदु Y-अक्ष पर स्थित होता है। अनुक्रम स्वयं मनमाना है जब तक कि यह हमेशा समान रहता है। x, फिर y, फिर z (रोल, पिच, हेडिंग) के साथ अनुक्रम अक्सर सबसे सहज होता है, क्योंकि घुमाव के कारण कम्पास की दिशा नाक की दिशा से मेल खाती है।

इन मेट्रिसेस को परिभाषित करने के लिए दो कन्वेंशन भी हैं, जो इस बात पर निर्भर करता है कि आप कॉलम वैक्टर या रो वैक्टर के साथ काम करना चाहते हैं। यहां अलग-अलग ग्राफिक्स लाइब्रेरी की अलग-अलग प्राथमिकताएं हैं। ओपनजीएल कॉलम वैक्टर, डायरेक्टएक्स पंक्ति वैक्टर पसंद करता है। निर्णय यह निर्धारित करता है कि किस ओर से बिंदु वैक्टर को परिवर्तन मैट्रिसेस द्वारा गुणा किया जाना है। कॉलम वैक्टर के लिए, गुणन दाईं ओर से किया जाता है, अर्थात $$v_{out} = M * v_{in}$$, जहां विout और वीin 4x1 कॉलम वैक्टर हैं। मैट्रिसेस का संयोजन भी दाएं से बाएं, यानी उदाहरण के लिए किया जाता है $$M = T_x * R_x$$, जब पहले घूमता है और फिर शिफ्ट होता है।

रो वैक्टर के मामले में, यह ठीक इसके विपरीत काम करता है। गुणन अब बाईं ओर से होता है $$v_{out} = v_{in} * M$$ 1x4-पंक्ति वैक्टर के साथ और संयोजन है $$M = R_x * T_x$$ जब हम भी पहले घूमते हैं और फिर चलते हैं। ऊपर दिखाए गए मेट्रिसेस दूसरे मामले के लिए मान्य हैं, जबकि कॉलम वैक्टर के लिए ट्रांसपोज़्ड हैं। नियम $$(v*M)^{T} = M^{T}*v^{T}$$ लागू होता है, जो वैक्टर के साथ गुणा के लिए मतलब है कि आप मैट्रिक्स को ट्रांसपोज़ करके गुणन क्रम को बदल सकते हैं।

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

इस तरह से गणना की गई मैट्रिक्स को विश्व मैट्रिक्स भी कहा जाता है। इसे रेंडर करने से पहले दुनिया की प्रत्येक वस्तु के लिए निर्धारित किया जाना चाहिए। एप्लिकेशन यहां बदलाव कर सकता है, उदाहरण के लिए प्रत्येक फ्रेम के बाद गति के अनुसार विमान की स्थिति बदलें।

कैमरा परिवर्तन
वस्तुओं के अलावा, दृश्य एक आभासी कैमरा या दर्शक को भी परिभाषित करता है जो उस दृश्य की स्थिति और दिशा को इंगित करता है जिसके सापेक्ष दृश्य प्रस्तुत किया जाता है। दृश्य को रूपांतरित किया जाता है ताकि कैमरा मूल रूप से Z अक्ष के साथ दिख रहा हो। परिणामी समन्वय प्रणाली को कैमरा समन्वय प्रणाली कहा जाता है और परिवर्तन को कैमरा परिवर्तन या दृश्य परिवर्तन कहा जाता है।


 * दृश्य मैट्रिक्स आमतौर पर कैमरे की स्थिति, लक्ष्य बिंदु (जहां कैमरा दिखता है) और एक अप वेक्टर (दर्शक के दृष्टिकोण से ऊपर) से निर्धारित होता है। पहले तीन सहायक वैक्टर आवश्यक हैं:
 * Zaxis = normal(cameraPosition - cameraTarget)
 * Xaxis = normal(cross(cameraUpVector, Zaxis))
 * Yaxis = cross(Zaxis, Xaxis )
 * सामान्य (v) के साथ = वेक्टर v का सामान्यीकरण;
 * क्रॉस (v1, v2) = v1 और v2 का क्रॉस उत्पाद।


 * अंत में, मैट्रिक्स: $$\begin{pmatrix}

{xaxis}.x & {yaxis}.x & {zaxis}.x & 0\\ {xaxis}.y & {yaxis}.y & {zaxis}.y & 0\\ {xaxis}.z & {yaxis}.z & {zaxis}.z & 0\\ -{dot}({xaxis}, {cameraPosition}) & -{dot}({yaxis},{cameraPosition}) & -{dot}({zaxis},{cameraPosition}) & 1 \end{pmatrix}$$
 * डॉट (v1, v2) = v1 और v2 के डॉट उत्पाद के साथ।

प्रोजेक्शन
3 डी प्रोजेक्शन स्टेप व्यू वॉल्यूम को कॉर्नर पॉइंट कोऑर्डिनेट (-1, -1, 0) और (1, 1, 1) के साथ क्यूब में बदल देता है; कभी-कभी अन्य लक्ष्य मात्राओं का भी उपयोग किया जाता है। इस कदम को प्रोजेक्शन कहा जाता है, भले ही यह एक वॉल्यूम को दूसरे वॉल्यूम में बदल देता है, क्योंकि परिणामी Z निर्देशांक छवि में संग्रहीत नहीं होते हैं, लेकिन केवल बाद के रास्टरिंग चरण में z-बफरिंग में उपयोग किए जाते हैं। एक परिप्रेक्ष्य (दृश्य) में, एक केंद्रीय प्रक्षेपण का उपयोग किया जाता है। प्रदर्शित वस्तुओं की संख्या को सीमित करने के लिए, दो अतिरिक्त कतरन विमानों का उपयोग किया जाता है; इसलिए दृश्य आयतन एक छोटा पिरामिड (छिन्नक) है। समानांतर या ऑर्थोगोनल प्रक्षेपण  का उपयोग किया जाता है, उदाहरण के लिए, तकनीकी अभ्यावेदन के लिए क्योंकि इसका लाभ यह है कि ऑब्जेक्ट स्पेस में सभी समानताएं इमेज स्पेस में भी समानांतर होती हैं, और व्यूअर से दूरी की परवाह किए बिना सतह और वॉल्यूम समान आकार के होते हैं।. मानचित्र, उदाहरण के लिए, एक ओर्थोगोनल प्रोजेक्शन (तथाकथित orthophoto) का उपयोग करते हैं, लेकिन एक परिदृश्य की तिरछी छवियों का उपयोग इस तरह से नहीं किया जा सकता है - हालांकि उन्हें तकनीकी रूप से प्रस्तुत किया जा सकता है, वे इतने विकृत लगते हैं कि हम उनका कोई उपयोग नहीं कर सकते। परिप्रेक्ष्य मानचित्रण मैट्रिक्स की गणना करने का सूत्र है:

$$\begin{pmatrix} w & 0 & 0 & 0\\ 0 & h & 0 & 0\\ 0 & 0 & {far}/({near-far}) & -1\\ 0 & 0 & ({near}*{far}) / ({near}-{far}) & 0 \end{pmatrix}$$
 * h = cot (fieldOfView / 2.0) (कैमरे का अपर्चर कोण) के साथ; डब्ल्यू = एच / पहलू अनुपात (लक्षित छवि का पहलू अनुपात); निकट = दिखाई देने वाली सबसे छोटी दूरी; दूर = दिखाई देने वाली सबसे लंबी दूरी।

यहां सबसे छोटी और सबसे बड़ी दूरी क्यों दी जानी चाहिए, एक तरफ, इस दूरी को दृश्य के स्केलिंग तक पहुंचने के लिए विभाजित किया गया है (निकट की वस्तुओं की तुलना में अधिक दूर की वस्तुएं एक परिप्रेक्ष्य छवि में छोटी हैं), और दूसरी ओर Z- बफ़र भरने के लिए Z मानों को 0..1 की श्रेणी में स्केल करने के लिए। इस बफ़र में अक्सर केवल 16 बिट्स का रिज़ॉल्यूशन होता है, यही वजह है कि निकट और दूर के मूल्यों को सावधानी से चुना जाना चाहिए। Z-बफर के कम रिज़ॉल्यूशन के कारण निकट और दूर के मान के बीच बहुत बड़ा अंतर तथाकथित Z- Z- फ़ाइटिंग की ओर ले जाता है। सूत्र से यह भी देखा जा सकता है कि निकट मान 0 नहीं हो सकता, क्योंकि यह बिंदु प्रक्षेपण का फोकस बिंदु है। इस बिंदु पर कोई चित्र नहीं है।

पूर्णता के लिए, समांतर प्रक्षेपण (ऑर्थोगोनल प्रक्षेपण) के लिए सूत्र:

$$\begin{pmatrix} 2.0/w & 0 & 0 & 0\\ 0 & 2.0/h & 0 & 0\\ 0 & 0 & 1.0/({near-far}) & -1\\ 0 & 0 & {near} / ({near}-{far}) & 0 \end{pmatrix}$$
 * w = लक्ष्य घन की चौड़ाई (विश्व समन्वय प्रणाली की इकाइयों में आयाम); एच = डब्ल्यू / पहलू अनुपात (लक्षित छवि का पहलू अनुपात); निकट = दिखाई देने वाली सबसे छोटी दूरी; दूर = दिखाई देने वाली सबसे लंबी दूरी।

दक्षता के कारणों के लिए, कैमरा और प्रोजेक्शन मैट्रिक्स को आमतौर पर एक परिवर्तन मैट्रिक्स में जोड़ दिया जाता है ताकि कैमरा समन्वय प्रणाली को छोड़ा जा सके। परिणामी मैट्रिक्स आमतौर पर एकल छवि के लिए समान होता है, जबकि विश्व मैट्रिक्स प्रत्येक वस्तु के लिए अलग दिखता है। व्यवहार में, इसलिए, दृश्य और प्रक्षेपण पूर्व-गणना किए जाते हैं ताकि प्रदर्शन के दौरान केवल विश्व मैट्रिक्स को अनुकूलित किया जा सके। हालाँकि, अधिक जटिल परिवर्तन जैसे वर्टेक्स सम्मिश्रण संभव है। फ्री प्रोग्रामेबल ज्यामिति शेडर जो ज्योमेट्री को संशोधित करते हैं, उन्हें भी निष्पादित किया जा सकता है।

वास्तविक रेंडरिंग स्टेप में, वर्ल्ड मैट्रिक्स * कैमरा मैट्रिक्स * प्रोजेक्शन मैट्रिक्स की गणना की जाती है और फिर अंत में हर एक बिंदु पर लागू किया जाता है। इस प्रकार, सभी वस्तुओं के बिंदुओं को सीधे स्क्रीन समन्वय प्रणाली में स्थानांतरित कर दिया जाता है (कम से कम लगभग, कुल्हाड़ियों की मान सीमा अभी भी -1..1 दृश्यमान सीमा के लिए है, अनुभाग विंडो-व्यूपोर्ट-ट्रांसफॉर्मेशन देखें)।

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

क्लिपिंग


केवल आदिम जो दृश्य मात्रा के भीतर हैं, उन्हें वास्तव में रेखांकन (खींचा) करने की आवश्यकता है। इस दृश्य मात्रा को एक छिन्नक के अंदर के रूप में परिभाषित किया गया है, एक कट ऑफ टॉप के साथ पिरामिड के रूप में एक आकृति। आदिम जो पूरी तरह से दृश्य मात्रा के बाहर हैं, उन्हें छोड़ दिया जाता है; इसे कलिंग का टुकड़ा  कहते हैं। आगे की कलिंग विधियाँ जैसे कि बैकफेस कलिंग, जो विचार किए जाने वाले आदिमों की संख्या को कम करती हैं, को सैद्धांतिक रूप से ग्राफिक्स पाइपलाइन के किसी भी चरण में निष्पादित किया जा सकता है। आदिम जो केवल आंशिक रूप से क्यूब के अंदर हैं, उन्हें क्यूब के खिलाफ  कतरन (कंप्यूटर ग्राफिक्स)  होना चाहिए। पिछले प्रोजेक्शन स्टेप का लाभ यह है कि क्लिपिंग हमेशा एक ही क्यूब के विरुद्ध होती है। केवल - संभवतः क्लिप किए गए - आदिम, जो दृश्य मात्रा के भीतर हैं, अंतिम चरण के लिए अग्रेषित किए जाते हैं।

विंडो-व्यूपोर्ट परिवर्तन
छवि को स्क्रीन के किसी भी लक्ष्य क्षेत्र (व्यूपोर्ट) में आउटपुट करने के लिए, अन्य परिवर्तन, विंडो-व्यूपोर्ट परिवर्तन लागू किया जाना चाहिए। यह एक बदलाव है, जिसके बाद स्केलिंग है। परिणामी निर्देशांक आउटपुट डिवाइस के डिवाइस निर्देशांक हैं। व्यूपोर्ट में 6 मान होते हैं: पिक्सेल में विंडो की ऊँचाई और चौड़ाई, विंडो निर्देशांक में विंडो के ऊपरी बाएँ कोने (आमतौर पर 0, 0) और Z के लिए न्यूनतम और अधिकतम मान (आमतौर पर 0 और 1)।


 * औपचारिक रूप से: $$\begin{pmatrix}

x\\ y\\ z \end{pmatrix}=\begin{pmatrix} {vp}.X+(1.0+v.X)*{vp}.{width}/2.0\\ {vp}.Y+(1.0-v.Y)*{vp}.{height}/2.0\\ {vp}.{minz}+v.Z*({vp}.{maxz} - {vp}.{minz}) \end{pmatrix}$$
 * वीपी = व्यूपोर्ट के साथ; v = प्रक्षेपण के बाद बिंदु

आधुनिक हार्डवेयर पर, ज्योमेट्री कम्प्यूटेशन के अधिकांश चरण वर्टेक्स शेडर में किए जाते हैं। यह, सिद्धांत रूप में, स्वतंत्र रूप से प्रोग्राम करने योग्य है, लेकिन आम तौर पर कम से कम बिंदुओं के परिवर्तन और रोशनी की गणना करता है। DirectX प्रोग्रामिंग इंटरफ़ेस के लिए, संस्करण 10 से कस्टम वर्टेक्स शेडर का उपयोग आवश्यक है, जबकि पुराने संस्करणों में अभी भी एक मानक शेडर है।

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

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

यह रोकने के लिए कि उपयोगकर्ता आदिम के क्रमिक रेखांकन को देखता है, डबल बफ़रिंग होती है। रेखांकन एक विशेष स्मृति क्षेत्र में किया जाता है। एक बार जब छवि पूरी तरह से रेखापुंज हो जाती है, तो इसे छवि मेमोरी के दृश्य क्षेत्र में कॉपी किया जाता है।

उलटा
उपयोग किए गए सभी मेट्रिसेस उलटा मैट्रिक्स हैं और इस प्रकार इनवर्टेबल हैं। चूंकि दो नॉनसिंगुलर मैट्रिसेस का गुणन एक और नॉनसिंगुलर मैट्रिक्स बनाता है, संपूर्ण परिवर्तन मैट्रिक्स भी उलटा होता है। स्क्रीन निर्देशांक से विश्व निर्देशांकों की पुनर्गणना करने के लिए व्युत्क्रम की आवश्यकता होती है - उदाहरण के लिए, क्लिक किए गए ऑब्जेक्ट को माउस पॉइंटर स्थिति से निर्धारित करने के लिए। हालाँकि, चूंकि स्क्रीन और माउस के केवल दो आयाम हैं, तीसरा अज्ञात है। इसलिए, दुनिया में कर्सर की स्थिति पर एक किरण का अनुमान लगाया जाता है और फिर दुनिया में बहुभुजों के साथ इस किरण का प्रतिच्छेदन निर्धारित किया जाता है।

शेडर
क्लासिक ग्राफिक्स कार्ड अभी भी ग्राफिक्स पाइपलाइन के अपेक्षाकृत करीब हैं। ग्राफ़िक्स प्रोसेसिंग युनिट  पर बढ़ती मांगों के साथ, अधिक लचीलापन बनाने के लिए प्रतिबंधों को धीरे-धीरे हटा दिया गया। आधुनिक ग्राफिक्स कार्ड एक स्वतंत्र रूप से प्रोग्राम करने योग्य, शेडर-नियंत्रित पाइपलाइन का उपयोग करते हैं, जो व्यक्तिगत प्रसंस्करण चरणों तक सीधी पहुंच की अनुमति देता है। मुख्य प्रोसेसर को राहत देने के लिए, अतिरिक्त प्रोसेसिंग चरणों को पाइपलाइन और जीपीयू में ले जाया गया है।

सबसे महत्वपूर्ण शेडर इकाइयां वर्टेक्स शेडर्स, ज्योमेट्री शेडर्स और पिक्सेल शेडर्स हैं।

सभी इकाइयों का पूरा लाभ उठाने के लिए एकीकृत शेडर मॉडल  पेश किया गया है। यह आपको शेडर इकाइयों का एक बड़ा पूल देता है। आवश्यकतानुसार, पूल को शेडर्स के विभिन्न समूहों में बांटा गया है। इसलिए शेडर प्रकारों के बीच सख्त अलगाव अब उपयोगी नहीं है।

जीपीयू पर ग्राफिक के प्रदर्शन से बाहर कोई भी गणना करने के लिए तथाकथित कंप्यूट-शेडर का उपयोग करना भी संभव है। लाभ यह है कि वे बहुत समानांतर चलते हैं, लेकिन इसकी सीमाएँ हैं। इन सार्वभौमिक गणनाओं को ग्राफिक्स प्रोसेसिंग यूनिटों पर सामान्य-उद्देश्य कंप्यूटिंग या संक्षेप में जीपीजीपीयू भी कहा जाता है।

यह भी देखें

 * पाइपलाइन (कंप्यूटिंग)
 * निर्देश पाइपलाइनिंग
 * हार्डवेयर एक्सिलरेशन