एक 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 के लिए किया गया था। यह सी ++ में लिखा गया है, और इलाके विरूपण के लिए सीएसजी संचालन को लागू करता है।