वॉक्सल टेरेन इंजन कैसे बनाए जाते हैं?


53

कुछ दिनों पहले मुझे वोक्सल टेरेंस नामक कुछ मिला और मुझे लगता है कि वे बहुत अच्छे हैं। लेकिन मैं उन्हें पैदा करने के बारे में कुछ नहीं जानता। क्या आप इसे अपने मॉडलिंग सॉफ़्टवेयर में मॉडल करते हैं या एक ऊँचाई की तरह कुछ का उपयोग करते हैं? मैंने विकिपीडिया पर पढ़ा कि स्वर 3 डी पिक्सल या वॉल्यूमेट्रिक पिक्सल जैसे हैं।

मैं वोक्सेल इलाक़े बनाने के बाद, मैं इन वोकल्स को कैसे ले जा सकता हूं और उन्हें नष्ट करने योग्य / पचाने योग्य बना सकता हूं ?


मैं इसके आधार पर सर्वोत्तम उत्तर चुनूंगा:

  1. कोड और एल्गोरिदम। अधिमानतः C # में आधारित
  2. स्पष्टीकरण। मैं एल्गोरिदम के साथ शुरुआत कर रहा हूं, लेकिन मैं ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग से बहुत परिचित हूं
  3. कदम दर कदम प्रदर्शन। न केवल अवधारणा बल्कि दिशा।
  4. चित्र / चित्र। नहीं, अन्य इंजनों के स्क्रीनशॉट नहीं।


मुझे पता है कि यह एक जटिल विषय है। लेकिन, किसी भी मदद के लिए धन्यवाद!

नहीं, मैं एक मिनीक्राफ्ट क्लोन बनाने की कोशिश नहीं कर रहा हूं।


संपादित करें

आपकी महान मदद के लिए सभी को धन्यवाद (विशेष रूप से निक विगिल)! यह वही है जो मैं बनाने में कामयाब रहा (कार्य प्रगति पर)।


[एकता] और सी ? वह ... थोड़ा समझ में आता है।
मार्टिन सोज्का

मैं सी। को समझता हूं
डैनियल पेन्डगैस्ट

8
आपको इस तरह के साहसिक अनुरोध के साथ समुदाय में बहुत विश्वास है। मेरा मतलब है, अच्छे एफपीएस के साथ आज के हार्डवेयर के लिए एक पूरी तरह से गतिशील वोक्सल इलाके पर एक पूरा पेपर, यह आसान होना चाहिए, है ना? खैर, विषय इतना व्यापक और कठिन है, मुझे संदेह है कि आप एक सामान्य समाधान देखेंगे और फिर भी, यह आपके मामले के लिए पूरी तरह से बेकार हो सकता है। लेकिन कौन जानता है, यह आपके रोल मॉडल के आधार पर उल्लेखनीय हो सकता है। क्या आप Crysis 2 voxel इलाके या एक डेल्टा फोर्स चाहते हैं? शायद तुम एक Minecraft क्लोन कर रहे हैं या सिर्फ एक खुदाई खेल के लिए एक रेत सिमुलेशन की जरूरत है? कृपया एक दायरा परिभाषित करें।
14

2
इस मिडलवेयर को देखें: forum.unity3d.com/threads/… । विशेष रूप से डेमो
टेट्राद

1
GPU रत्न 3 में voxel इलाके के बारे में एक अध्याय है: http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html
तमस्की

जवाबों:


58

एक voxel इलाके उत्पन्न करने के लिए

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

यहाँ छवि विवरण दर्ज करें

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

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

(c) (वास्तव में b जैसा ही है ) एक मॉडलिंग टूल लिखें। वोक्सट्रॉन दिखाते हैं कि यह कैसा दिखेगा। यह सिर्फ एक स्थानापन्न दुनिया (संपादक) में स्वर रूपों का निर्माण कर रहा है और फिर इन्हें आपके वास्तविक रनटाइम गेम की दुनिया में आयात कर रहा है। मेरा मानना ​​है कि वोक्सलैप में स्वरों के लिए पहला खुला स्रोत संपादक था। आप अलग-अलग स्वरों को रख सकते हैं, या आप अपनी दुनिया में स्वरों को आकर्षित करने के लिए विभिन्न आकारों / संस्करणों के साथ एक स्वर "ब्रश" का उपयोग कर सकते हैं।


क्या आप अपने खुद के स्वर आधारित खेल का निर्माण करने की आवश्यकता होगी

