अंत में, बहुत शोध के बाद मैं यह निष्कर्ष निकाल सकता हूं, जैसा कि पहले किसी ने कहा था, सार्वभौमिक रूप से "सर्वश्रेष्ठ" विधि नहीं है। लेकिन मेरे शोध से मुझे निम्नलिखित बातों का ज्ञान हुआ:
मेष के आधार पर आप अंततः उपयोग करेंगे:
- गोलाकार घन: चतुर्थांश कार्यान्वयन के साथ कोई भी LOD विधि ठीक काम करेगी, आपको बस चेहरों के बीच की सीमाओं जैसे विशेष मामलों पर ध्यान देना होगा, आपके मामले में प्रत्येक स्तर में पड़ोसी चेहरे पर आपके चतुर्थक के पास एक पॉइंटर होना चाहिए।
- कोई अन्य: मुझे लगता है कि ROAM (नए संस्करण 2.0 या BDAM, CABTT या RUSTIC के रूप में कोई अन्य एक्सटेंशन) अच्छा करेगा, हालांकि, इन एल्गोरिदम के साथ काम करना कठिन है, अधिक मेमोरी की आवश्यकता होती है और क्यूब्स के साथ अन्य aproaches की तुलना में थोड़ा धीमा होता है।
एलओडी के कई तरीके हैं जो अच्छी तरह से फिट हो सकते हैं, लेकिन मेरे व्यक्तिगत शीर्ष 5 हैं:
- निरंतर दूरी पर निर्भर LOD (CDLOD)
- GPU आधारित जियोमिली क्लिपमैप (GPUGCM)
- चोदे हुए LOD
- ओपन जीपीयू टेसेलेशन (पुस्तक: ओपनजीएल इनसाइट, अध्याय 10) के साथ टेररिंस का प्रतिपादन
- ज्यामितीय MipMapping
प्रत्येक व्यक्ति भू-भाग को प्रस्तुत करने के लिए एक अनूठा तरीका प्रदान करता है, उदाहरण के लिए, CDLOD में शेडर्स (GLSL या HLSL) का उपयोग करके एक बहुत ही आसान कार्यान्वयन है, लेकिन सीपीयू (विरासत हार्डवेयर के लिए) पर कार्यान्वित करने में भी सक्षम है, हालांकि ग्रह रेंडरिंग का लक्ष्य विस्फोट करना है आधुनिक GPU पर सबसे अच्छा है, तो GPUGCM सबसे अच्छा है जब आप अपने GPU को निचोड़ना चाहते हैं। वे दोनों डेटा-आधारित, प्रक्रियात्मक या मिश्रित (स्थाई डेटा या ऊंचाई पर आधारित इलाके और प्रक्रियात्मक कार्य के साथ जोड़ा गया विस्तार) बड़े इलाकों के प्रतिपादन के साथ बहुत अच्छी तरह से काम करते हैं।
इसके अलावा, बुनियादी ज्यामितीय क्लिपमैप विधि के लिए गोलाकार विस्तार मौजूद है, लेकिन कुछ समस्याएं हैं क्योंकि गोलाकार के प्लानर के नमूनों को गोलाकार निर्देशांक का उपयोग करके पैरामीट्रिक किया जाना है।
दूसरे हाथ में, चुराया हुआ LOD, विरासत हार्डवेयर के लिए एकदम सही है, इसे काम करने के लिए किसी भी GPU पक्ष गणना की आवश्यकता नहीं है, यह बड़े डेटासेट के लिए एकदम सही है, लेकिन वास्तविक समय में प्रक्रियात्मक डेटा को संभाल नहीं सकता है (शायद कुछ संशोधनों के साथ, यह हो सकता है)
Tessellation shaders का उपयोग करना एक और तकनीक है, बहुत नई, चूंकि OpenGL 4.x सामने आया, मेरी राय में यह सबसे अच्छा हो सकता है, लेकिन, हम Planet Rendering के बारे में बात कर रहे हैं, हम एक समस्या का सामना करते हैं जो अन्य तरीकों को बहुत आसान तरीके से संभाल सकती है और यह है परिशुद्धता के बारे में।
जब तक आप केवल अपनी परिशुद्धता को लंबवत के बीच 1Km होना चाहते हैं, टेसेलेशन शेड के लिए जाएं। इस विधि के साथ वास्तव में बड़े इलाकों के साथ समस्या यह है कि घबराना हल करने के लिए कठिन है (या कम से कम मेरे लिए, क्योंकि मैं नए सिरे से टेस्यूलेशन शेड्स हूं)।
जियोमीमैपिंग एक बेहतरीन तकनीक है, क्वाडट्री का लाभ उठाता है और इसमें कम अनुमानित पिक्सेल त्रुटि होती है, लेकिन, ग्रह रेंडरिंग के लिए आपको कम से कम 16+ स्तर के विवरण सेट करने की आवश्यकता होगी, इसका मतलब है कि आपको ज़रूरत होगी (सिलाई के लिए) कुछ अतिरिक्त पैच विभिन्न स्तरों को जोड़ने और अपने पड़ोसी के स्तर की देखभाल करने के लिए, यह हल करने के लिए थकाऊ हो सकता है, विशेष रूप से 6 इलाके चेहरे का उपयोग करके।
एक और तरीका है, जो अपने आप में बहुत खास है: "प्रोजेक्टरी ग्रिड मैपिंग फॉर प्लेनेटरी टेरेन" विज़ुअलाइज़ेशन के लिए उत्कृष्ट है, लेकिन इसके नुकसान भी हैं, यदि आप अधिक जानना चाहते हैं, तो लिंक पर जाएं।
समस्या का:
जिटर : आज के अधिकांश जीपीयू केवल 32-बिट फ्लोटिंग-पॉइंट वैल्यू का समर्थन करते हैं, जो कि ग्रहों के पैमाने वाले इलाकों में बड़े पदों में हेरफेर करने के लिए पर्याप्त सटीकता प्रदान नहीं करता है। घबराहट तब होती है जब दर्शक अंदर घूमता है या घूमता है, फिर बहुभुज आगे और पीछे उछलने लगते हैं।
इसके लिए सबसे अच्छा उपाय है कि "रेंडरिंग रिलेटिव टू आई का उपयोग करके जीपीयू" विधि का उपयोग किया जाए। यह विधि "3 डी इंजन डिजाइन फॉर वर्चुअल ग्लोब्स" पुस्तक में वर्णित है (मुझे यकीन है कि आप इसे इंटरनेट पर भी देख सकते हैं) जहां मूल रूप से आपको सीपीयू (पैच, क्लिपमैप, ऑब्जेक्ट्स) पर डबल्स के साथ अपने सभी पदों को सेट करना होगा, फ्रस्ट्रम, कैमरा इत्यादि) और फिर एमवी (0, 0, 0) टी पर इसके अनुवाद को सेट करके दर्शक के चारों ओर केंद्रित किया जाता है और डबल्स को एक निश्चित-बिंदु प्रतिनिधित्व में दो फ़्लोट्स के अंश (मंटिसा) बिट्स का उपयोग करके एन्कोड किया जाता है, कम और कुछ विधि द्वारा उच्च (ओहर्लिक के कार्यान्वयन और DSFUN90 फोरट्रान पुस्तकालय का उपयोग करने के बारे में पढ़ें)।
हालाँकि वर्टेक्स शेडर के लिए केवल एक अतिरिक्त दो घटाव और एक जोड़ की आवश्यकता होती है, लेकिन GPU RTE पदों के लिए आवश्यक वर्टेक्स बफर मेमोरी की मात्रा को दोगुना कर देता है। यह जरूरी नहीं कि मेमोरी की जरूरत तब तक दोगुनी हो जब तक कि केवल पोजिशन स्टोर न हो जाएं।
गहराई बफर परिशुद्धता : Z- लड़ाई। जैसा कि हम इस मामले में, बहुत बड़े भूभागों का प्रतिपादन कर रहे हैं: ग्रहों, जेड-बफर को बहुत बड़ा होना चाहिए, लेकिन इससे कोई फर्क नहीं पड़ता कि आपने znear और zfar के लिए जो मूल्य निर्धारित किए हैं, वहाँ हमेशा समस्याएं होंगी।
जैसा कि Z- बफर एक फ्लोट पॉइंट अंतराल पर निर्भर करता है, और यह भी रैखिक है (हालांकि परिप्रेक्ष्य प्रक्षेपण गैर रैखिक है) आंख के पास मान Z- लड़ाई से ग्रस्त हैं क्योंकि सटीक 32-बिट फ़्लोट की कमी है।
इस समस्या को हल करने का सबसे अच्छा तरीका "लॉगरिदमिक डेप्थ बफर"
http://outerra.blogspot.com/2012/11/maximizing-depth-buffer-range-and.html का उपयोग करना है।
एक लघुगणक गहराई बफर ज़ेंक के लिए एक लघुगणक वितरण का उपयोग करके दूर की वस्तुओं के लिए गहराई बफर सटीकता में सुधार करता है। यह दूर की वस्तुओं के लिए सटीक ऑब्जेक्ट के लिए सटीक ट्रेडों को ट्रेड करता है। चूंकि हम एक एलओडी विधि के साथ प्रतिपादन कर रहे हैं, दूर की वस्तुओं को कम सटीकता की आवश्यकता होती है क्योंकि उनके पास कम त्रिकोण होते हैं।
उल्लेख करने के लिए कुछ महत्वपूर्ण बात यह है कि क्वाडट्री आधार के कारण भौतिकी (टक्करों को छोड़कर) को सूचीबद्ध करते समय सभी विधियां बहुत अच्छी हैं (जो कि ज्यादातर टकराव हैं), यदि आप एक गेम बनाने की योजना बनाते हैं तो यह कुछ अनिवार्य है।
अंत में, बस उपलब्ध सभी विकल्पों की जांच करें और जिस पर आप अधिक असहज महसूस करते हैं, उसके लिए जाएं, मेरी राय में सीडीएलओडी एक महान काम करता है। घबराना और Z- बफर समस्याओं को हल करने के लिए मत भूलना, और सबसे महत्वपूर्ण: इसे बनाने में मज़ा है!
LOD के बारे में अधिक जानकारी के लिए इस लिंक को देखें ।
क्यूब को गोलाकार बनाने के बारे में पूरी तरह से जानकारी के लिए इस लिंक को देखें ।
घबराना और जेड-बफ़र के उदाहरणों को हल करने के बारे में बेहतर व्याख्या के लिए, इस पुस्तक की जाँच करें ।
मुझे आशा है कि आपको यह छोटी समीक्षा उपयोगी लगी होगी।