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