मैं इस खंड को शामिल करता हूं क्योंकि voxel सड़क एक आसान नहीं है, कम से कम वर्तमान में नहीं है। हाल ही में, बहुत सारे शोध एक बार फिर बड़े खिलाड़ियों द्वारा वोकेल इंजनों में डाले जा रहे हैं, प्रतिपादन और भौतिकी अनुप्रयोगों की ओर।

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

यह कहने के बाद कि, आपके "एक वोक्सल इलाके की पीढ़ी" को एक ऐसे संदर्भ की आवश्यकता है जिसमें काम करना है, क्योंकि वोकेल इंजन बिल्कुल व्यापक नहीं हैं। कैसे एक voxel इंजन काम करता है की एक बुनियादी विवरण के लिए आगे बढ़ें।

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

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

किसी भी तरह से, आपकी दुनिया में स्वरों में हेरफेर करने के लिए आपका दृष्टिकोण बहुत समान है, निम्नानुसार है।

अपनी दुनिया में वस्तुओं का निर्माण और स्थानांतरित करने के लिए, आपको ऊपर उल्लिखित गणितीय टूल की आवश्यकता होगी। उदाहरण के लिए, एक दीवार बनाने के लिए: 3 डी अंतरिक्ष में उपयुक्त आयामों के एक बॉक्स का निर्माण करना, वैक्टर का उपयोग करना। मैट्रिक्स बॉक्स का उपयोग करके अपने बॉक्स को रोटेशन और अपनी 3 डी दुनिया (निरंतर वेक्टर अंतरिक्ष में) की इच्छा के लिए बदलने के लिए। एक voxel इंजन के लिए, अतिरिक्त कदम अब एक 3D पॉइंट-इन-पॉलीहेड्रोन एल्गोरिथ्म का उपयोग करना है ताकि यह निर्धारित किया जा सके कि आपका कौन सा voxels उस घुमाए गए स्थान के अंदर आता है।

अनिवार्य रूप से, यह वह तरीका है जिससे आप अपनी दुनिया की अधिकांश वस्तुओं का निर्माण करेंगे। इससे परे, आप अपने खुद के टूल को माया या 3DS Max कहने के तरीके में एक चरित्र को "मॉडल" करने के लिए लिख सकते हैं। लेकिन जब से आप बिंदुओं, किनारों और चेहरों के बजाय स्वरों से बाहर निकलने के लिए मॉडलिंग कर रहे हैं, आपके तरीके काफी हद तक अलग होंगे। यदि आपने अपनी दुनिया में इन वस्तुओं को घुमाने का फैसला किया है, तो आपको ऐसा करने के लिए मैट्रिक्स परिवर्तनों का उपयोग करने की आवश्यकता होगी।

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

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

CSG और फ्लुइड डायनामिक्स मुझे लाते हैं, अंत में, अनुकूलन के लिए। वर्तमान में विकास में मौजूद Voxel इंजन लगभग विशेष रूप से विरल voxel octrees (SVO) का उपयोग करते हैं, जो अलग-अलग प्रस्तावों के लिए voxel स्थान को उप-विभाजित करने की एक विधि है, जैसा कि इस वीडियो में आगामी एटमॉलेज इंजन को दिखाते हुए दिखाया गया है। एक बड़े पैमाने पर, एक समान ग्रिड के प्रसंस्करण में शामिल प्रसंस्करण ओवरहेड्स के कारण ऑक्टर्स / एसवीओ का उपयोग एक अनुकूलन विकल्प की तुलना में अधिक आवश्यक है। एक ऑक्ट्री अनिवार्य रूप से एक पेड़ (निर्देशित चक्रीय ग्राफ) है जहां प्रत्येक नोड में या तो 8 या शून्य बच्चे नोड होते हैं, जो इस बात पर निर्भर करता है कि यह जिस जगह का प्रतिनिधित्व करता है, उसमें कोई भौतिक वॉल्यूम नहीं है। दिखा आरेख कैसे octrees अंतरिक्ष का उप-विभाजन voxels बनाने के लिए कर रहे हैं यहाँ

सबसे अच्छा खुला स्रोत voxel कार्यान्वयन जो मुझे पता है कि केन सिल्वरमैन का Voxlap इंजन है , जिसका उपयोग Voxelstein3D के लिए किया गया था। यह सी ++ में लिखा गया है, और इलाके विरूपण के लिए सीएसजी संचालन को लागू करता है।


सामुदायिक विकी परिवर्तन स्थायी है, इसे उलटने का कोई तरीका नहीं है। आप हटा सकते हैं और अपने जवाब को पुन: (निश्चित रूप से अपने मौजूदा वोट त्याग) की आवश्यकता होगी
जेसी दोर्से

