अनंत ब्रह्मांड को कैसे प्रस्तुत किया जाए?


15

मैं उत्सुक हूं कि 3 डी ब्रह्मांड को प्रस्तुत करने के लिए खेल विकास उद्योग में सबसे अच्छे अभ्यास क्या हैं?

अधिक विशिष्ट होना:

  • डेटा बिंदु दिए गए हैं और स्थिर हैं। प्रत्येक बिंदु की स्थिति, रंग और आकार है;
  • संपूर्ण डेटा सेट उपलब्ध मेमोरी से बहुत बड़ा है;
  • उपयोगकर्ता को एक बार में बड़ी तस्वीर देखने के लिए "ज़ूम आउट" करने में सक्षम होना चाहिए;

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

मैं प्रौद्योगिकी अज्ञेय समाधान की तलाश में हूं।


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

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

1
ज़ूम-आउट / ज़ूम-इन infinite universeविभिन्न स्तरों पर ज़ूम करने के बाद कुछ मंडेलब्रोट वक्र पर दो बिंदुओं के बीच संबंधों को ट्रैक करने के समान हो सकता है। कुछ स्तर पर, आप सटीकता खो सकते हैं और उन्हें अलग करने में असमर्थ हैं या फिर उन्हें फिर से पता लगा सकते हैं।
user2338816

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

@ इल्मारिकारोन हाँ, आप सही हैं। मेरे पास अधिकतम दृश्य दूरी है, और मुझे लगा कि मैं मिंग-तांग के उत्तर
अनवाका

जवाबों:


8

यह सेलेस्टिया के सोर्स कोड के माध्यम से मेरी अटकलों और स्किमिंग पर आधारित है।

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

रेंडरर ऑक्ट्री को ट्रैवर्स करके पर्यावरण को प्रस्तुत करेगा, और दूर की वस्तुओं को गहराई से नहीं पार करेगा।

सेलेस्टिया एक अष्टक की पूर्ण परिमाण पर भी नज़र रखता है, जहाँ एक सप्तक का पूर्ण परिमाण अष्टक के अंदर सितारों की पूर्ण परिमाण पर आधारित है। यदि अष्टक एक साथ समीप है, तो सेलेस्टिया व्यक्तिगत रूप से तारों का प्रतिपादन करता है, और यदि अष्टक दूर है, तो सेलेस्टिया ओक्टेंट को अष्टक के परिमाण के एक तारे के रूप में प्रस्तुत करता है।

साथ ही, वस्तुओं से जुड़ी सार्थक पदानुक्रम हो सकती है। उदाहरण के लिए, यदि आप किसी तारे के करीब (त्रिज्या में घोषित डेटाबेस) हैं, तो उसके ग्रहों का प्रतिपादन किया जाता है। यदि कोई ग्रह काफी करीब है (स्क्रीन पर पिक्सल का एक कटऑफ), तो उसका 3 डी मॉडल तैयार किया गया है।

अन्य अंतरिक्ष खेल जिन्हें मैं नाम दे सकता हूं वे हैं ऑर्बिटर और केर्बल स्पेस प्रोग्राम, जो बंद-स्रोत हैं। मैंने फ्रंटियर गैलेक्सी में भी देखा, जिसने प्रक्रियात्मक रूप से स्टार मैप तैयार किया है। एक वेबसाइट विश्लेषण कर रही है कि गेम किस तरह से अपने disassembly द्वारा काम करता है: http://www.jongware.com/galaxy1.html


12

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

  • विस्तार का स्तर - स्वचालित रूप से (या "मैन्युअल रूप से") विस्तृत या सरलीकृत मॉडल चुनना, या यहां तक ​​कि स्प्राइट या सिर्फ डॉट्स, या वस्तुओं के लिए, क्योंकि वे आगे दूर हैं।
  • कलिंग - केवल ड्रॉ का चयन करना जो आवश्यक है। यह हो सकता है कि दृश्य के क्षेत्र में (फ्रिज़म कलिंग), अन्य चीज़ों के पीछे क्या छिपा हुआ है (रोकना culling), या अन्य तदर्थ तरीके। (@Alan Wolfe के उत्तर में आपके डेटा को व्यवस्थित करने के कुछ तरीकों का वर्णन किया गया है जो कि कुल्लिंग को सुविधाजनक बनाने में मदद करते हैं।)
  • स्ट्रीमिंग - मेमोरी में स्टोरेज से विश्व-डेटा को आवश्यकतानुसार खींचना, अगर यह एक बार में सभी मेमोरी में फिट नहीं होता है
  • स्काई बॉक्स - बहुत दूर की वस्तुओं को कैमरे से "अनंत दूरी" पर एक गोले पर रखा जा सकता है।

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


2

जो कुछ भी या तो पदानुक्रमित और / या विरल है, आपको यहाँ मदद करनी चाहिए।

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

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

अन्य आम पदानुक्रमित दृष्टिकोणों में बीएसपी पेड़ शामिल हैं (वे अंतरिक्ष को 2 आधे स्थानों में पुनरावर्ती रूप से विभाजित करते हैं) और साथ ही केडी के पेड़ भी मिलते हैं।

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

कुछ समाधान (जैसे bsp) बहुत कुशल हो सकते हैं, लेकिन निर्माण के लिए एक लंबा समय लगता है इसलिए आमतौर पर वस्तुओं को हिलाने / बदलने के लिए अच्छा विकल्प नहीं होता है।

आशा है कि मदद करता है, मुझे पता है अगर आप विवरण के बारे में कोई प्रश्न हैं!

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