स्वर जाल घन परिदृश्य के लिए एक जाल का अनुकूलन


12

यूनिटी 3 डी में minecraftish / लेगो वर्ल्ड लैंडस्केप बनाने के साथ खेलता हुआ (क्यूब्स के साथ प्रक्रियात्मक रूप से उत्पन्न voxel परिदृश्य), मुझे पता चल रहा है कि इन परिदृश्यों के लिए बनाई गई जाल स्मृति का एक बहुत लेती हैं। वर्तमान में मेष में केवल घन के दृश्य पक्षों के लिए कोने होते हैं। एक जटिल भू-भाग के लिए मेमोरी उपयोग में 6 या 7 सौ मेग लग सकते हैं।

इन जालों को अनुकूलित किया जा सकता है, लेकिन मैं ऐसा करने के लिए एक सभ्य एल्गोरिदम खोजने के लिए संघर्ष कर रहा हूं।

एल्गोरिथ्म को ध्यान में रखना है कि आप उन ब्लॉकों को "मर्ज" नहीं करना चाहते हैं जो विभिन्न प्रकार के हैं। मुझे लगता है कि वास्तव में एक साधारण शुरुआत एक अक्ष के साथ सभी ब्लॉकों को संसाधित करने और अन्य दो अक्षों के लिए अतिरिक्त स्वीप करने की हो सकती है।

मुझे जाली के आकार को बनाए रखने की आवश्यकता है, जो कि लंबवत या ठोस स्थान को इस बिंदु पर विलय नहीं करता है। कारण है, वहाँ जीव / आदि हो सकते हैं जिन्हें अभी भी जाल के चारों ओर नेविगेट करने की आवश्यकता है। इसलिए मैं सिर्फ एक बहुत कम विस्तार, विकृत जाल नहीं बना सकता।

इस पर कोई विचार / सुझाव / सुझाव?


2
आप एक ज्ञात आकार क्यूब के लिए कोने क्यों रख रहे हैं? इसे एल्गोरिदम से करें; या एक साझा शीर्ष बफ़र का उपयोग करें।
Deceleratedcaviar

बहुभुज क्यों? Voxel को बहुत कुशलता से प्रस्तुत किया जा सकता है जैसे वे हैं । एक स्वर घन के लिए आपको 1 बॉक्स के लिए 3 फ़्लोट्स (x, y, z) की आवश्यकता होती है, आपको लगभग 8 * 3 फ़्लोट्स (8 कोने) की आवश्यकता होती है, और यदि आपके पास किनारों और बहुभुज हैं। शायद एकता इस स्वर समस्या का उपकरण नहीं है।
user712092

जवाबों:


5

मेरा सवाल यह है कि:

प्राणी आंदोलन करने के लिए आपको जाली की आवश्यकता क्यों होगी?

क्या आप आईडी की 3 डी मैट्रिक्स पर पथरी गणना नहीं कर सकते?

मुझे लगता है कि Minecraft 4 बिट्स पीआर ब्लॉक के साथ 3 डी मैट्रिक्स का उपयोग करता है। यह भी केवल खिलाड़ी के आसपास एक निश्चित दायरे में जीवों की नकल करता है।

आप अपनी चूजों को एक समुद्र-वृक्ष संरचना में संग्रहीत कर सकते हैं, जहां प्रत्येक चंक को संकुचित किया जाता है।

यदि आप रैम में कंप्रेस्ड डेटा रखते हैं तो आप जरूरत पड़ने पर डेटा को काफी तेजी से कम कर सकते हैं।

वैकल्पिक शब्द


मैं एकता के साथ टकराव का पता लगाने में निर्मित जाली के लिए भरोसा कर रहा था, लेकिन कस्टम डेटा संरचना के खिलाफ टक्कर / पथ परीक्षण से मुझे रोकने के लिए कुछ भी नहीं है। हालांकि, मुझे अभी भी इलाके को प्रदर्शित करने के लिए एक दृश्य जाल बनाने की आवश्यकता है, और यही मुझे अनुकूलन करने की आवश्यकता है।
जेम्स लिविंगस्टन

