2013-05-11 8 views
7

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

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

मैं geomipmapping, ज्यामिति clipmaps (GPU) के बारे में जानते हैं और उलरिच द्वारा LOD chunked है कि बड़े क्षेत्रों पर अच्छा काम करते हैं और एक घन के 6 चेहरे प्रस्तुत करना और फिर this method द्वारा "spherify" घन के लिए इस्तेमाल किया जा सकता है और मैं समझता हूँ कि कैसे करने के लिए सी ++/ओपनजीएल/जीएलएसएल का उपयोग करके जीपीयू पर इन सभी विधियों को लागू करें (रोम या किसी अन्य विधि का उपयोग करके जो घन का उपयोग नहीं करता है, टेक्स्टिंग के कारण मेरी पहुंच से बाहर है)।

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

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

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

पीडी: मेरी अंग्रेजी के लिए खेद है।

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

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

+0

फ्लोट काफी सटीक हैं। आपको किस परिशुद्धता की आवश्यकता है? –

+0

अच्छी तरह से, मुझे यहां एक स्पष्टीकरण मिला है http://www.opentk.com/node/491 तो मुझे लगता है कि भाग हल हो गया है: डी – nosmirck

उत्तर

19

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

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

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

कई LOD तरीकों कि अच्छी तरह से फिट कर सकते हैं कर रहे हैं, लेकिन मेरी निजी शीर्ष 5 हैं:

  1. Continous Distance-Dependent LOD (CDLOD)
  2. GPU Based Geomety Clipmaps (GPUGCM)
  3. Chunked LOD
  4. ओपन GPU पच्चीकारी (पुस्तक के साथ प्रतिपादन इलाकों: ओपनजीएल अंतर्दृष्टि, अध्याय 10)
  5. Geometrical MipMapping

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

मूल ज्यामितीय क्लिपमैप्स विधि के लिए गोलाकार विस्तार भी मौजूद है लेकिन इसमें कुछ समस्याएं हैं क्योंकि ऊंचाई के प्लानर नमूने गोलाकार निर्देशांक का उपयोग करके पैरामीट्रिज किया जाना चाहिए।

दूसरी तरफ चंक्ड एलओडी विरासत हार्डवेयर के लिए बिल्कुल सही है, काम करने के लिए किसी भी जीपीयू पक्ष की गणना की आवश्यकता नहीं है, यह बड़े डेटासेट के लिए बिल्कुल सही है लेकिन वास्तविक समय में प्रक्रियात्मक डेटा को संभाल नहीं सकता है (शायद कुछ संशोधनों के साथ, यह हो सकता है)

टेस्सेलेशन शेडर्स का उपयोग करना एक और तकनीक है, बहुत नया, ओपनजीएल 4.x बाहर आया, मेरी राय में यह सबसे अच्छा हो सकता है, लेकिन, हम प्लैनेट रेंडरिंग के बारे में बात कर रहे हैं, हमें एक समस्या का सामना करना पड़ता है बहुत आसान संभाल सकता है और यह परिशुद्धता के बारे में है।

जब तक आप केवल अपनी सटीकता को वर्टिसीज के बीच 1 किमी नहीं चाहते हैं, तो टेस्सेलेशन शेडर्स के लिए जाएं। इस विधि के साथ वास्तव में बड़े इलाकों में समस्या यह है कि जिटर हल करने के लिए कठिन है (या कम से कम मेरे लिए, क्योंकि मैं टेस्सेलेशन शेडर्स के लिए नया हूं)।

जियोमिपैपिंग एक महान तकनीक है, क्वाड्री का लाभ लेती है और इसकी अनुमानित पिक्सेल त्रुटि होती है, लेकिन, ग्रहों के प्रतिपादन के लिए आपको कम से कम 16+ विवरणों को सेट करने की आवश्यकता होगी, जिसका मतलब है कि आपको आवश्यकता होगी (डालने के लिए) विभिन्न स्तरों को जोड़ने और अपने पड़ोसी के स्तर की देखभाल करने के लिए कुछ अतिरिक्त पैच, यह हल करने के लिए कठिन हो सकता है, विशेष रूप से 6 इलाके के चेहरों का उपयोग करना।

