आस्थगित छायांकन केवल बाद के चरणों के लिए वास्तविक छायांकन संचालन को "स्थगित" करने की एक तकनीक है, यह 10 रोशनी प्रदान करने के लिए आवश्यक पासों की संख्या को कम करने के लिए बहुत अच्छा हो सकता है (उदाहरण के लिए) जिसमें 10 पास की आवश्यकता होती है। मेरी बात इस बात की परवाह किए बिना है कि आप जिस तकनीक का उपयोग कर रहे हैं, उसमें कुछ संभावित प्रतिपादन अनुकूलन हैं जो वस्तुओं की संख्या को कम करते हैं (कोने, मानक आदि) जो आपके रेंडरिंग पाइपलाइन को संसाधित करने की आवश्यकता है।
अनुकूलन प्रदान करने के लिए कोई वास्तविक मानक नहीं हैं, बल्कि कई तकनीकों का उपयोग किया जा सकता है जो परस्पर क्रियात्मक विशेषताओं को प्राप्त करने के लिए परस्पर विनिमय या एक साथ उपयोग कर सकते हैं। प्रत्येक तकनीक का उपयोग करना दृश्य की प्रकृति पर निर्भर करता है।
आस्थगित प्रतिपादन रोशनी की संख्या बढ़ने पर समस्या को हल करने की कोशिश करता है, जो आगे के प्रतिपादन में पास की संख्या में विस्फोट कर सकता है।
उन तकनीकों में सीधे आस्थगित छायांकन भाग का अनुकूलन नहीं होता है, लेकिन आपके विवरण के अनुसार, स्थगित छायांकन भाग आपकी समस्या नहीं है। हालांकि आपकी समस्या यह है कि आप पाइपलाइन को रेंडर करने के लिए पूरा दृश्य प्रस्तुत कर रहे हैं। तो आपके इंजन को आपके दृश्य में (उदाहरण के लिए सभी 100 मिलियन लंबों) संसाधित करना होगा, बस जी-बफर को परिणाम प्रस्तुत करने में सक्षम होने के लिए, जबकि अधिकांश शोध में 100 मिलियन शीर्ष को तुच्छ रूप से दूर किया जा सकता है, और प्रस्तुत नहीं किया गया है पूर्व प्रक्रिया शीर्ष और टुकड़े गुजरती हैं।
एक फॉरवर्ड रेंडरर के मामले में, N शीर्ष की कुल संख्या के रूप में vertex count*lights count
और उसके द्वारा खंड चरण के रूप में N शीर्ष को संसाधित किया जाएगा fragments count*number Lights
, आस्थगित छायांकन प्रभावी रूप से केवल vertex count
शीर्ष चरण के fragments count
लिए और खंड की गिनती के लिए, इसे हल करने से पहले कम कर देता है वास्तविक छायांकन। लेकिन फिर भी एन को संसाधित करने के लिए बहुत अधिक हो सकता है, खासकर जब उनमें से अधिकांश को तुच्छ रूप से कुल्ला किया जा सकता है।
यह फॉरवर्ड रेंडरिंग / मल्टीपल पास के मामले में अधिक प्रभावी बनाता है। लेकिन ध्यान रखें कि अधिकांश इंजन दोहरी प्रतिपादन दृष्टिकोण का उपयोग करेंगे, क्योंकि अकेले स्थगित छायांकन पारदर्शी वस्तुओं को हल नहीं कर सकता है , इससे उन अनुकूलन का उपयोग करना आवश्यक है, मुझे किसी भी व्यावसायिक इंजन का पता नहीं है जो उन सभी को नहीं करता है।
फ्रस्ट्रम कलिंग
केवल उन वस्तुओं को जो पूरी तरह से या आंशिक रूप से दृश्य फ्रुम में शामिल हैं, कभी भी रेंडरिंग पाइपलाइन को प्रस्तुत करने की आवश्यकता होती है। यह फ्रिलम कल्लिंग की मूल अवधारणा है, दुर्भाग्य से यह जांचना कि क्या एक जाली दृश्य में / बाहर है, फ्रिज़म एक महंगा ऑपरेशन हो सकता है, इसलिए इसके बजाय, इंजन डिजाइनर एक (एएबीबी) एक्सिस एलिसिंग बाउंडिंग बॉक्स या बाउंडिंग क्षेत्र की तरह एक अनुमानित बाउंडिंग वॉल्यूम का उपयोग करते हैं। भले ही यह वास्तविक जाल का उपयोग करने के रूप में सटीक नहीं हो सकता है, सटीकता अंतर वास्तविक जाल के साथ जांचने की परेशानी के लायक नहीं है।
बाउंडिंग वॉल्यूम के साथ भी, आपको वास्तव में हर एक की जांच करने की आवश्यकता नहीं है, वैकल्पिक रूप से आप एक बाउंडिंग वॉल्यूम पदानुक्रम का निर्माण कर सकते हैं, जिससे पहले का पुलिंग किया जा सके, यह प्रयोग दृश्य की जटिलता पर अत्यधिक निर्भर करता है।
यह एक छोटे इंजन के लिए एक अच्छी और सरल तकनीक है, और लगभग हर उस इंजन का उपयोग किया जाता है जिसका मैंने कभी उपयोग किया था। यदि आपके इंजन को बहुत जटिल दृश्यों को प्रस्तुत करने की आवश्यकता नहीं है, तो मैं पदानुक्रम के बिना "सामान्य" बाउंडिंग वॉल्यूम / फ्रूटम चेकिंग का उपयोग करने की सलाह देता हूं।
पीछे की ओर मुंह करना
यह एक जरूरी बात है, ऐसे चेहरे क्यों खींचे जो वैसे भी दिखाई नहीं देंगे? प्रतिपादन एपीआई एक अंतरफलक प्रदान करने के लिए पर / बंद चेहरा culling बंद करें। जब तक आपके पास एक मजबूत कारण नहीं है, तो इसे चालू न करें, जैसे कि कुछ सीएडी अनुप्रयोगों में जो कुछ परिस्थितियों में बैकफ़ोर्स खींचने की आवश्यकता होती है, यह एक आवश्यक कार्य है।
शामिल होना
जेड-बफर का उपयोग करके आप दृश्यता निर्धारण को हल कर सकते हैं। लेकिन समस्या यह है कि Z- बफर हमेशा प्रदर्शन के मामले में महान नहीं होता है, क्योंकि Z- बफर को केवल पाइप लाइन के बाद के चरणों में हल किया जा सकता है, जिन वस्तुओं को रखा जा रहा है, उन्हें rasterized किया जाना चाहिए और Z- बफर और को लिखा जा सकता है Z परीक्षण में विफल होने से पहले रंग बफर।
इसमें शामिल होने वाले आवरणों को हल करने के लिए कुछ प्रारंभिक परीक्षण करके हल को शामिल किया जाता है। रोड़ा संचालन का एक व्यावहारिक कार्यान्वयन बिंदु-आधारित प्रश्नों का उपयोग कर रहा है और यह जांचना है कि कुछ वस्तुएं एक विशिष्ट बिंदु दृश्य से दिखाई देती हैं या नहीं। यह भी रोशनी का उपयोग करने के लिए किया जा सकता है जो अंतिम छवि में योगदान नहीं करता है यह विशेष रूप से एक स्थगित इंजन रेंडरर में उपयोगी है।
इस तरह की तकनीक का एक बड़ा वास्तविक उदाहरण GTA5 में है, जहां गगनचुंबी इमारतों को शहर के केंद्र में रखा गया है, न केवल सजावट है, बल्कि वे शहर के बाकी हिस्से को प्रभावी ढंग से बंद करने और इसे होने से रोकने के लिए भी काम करते हैं। rasterized।
विस्तार का स्तर
विस्तार का स्तर व्यापक रूप से उपयोग की जाने वाली तकनीक है, यह विचार जाल के एक सरल संस्करण का उपयोग करना है जब जाल दृश्य में कम योगदान दे रहा है। दो सामान्य कार्यान्वयन हैं; एक बस एक सरल के साथ जाल स्विच करता है जब यह अब बहुत योगदान नहीं दे रहा है, तो मेष को कुछ कारक के आधार पर चुना जाता है जैसे कि दूरी और पिक्सल (स्केयर पर क्षेत्र) की संख्या पर कब्जा कर रहा है। अन्य संस्करण गतिशील रूप से मेष को tessellates, यह व्यापक रूप से इलाके प्रतिपादन में उपयोग किया जाता है।
अगर इन सभी ने काम नहीं किया तो क्या होगा?
खैर, यह एक अच्छा सवाल है।
पहली चीज जो आपको करने की ज़रूरत है वह है कि अपने आवेदन को एक प्रोफाइलर प्रोफाइलर का उपयोग करके निर्धारित करें, और निर्धारित करें कि अड़चन कहां है। ध्यान रखें कि सामग्री में बदलाव होने के कारण अड़चन बदल सकती है। अड़चनें सीपीयू पर चलने वाले कोड का हिस्सा भी हो सकती हैं, इसलिए आपको इसे भी मापना होगा।
उसके बाद आपको टोंटी पर कुछ अनुकूलन करने की आवश्यकता है, ध्यान रखें कि इसके लिए कोई सही उत्तर नहीं है, और हार्डवेयर से दूसरे में भिन्न होगा।
कुछ सामान्य GPU अनुकूलन ट्रिक्स:
- शेड्स में ब्रंच करने से बचें।
- उदाहरण के
{VNT}
लिए एक ही सरणी में या {V},{N},{T}
अलग-अलग सरणियों में विभिन्न शीर्ष संरचनाओं की कोशिश करें ।
- आगे से पीछे की ओर आकर्षित दृश्य।
- यदि उदाहरण के लिए Z परीक्षण की आवश्यकता नहीं है, तो उदाहरण के लिए कुछ बिंदुओं पर Z- बफर को बंद करें।
- संपीड़ित बनावट का उपयोग करें।
कुछ सामान्य CPU अनुकूलन ट्रिक्स:
- छोटे कार्यों के लिए इनलाइन फ़ंक्शन का उपयोग करें।
- जब संभव हो तो SIMD (एकल निर्देश एकाधिक डेटा) का उपयोग करें।
- कैश अनफ्रेंडली मेमोरी जंप से बचें।
- डेटा के "सही" राशि के साथ VBOs का उपयोग करें। (आपके हार्डवेयर पर निर्भर करता है) लेकिन आमतौर पर कम ड्रॉ कॉल बेहतर होते हैं।
लेकिन क्या होगा अगर मेरी अड़चन स्थगित छायांकन में थी?
इस मामले में, चूंकि स्थगित छायांकन रोशनी के बारे में अधिक चिंतित है, तो सबसे स्पष्ट हिस्सा वास्तविक छायांकन गणना का अनुकूलन करना है। कुछ बिंदुओं पर नजर रखने के लिए:
- रेंडर लाइट्स जो वास्तव में अंतिम छवि को प्रभावित करती हैं। दूसरे शब्दों में रोशनी का योगदान नहीं है। इसे प्रभावी ढंग से लागू किया जा सकता है जिसका उपयोग मैं पहले उल्लेख किए गए रोड़ा के उपयोग से कर सकता हूं।
- क्या इस प्रकाश को स्पेक्युलर या कुछ अन्य घटकों की आवश्यकता है? शायद नहीं।
- क्या यह प्रकाश डाली छाया है? कुछ रोशनी छाया डालने की जरूरत नहीं है।
- क्या इस हल्के योगदान की गणना पहले की जा सकती है? यदि यह नहीं चल रहा है तो शायद कुछ पहलुओं की गणना पूर्व की जा सकती है।