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

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

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

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

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

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



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

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

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



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

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

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


 * उदाहरण: यदि हमें एक उड्डयन अनुरूपक विकसित करना है, तो हम विश्व समन्वय सिस्टम का चयन कर सकते हैं ताकि मूल पृथ्वी के मध्य में हो और इकाई एक मीटर पर सेट हो। इसके अलावा, वास्तविकता के संदर्भ को सरल बनाने के लिए, हम परिभाषित करते हैं कि एक्स अक्ष  भूमध्य रेखा को शून्य भूमध्य रेखा पर काटना चाहिए, और जेड अक्ष ध्रुवों से होकर निकलता है। दाएँ हाथ की सिस्टम में, वाय-अक्ष 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} $$ आर= पृथ्वी की त्रिज्या [6.378.137m], एलएटी = अक्षांश, दीर्घ = देशांतर, एचएएसएल = समुद्र तल से ऊँचाई।
 * निम्नलिखित सभी उदाहरण दाएँ हाथ की सिस्टम में लागू होते हैं। बाएं हाथ की सिस्टम के लिए संकेतों को आपस में बदलने की आवश्यकता हो सकती है।

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

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


 * एक्स अक्ष के आसपास आमतौर पर वस्तु समन्वय सिस्टम में एक अनुदैर्ध्य अक्ष के रूप में परिभाषित है-

$$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}$$
 * वाय अक्ष के आसपास आमतौर पर वस्तु समन्वय सिस्टम में अनुप्रस्थ अक्ष के रूप में परिभाषित है-

$$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}$$
 * जेड अक्ष के आसपास आमतौर पर वस्तु समन्वय सिस्टम में ऊर्ध्वाधर अक्ष के रूप में परिभाषित है-

$$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 से कस्टम शीर्ष शेडर का उपयोग आवश्यक है, जबकि पुराने संस्करणों में अभी भी एक मानक शेडर है।

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

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

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

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

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

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

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

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

यह भी देखें

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