मैं एकता में विशाल भूभाग कैसे बना सकता हूं?


19

मैं यूनिटी में बहुत विशाल भूभाग कैसे बना सकता हूं ? ऐसा लगता है कि मैं बड़े मूल्यों के लिए चौड़ाई और लंबाई सेट कर सकता हूं। लेकिन हाइटमैप रिज़ॉल्यूशन केवल 4097 तक जाता है और डिटेल रिज़ॉल्यूशन केवल 4048 तक जाता है।

कोई विचार?


जवाबों:


21

इलाके को "चौकों" में विभाजित करें, जिन्हें आप परवाह करते हैं उन्हें लोड करें (ज्यादातर: जो वर्तमान में सक्रिय कैमरा के पास हैं) अपडेट में) () और - यदि आप अंतरिक्ष के लिए स्ट्रैप्ड हैं (आप की संभावना होगी), तो दूर की जरूरत वाले लोगों को लोड न करें ।

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

अंत में: फ्लोटिंग पॉइंट सटीक समस्याओं से बचने के लिए, आपको हर बार अपने मुख्य कैमरे को दूर (0.0f, 0.0f, 0.0f) से दूर ले जाने के लिए पूरे दृश्य को बदलना होगा।

एकता के उत्तर पर संभवतः प्रासंगिक सवाल http://answers.unity3d.com/questions/17225/dynamic-terrain-loading.html


धन्यवाद! बहुत बढ़िया जवाब। बस एक सवाल, जब मैंने इलाकों के पड़ोसियों को सेट किया, तो क्या होगा अगर इलाके किनारों पर समान ऊंचाई पर नहीं हैं?
डैनियल पेन्डगैस्ट

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

1
या जैसा कि मैंने कहा, आप इलाके को सीवन करने के लिए एक स्क्रिप्ट का उपयोग करना चाहेंगे :-)
22

क्या किसी के पास कोई स्क्रिप्ट है?
डैनियल पेन्डगैस्ट

@ दान: उत्तर में एकता उत्तर लिंक पर कुछ स्क्रिप्ट हैं। इसके अलावा, मैं आपको इस समय एकता के लिए कोड के साथ मदद नहीं कर सकता, मेरे सभी (शौक-स्तर) गेम प्रोग्रामिंग को ओगरे 3 डी के साथ रेंडरिंग इंजन के रूप में किया जाता है।
मार्टिन सोजका

3

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

आप यह भी जानना चाह सकते हैं कि चूंकि यूनिटी 3 डी ~ 3.0 से आप बहुत दूर (जैसे +/- 100000 कदम IIRC) आइटम नहीं ले सकते हैं (इसलिए +R- 100000 कदम IIRC) ताकि यह आपकी दुनिया के अधिकतम आकार को प्रभावित करेगा।

मैं वैसे भी अपने ऑनलाइन आरपीजी गेम में इसका उपयोग कर रहा हूं (इस अपवाद के साथ कि मैं केवल स्तर डिजाइन के लिए यूनिटी 3 डी का उपयोग करता हूं, वास्तविक गेम के लिए नहीं)।

सिर्फ इसलिए कि मैं उत्सुक हूं, क्या आप अपने खेल के बारे में कुछ जानकारी साझा करना चाहेंगे (जैसे उन्नति, प्रकार, ग्राफिक्स, शैली आदि)?


2

हमने पूरे पृथ्वी के लिए SRTM डेटा TerrainDataको विभिन्न स्तरों के विवरणों [1] के साथ ऑब्जेक्ट्स के लिए ऊंचाई-मानचित्रों में संसाधित करके यूनिटी 5 में विशाल इलाकों को लागू किया । कुछ बातों पर विचार करना होगा:

  1. ऊँचाई के नक्शे के बहुत किनारों को कम से कम एक नमूना द्वारा ओवरलैप करने की आवश्यकता होती है और आपको अपने इलाकों को उसी के अनुसार रखने की आवश्यकता होती है। Terrain.SetNeighborsएकता से किए गए विस्तार के विभिन्न स्तरों के लिए केवल जाल को नहीं जोड़ेंगे।

  2. आपको, आवश्यक रूप से, प्रति TerrainDataऑब्जेक्ट 2 ^ n + 1 ऊंचाई के नमूने की आवश्यकता है, अन्यथा एकता सिर्फ 0 से ऊँचाई के कुछ हिस्सों को असाइन करेगी।

  3. यदि आपके पास 2GB से कम है TerrainData, तो आप संसाधन फ़ोल्डर में उन्हें आस्तियों के रूप में और Resource.Loadउन्हें रनटाइम पर निकाल सकते हैं । यदि आपके पास 2GB से अधिक है, तो यह दृष्टिकोण अब काम नहीं करेगा क्योंकि एकता के साथ संसाधनों का 2GB अधिक नहीं हो सकता है। इस मामले में आपको AssetBundles बनाने की आवश्यकता होगी और WWWऑब्जेक्ट के साथ एसिंक्रोनस रूप से लोड करना होगा । इसके पास Shader.Parseलगभग 500ms के ओवरहेड के साथ प्रत्येक के लिए कॉल करने का दुष्प्रभाव नहीं है । मैंने मंचों पर इसकी रिपोर्ट की [2] और अभी भी उत्तर की प्रतीक्षा कर रहा हूं। मैं अंततः बग रिपोर्ट प्रस्तुत करूंगा।

  4. उपयोग करने के बारे में मत सोचो AssetDatabase.LoadAssetAtPath, यह केवल संपादक में उपलब्ध है और यूनिटी बिल्ड में नहीं है।

[१] https://www.youtube.com/watch?v=2UsyVuWoFbQ
[2] http://forum.unity3d.com/threads/shader-parse-delays-loading-of-assetbundle-contain-no-shader .३,५८,२३५ /


0

तीसरे पक्ष के समाधान हैं।

यह कोड 99,999 मीटर की चौड़ाई के इलाके बना सकता है, पहाड़ किसी भी शोर के फार्मूले हैं, लेकिन आप चाहें तो 100 शोर के फार्मूले को एक नक्शे में मिला सकते हैं। उदाहरण के लिए, इस भूभाग में, नक्शे में उपलब्ध त्रिकोणों की कुल संख्या 66million, कम रिज़ॉल्यूशन और 200million मध्यम रिज़ॉल्यूशन के बीच है। यहाँ एक 66million त्रिभुज मानचित्र है, जहाँ 0.7mn त्रिभुज को कैमरे के चारों ओर अद्यतन किया जाता है। यूनिटीप्लेयर विशाल भूभाग, WASD और स्पेस


क्या उसके लिए सोर्स कोड है? सभी मैं देख रहा हूँ एक एकता प्लगइन खेल है।
अटैकिंगहोबो

मेरे पास स्रोत कोड है, मुझे लिखने में थोड़ा समय लगा। मैं y0oo कॉम पर ant d0t स्टीवर्ट में हूँ
com.prehensible

0

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


ध्यान दें कि यह सलाह 6 साल पहले से मार्टिन सोज्का के स्वीकृत जवाब में पहले से मौजूद है। यदि आप एक प्रासंगिक लिंक साझा करना चाहते हैं, तो उस उत्तर पर एक टिप्पणी अधिक उपयुक्त हो सकती है।
DMGregory

भविष्य में मैं करूंगा। धन्यवाद। मैं स्टैक एक्सचेंज पर पोस्ट करने के लिए अभी भी नया हूं :)
हडसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.