एक अन्य बिंदु ... जैसा कि आप स्क्रीनशॉट द्वारा देख सकते हैं ... इस इलाके का एक बहुत कुछ नहीं है जो सपाट है। मेष आम तौर पर क्यूब्स की खुरदरी सतह होते हैं, लेकिन मुझे लगता है कि जाल के चेहरे / कोने को अनुकूलित करने के लिए कुछ जगह है। ऐसा लगता है कि एक ओकट्री डेटा के लिए सबसे अच्छा होगा जिसमें "जैगी" डेटा के बजाय डेटा के बहुत से अपरिचित ब्लॉक हैं। या यह सही नहीं है?
जेम्स लिविंगस्टन

@Gatorfrog: याद रखें, खाली जगह एक डेटा भी है। अगर यह जगमगाता है, तो यकीन है, इसके खाली होने के संकेत बहुत सारे बिट्स होंगे। ऑक्ट्री बस आपके लिए यह पता लगाने के लिए है कि आपको उन्हें रेंडर करने से पहले कौन सा हिस्सा डिकम्प्रेस करना चाहिए। खाली जगह सिर्फ जीरो का गुच्छा होगी। मेरे डेजॉब में एक बहुत ही परिष्कृत वॉक्सल रेंडरिंग लाइब्रेरी के साथ काम करना शामिल है। मेरी अगली पोस्ट बताएगी कि वे क्या करते हैं।
नेलर

मैं जिस लाइब्रेरी के साथ काम करता है वह निम्नलिखित है: डेटा का हिस्सा बनाता है और उन्हें एक फ्लैट फ़ाइल डेटाबेस में संग्रहीत करता है। प्रत्येक चंक में एक आईडी है। प्रत्येक घन में कई विखंडू होते हैं। प्रत्येक कबाड़ के लिए विस्तार की एक निश्चित संख्या के स्तर बनाए जाते हैं। जहां विस्तार के उच्चतम स्तर में 100% स्वर होते हैं, दूसरे उच्चतम में सभी स्वरों का 25% होता है और फिर प्रत्येक बाद के स्तर के लिए 4 को विभाजित करते हैं। आप के पास मौजूद विखंडू को उच्चतम स्तर के विवरण का उपयोग करके देखा जा सकता है।
नैलर

सभी डेटा को रैम से वीआरएएम तक एक संकुचित रूप में भेज दिया जाता है जहां इसे CPGA में चल रहे GPGPU संपीड़न एल्गोरिदम द्वारा फुलाया जाता है। यह बहुत सारे मेमोरी बैंडविथ को बचाता है। तो: चीक जहां खिलाड़ी है और वहां विस्तार के उच्च स्तर प्राप्त करते हैं, दूर की चीजों को आसानी से कम एलओडी में से एक का उपयोग करके कल्पना की जा सकती है।
नैलर

1

इलाके को संग्रहीत करने के लिए एक ऑक्ट्री का उपयोग कैसे करें?

उदा वायु = कोई नोड नहीं, अन्य सभी प्रकार के इलाकों में इलाके प्रकार के साथ एक नोड होगा।

नोड्स को सम्मिलित / निकालते समय, आप जांच सकते हैं कि संशोधित ट्री पथ पर प्रत्येक नोड के सभी आठ बच्चों के पास एक ही प्रकार के टाइन हैं और यदि आवश्यक हो तो उन्हें मर्ज करें। इस तरह, एक ही सामग्री के बड़े ब्लॉक केवल एक नोड लेते हैं।


0

क्या आप केवल उस ज्यामिति के हिस्सों के लिए क्यूब्स बना रहे हैं जिसे खिलाड़ी देख सकता है? वह मेरा पहला कदम होगा। आपके इलाके के आकार के आधार पर आपके पास भारित / आहरित / दृश्य / जो कुछ भी है, उसकी संपूर्णता नहीं है।


मैं केवल उन क्यूब्स के किनारों के लिए जाल बना रहा हूं जिनके बगल में खाली हवा है। जहाँ तक खिलाड़ी को नहीं देख सकने वाले मेश का चित्रण नहीं है ... मैंने किसी भी ऐसे खंड को बाहर करने के बारे में सोचा था जिसमें कोई दृश्य ब्लॉक नहीं था, जैसे कि भूमिगत गुफाएं या छेद जो कि एक कोण पर जमीन में चले गए। मैं निश्चित रूप से उस बिंदु पर टकराने / रास्ते के लिए अपने जाल पर भरोसा करने में सक्षम नहीं होगा, हालांकि।
जेम्स लिविंगस्टन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.