การเขียนโปรแกรมยานพาหนะในเกม
(wassimulator.com)- การสร้าง ยานพาหนะในเกม ให้ความสำคัญกับ ประสบการณ์การเล่น มากกว่าการใช้เอนจินฟิสิกส์จริงแบบครบถ้วน
- เกมแข่งรถและเกมจำลองแต่ละเกมมีความแตกต่างกันในด้าน วิธีควบคุมรถและความดื่มด่ำ
- การจำลองยานพาหนะประกอบด้วย 3 องค์ประกอบหลักคือ เครื่องยนต์/กระปุกเกียร์, ยาง, แชสซี
- การทำโมเดลยาง และแนวคิดเรื่อง slip คือหัวใจสำคัญในการสร้างความรู้สึกการขับขี่ที่สมจริง
- ผู้พัฒนาต้องกำหนดระดับของ การทำให้เรียบง่ายและการนามธรรมให้เหมาะกับคอนเซปต์ของเกม ด้วยตนเอง
ทำไมยานพาหนะถึงพิเศษในเกม
ยานพาหนะในเกมถูกใช้เป็น องค์ประกอบเชิงประสบการณ์ที่สำคัญ ในหลากหลายแนวเกม
ทั้งการควบคุมแบบเหนือจริงและการจำลองการขับขี่แบบสมจริง ต่างก็สื่อสาร “ความรู้สึกของการขับ” ได้
ตัวอย่างเช่น Mario Kart และ Assetto Corsa มุ่งไปที่ประสบการณ์ซึ่งแตกต่างกันโดยพื้นฐาน แต่ แก่นของการเขียนโปรแกรมยานพาหนะ นั้นเหมือนกัน
แทนที่จะพยายามจำลองกฎฟิสิกส์ของโลกจริงอย่างแม่นยำ จุดสำคัญคือจะถ่ายทอด สัมผัสของการขับขี่ที่ผู้เล่นคาดหวัง อย่างไร
เป้าหมายของผู้พัฒนาไม่ใช่ “การจำลองที่แม่นยำ” แต่คือ การออกแบบประสบการณ์ที่ตั้งใจให้เกิดขึ้น
ความพยายามช่วงแรกและบทเรียน: AV Racer
ในช่วงแรกของการพัฒนา AV Racer มีการทำให้รถเคลื่อนที่ด้วย โมเดลกลศาสตร์นิวตันแบบง่าย แต่ไม่สามารถให้ความรู้สึกเหมือนรถจริงได้
มีการลองปรับฮาร์ดโค้ดและจูนพารามิเตอร์ซ้ำแล้วซ้ำเล่าสำหรับการหมุน การดริฟต์ ความเร็วเชิงมุม และอื่น ๆ
แม้จะสร้างความรู้สึก “ไถล” เชิงประสบการณ์ได้ แต่ก็ยังไม่ตอบโจทย์ในสถานการณ์สุดขั้วหรือความคาดหวังของผู้ขับจริง
หากขาดความเข้าใจเรื่อง ฟิสิกส์ของรถจริงและประสบการณ์ของผู้ขับ ก็จะชนกับข้อจำกัดพื้นฐานในที่สุด
ท้ายที่สุด หากต้องการทำให้ถูกต้อง ก็จำเป็นต้องศึกษาหลักการของ พลวัตยานยนต์ ในโลกจริง
โครงสร้างของการจำลองยานพาหนะสำหรับเกม
ยานพาหนะในเกมสามารถแบ่งเชิงแนวคิดออกเป็น 3 ส่วนคือ เครื่องยนต์ (รวมกระปุกเกียร์), ล้อ/ยาง, แชสซี
เครื่องยนต์ (รวมกระปุกเกียร์)
- รับอินพุต เช่น คันเร่ง การเปลี่ยนเกียร์
- คำนวณ แรงบิดและ RPM แล้วแปลงตามอัตราทดเกียร์
- มีการป้อนกลับกับล้อ (กล่าวคือ มีการซิงก์สองทางระหว่างเครื่องยนต์กับล้อ)
ยาง (รวมล้อ)
- รับอินพุตหลากหลาย เช่น แรงบิดจากเครื่องยนต์ เบรก พวงมาลัย น้ำหนัก และแรงเสียดทานผิวถนน
- แรงทั้งหมดเกิดขึ้นที่ จุดสัมผัสระหว่างยางกับพื้นถนน
- ใช้การทำโมเดลยาง (เช่น Pacejka Magic Formula) เพื่อสร้างแรงอย่างสมจริง
แชสซี
- ทำหน้าที่เป็น rigid body ของเอนจินฟิสิกส์
- ตอบสนองต่ออิทธิพลภายนอก เช่น แรงจากยาง แรงต้านอากาศ แรงโน้มถ่วง และการชน
- กำหนดการเคลื่อนที่ของรถทั้งคันและส่งผลต่อการเปลี่ยนแปลงของโหลดบนยาง
| องค์ประกอบ | อินพุตหลัก | เอาต์พุตหลัก |
|---|---|---|
| เครื่องยนต์/กระปุกเกียร์ | คันเร่ง อินพุตเกียร์ ความเร็วล้อ | แรงบิดหมุน, RPM |
| ยาง | แรงบิดเครื่องยนต์ เบรก พวงมาลัย โหลด แรงเสียดทาน | แรงที่กระทำต่อแชสซี, การซิงก์เครื่องยนต์-ล้อ |
| แชสซี | แรงจากยาง ผลลัพธ์แอโรไดนามิก | โหลดล้อ, การเคลื่อนที่โดยรวม |
การจำลองรายละเอียดฟิสิกส์ทั้งหมดให้แม่นยำ 100% เหมือนรถจริงนั้น ไม่สมจริงในเชิงปฏิบัติ
หากไม่ใช่ห้องวิจัยของบริษัทรถยนต์ เกมและซิมูเลชันส่วนใหญ่จะใช้โมเดลแบบกล่องดำ สูตรต่าง ๆ และวิธีที่ทำให้ง่ายขึ้น
ดังนั้นสิ่งสำคัญคือผู้ออกแบบต้องตัดสินใจว่า จะละอะไรและจะเน้นอะไร
การออกแบบเครื่องยนต์และระบบส่งกำลัง
เครื่องยนต์ (หัวใจของการคำนวณแรงบิด)
- ในความเป็นจริงมีความซับซ้อนมาก แต่ในเชิงโค้ดสามารถสร้างเป็นโมเดลกล่องดำอย่างง่ายแบบ อินพุต (RPM, คันเร่ง) → เอาต์พุตแรงบิด ได้
- เส้นโค้งแรงบิด/กำลังสามารถกำหนดพารามิเตอร์เป็นตัวเลขหรือกราฟ เพื่อจำลองเครื่องยนต์ที่มีลักษณะแตกต่างกันได้
- ตัวอย่าง: ออกแบบเส้นโค้งด้วย Desmos โดยตรง เพื่อปรับ “บุคลิกของเครื่องยนต์”
กระปุกเกียร์
- สามารถทำได้อย่างง่ายด้วย ตารางอัตราทดเกียร์
- การเปลี่ยนเกียร์กำหนด ลักษณะการเร่ง ความเร็วสูงสุด ฯลฯ ของรถ
- แม้จะเรียบง่าย แต่ส่งผลอย่างมากต่อประสบการณ์การเล่น
| เกียร์ | อัตราทด |
|---|---|
| R | -2.92 |
| N | 0 |
| 1 | 2.50 |
| 2 | 1.61 |
| 3 | 1.10 |
| 4 | 0.81 |
| 5 | 0.68 |
การซิงก์ RPM ระหว่างเครื่องยนต์กับล้อ
- RPM ของเครื่องยนต์ และ ความเร็วเชิงมุมของล้อขับเคลื่อน เชื่อมโยงถึงกัน
- คำนวณเชิงตัวเลขด้วยสมการเชิงอนุพันธ์จากความต่างของตัวแปรสถานะทั้งสอง
- ทำให้ค่าทั้งสองค่อย ๆ ตรงกันในแต่ละเฟรมในลักษณะ “ไล่ตามค่าเป้าหมาย”
ด้วยแนวทางนี้จึงสามารถขยายไปได้ทั้งแบบ อาร์เคดและซิมูเลเตอร์
เมื่อผู้เล่นปรับพารามิเตอร์ของเครื่องยนต์ (เช่น โปรไฟล์แคม เทอร์โบ ฯลฯ) ก็สามารถเชื่อมโยงกับการเปลี่ยนแปลงของเสียงหรือเส้นโค้งกำลังได้
ถึงจะไม่ได้เลียนแบบการเคลื่อนไหวของเครื่องยนต์จริงทั้งหมด แต่ก็ยังถ่ายทอด ความชัดเจนของเหตุและผล และเสริมประสบการณ์การโต้ตอบได้
โมเดลยาง
บทบาทของยาง
- เป็นส่วนเดียวของรถที่ สัมผัสกับถนนจริง
- แรงทั้งหมดในการเร่ง เบรก และเข้าโค้ง เกิดขึ้นที่หน้าสัมผัสของยาง
- สร้างแรงโดยอาศัย การยืดหยุ่นเปลี่ยนรูป และคุณสมบัติแรงเสียดทานเป็นหลัก
แรงตามยาว (การเร่ง/เบรก) และอัตรา slip (Slip Ratio)
- ยางจะให้แรงยึดเกาะสูงสุดเมื่ออยู่ในสภาวะ แรงเสียดทานสถิต และเมื่อเกินขีดจำกัดจะเปลี่ยนเป็น แรงเสียดทานจลน์ (slip)
- Slip Ratio คำนวณจากความต่างระหว่างความเร็วรอบของล้อ (จากการขับ/เบรก) กับความเร็วการเคลื่อนที่บนพื้น
- Slip Ratio = (ความเร็วเชิงมุมของล้อ - ความเร็วเชิงมุมขณะหมุนอิสระ) / ความเร็วเชิงมุมขณะหมุนอิสระ
- โดยทั่วไป slip จะเกิดเมื่อเร่งแล้วล้อหมุนเร็วกว่าพื้น หรือเมื่อเบรกแล้วล้อหมุนช้ากว่าพื้น
- แรงยึดเกาะที่เปลี่ยนไปตาม Slip Ratio สามารถแสดงเป็นกราฟเส้นโค้งได้
- แรงยึดเกาะจะเพิ่มขึ้นจนถึงช่วงหนึ่ง แล้วลดลงอย่างรวดเร็วหลังผ่านจุดสูงสุด
สมการคำนวณแรงที่สะท้อน Slip Ratio (เช่น Pacejka Magic Formula)
- ใช้สูตรคำนวณที่รับ Slip Ratio เป็นอินพุตเพื่อให้ได้เส้นโค้งซับซ้อน (เช่น sine/arctangent ที่กำหนดพารามิเตอร์)
- จำเป็นต้องคำนวณแยกสำหรับยางแต่ละเส้น
แรงด้านข้าง (เข้าโค้ง) และมุม slip (Slip Angle)
- ระหว่างเข้าโค้ง หน้าสัมผัสของยางจะเปลี่ยนรูปจนเกิด Slip Angle
- Slip Angle = ความต่างของมุมระหว่างทิศทางการเคลื่อนที่จริงของยางกับทิศที่ล้อชี้อยู่
- เมื่อ Slip Angle เพิ่มขึ้น จะสร้างแรงยึดเกาะมากขึ้นเรื่อย ๆ แต่หากเกินขีดจำกัดก็จะเริ่มลื่นไถล
- ความสัมพันธ์ระหว่าง Slip Angle กับแรงยึดเกาะก็มีลักษณะเป็นเส้นโค้งเฉพาะตัวเช่นกัน
- มีพารามิเตอร์หลายอย่างที่ส่งผล เช่น โหลด แรงเสียดทาน และการเปลี่ยนแปลงแบบไดนามิก
ปรากฏการณ์อย่าง understeer/oversteer
- Understeer: เมื่อมุม slip ของล้อหน้ามากกว่าล้อหลัง รถจะเลี้ยวได้น้อยกว่าที่ตั้งใจ
- Oversteer: เมื่อล้อหลังมีมุม slip มากกว่า ส่วนท้ายรถจะไถลออกด้านนอก
- หากมีโมเดลยางที่ถูกต้อง ลักษณะการควบคุมเหล่านี้จะเกิดขึ้นเองตามธรรมชาติ
ข้อจำกัดร่วมกันของแรงตามยาว/แรงด้านข้าง (Friction Circle)
- เมื่อยางใช้แรงทั้งในทิศทางเร่ง/เบรกและเข้าโค้ง พร้อมกัน ค่าสูงสุดของแต่ละทิศทางจะส่งผลกระทบต่อกัน
- วงกลมแรงเสียดทาน (circle/ellipse) : ผลรวมของเวกเตอร์แรงทั้งสองต้องไม่เกินขีดจำกัด
- (F_{x}^2 + F_{y}^2 \le (\mu F_{z})^2)
- ตัวอย่าง: เมื่อเบรกแรงและหักพวงมาลัยแรงพร้อมกัน จะสูญเสียการควบคุมได้ง่าย
- ยางจริงมีลักษณะเป็นเส้นโค้ง/ไม่เชิงเส้น จึงต้องปรับพารามิเตอร์ให้สอดคล้องกับข้อมูลจริง
การคำนวณแรงในโค้ด
- คำนวณแรงตามยาว/แรงด้านข้างของยางแต่ละเส้นแยกกัน
- รวมเวกเตอร์ทั้งสองแล้ว normalize (scaling) ให้อยู่ภายในวงกลมแรงเสียดทานสมมุติ
- หากปรับพารามิเตอร์แบบไดนามิก ก็สามารถทดลองความเปลี่ยนแปลงด้านการควบคุมขั้นสูงได้อย่างง่ายดาย
การรวมเข้ากับฟิสิกส์เอนจินของรถทั้งคัน
- รวม แรงจากยาง + เอาต์พุตของระบบกันสะเทือน + อิทธิพลภายนอก (แรงโน้มถ่วง แรงต้าน ฯลฯ) เข้าสู่ แชสซี
- อัปเดตความเร่ง/ความเร็วทุกเฟรมตามกฎการเคลื่อนที่ของนิวตัน
องค์ประกอบเพิ่มเติมที่ขยายได้
- เรขาคณิตของระบบกันสะเทือน: แคมเบอร์, แคสเตอร์ ฯลฯ
- พลวัตยางขั้นสูง: อุณหภูมิ การสึกหรอ การขยายตัว การเปลี่ยนโหลด ฯลฯ
- แอโรไดนามิกส์: แรงกดลง แรงต้าน สปอยเลอร์ปรับอัตโนมัติ
- ระบบส่งกำลัง/ดิฟเฟอเรนเชียล, ABS, ESP, ข้อจำกัดการเลี้ยว เป็นต้น
- หากจำเป็นสามารถอ้างอิงหนังสือหลายเล่มได้ เช่น Race Car Vehicle Dynamics(Milliken), Mechanics of Pneumatic Tires(S.K. Clark)
บทสรุป
เพียงใช้โมเดลข้างต้น ก็สามารถสร้างรากฐานของ ยานพาหนะในเกมที่ทำงานคล้ายรถจริง ได้แล้ว
รายละเอียดเพิ่มเติมสามารถขยายต่อได้ตามเป้าหมายและความต้องการของผู้พัฒนา
หัวใจสำคัญคือ การทำให้หลักการพื้นฐานจากโลกจริงเรียบง่าย/เป็นนามธรรม และยึดปรัชญาการออกแบบที่เน้นประสบการณ์การเล่น
หากมีคำถามหรือข้อเสนอแนะ/คำแก้ไข สามารถติดต่อมาได้
2 ความคิดเห็น
ฉันดันอ่านผิดเป็น 'เขียนโปรแกรมรถในรถ' แล้วก็คิดว่า เอ๊ะ แบบนี้มันอันตรายไปหน่อยหรือเปล่านะ
ความคิดเห็นจาก Hacker News
สิ่งที่น่าสนใจคือ แม้ในโลกจริงเครื่องยนต์จะมีชิ้นส่วนที่เคลื่อนไหวได้มากที่สุด แต่ในโค้ดกลับเป็นส่วนที่ง่ายที่สุดส่วนหนึ่งของการจำลองรถทั้งระบบ เพราะหน้าที่หลักของเครื่องยนต์คือเครื่องคำนวณแรงบิด มันให้ความรู้สึกเหมือนกล่องดำที่รับอินพุตหลายอย่างแล้วส่งเอาต์พุตออกมาอย่างเดียวคือแรงบิดการหมุน ขอแนะนำวิดีโอชุด engine simulator ของ AngeTheGreat อย่างมาก มันถูกปรับแต่งมาดีพอที่จะทำงานแบบเรียลไทม์ได้ และน่าทึ่งจริง ๆ ที่มันยังสร้างเสียงเครื่องยนต์ที่สมจริงได้ด้วย ดู วิดีโอ engine simulator ของ AngeTheGreat
เกม Automation มีการทำระบบสร้าง/จำลองเครื่องยนต์ไว้ลึกมาก การทดลองเครื่องยนต์แบบต่าง ๆ สนุกจริง ๆ และส่วนการจำลองเสียงก็ยืมแนวคิดบางส่วนจากที่พูดถึงในวิดีโอของ AngeTheGreat ด้วย
ทำให้นึกถึงตัวอย่างคลาสสิกของการแอนิเมตลูกบาศก์ใน Houdini มีความสนุกแบบเดียวกับการได้เห็นสิ่งไม่คาดคิดเกิดขึ้นในการจำลองเครื่องยนต์สันดาปภายในแบบเรียลไทม์ ดู ตัวอย่างการแอนิเมตลูกบาศก์ใน Houdini
เหตุผลที่ผมเริ่มเขียนโปรแกรมก็เพราะพ่อกำลังเขียนเครื่องจำลองเครื่องยนต์ด้วย BASIC พ่อเป็นวิศวกรเครื่องกลและอยากเปรียบเทียบเส้นโค้งแรงบิดของเครื่องยนต์หลายแบบ ตอนที่เขาวาด wireframe ของลูกสูบ ชุดข้อเหวี่ยง และเพลาข้อเหวี่ยงที่เคลื่อนไหวด้วยเฟรมที่สั้นกว่าหนึ่งวินาทีโดยใช้คำสั่ง CIRCLE กับ LINE มันทำให้ผมช็อกมากว่าคอมพิวเตอร์สามารถวาดและทำให้บางอย่างเคลื่อนไหวได้ การได้รู้ว่าคนนี้ทำเรื่องคล้ายกันเพื่อสร้างเสียงรถแข่งที่ดีกว่ายิ่งน่าประทับใจจริง ๆ
มอเตอร์ EV ไม่ได้เรียบง่ายกว่ามากหรอกหรือ? เครื่องยนต์นั้นแพงและซับซ้อนเพราะใช้การระเบิดเล็ก ๆ เพื่อสร้างแรงบิด เลยสงสัยว่ารถส่วนใหญ่ในเกมจริง ๆ แล้วเคลื่อนที่เหมือน EV มากกว่าหรือเปล่า เว้นแต่ว่าจะจำลอง ICE (เครื่องยนต์สันดาปภายใน) ให้แม่นยำกว่านี้
ผมเคยรับผิดชอบงานจำลองรถทั้งหมดใน Army of Two และบทความนี้เป็นคู่มือเริ่มต้นที่ดีมาก การใช้โมเดลยางของ Pacejka กับทรานส์มิสชันดิฟเฟอเรนเชียลช่วยได้มาก นอกเหนือจากนั้น สิ่งที่น่าแปลกคือฟิสิกส์ของ anti-roll bar และระบบกันสะเทือนสำคัญมากต่อการทำให้การขับ “สนุก” ถ้าขาดสิ่งนี้ การขับจะลื่น ๆ และไม่ชวนอิน ซึ่งในวิดีโอเดโมก็มีความรู้สึกนั้นอยู่เหมือนกัน ถ้าไม่ทำ anti-roll bar และระบบกันสะเทือน รถจะคว่ำง่าย ทำให้คุณมัวแต่ไปไล่ปรับการลื่นไถลของยางหรือค่าความเสียดทานของพื้นผิว ทั้งที่จริงแล้วประสบการณ์การขับกลับแย่ลง
ขอบคุณมากสำหรับข้อมูลนี้! ไม่รู้มาก่อนเลยว่า anti-roll bar สำคัญขนาดนั้นในโมเดลพื้นฐาน ผมตั้งใจจะไปศึกษาเพิ่ม และถ้าทำได้ดีจะอัปเดตในบทความด้วย
ช่วงนี้ระบบกันสะเทือนรถผมมีปัญหา เลยได้สัมผัส “การขับที่ไม่สนุก” ด้วยตัวเอง ยิ่งรู้สึกร่วมกับคำพูดนี้มากขึ้น
เนื้อหานี้คล้ายกับสิ่งที่ผมไปค้นพบเองตอนทำเกม Flightle มาก ผมทำเกมจำลองการบินแบบ side-scrolling สำหรับมือถือ แต่การเคลื่อนไหวของเครื่องบินมันดูประหลาดมาก จนผมหงุดหงิดแล้วคิดว่า “มันจะยากอะไรนักหนา?” เลยเริ่มทำเอง พอศึกษาหลักการบินก็พบว่าระดับของ abstraction ที่เหมาะสมสำคัญมาก ถ้าไม่สมจริงพอก็ไม่สนุก แต่ถ้าสมจริงเกินไปก็บาลานซ์เกมยาก ดู ลิงก์ Flightle
ตอนนี้สายไปแล้วที่จะแก้คอมเมนต์เดิม แต่ผมรวบรวมประสบการณ์แบบละเอียดไว้เป็นบทความแยกแล้ว ลองดู บันทึกการสร้าง side-scrolling flight simulator ได้ อีกอย่างหนึ่งคือภายหลังผมลองเปลี่ยนเครื่องบินจากจุดเดียวให้เป็นโครงสร้างที่มีปีกสองข้างเชื่อมด้วยแท่ง ซึ่งจูนให้สนุกได้นรกมาก คนที่เก่งกว่านี้คงทำได้ดีกว่าผม
เล่นเกมแล้วสนุกมาก สำหรับผู้ใช้เดสก์ท็อป ขอเสนอว่าอาจให้ควบคุมสไลเดอร์ด้วยล้อเลื่อนเมาส์ได้
เมื่อก่อนผมเคยทำเกมจำลองรถและการดริฟต์บน iOS มันใช้ SpriteKit แต่จริง ๆ แล้วทำได้ง่ายในเอนจินเกม 2D ไหนก็ได้ ไอเดียพื้นฐานคือเอาล้อหน้าสองล้อเชื่อมกับตัวถังสี่เหลี่ยมด้วย pin joint แล้วออกแรงกับล้อ มุมของแรงคำนวณแบบนี้: x = force * cos(bodyRotation + wheelRotation) y = force * sin(bodyRotation + wheelRotation) จากนั้นก็เพิ่มอนุภาคสกิดเข้าไปด้วย ส่วนการดริฟต์ผมทำโดยปรับค่า damping ของล้อและตัวถัง ดู แอป Drift Mania Infinite Car Racer
เกมให้ความรู้สึกดีมาก! ผมชอบที่เริ่มได้ทันที อนุภาคสกิดใช้งานได้ผลดี ภาพก็ดูดีด้วย แต่สำหรับผมมันยากเกินไปหน่อย ถ้ามี “โหมดเซน” ที่ชนกำแพงแล้วไม่รีเซ็ตก็น่าจะทำให้ผมเล่นได้นานขึ้น
เกมเจ๋งมาก ตลาดแอปแข่งขันกันหนักขนาดนี้ แต่ได้รีวิวตั้ง 22 รายการถือว่าน่าทึ่งเลย อยากรู้ว่าคุณโปรโมตยังไง
“เกมนี้มอบกราฟิกอันน่าทึ่ง...” มุกถ่อมตัวแบบนั้นน่าเอ็นดูมาก กำลังดาวน์โหลดเลย
บทความนี้น่าสนใจจริง ๆ แค่ส่วนโมเดลยางก็คงอ่านซ้ำหลายรอบแล้ว ถ้าไม่ต้องการทั้งการจำลองหรือความสมจริง ขอแค่ความสนุก เกมอาร์เคดยุค 1980 อย่าง Super Sprint ก็ยังไม่มีใครโค่นได้ ดู ข้อมูลเกม Super Sprint
ขอคัดลอก/วางบางส่วนจากบันทึกเลกเชอร์ที่เกี่ยวข้องซึ่งผมเก็บไว้: Hamish Young, ฟิสิกส์รถและไดนามิกยางใน ‘Just Cause 4’ Vehicle Physics and Tire Dynamics in 'Just Cause 4' Jan Erik Steel & Patrick Donnelly, ฟิสิกส์รถ Supercharged ใน ‘Skylanders’ Supercharged! Vehicle Physics in 'Skylanders' Edward Pereira, เลกเชอร์เกี่ยวกับวิทยาศาสตร์ของการขับออฟโรด The Science of Off-Roading Jared Cone, ฟิสิกส์ของ ‘Rocket League’ It IS Rocket Science! The Physics of 'Rocket League' Detailed
ตัวบทความเองยอดเยี่ยม แต่ช่วงต้นค่อนข้างทำให้งงเล็กน้อย เขาบอกว่ารถมอบประสบการณ์เหนือจริงได้หลากหลายในเกม แต่กลับอ้างว่าปืนไม่เป็นแบบนั้น ซึ่งผมสงสัยมาก เพราะจริง ๆ ในเกมมีปืนเหนือจริงมากมายเต็มไปหมด อีกทั้งเขายังบอกว่าความคาดหวังของเราต่อการขับรถมาจากประสบการณ์ทางอ้อมผ่านสื่อหรือวัฒนธรรม มากกว่าจะมาจากประสบการณ์ตรง แต่เอาจริง ๆ เรื่องนี้น่าจะใช้กับปืนมากกว่าหรือเปล่า? แม้แต่การกระโดดเองก็ถูกจัดการในเกมได้หลากหลายมาก และความคาดหวังของผมต่อการกระโดดก็มาจาก ‘ประสบการณ์ที่เคยกระโดดจริง’ มากกว่าเสียอีก
ดูเหมือนเขาจะไม่ได้มีประสบการณ์ทำเกม FPS มากนัก อาวุธจริงต่างจากประสบการณ์ในเกม ถ้าเกมเหมือนปืนจริงเป๊ะ ๆ มันคงสนุกน้อยลงและน่าอึดอัดกว่านี้ เกมแข่งรถก็เหมือนกัน ต้องบิดความจริงบ้างเพื่อความสนุก
ผมคิดว่าประเด็นนี้ไม่ใช่เรื่อง ‘realism’ แต่เป็นเรื่อง ‘verisimilitude’ มากกว่า สิ่งสำคัญคือการสร้างประสบการณ์ที่ผู้เล่น “เชื่อได้” ปืนในเกมต่างจากของจริง แต่ให้ความสำคัญกับแฟนตาซีว่ามันทรงพลังและน่ากลัว การกระโดดก็เช่นกัน แม้จะไม่ได้มีฐานจากความจริงนัก แต่ถูกออกแบบให้เหมาะกับเป้าหมายของเกมมากที่สุด ในทางกลับกัน สิ่งอย่างรถยนต์ที่สามารถทำให้เป็นระบบและอิงข้อเท็จจริงทางฟิสิกส์ได้ ก็มักมุ่งไปสู่การนำเสนอที่สมจริงจนเทียบกับซิมูเลชันในอุตสาหกรรมได้ แต่การเคลื่อนไหวของมนุษย์ ระบบเศรษฐกิจ หรือจังหวะการต่อสู้ กลับยากกว่าจะทำให้สมจริงในระดับนั้น จึงมักถูกนำเสนอแบบการ์ตูนมากกว่า นักออกแบบเกมต้องประนีประนอมให้เหมาะกับความคาดหวังของผู้เล่นและเป้าหมายรวมของเกม การไล่ตามความสมจริงเชิงรายละเอียดมากเกินไปจนทำให้โครงสร้างโดยรวมพัง เป็นกับดักที่พบบ่อย
ตัวอย่าง FPS เป็นสิ่งที่ผมนึกขึ้นมาสด ๆ ตอนอยู่บนเวที แต่พอคิดดูดี ๆ ก็พบว่าไม่ใช่ตัวอย่างที่ดีนัก ขอบคุณที่ทักท้วง
เหมือนจะขาดเรื่องเนิน ทางลาด และระบบกันสะเทือนไป Unreal Engine มีทั้งเดโมรถแบบง่ายมาก และเดโมที่มีโมเดลระบบกันสะเทือนจริงด้วย
ตอนท้ายของการบรรยายและบทความมีวิดีโอสั้น ๆ แสดงสถานะล่าสุดของเอนจิน ซึ่งในวิดีโอก็มีทั้งเนิน ทางลาด และภูมิประเทศหลากหลาย ในการบรรยายใช้แค่กริดระนาบเรียบ ระบบกันสะเทือนก็มีทำไว้แล้วเช่นกัน แต่ไม่ได้ลงลึกเพราะมันไม่ใช่ปัญหาเฉพาะของรถยนต์เท่าไร เป็นฟังก์ชันทั่วไปที่มีไว้รองรับน้ำหนักมากกว่า จึงไม่ค่อยเข้ากับความยาวและลำดับของการนำเสนอ
อย่างที่ Wassim พูดไว้ในช่วงถาม-ตอบ ระบบกันสะเทือนเป็นสิ่งที่เอนจินฟิสิกส์จัดการให้เอง และผลของมันก็สะท้อนอยู่ในโหลดของยาง จึงส่งผลต่อแรงจากยางอย่างเป็นธรรมชาติด้วย
มีเลกเชอร์ GDC ที่ดีเกี่ยวกับฟิสิกส์รถใน Rocket League ดูได้ที่ เลกเชอร์ฟิสิกส์ Rocket League อนึ่ง ผมเป็นเพื่อนร่วมทีมที่ดูแลงานส่วนอื่น ไม่ได้ทำตัวเกมไคลเอนต์ของ Rocket League โดยตรง
อ่านบทความนี้แล้วทำให้นึกถึงเลกเชอร์ดี ๆ เรื่องฟิสิกส์การแข่งรถ Andre Marziali - Physics of Racing