ग्रह प्रतिपादन के लिए सबसे अच्छा एलओडी तरीका कौन सा है?


23

मैं वर्तमान में अपनी थीसिस पर काम कर रहा हूं, यह ग्रहों के आकार के इलाकों को रेंडर करने के लिए एक इंजन है।

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

मैं जियोमीमैपिंग, ज्योमेट्री क्लिपमैप्स (जीपीयू) और चॉक्ड एलओडीआर के बारे में जानता हूं जो बड़े इलाकों पर अच्छा काम करते हैं और इसका इस्तेमाल घन के 6 चेहरों को रेंडर करने के लिए किया जा सकता है और फिर इस विधि से क्यूब को "गोलाकार" बनाया जा सकता है और मुझे समझ में आया कि कैसे सभी को लागू करना है GPU पर C ++ / OpenGL / GLSL (ROAM जैसी विधियों या किसी अन्य विधि का उपयोग नहीं करता है जो क्यूब का उपयोग नहीं करता है, क्योंकि बनावट के कारण मेरी पहुंच से बाहर है) एक दर्द है। इसके अलावा, मैं हाल ही में यहां टेसलेशन शेड्स का उपयोग करते हुए टेरियर को प्रस्तुत करने के एक ट्यूटोरियल में मिला

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

वैसे भी, यदि आप मुझे निर्णय लेने में मदद कर सकते हैं या कोई अन्य सुझाव या तरीका है जिसकी मैं वास्तव में सराहना करूंगा। एक शर्त यह है कि सीपीयू की अड़चन को रोकने के लिए विधि को GPU की ओर (कम से कम अधिकांश) लागू करने में सक्षम होना चाहिए।

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

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

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


6
कोई सार्वभौमिक "सर्वश्रेष्ठ" विधि नहीं है। केवल आप अपनी परियोजना की सभी आवश्यकताओं को जानते हैं और आप कई LOD विकल्पों के बारे में जानते हैं। अंत में, आपको वास्तव में यह निर्णय अपने दम पर लेना चाहिए क्योंकि यह आपकी थीसिस का हिस्सा है। आपका शोध आपके द्वारा पढ़ाए जा रहे विषय के बारे में आपका ज्ञान दर्शाता है। यदि आप नहीं जानते कि आपकी आवश्यकताओं के लिए सबसे अच्छा क्या है, तो शायद आपको विकल्पों का थोड़ा और अध्ययन करना चाहिए।
माइकलहाउस

@ Byte56 आप सही हैं, और मैं LOD तरीकों के बारे में बहुत शोध कर रहा था, मैं सिर्फ अन्य लोगों के कुछ सुझावों को देखना चाहता था जिन्होंने उनमें से कुछ को लागू किया है और पूर्वरूपता और दृश्य गुणवत्ता के बारे में बात करते हैं ताकि मैं एक का चयन कर सकूं ... वैसे भी, धन्यवाद आपकी टिप्पणी के लिए :) और वैसे, Im वर्तमान में tessellation shaders के बारे में समझ रहा है और एक महान ट्यूटोरियल (मुख्य प्रश्न पर लिंक) पाया है और मुझे लगता है कि मैं इसके लिए जाऊंगा, यह सिर्फ इलाके प्रतिपादन के लिए समझाया गया है, लेकिन मैं इसे संशोधित कर सकता हूं 6 चेहरों को बनाने और क्यूब को गोलाकार बनाने के लिए।
nosmirck

vterrain.org/LOD में इलाके के प्रतिपादन के विषय पर बहुत सारी जानकारी है। खंड सूचीबद्ध एल्गोरिदम के स्तर के लिए कागजात और अन्य स्रोतों से जुड़ा हुआ है। vterrain.org/LOD/spherical.html गोलाकार ग्रिड (जैसे ग्रह) से संबंधित है।
18'13

