- ในเกมสร้างเมือง การจำลองระบบถนนอย่างสมจริง เป็นองค์ประกอบหลักที่เป็นมากกว่าแค่ภาพลักษณ์ แต่เป็นรากฐานที่กำหนดความสมบูรณ์ของโครงสร้าง
- เกมที่มีอยู่เดิมใช้ Bezier spline ในการแสดงถนน แต่มีข้อจำกัดในการ รักษาความโค้งและความขนาน ของถนนจริง
- ถนนในโลกความเป็นจริงต้องสะท้อน ระยะห่างระหว่างเพลารถและข้อจำกัดของทางโค้ง ของยานพาหนะ แต่แนวทางแบบ Bezier จะทำให้รูปทรงบิดเบี้ยวเมื่อทำ offset จนนำไปสู่ ทางโค้งที่ไม่สมจริง
- เพื่อแก้ปัญหานี้ การใช้เส้นโค้งเชิงวิศวกรรมอย่าง ส่วนโค้งวงกลม (Circle Arc) และ คลอโธอิด (Clothoid) ช่วยให้ การเปลี่ยนค่าความโค้งอย่างนุ่มนวลและการคง offset แบบขนาน เป็นไปได้
- ผู้เขียนได้ สร้างระบบถนนขึ้นเองโดยตรง เพื่อก้าวข้ามข้อจำกัดเหล่านี้ และมีแผนจะเผยแพร่กระบวนการพัฒนาเชิงเทคนิคในอนาคต
เสน่ห์ของถนนและแพตเทิร์น
- ผู้เขียนพบความพึงพอใจแบบเดียวกับที่มีต่อ แพตเทิร์นไร้ระเบียบภายในระเบียบของธรรมชาติ ในถนนด้วย
- เปรียบกับปรากฏการณ์ที่กฎง่าย ๆ สะสมกันจนเกิดเป็นโครงสร้างซับซ้อน เช่น รังมด รังผึ้ง และเส้นใบไม้
- เครือข่ายถนนเองก็ถูกอธิบายว่าเป็นหนึ่งในแพตเทิร์นที่มนุษย์สร้างขึ้นซึ่งน่าสนใจที่สุด
- ผู้เขียนจินตนาการถึง ร่องรอยของโครงข่ายถนน ที่ยังคงหลงเหลือหลังเมืองหายไป และเน้นย้ำความงามเชิงโครงสร้างของมัน
เกมสร้างเมืองและวิวัฒนาการของถนน
- ตั้งแต่ SimCity 2000 จนถึง Cities: Skylines 2 ระบบถนนพัฒนาอย่างต่อเนื่อง
- SimCity 4 มี ระดับความสูงและถนนแนวทแยง, SimCity 2013 มี ถนนโค้ง, ส่วน Cities: Skylines รองรับ การวางแบบอิสระและการจัดองค์ประกอบทางแยก
- อย่างไรก็ตาม ยังมีปัญหาอย่าง ความไม่เป็นธรรมชาติของเส้นโค้ง, รัศมีการเลี้ยวที่หักเกินไป, ทางลาดทางด่วนที่ไม่สมจริง อยู่เสมอ
- แม้จะทำให้เลน เส้นจราจร และเส้นโค้งสมจริงขึ้นได้ผ่าน ม็อด (Mod) แต่ก็ยัง ไม่อาจก้าวข้ามข้อจำกัดพื้นฐานของเอนจิน ได้
ข้อจำกัดของ Bezier spline
- เส้นโค้ง Bezier เป็นเครื่องมือทางคณิตศาสตร์ที่ทรงพลังสำหรับ เชื่อมสองจุดเข้าด้วยกันอย่างนุ่มนวล และถูกใช้ในเอนจินเกมส่วนใหญ่
- แต่เส้นโค้งชนิดนี้ ไม่สามารถรักษารูปร่างและค่าความโค้งไว้ได้เมื่อทำ offset หรือกล่าวได้ว่า “offset ของเส้นโค้ง Bezier ไม่ใช่เส้นโค้ง Bezier”
- ด้วยเหตุนี้จึงเกิดปัญหาอย่าง เส้นโค้งด้านในและด้านนอกไม่สอดคล้องกัน, การตัดกันเอง, และปรากฏการณ์ pinch
- ผลลัพธ์คือยากที่จะสร้าง เส้นโค้งขนานที่สะท้อนวิถีการเคลื่อนที่ของรถ ได้เหมือนถนนจริง
การใช้ส่วนโค้งวงกลม (Circle Arc) และคลอโธอิด (Clothoid)
- ส่วนโค้งวงกลม ให้ ความขนานที่สมบูรณ์แบบ เพราะยังคงรูปทรงเดิมไว้ได้แม้หลังทำ offset
- การคำนวณจุดตัดของส่วนโค้งวงกลมสองเส้นง่ายกว่า Bezier มาก และมีความซับซ้อนเชิงคำนวณเพียง O(1) จึงมีประสิทธิภาพ
- การเชื่อมส่วนโค้งวงกลมที่มีรัศมีต่างกันเข้าด้วยกันสามารถสร้าง รูปแบบถนนที่สมเหตุสมผลในเชิงวิศวกรรม ได้
- อย่างไรก็ตาม ส่วนโค้งวงกลมมี ค่าความโค้งคงที่ จึงทำให้เกิด การเปลี่ยนแปลงของความเร่งด้านข้างอย่างฉับพลัน เมื่อเข้าสู่โค้งจากทางตรง
- เพื่อชดเชยข้อจำกัดนี้ จึงมีการใช้ คลอโธอิด (Clothoid)
- ค่าความโค้งจะเพิ่มขึ้นอย่างค่อยเป็นค่อยไป ทำให้ได้ การบังคับเลี้ยวที่เป็นธรรมชาติและความสบายในการโดยสาร
- แม้จะซับซ้อนทางคณิตศาสตร์ แต่ก็ จำเป็นต่อการออกแบบถนนสำหรับการวิ่งด้วยความเร็วสูง
- สำหรับพื้นที่ความเร็วต่ำ เช่น ทางแยกในเมือง การออกแบบแบบ อิงส่วนโค้งวงกลม ก็ยังให้ความสมจริงได้เพียงพอ
เหตุผลที่สร้างระบบถนนขึ้นมาเอง
- แม้ผู้เล่นส่วนใหญ่จะไม่ได้สนใจมากนักกับ ความแม่นยำของความโค้งในทางแยก แต่นักพัฒนากลับสำรวจเรื่องนี้ด้วย ความอยากรู้อยากเห็นและความท้าทายทางเทคนิค
- แม้เกมเชิงพาณิชย์ที่มีอยู่จะมีระดับการพัฒนาสูง แต่ ทรัพยากรหรือแอสเซตที่นักพัฒนาอินดี้เข้าถึงได้ยังมีไม่เพียงพอ
- ผู้เขียนจึงพัฒนาระบบขึ้นเองเพื่อสร้าง ระบบที่ประณีตและนำไปแบ่งปันต่อได้มากกว่า แทนถนนแบบตารางอย่างง่าย
- ในบทความถัดไปจะมีการเปิดเผย รายละเอียดกระบวนการพัฒนาเชิงเทคนิค และสามารถติดตามอัปเดตได้ผ่านการสมัครรับข้อมูล
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เห็นโพสต์ที่บอกว่า ถนน คือหัวใจของเกมสร้างเมืองแล้ว ฉันก็เหมือนจะเข้าใจว่าทำไมนักผังเมืองถึงฝันร้าย
โครงสร้างพื้นฐานของเมืองไม่ใช่ ถนนสำหรับรถยนต์ (road) แต่คือ ถนนเมือง/พื้นที่สาธารณะ (street) ที่คนเดินเท้า จักรยาน และขนส่งสาธารณะใช้ร่วมกัน
แนวคิดที่เกี่ยวข้องดูได้จากบทความ Stroad
road เน้น การขนส่ง (transportation) ส่วน street เน้น ปฏิสัมพันธ์สาธารณะ (public interaction)
ถึงอย่างนั้นฉันก็รู้สึกว่าการยกคำพูดจากต้นฉบับโดนวิจารณ์แรงเกินไป สังคมสมัยใหม่มีความต้องการด้านการขนส่งมหาศาล จนโครงข่ายถนนทั้งในและนอกเมืองกลายเป็นโครงกระดูกของเมือง
ก่อนคริสต์ศตวรรษที่ 20 เมืองมักสร้างได้แค่ใกล้ทางน้ำ แต่ตอนนี้สร้างในแผ่นดินลึกเข้าไปได้ก็เพราะถนน
ถ้าจะทำเมืองให้ดูสมจริง ฉันคิดว่าแนวทางแบบนี้ถูกต้องกว่าการทำถนนปลอมๆ
บางทีก็ชอบจินตนาการว่า ถ้าอารยธรรมที่ใช้แค่จักรยานกับการเดินเท้าเป็นผู้ออกแบบเมือง หน้าตาจะออกมาแบบไหน
มีเกมหนึ่งที่ผู้เขียนน่าจะชอบ ชื่อ Junxions เป็นเกมแซนด์บ็อกซ์ที่โฟกัสการสร้างทางแยกถนน
ซับเรดดิตที่เกี่ยวข้องอยู่ ที่นี่ เกมนี้น่าจะตอบโจทย์ความอยากออกแบบถนนได้ดี
ฉันก็ชอบ Junxions แต่แนวทางของฉันต่างออกไป ฝั่งนั้นใช้ โครงสร้างเบซิเยร์แบบอิงโหนด แต่ของฉันใช้การชนกันของเซกเมนต์ถนนเพื่อสร้างทางแยกอัตโนมัติ
ในบล็อกโพสต์ถัดไปฉันจะลงรายละเอียดความต่างของสองแนวทางนี้
มีคนบอกว่า “คนที่สนใจรัศมีมุมของทางแยกมีอยู่แค่ 1%” ซึ่งฉันนี่แหละคือ 1% นั้น
การนิยามถนนด้วย เส้นโค้งเบซิเยร์ ไม่ใช่เรื่องง่าย
โดยเฉพาะช่วงโค้งหักศอกที่ผลลัพธ์มักดูไม่สวยในเชิงภาพ
ปีที่แล้วฉันก็เจอปัญหาเดียวกันตอนทำโปรเจกต์ Azoth และได้วิธีแก้แบบลดทอนที่ใช้ได้
อ้างอิง: คลังเก็บ Azoth, ตัวอย่างเบซิเยร์
องค์ประกอบต่างๆ ในเกมที่ดูเหมือนเป็นเรื่องธรรมดา จริงๆ แล้วคือผลลัพธ์ของ แรงงานและการออกแบบ มหาศาล
อย่างเช่นถนน ผู้เล่นอาจไม่ได้ซูมดูละเอียด แต่ถ้ามันดูแปลกขึ้นมาก็จะรู้สึกขัดตาทันที
ฉันเพิ่งรู้สึกแบบนั้นตอนเล่น Kingdom Come 2 — มันดูเป็นธรรมชาติเหมือนโลกจริง แต่รายละเอียดทั้งหมดนั้นสร้างมาจากหยาดเหงื่อและน้ำตาของนักพัฒนา
เพราะงั้นก็พอเข้าใจได้ว่าทำไมอุตสาหกรรมเกมถึงเผชิญกับ การโหมงานหนัก (crunch)
บทความที่เกี่ยวข้อง: The Door Problem, บทความ IGN
โพสต์แบบนี้แหละที่ทำให้ฉันยังอ่าน Hacker News ต่อไป อยากบอกผู้เขียนว่าเขียนต่อไปเรื่อยๆ นะ
ดูเหมือนจะมีคนที่สนใจอะไรคล้ายกันเยอะกว่าที่คิด เลยตั้งใจว่าจะเขียนต่ออีก
บทความนี้ตรงจริตฉันมาก ฉันเองก็ หมกมุ่นกับถนน แบบเดียวกัน
เมืองประกอบขึ้นจากถนนเหมือนเส้นเลือด ส่วนตรอกซอยของหมู่บ้านในยุโรปและเอเชียก็คือเรื่องราวที่สร้างทับลงบนรอยเท้าเดิน
ตรงกันข้าม ถนนชนบทในบ้านเกิดฉันมักพุ่งเป็นเส้นตรง แล้วก็หักทันทีถ้าเจ้าของที่ไม่ยอมขายที่
มีแค่ยุคอาณานิคมหรือเมืองวางผังบางส่วนเท่านั้นที่เป็นกริด ส่วนใหญ่แล้วทิศทางจะเปลี่ยนไปตามสายน้ำหรือภูมิประเทศ
จุดตัดระหว่างกริดเหล่านี้ คือส่วนที่สวยที่สุดและน่าสนใจที่สุดทางสถาปัตยกรรมของเมือง
ถ้ามีเกมที่จำลองการเปลี่ยนแปลงของการเติบโตเมืองได้ก็คงยอดเยี่ยมมาก
เมืองจริงพัฒนาขึ้นเหมือนรังมด คือมี ความซับซ้อนภายใต้ระเบียบที่เป็นธรรมชาติ
นี่เป็นหัวข้อที่ฉันอยากเขียนแยกต่างหากในภายหลัง
ในเกมถัดไป Canalpunk ฉันน่าจะยังใช้เบซิเยร์สปลายน์ต่อไป
คิดว่าระบบภัยพิบัติที่เกิดขึ้นเมื่อเส้นทาง ตัดตัวเอง น่าจะน่าสนใจดี
ตอนนี้ฉันกำลังหมกมุ่นกับการทำ clothoid (curve transition) ในตัวแก้ไขรางรถไฟ
ถ้าอยู่ในพื้นที่ว่างจะง่าย แต่ตอนเชื่อมรางเข้าหากันนี่แหละที่ยาก
ฉันมีเอกสารอธิบายที่เคยทำไว้ก่อนหน้านี้: Euler Spiral Explanation
ฉันอยากลองดูว่าสามารถใช้จุดตัดนั้นมาอินเตอร์โพเลตสปลายน์ใหม่ได้หรือเปล่า
ภาพอ้างอิง: ตัวอย่างภาพ
ถ้าทำแบบชาวโรมันแล้วสร้างเป็น ถนนเส้นตรง ก็ง่ายดี :-)
แน่นอนว่าชาวโรมันไม่ได้สนใจเรื่องที่ดินส่วนบุคคลอะไรนัก แถว Lincolnshire ในอังกฤษที่ฉันอยู่ ถนนโรมันยังถูกใช้อยู่จนทุกวันนี้
มีแค่ตอนขยายรันเวย์ RAF Scampton เท่านั้นที่ยอมเบี่ยงถนน
รายละเอียดดูได้ที่ Roman aqueduct
ทุกวันนี้แนวเส้นกึ่งกลางถนนยังตรงกับทิศของหอคอยโบสถ์อย่างสมบูรณ์ เป็นแนวคิดเรื่องที่ดินที่มีศาสนจักรเป็นศูนย์กลางซึ่งคล้ายกับของโรมัน