मेरे पोस्ट-
एपोकैलिक फ्रेमवर्क गेम के लिए
, मुझे विविध शहरों के साथ एक बहुत बड़ी खुली दुनिया को भरने की जरूरत थी। हमारी टीम में केवल 3 लोग हैं, इसलिए, मैंने निश्चित रूप से, हुडिनी की प्रक्रियात्मक शक्ति का इस्तेमाल किया!
इससे पहले, जब मुझे हॉदिनी के बारे में नहीं पता था, तो मैंने एकता के लिए प्रक्रियात्मक जाल निर्माण के लिए C # अपने उपकरणों में लिखा था। नई सुविधाओं को जोड़ना एक बहुत लंबी प्रक्रिया थी, और जब मैंने एक बार सुना कि हौदिनी को ऐसे कार्यों के लिए डिज़ाइन किया गया है, तो मैंने तुरंत इसे बदल दिया। मैंने शहरों और सड़कों के निर्माण के विभिन्न तरीकों के साथ प्रयोग किया, और इस लेख में मैं संक्षेप में उस तकनीक के बारे में बात करूंगा जिसका उपयोग मैंने अंततः खेल के लिए किया था।
सबसे पहले, मैंने सड़कों का एक नेटवर्क बनाने के लिए एक उपकरण बनाया जो शहर में इस्तेमाल किया जा सकता था। मेरा निर्णय
यहां प्रस्तुत अवधारणाओं पर आधारित
है , साथ ही संदर्भ द्वारा उपयोग किए गए लेख पर भी है। टेंसर फ़ील्ड्स और आइगेनवेक्टर्स के बारे में बहुत सी बात है, और सब कुछ बहुत तकनीकी रूप से लिखा गया है, लेकिन संक्षेप में इसे इस प्रकार समझाया जा सकता है: मेरे मामले के लिए (एक राहत पर सड़क नेटवर्क बनाने के लिए) मुझे समोच्च राहत लाइनें उत्पन्न करने की आवश्यकता थी, साथ ही साथ उन्हें लाइनों के लंबवत भी।
मैंने राहत के साथ शुरुआत की, और हौदिनी गुब्बिन्स उदाहरण से थोड़ी मदद करने के लिए धन्यवाद, मैंने रास्ते की ओर निर्देशित राहत के प्रत्येक बिंदु पर वैक्टर उत्पन्न किया, और वीईएक्स का उपयोग करके ढाल लाइनें:
पीली नसें समोच्च रेखाएँ दिखाती हैं।
फिर हमें शहर की सड़कों का एक ग्रिड बनाने और उसके वैक्टर को राहत के प्राकृतिक घटता को दोहराते हुए वैक्टर के साथ मिश्रण करने की आवश्यकता है। इसलिए हम एक ऐसा क्षेत्र बनाएंगे जो शहर की सड़कों के ग्रिड से मिलता जुलता हो, जो राहत के साथ अच्छी तरह से मेल खाता हो। यहां हमने ग्रिड को राहत में डाल दिया, फिर पॉलीफ्रैमिंग ताकि मानक लाइनों को ग्रिड लाइनों के साथ जोड़ा जाए, चिकनी सम्मिश्रण के लिए एक फॉलऑफ जोड़ें और अंत में एक नया पथ वेक्टर सेट करें, जो दो वैक्टर का मिश्रण है:
ऊपर की छवि में, आप देख सकते हैं कि आयत की सीमाओं के अंदर, समोच्च रेखाएं ग्रिड की तरह अधिक हैं। मैं खेल के लिए मैन्युअल रूप से बनाई गई सड़कों के प्रभाव को जोड़ने के लिए भी इसी तरह की प्रक्रिया करता हूं। मैंने एकता HDA में एक स्लाइडर पेश किया ताकि शहर की सीमा के भीतर अधिक स्वाभाविक रूप से स्थित या अधिक "स्क्वायर" सड़कों का निर्माण करके प्रभाव को बदला जा सके।
अगला, मैं वेक्टर फ़ील्ड्स को VDB में परिवर्तित कर दूंगा ताकि आप तैयार सड़कों को बनाने के लिए उनसे नमूना ले सकें। SOP वॉल्यूम ट्रैकिंग से आप एक सुंदर दृश्य प्राप्त कर सकते हैं:
यह पहले से ही सड़कों की एक ग्रिड की तरह लग रहा है! वे एक-दूसरे के बहुत करीब हैं, लेकिन सामान्य तौर पर पहले से ही फॉर्म हैं। फिर हम तैयार किए गए सड़क लाइनों को बनाने के लिए VDB गति और कई vex से कई सैंपलिंग ऑपरेशन करते हैं। Vex कोड अनिवार्य रूप से सड़कों को सही दूरी पर व्यवस्थित करता है और उन्हें समाप्त करता है यदि वे अन्य सड़कों के बहुत करीब या बहुत लंबे हैं:
फिर हम सब कुछ सुचारू करने के लिए पोस्ट-प्रोसेसिंग करते हैं, छोटे हिस्सों को हटाते हैं, यथार्थवादी चौराहों को बनाने के लिए मृत छोरों को लंबा करते हैं, और इलाके पर सड़कें बिछाते हैं। अंतिम परिणाम इस तरह दिखता है:
अभी भी कुछ अवास्तविक भाग हैं, लेकिन एकता में थोड़ा मैनुअल सफाई स्वीकार्य है, यह देखते हुए कि हमने इस पर कितना समय बचाया है।
इसलिए, हमने प्रक्रियात्मक रूप से एक शहर स्ट्रीट नेटवर्क तैयार किया, लेकिन इसका परिणाम केवल हौदिनी में घटता का एक गुच्छा था। अब मैं आपको दिखाऊंगा कि इनमें से प्रत्येक वक्र के लिए रोड ज्योमेट्री कैसे जेनरेट की जाती है जिससे आप उन यूनिटी का उपयोग कर सकें। यहाँ हमारे पिछले परिणाम एकता के लिए रखे गए हैं:
सबसे पहले आपको यह बताने की जरूरत है कि हौदिनी और यूनिटी के बीच डेटा ट्रांसफर कैसे किया जाता है। सड़कों के मामले में, मैं JSON फाइल को अंकों का एक क्रम, सड़क की चौड़ाई और सड़क की सतह पूर्व निर्धारित को लिखता हूं। यूनिटी में, मैंने बेज़ियर कर्व्स का उपयोग करके मैन्युअल रूप से संपादन सड़कों के लिए संपादक उपकरण बनाया:
आप एकता में एक बेजियर वक्र संपादक बनाने के बारे में खोज इंजन पर बहुत सारे ट्यूटोरियल पा सकते हैं। Houdini में डेटा वापस स्थानांतरित करने के लिए, मैं JSON फ़ाइल पढ़ने के लिए पायथन नोड का उपयोग करता हूं:
यहां आपको एक शहरी स्ट्रीट नेटवर्क बनाने का परिणाम दिखाई देता है, जो ऊपर दिया गया है, लेकिन इस बार इसे JSON फ़ाइल से पढ़ा जाता है, क्योंकि अब यह मैनुअल परिवर्तन के साथ यूनिटी से प्राप्त किया गया है।
मैं यूनिटी से एक राहत भी आयात करता हूं, इसके कच्चे डेटा को पढ़ रहा हूं। शायद आज यह एचडीए की मदद से देशी रूप से किया जा सकता है, क्योंकि हुडीनी इंजन ने एकता इलाके के लिए समर्थन में सुधार किया है, लेकिन जब मैंने यह काम किया, तब भी यह इतना अच्छा नहीं था।
फिर हम चौराहों का निर्माण करते हैं। यहां मुख्य काम इंटरसेक्शन स्टिच एसओपी द्वारा किया जाता है, लेकिन मैंने वेक्स का इस्तेमाल सड़कों को थोड़ा लंबा करने के लिए भी किया है, क्योंकि वे पूरी तरह से समाप्त नहीं हुए हैं, और छोटे छोरों को हटा दिया है ताकि टी-चौराहों को सही तरीके से बनाया जा सके।
अगला, मैं चौराहे के बिंदु से फ़ॉरेस्ट की मदद से चौराहों का एक समूह बनाता हूं, जहां कमजोर पड़ने की दूरी सड़क के चौराहे पर चौड़ी के बराबर होती है। फिर मैं उन मामलों में किनारों के इस समूह का विस्तार करता हूं जहां दो सड़कों के बीच का कोण 45 डिग्री से कम है, ताकि वांछित चौड़ाई का एक जाल बनाने के लिए चौराहे के दो छोरों के बीच पर्याप्त जगह हो:
वीईएक्स नोड में गणना एक सही त्रिकोण के कर्ण को खोजती है (हम मान सकते हैं कि चौराहे के प्रत्येक व्यक्तिगत हिस्से में दो सही त्रिकोण होते हैं):
चूंकि हम जानते हैं कि चौराहे समूह की सड़कों की चौड़ाई क्या होनी चाहिए (ए के रूप में ऊपर की आकृति में इंगित की गई है) और कोण को पता है, हम सी की गणना कर सकते हैं जिससे दूरी को वांछित चौड़ाई से विभाजित करने के लिए हमें चौराहे समूह का विस्तार करने की आवश्यकता है।
फिर हम पुलों के समूह बनाते हैं, सड़कों के वर्गों को उजागर करते हैं जो जमीन से एक निश्चित दूरी से ऊपर हैं। यह "बिंदु चौराहे की दूरी" के साथ रे एसओपी का उपयोग करके किया जाता है और "ट्रांसफ़ॉर्म पॉइंट" बंद हो जाता है। अगला, समापन ज्यामिति के लिए तैयार वक्र बनाने के लिए, हम चौराहे और पुल समूहों को काटने के लिए पॉलीक्यूट का उपयोग करते हैं ताकि केवल सामान्य सड़कें रहें।
और अब हम अंत में असली मेश बनाना शुरू कर रहे हैं। सबनेट जो चौराहे की जाली बनाता है, वह
सॉल्विंग इंटेरस ट्यूटोरियल का एक संशोधित संस्करण है। सबनेट जो सड़क की ज्यामिति बनाता है वह भी लाइन को बंद करता है और यूवी बनाता है। HoudiniSimon द्वारा बनाया गया एक और
शानदार ट्यूटोरियल है । यह आपको बताता है कि एक बंद वक्र को मोड़ने के लिए यूवी को कैसे उत्पन्न किया जाता है, लेकिन ट्यूटोरियल के पहले भाग को घटता खोलने के लिए लागू किया जा सकता है।
फिर मैंने सिर्फ एकता में अपने घटता से लिए गए रोडप्रसेट विशेषता का उपयोग करने के लिए सामग्री को लागू करने के लिए कुछ समूह बनाए।
अगला हम पुलों की ज्यामिति बनाते हैं। नीचे दिखाए गए नेटवर्क पुनरावृत्तियों को पुल के सभी पहले से बनाए गए समूहों से गुजरता है और, जमीन, लंबाई और यातना से ऊपर की ऊंचाई के आधार पर, एक थोक या धनुषाकार पुल सम्मिलित करता है। मैं एक अलग ट्यूटोरियल में एक आर्च ब्रिज बनाने पर विचार करूंगा और बल्क ब्रिज ब्रिज गम के साथ पूर्व निर्मित ब्रिज ज्योमेट्री को बंद करने के लिए शामिल स्टार्ट एंड एंड ग्रुप के साथ उत्कृष्ट गामेदेव स्वीप ज्योमेट्री एसओपी का उपयोग करता है।
परिणाम:
ये ब्रिज मेशेस मैन्युअल रूप से शुरू / अंत / मध्य खंडों से बने होते हैं, गामेदेव स्वीप जियोमेट्री एसओपी का उपयोग करके वक्र के साथ विकृत और डुप्लिकेट होते हैं। यहाँ मैन्युअल रूप से निर्मित ज्यामिति और समूह क्या दिखते हैं:
केंद्रीय समूह को हाइलाइट किया गया है, और छोर ब्रिजस्टार्ट और ब्रिजएंड समूहों में हैं, जिनका उपयोग ज्यामिति बंद नोड द्वारा किया जाता है।
हम एक सड़क तटबंध बनाने के लिए पुल को थोड़ा सा बाहर निकालते हुए इसे पूरा करते हैं, जिस पर बजरी की बनावट लागू की जाएगी; कुछ प्रकार की सड़कों के चौराहों के लिए कई बूलियन चर भी निर्धारित किए जाते हैं। उदाहरण के लिए, यदि कोई गंदगी सड़क राजमार्ग से टकराती है, तो उसे काट दिया जाता है।
अंत में, हम एकता में और अतिरिक्त हौदिनी उपकरणों में उपयोग के लिए सभी ज्यामिति को बचाते हैं। हम सड़क के जाल को छोटे टुकड़ों में विभाजित करते हैं और उन्हें FBX के रूप में निर्यात करते हैं, और डेटा को .bgeo फ़ाइलों में भी सहेजते हैं ताकि बाद में उनका उपयोग किया जा सके।
एकता में:
मुझे आशा है कि आपको हमारी हौदिनी सड़क ज्यामिति निर्माण प्रक्रिया का यह संक्षिप्त विवरण पसंद आया होगा। अगली पोस्ट में मैं सड़क के चिह्नों को बनाने और इलाके को समतल करने के बारे में बात करूंगा ताकि यह सड़कों से अधिक निकटता से मेल खाए।