एक और तरीका है, जो अपने आप में बहुत खास है: "Projective Grid Mapping for Planetary Terrain" विज़ुअलाइजेशन के लिए उत्कृष्ट है, लेकिन इसके नुकसान हैं, यदि आप और जानना चाहते हैं, तो लिंक पर जाएं।

समस्याएं:

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

    इसका सबसे अच्छा समाधान "जीपीयूजीपीयू" विधि का उपयोग करते हुए आंखों से संबंधित रिश्तेदार का उपयोग करना है। इस विधि को "3 डी इंजन वर्चुअल ग्लोब के लिए डिज़ाइन" में वर्णित किया गया है (मुझे यकीन है कि आप इसे इंटरनेट पर भी ढूंढ सकते हैं) जहां मूल रूप से आपको CPU पर अपने युगल सेट करना होगा (पैच, क्लिपमैप्स , ऑब्जेक्ट्स, फ्रस्ट्रम, कैमरा, इत्यादि) और फिर एमवी दर्शक के चारों ओर (0, 0, 0) टी सेट करके दर्शक के चारों ओर केंद्रित है और युगल को फिक्स्ड-पॉइंट अंश (मंटिसा) का उपयोग करके प्रतिनिधित्व बिंदु में एन्कोड किया गया है। दो फ्लोट्स के बिट्स, कम और कुछ विधि से उच्च (ओहलरिक के कार्यान्वयन और डीएसएफयूएन 9 0 फोरट्रान लाइब्रेरी का उपयोग करने के बारे में पढ़ें)।

    हालांकि कशेरुक शेडर को केवल एक अतिरिक्त दो घटाव और एक अतिरिक्त की आवश्यकता होती है, जीपीयू आरटीई पदों के लिए आवश्यक 0xबफर मेमोरी की मात्रा को दोगुना करता है। यह आवश्यक नहीं है जब तक कि स्थिति केवल संग्रहीत न हो, स्मृति आवश्यकताओं को दोहराएं।

  • गहराई बफर प्रेसिजन: जेड-फाइटिंग। चूंकि हम बहुत बड़े इलाकों को प्रस्तुत कर रहे हैं, इस मामले में: ग्रह, जेड-बफर को बड़ा होना चाहिए, लेकिन इससे कोई फर्क नहीं पड़ता कि आपने जेनियर और ज़फर के लिए निर्धारित मूल्यों को कोई फर्क नहीं पड़ता है, हमेशा समस्याएं होती रहेंगी।

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

    इस समस्या को हल करने के लिए सबसे अच्छा तरीका है zscreen के लिए एक लघुगणक वितरण का उपयोग करके एक "लघुगणक गहराई बफर" http://outerra.blogspot.com/2012/11/maximizing-depth-buffer-range-and.html

    एक लघुगणक गहराई बफर दूर की वस्तुओं की गहराई बफर परिशुद्धता को बेहतर बनाता है उपयोग करने के लिए है। यह दूर वस्तुओं के लिए परिशुद्धता के लिए करीबी वस्तुओं के लिए परिशुद्धता व्यापार करता है। चूंकि हम एक एलओडी विधि के साथ प्रतिपादन कर रहे हैं, इसलिए दूर वस्तुओं को कम परिशुद्धता की आवश्यकता होती है क्योंकि उनके पास कम त्रिकोण होते हैं।

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

निष्कर्ष में, बस उपलब्ध सभी विकल्पों की जांच करें और एक के लिए जाएं जो आप अधिक confortable महसूस करते हैं, मेरी राय में सीडीएलडीडी एक महान काम करता है। जिटर और जेड-बफर समस्याओं को हल करने के लिए मत भूलना, और सबसे महत्वपूर्ण: इसे मज़ेदार बनाना!

एलओडी चेक this link के बारे में अधिक जानकारी के लिए।

घन चेक this link को गोलाकार करने के बारे में एक पूर्ण demostration के लिए।

जिटरिंग और जेड-बफर सटीक को हल करने के बारे में बेहतर स्पष्टीकरण के लिए, this book देखें।

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

+0

क्या आपके पास कोई ब्लॉग या विकास पत्रिका है या ऐसा कुछ है? मैं आपकी परियोजना के बारे में और जानना चाहता हूं। –

संबंधित मुद्दे