meta.stackexchange.com/questions/2974/… का दावा है कि मॉडरेटर इसे हटा सकते हैं। हालांकि चीजें बदल गई हैं, पता नहीं। इस तरह से देखने के लिए धन्यवाद।
इंजीनियर

1
जाओ आंकड़ा, अगली बार सावधान रहें।
जेसी दोर्से

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

1
बनावट का तात्पर्य है। वास्तविक स्वर, चाहे जाल आधारित हों या न हों, प्रत्येक का शुद्ध रंग होता है। उपर्युक्त दृष्टिकोण बस अधिक यथार्थवादी विस्तार बनाते हैं, और एक संयुक्त-मेष दृष्टिकोण (Google यूनिटी VoxelForm) को सक्षम करते हैं। अपने स्वरों को जितना बारीक कर सकते हैं, अपने परिणामी बनावट को उतने ही महीन से समझें। उदाहरण: रॉक (ग्रे) के रूप में एक नदी के बिस्तर का मॉडल। सतह के x दूरी के भीतर प्रत्येक पिक्सेल को रेत में परिवर्तित करें, इन स्वरों को सामग्री = "रेत" सेट करके; फिर उन्हें रेत के रंग के रूप में प्रस्तुत किया जा सकता है। इसके अतिरिक्त, यह उनकी भौतिक अन्तरक्रियाशीलता को भी प्रभावित कर सकता है, इसलिए रेत को पानी द्वारा स्थानांतरित किया जा सकता है, या दूर खोदा जा सकता है।
इंजीनियर

33

दिलचस्प voxel इलाके उत्पन्न करने का सबसे अच्छा तरीका एक पेर्लिन शोर घनत्व मानचित्र है। 3 डी दुनिया की ऊंचाई को परिभाषित करने वाले 2 डी पेर्लिन शोर मानचित्र का उपयोग करने के बजाय, एक 3 डी पेर्लिन शोर मानचित्र का उपयोग करें। मानचित्र को वज़न दें ताकि नीचे के करीब के मान अधिक ठोस हों, और शीर्ष के करीब के मान निश्चित रूप से हवा में होंगे। यह आपकी दुनिया को ऊँचाई प्रदान करता है, लेकिन साथ ही साथ Minecraft इलाके की तरह ओवरहैंग और गुफाओं के लिए भी अनुमति देता है , क्योंकि यह भू -भाग के स्लाइस के साइड-व्यू को दर्शाता है:

ओवरहैंग्स के साथ दुनिया

यहाँ से आप तैरते हुए द्वीपों के लिए परीक्षण कर सकते हैं, या भग्न शोर का उपयोग करके गुफा प्रणाली जोड़ सकते हैं:

गुफा प्रणाली के साथ दुनिया

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


4

यहां अन्य उत्तर उत्कृष्ट हैं, लेकिन मैंने थोड़ा अलग तरीका अपनाया।

मैं एक मॉडलिंग टूल (3DSMAX) में एक वातावरण उत्पन्न करता हूं, और इससे एक विरल ऑक्ट्री का निर्माण करता हूं। प्रत्येक क्यूबिकल, गैर-खाली पत्ती नोड एक स्वर है। रेंडर समय पर, मैं रेकास्टिंग (एचएलएसएल में कार्यान्वित) का उपयोग करता हूं ताकि यह पता लगाया जा सके कि कौन सा पिक्सेल किस पिक्सेल पर कब्जा करता है, और पिक्सेल को नोड में संग्रहीत रंग में सेट करता है, जिसे मैंने स्रोत मॉडल से बनावट मूल्यों के औसत से पेड़ उत्पन्न करते समय गणना की थी।

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

दुर्भाग्य से, फ़ोन से नमूना कोड पोस्ट करना असंभव है।


एक विकल्प के लिए +1। जबकि उचित प्रदर्शन के साथ लागू करना असंभव नहीं है, पेशेवरों को विपक्ष द्वारा दूर किया जाता है। Voxel raytracing GPU पर एक विशाल नाली लगाती है। इसके लिए आवश्यक अंकगणित और सशर्तियां बहुत महंगी हैं, जब उन्हीं GPU चक्रों को कई प्रभावशाली स्क्रीन-स्पेस इफेक्ट्स जैसे लागू कर सकते हैं। SSAO। सबसे बड़ी समस्या यह है कि रेडियोकासिटी में पाए जाने वाले कई बाउंस के साथ रेकास्टिंग सबसे अच्छा लगता है - दृश्य के लिए व्यवहार्य नहीं जो लाखों या अरबों स्वरों का होता है और जहां प्रत्येक किरण खंड उछाल और समग्र करने के लिए काफी प्रयास करता है।
इंजीनियर

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