एक 3D दुनिया के लिए एक नेविगेशन ग्रिड कैसे होगा?


11

मैं इस समस्या का हल खोजने का प्रयास कर रहा हूं। मैं x के लिए लॉक किए गए कोने के ग्रिड के प्रारूप में एक नेविगेशन जाल बनाने की कोशिश कर रहा हूं, 3 डी अंतरिक्ष के लिए वर्गों के आकार में वाई फ्लोर्ड निर्देशांक। लेकिन मुझे इसके बारे में जाने का एक तरीका जानने में दिक्कत हो रही है।

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

मेरा अगला विचार यह करना था कि अवास्तविक इंजन 3 क्या करता था।

https://udn.epicgames.com/Three/NavigationMeshReference.html

जो मेष उत्पन्न करने के लिए किरणों का उपयोग करना था। मैं समझ नहीं पा रहा था कि किरणों को कैसे रोका जाए।

तो ... मेरा अगला विकल्प बॉक्स था, संभवतः एक बॉक्स कास्ट। एक आकार के साथ एक उप-विभाजित वॉल्यूम बनाएं जो एक शक्ति है 2. बॉक्स को ग्रिड में संरेखित करें, और आयताकार प्रिज्म को एक किरण के रूप में नीचे की ओर शूट करें। यदि यह ज्यामिति के एक टुकड़े पर भूमि है जो जमीन का हिस्सा है और आयत को काट नहीं किया जा रहा है, तो वहां एक वर्ग छोड़ दें। और तब तक जारी रखें जब तक कि वॉल्यूम की सीमा समाप्त न हो जाए। यह जांचने के लिए कि क्या किनारों को जोड़ने की आवश्यकता है, मुझे लगता है कि मैं यह देखने के लिए जांच कर सकता हूं कि क्या दो जोड़े के बीच ढलान चलने योग्य ढलान के भीतर है, उन्हें मर्ज करें यदि यह सत्य है।

मेरी मुख्य समस्याएं हैं ... यह बहुत इष्टतम नहीं लगता है। इसके बारे में सोचे बिना, अनुमान के अनुसार प्रक्रिया एक बहुस्तरीय स्तर के लिए O (N ^ 3) है। जो बहुत बुरा पा सकते हैं।

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

तो सवाल हैं ...

इस कमरबंद नवमेश को उत्पन्न करने का एक कुशल तरीका क्या होगा? और टाइल बनाने का एक अच्छा तरीका क्या होगा?


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

@ नील्स I की योजना प्री-बिल्डिंग पर है, फिर इसे गेम में लोड करना है।
चांदनी Theleocat

तब समय की खपत बहुत अधिक नहीं होनी चाहिए, क्योंकि खिलाड़ी इस पर इंतजार नहीं कर सकता है। कुछ काम करने के बाद आप हमेशा ऑप्टिमाइज़ कर सकते हैं।
नील्स

आपका स्तर कितना बड़ा है? हमने बड़े गेमों में रिकैस्ट का उपयोग किया है और इसमें कोई समस्या नहीं थी - आपको बस टाई के मूल्यों को ट्यून करने की आवश्यकता है, आदि
स्टीवन

मुझे लगता है कि आप "ग्रिड" को याद कर रहे हैं। जो टाइल्स का उपयोग करता है के रूप में ही काफी नहीं है। मैं यह पता लगाने की कोशिश कर रहा हूं कि इस तरह के काम को करने के लिए पुनर्खरीद कैसे की जाए। लेकिन यह ज्यादातर एक बुरा सपना है।
चंद्रोदय

जवाबों:


1

एक बुनियादी 3 डी दुनिया को एक नेविगेशनल जाल द्वारा दर्शाया जा सकता है जिसे आसानी से अधिकांश गेम इंजनों में बनाया जा सकता है। अभिनेता बहुभुज के किनारों के साथ यात्रा कर सकता है।

यह एक सरल उपाय होगा। पथ-खोज और एक नवमेश उत्पन्न करने के लिए कई एल्गोरिदम हैं।

मैं कुछ समय पहले पढ़ी गई बातों को साझा करना चाहूंगा।

Example01

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

Example02

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

इस प्रश्न के लिए, मैं आपको क्रॉमस्टर के नवमेश जनरेटिंग एल्गोरिदम की एक सूची पर उत्तर देखने की सलाह दूंगा।

इसके अलावा एआई सिस्टम ऑफ़ लेफ्ट 4 डेड को देखें जिसमें से उदाहरण एक हिस्सा हैं। कई और दिलचस्प विषयों को शामिल किया गया

शुभ लाभ।


0

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


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

0

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

एक डेटा संरचना (उर्फ: मॉडल) बनाएँ जो आपके गेमिंग दुनिया का प्रतिनिधित्व करेगा। फिर डेटा संरचना मॉडल के एक "दृश्य" का निर्माण करें। यदि आप दुनिया को एक चेकर-बोर्ड ग्रिड से हेक्सागोनल ग्रिड में बदलना चाहते हैं, तो डेटा संरचना (मॉडल) समान रहता है, लेकिन प्रदर्शन "पेंट" (रेंडर) एक अलग दृश्य होगा।


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

-2

एक डबल सरणी बनाओ। और फिर यदि कोई ऑब्जेक्ट / ऑब्जेक्ट्स इनेबल होते हैं, तो एरी को यह बताने के लिए एक मेथोड होता है कि पोजिशन नोट करने योग्य है। जब कोई एआई स्थानांतरित करने की कोशिश करता है तो वे दोहरे सरणी को देखेंगे और देखें कि क्या यह निष्क्रिय है।


4
इस एरे को पॉप्युलेट करने का तरीका सबसे कठिन हिस्सा है। ;)
DMGregory
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.