@sarahm मुझे पता है, वहाँ है जहाँ मैंने शुरू किया था, मैंने उन सभी को लाल कर दिया ... मुझे बस कुछ एलओडी विधियों के बीच तुलना की आवश्यकता है, जिसमें से एक को लागू करना है, मैं वास्तव में उन सभी को कर सकता हूं लेकिन मेरे पास समय नहीं है ... वैसे भी , मैं tessellation shaders का उपयोग करने की विधि के साथ जा रहा हूँ, यह कुछ नया है और गोलाकार सतहों पर कोई कार्यान्वयन नहीं किया गया है :)
nosmirck

3
मुझे पता है कि आपने पहले से ही बहुत शोध किया है, और मुझे यकीन नहीं है कि यह आपके डेस्कटॉप पर आया है, लेकिन "वर्चुअल ग्लोब के लिए 3 डी इंजन डिज़ाइन: पैट्रिक कोज़ी और केविन रिंग" पर एक नज़र है - मुझे बहुत कुछ मिला वहाँ में अच्छी व्यावहारिक जानकारी की। यह अच्छी तरह से शोध किया गया था और, जैसा कि कहा गया है, एक बहुत ही व्यावहारिक दृष्टिकोण से लिया गया है। किसी तरह एच.टी.एच.
'19

जवाबों:


17

अंत में, बहुत शोध के बाद मैं यह निष्कर्ष निकाल सकता हूं, जैसा कि पहले किसी ने कहा था, सार्वभौमिक रूप से "सर्वश्रेष्ठ" विधि नहीं है। लेकिन मेरे शोध से मुझे निम्नलिखित बातों का ज्ञान हुआ:

मेष के आधार पर आप अंततः उपयोग करेंगे:

  • गोलाकार घन: चतुर्थांश कार्यान्वयन के साथ कोई भी LOD विधि ठीक काम करेगी, आपको बस चेहरों के बीच की सीमाओं जैसे विशेष मामलों पर ध्यान देना होगा, आपके मामले में प्रत्येक स्तर में पड़ोसी चेहरे पर आपके चतुर्थक के पास एक पॉइंटर होना चाहिए।
  • कोई अन्य: मुझे लगता है कि ROAM (नए संस्करण 2.0 या BDAM, CABTT या RUSTIC के रूप में कोई अन्य एक्सटेंशन) अच्छा करेगा, हालांकि, इन एल्गोरिदम के साथ काम करना कठिन है, अधिक मेमोरी की आवश्यकता होती है और क्यूब्स के साथ अन्य aproaches की तुलना में थोड़ा धीमा होता है।

एलओडी के कई तरीके हैं जो अच्छी तरह से फिट हो सकते हैं, लेकिन मेरे व्यक्तिगत शीर्ष 5 हैं:

  1. निरंतर दूरी पर निर्भर LOD (CDLOD)
  2. GPU आधारित जियोमिली क्लिपमैप (GPUGCM)
  3. चोदे हुए LOD
  4. ओपन जीपीयू टेसेलेशन (पुस्तक: ओपनजीएल इनसाइट, अध्याय 10) के साथ टेररिंस का प्रतिपादन
  5. ज्यामितीय 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 के बारे में अधिक जानकारी के लिए इस लिंक को देखें

क्यूब को गोलाकार बनाने के बारे में पूरी तरह से जानकारी के लिए इस लिंक को देखें

घबराना और जेड-बफ़र के उदाहरणों को हल करने के बारे में बेहतर व्याख्या के लिए, इस पुस्तक की जाँच करें

मुझे आशा है कि आपको यह छोटी समीक्षा उपयोगी लगी होगी।


1
मुझे आपकी शोध यात्रा के बारे में अधिक जानना अच्छा लगेगा। वैसे भी क्या मैं आपके अपडेट का पालन कर सकता हूं? ब्लॉग या कुछ और?
सियाफुल निज़ाम याहया

@publicENEMY अभी, मैं अभी भी इंजन विकसित कर रहा हूं, मैंने रोक दिया क्योंकि मुझे एक साल की नौकरी मिली थी और मेरा शोध एक या दो महीने में था, मैं शोध को फिर से लिखूंगा और इंजन को समाप्त करूंगा। जब मैं वहां पहुंचूंगा, तो मैं आपको यहां बता दूंगा जब मैं यात्रा के सभी अपडेट पोस्ट करूंगा। रुचि के लिए धन्यवाद।
14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.