- शहर-निर्माण गेम्स में road system का यथार्थवादी implementation एक मुख्य तत्व है, जो सिर्फ़ दृश्य तत्व नहीं बल्कि संरचनात्मक पूर्णता तय करने वाली बुनियाद भी है
- मौजूदा गेम्स सड़कों को दिखाने के लिए Bezier spline का उपयोग करते हैं, लेकिन इसमें वास्तविक सड़कों की curvature और parallelism बनाए रखने में सीमाएँ हैं
- वास्तविक दुनिया की सड़कें वाहनों के axle spacing और curve constraints को प्रतिबिंबित करनी चाहिए, लेकिन Bezier तरीका offset करने पर आकार को विकृत कर देता है, जिससे अवास्तविक curves बनते हैं
- इसे हल करने के लिए circle arc और clothoid जैसे engineering curves लागू करने पर मुलायम curvature बदलाव और parallel offset बनाए रखना संभव होता है
- लेखक ने इन सीमाओं को पार करने के लिए खुद अपना road system बनाया है, और आगे इसकी तकनीकी implementation process साझा करने वाले हैं
सड़कों और पैटर्न का आकर्षण
- प्रकृति के व्यवस्थित लेकिन अव्यवस्थित पैटर्नों से मिलने वाला संतोष लेखक को सड़कों में भी दिखाई देता है
- इसे चींटी के बिल, मधुमक्खी के छत्ते और पत्तियों की नसों की तरह सरल नियमों से बनती जटिल संरचनाओं से तुलना की गई है
- सड़क नेटवर्क को भी मनुष्यों द्वारा बनाया गया सबसे रोचक पैटर्नों में से एक बताया गया है
- शहरों के गायब हो जाने के बाद भी बचे रहने वाले सड़क नेटवर्क के निशानों की कल्पना करते हुए, उनकी संरचनात्मक सुंदरता पर ज़ोर दिया गया है
शहर-निर्माण गेम्स और सड़कों का विकास
- SimCity 2000 से Cities: Skylines 2 तक, road systems लगातार विकसित होते रहे हैं
- SimCity 4 ने elevation और diagonal roads, SimCity 2013 ने curved roads, और Cities: Skylines ने free placement और intersection configuration को support किया
- फिर भी curves की अप्राकृतिकता, बहुत तीखे turning radius, और अवास्तविक highway ramps जैसी समस्याएँ अब भी मौजूद हैं
- mod के ज़रिए अधिक यथार्थवादी lanes, markings और curves बनाए जा सके, लेकिन फिर भी वे engine की मूलभूत सीमाओं से बाहर नहीं निकल पाए
Bezier spline की सीमाएँ
- Bezier curve दो बिंदुओं के बीच smooth connection देने वाला एक शक्तिशाली गणितीय tool है, और अधिकांश game engines में उपयोग होता है
- लेकिन यह curve offset करने पर अपना आकार और curvature बनाए नहीं रखता, यानी “Bezier curve का offset, Bezier curve नहीं होता”
- इसके कारण अंदरूनी और बाहरी curves में असंगति, self-intersection, और pinching जैसी समस्याएँ पैदा होती हैं
- परिणामस्वरूप, वास्तविक सड़कों की तरह वाहन-trajectory को दर्शाने वाले parallel curves को implement करना कठिन हो जाता है
circle arc और clothoid का उपयोग
- circle arc offset के बाद भी समान आकार बनाए रखता है, इसलिए यह पूर्ण parallelism प्रदान करता है
- दो circle arcs के intersection की गणना Bezier की तुलना में बहुत सरल है, और O(1) की computational complexity के साथ अधिक efficient है
- अलग-अलग radius वाले circle arcs को जोड़कर engineering के लिहाज़ से उचित सड़क आकृतियाँ बनाई जा सकती हैं
- लेकिन circle arc में curvature स्थिर रहती है, इसलिए सीधी रेखा से curve में प्रवेश करते समय lateral acceleration में अचानक बदलाव आता है
- इसे सुधारने के लिए clothoid का उपयोग किया जाता है
- इसकी curvature धीरे-धीरे बढ़ती है, जिससे स्वाभाविक steering और बेहतर ride comfort मिलता है
- गणितीय रूप से यह जटिल है, लेकिन high-speed roads के design के लिए अनिवार्य है
- शहर के भीतर चौराहों जैसे कम-गति वाले हिस्सों में circle arc-आधारित design भी पर्याप्त यथार्थवाद दे सकता है
खुद road system बनाने की वजह
- ज़्यादातर खिलाड़ी intersections की curvature accuracy में बहुत रुचि नहीं लेते, लेकिन डेवलपर ने जिज्ञासा और तकनीकी चुनौती के कारण इस विषय को गहराई से देखा
- मौजूदा commercial games का implementation स्तर ऊँचा है, लेकिन indie developers के लिए उपलब्ध सामग्री और assets कम हैं
- साधारण grid-based roads के बजाय, ज़्यादा परिष्कृत और साझा किए जा सकने वाले system के लिए इसे स्वयं implement किया गया
- अगली पोस्ट में तकनीकी implementation के विस्तृत चरण साझा किए जाएँगे, और subscription के माध्यम से updates प्राप्त किए जा सकते हैं
1 टिप्पणियां
Hacker News की राय
शहर-निर्माण गेम्स में सड़कों को मुख्य तत्व बताने वाली पोस्ट पढ़कर, मुझे लगता है अब समझ आता है कि urban planners को बुरे सपने क्यों आते होंगे
शहर की बुनियाद कारों के लिए road नहीं, बल्कि पैदल यात्रियों, साइकिलों और public transport के साझा इस्तेमाल वाली street होती है
संबंधित अवधारणा के लिए Stroad लेख देखना उपयोगी है
road का केंद्र transportation है, जबकि street का केंद्र public interaction है
फिर भी मुझे लगता है कि मूल उद्धरण की कुछ ज़्यादा आलोचना हो रही है। आधुनिक समाज में transportation की मांग बहुत बड़ी है, इसलिए शहर के भीतर और बाहर का road network ही शहर का ढांचा बनाता है
1900 के दशक से पहले शहर सिर्फ जलमार्गों के पास बसाए जा सकते थे, लेकिन अब roads की वजह से यह अंदरूनी इलाकों में भी संभव हुआ है
अगर यथार्थवादी शहर बनाना है, तो नकली roads की बजाय ऐसा दृष्टिकोण सही लगता है
कभी-कभी सोचता हूँ — अगर कोई ऐसी सभ्यता शहर डिज़ाइन करे जो सिर्फ साइकिल और पैदल चलने पर निर्भर हो, तो वह कैसी दिखेगी
एक ऐसा गेम है जो लेखक को पसंद आ सकता है। वह है Junxions, एक sandbox game जो road intersections बनाने पर केंद्रित है
इसका subreddit यहाँ है। लगता है यह गेम सड़क-डिज़ाइन की इच्छा अच्छी तरह पूरी करेगा
मुझे Junxions भी पसंद है, लेकिन मेरा approach अलग है। वहाँ node-based Bézier structure इस्तेमाल होती है, जबकि मैं road segments के बीच collision से intersections अपने-आप बनाता हूँ
अगली blog post में मैं दोनों approaches का फर्क विस्तार से बताने वाला हूँ
कहते हैं कि “intersection corner radius की परवाह सिर्फ 1% लोग करते हैं,” और मैं ठीक उसी 1% में हूँ
Bézier curves से roads को define करना आसान नहीं है
खासकर तीखे मोड़ों पर नतीजा देखने में अच्छा नहीं लगता
पिछले साल Azoth प्रोजेक्ट पर काम करते हुए मुझे भी यही समस्या आई थी, और मैंने इसका एक सरल समाधान ढूँढ लिया था
संदर्भ: Azoth repository, Bézier examples
गेम्स में जो चीज़ें बिल्कुल स्वाभाविक लगती हैं, वे असल में भारी मेहनत और डिज़ाइन का नतीजा होती हैं
उदाहरण के लिए roads पर खिलाड़ी बारीकी से ध्यान नहीं देते, लेकिन अगर वे अजीब लगें तो तुरंत खटकता है
हाल ही में Kingdom Come 2 खेलते हुए यही महसूस हुआ — सब कुछ वास्तविक जैसा स्वाभाविक लगता है, लेकिन उस हर डिटेल के पीछे developers का खून-पसीना और आँसू हैं
इसलिए समझ आता है कि game industry crunch से क्यों जूझती है
संबंधित लेख: The Door Problem, IGN लेख
ऐसी पोस्ट्स ही वजह हैं कि मैं Hacker News पढ़ता रहता हूँ। लेखक से कहना चाहूँगा कि वे लिखना जारी रखें
लगता है यहाँ ऐसे बहुत लोग हैं जिनकी रुचि मिलती-जुलती है, इसलिए आगे और सक्रिय रहने का सोच रहा हूँ
यह पोस्ट सचमुच मेरी पसंद की है। सड़कों के प्रति यह जुनून मुझमें भी बिल्कुल वैसा ही है
शहर रक्त-नलिकाओं की तरह सड़कों से बने होते हैं, और यूरोप व एशिया की गाँव-गलियाँ उन पगडंडियों की कहानी हैं जिन पर वे खड़े हुए
वहीं मेरे गृहक्षेत्र की देहाती सड़कें सीधी चलती हैं और फिर जैसे ही कोई किसान ज़मीन बेचने से मना करे, अचानक मुड़ जाती हैं
सिर्फ औपनिवेशिक दौर या कुछ planned cities ही grid pattern में हैं; बाकी अधिकतर नदियों के बहाव या भू-आकृति के अनुसार दिशा बदलते हैं
ऐसे ग्रिडों के बीच के intersection points शहरों के सबसे सुंदर और वास्तुशिल्पीय रूप से रोचक हिस्से होते हैं
अगर कोई ऐसा game हो जो शहरों की वृद्धि के इन बदलावों को simulate करे, तो वह कमाल होगा
असली शहर चींटी के बिल की तरह स्वाभाविक व्यवस्था के भीतर जटिलता के साथ विकसित हुए हैं
इस विषय पर बाद में अलग से कुछ लिखने का मन है
अगले गेम Canalpunk में भी Bézier splines का इस्तेमाल जारी रहेगा
path के self-intersection होने पर पैदा होने वाला disaster system काफ़ी दिलचस्प हो सकता है
मैं railway track editor में clothoid (curve transition) लागू करने को लेकर काफ़ी जुनूनी हूँ
खाली जगह में यह आसान है, लेकिन tracks को जोड़ते समय मुश्किल हो जाता है
इस पर मैंने पहले एक व्याख्यात्मक सामग्री बनाई थी: Euler Spiral Explanation
उस intersection point का इस्तेमाल करके नई spline interpolate की जा सकती है या नहीं, यह आज़माना चाहूँगा
संदर्भ चित्र: दृश्य उदाहरण
Roman लोगों की तरह सीधी सड़कें बना दो, काम आसान हो जाएगा :-)
बेशक Roman लोग private property जैसी चीज़ों की परवाह नहीं करते थे। जहाँ मैं UK के Lincolnshire में रहता हूँ, वहाँ आज भी Roman roads इस्तेमाल होती हैं
सिर्फ RAF Scampton runway extension के समय अपवादस्वरूप सड़क मोड़ी गई थी
विस्तार के लिए Roman aqueduct देखें
आज भी सड़क की centerline पूरी तरह church tower की दिशा से मेल खाती है। ज़मीन को church-केंद्रित नज़र से देखना Roman सोच से मिलता-जुलता है