Box3D - เปิดตัวเอนจินฟิสิกส์ 3D แบบโอเพนซอร์ส
(box2d.org)- เมื่อความต้องการควบคุมการจำลองฟิสิกส์ 3D ขนาดใหญ่โดยตรงบนเซิร์ฟเวอร์เกมเพิ่มขึ้น Box3D จึงถูกเปิดตัวในฐานะเอนจินฟิสิกส์ 3D แบบโอเพนซอร์สในตระกูล Box2D
- โครงสร้างใกล้เคียงกับ Box2D และประกอบด้วย C API, ซอร์ส C17, sub-stepping solver, continuous collision, graph coloring, wide SIMD contact solver และ hooks สำหรับมัลติเธรด
- ประสบการณ์ที่ยากต่อการตอบโจทย์ gyroscopic torque, การล้มของต้นไม้ และความต้องการ broad-phase ขนาดใหญ่ใน Chaos ของ Unreal Engine เป็นที่มาหลักโดยตรงของการพัฒนา
- มีฟีเจอร์สำหรับเกม 3D เช่น triangle mesh, height field, baked compound collision, โลกขนาดใหญ่ที่ใช้ double, ความกำหนดแน่นอนข้ามแพลตฟอร์ม และ record/replay
- แม้ถูกใช้งานแล้วในหลายเกมและเอนจิน แต่ยังเป็น ซอฟต์แวร์ระยะอัลฟา และหลังแท็ก v0.1 ยังต้องเพิ่มการทดสอบและเอกสารให้พร้อมจนถึง v1.0
ลักษณะและฟีเจอร์หลักของ Box3D
- Box3D คือเอนจินฟิสิกส์ 3D แบบโอเพนซอร์สที่เผยแพร่บน GitHub และใกล้เคียงกับโปรเจกต์ที่ขยายการออกแบบของ Box2D ให้เหมาะกับความต้องการของเกม 3D
- สถาปัตยกรรมหลักแทบเหมือนกับ Box2D และซอร์สทั้งหมดของไลบรารีเขียนด้วย C17
- ฟีเจอร์หลักของเอนจินมีดังนี้
-
C API
- sub-stepping solver
- continuous collision
- graph coloring สำหรับ island ขนาดใหญ่
- wide SIMD contact solver
- hooks สำหรับมัลติเธรด
- scheduler ภายในแบบเลือกใช้ได้
- รองรับโลกขนาดใหญ่โดยใช้ double สำหรับตำแหน่ง
- ความกำหนดแน่นอนข้ามแพลตฟอร์ม
- การบันทึกและเล่นซ้ำ
- รวมถึงฟีเจอร์ collision ที่เพิ่มเข้ามาสำหรับเกม 3D
- triangle mesh collision
- height field collision
- baked compound collision
-
ความจำเป็นที่เกิดจาก The Legend of California
- แรงจูงใจแรกในการพัฒนา Box3D คือ The Legend of California ที่กำลังพัฒนาโดย Kintsugiyama
- เกมนี้สร้างด้วย Unreal Engine และโปรเจกต์เริ่มจาก Unreal 5.0
- การทดลองใช้ Chaos ซึ่งเป็นเอนจินฟิสิกส์พื้นฐานของ Unreal เผยให้เห็นข้อจำกัดหลายอย่าง
- ไม่รองรับการจำลอง gyroscopic torque ทำให้จัดการพฤติกรรมที่วัตถุเรียวยาวรักษาความเร็วเชิงมุมและหมุนต่อเนื่องเป็นเวลานานได้ยาก
- ผู้พัฒนาเคยนำเสนออัลกอริทึมแบบ drop-in ประมาณ 10 บรรทัดสำหรับเพิ่ม gyroscopic torque ให้เอนจินฟิสิกส์ในงาน GDC ปี 2015
- Epic เพิ่มฟีเจอร์นี้เข้า Unreal Engine ในช่วงปลายปี 2024
- ปัญหาที่ใหญ่กว่านั้นเกิดขึ้นกับ การตัดต้นไม้ ซึ่งเป็นฟีเจอร์หลักของเกมเอาตัวรอด
- ต้นไม้ที่ล้มเคลื่อนไหวผิดปกติและกระโดดตำแหน่งบนหน้าจอทันที
- สถานการณ์นี้เป็นการจำลองแคปซูลขนาดใหญ่ตกลงบน triangle mesh ที่เรียบ ซึ่งควรเป็นกรณีที่จัดการได้ง่าย
- เนื่องจากมีเอนทิตีนับแสนบนเซิร์ฟเวอร์ จึงต้องการ broad-phase ที่รวดเร็วด้วย
- เนื่องจากองค์ประกอบนี้เป็นแกนหลักของเกม จึงเห็นว่าเสี่ยงเกินไปที่จะฝากไว้กับ middleware
- ผู้พัฒนามีประสบการณ์สูงกับโครงสร้างข้อมูล broad-phase และเคยบรรยายเรื่องที่เกี่ยวข้องใน GDC
จาก Rubikon-Lite สู่ Box3D
- มีการพิจารณาใช้ Jolt ซึ่งเป็นเอนจินฟิสิกส์โอเพนซอร์สที่มีอยู่แล้ว แต่ Dirk Gregorius เสนอวิธี fork Rubikon-Lite แล้วปรับให้เข้ากับความต้องการ
- Dirk Gregorius เป็นโปรแกรมเมอร์ฟิสิกส์ผู้สร้างเอนจินฟิสิกส์แบบคัสตอม Rubikon ที่ใช้ใน Half-Life: Alyx และดูแล Rubikon เวอร์ชันงานอดิเรก/สำหรับใช้ที่บ้านอยู่
- เมื่อต่อ Rubikon-Lite เข้ากับ Unreal โดยตรง gyroscopic torque ก็ทำงาน และต้นไม้ก็ล้มได้ตามปกติ
- ในการเปลี่ยนเอนจินฟิสิกส์ของ Unreal สามารถใช้ทางลัดได้หลายอย่าง
- ใช้ระบบ scripting ของตัวเองแทน Blueprint
- พอร์ต Esoterica animation system มาใช้กับ Unreal
- ใช้ ECS แบบคัสตอมที่เชื่อมต่อกับ Box3D โดยตรง
- เมื่อพยายามนำการปรับแต่งประสิทธิภาพของ Box2D v3.0 มาใส่ใน fork ของ Rubikon-Lite จึงเกิดความจำเป็นที่จะต้องทำให้งาน 2D และ 3D ใกล้เคียงกันมากที่สุด
- แทบทุก API, โครงสร้างข้อมูล และอัลกอริทึมของ Rubikon-Lite ถูกแทนที่ด้วยโค้ดของ Box2D
- โครงสร้างข้อมูลของ 2D และ 3D จำนวนมากไม่ได้ขึ้นกับมิติของพื้นที่มากนัก
- เมื่อเวลาผ่านไป fork ของ Rubikon-Lite ก็กลายเป็น Box3D
- ปัจจุบัน Box3D ยังมีโค้ดของ Rubikon-Lite เหลืออยู่ในส่วนการสร้าง convex hull และอัลกอริทึม collision บางส่วน
- ส่วนที่เหลือเป็นโค้ดของ Box2D และโค้ดใหม่สำหรับ Box3D
- ฝั่ง Valve ยังพัฒนา Rubikon ต่อไป และ Dirk ได้พัฒนา optimization ที่คล้ายกับ Box3D ในเอนจินใหม่ชื่อ Ragnarok
ปรับเอนจินฟิสิกส์คัสตอมให้ตรงกับความต้องการของเกม
- The Legend of California เป็นโปรเจกต์ที่มีโลกเปิดขนาดใหญ่และโครงสร้างแบบ server-authoritative
- ต้นไม้ที่ล้ม, ragdoll, voxel, ประตู saloon และ tumbleweed ล้วนถูกจำลองบนเซิร์ฟเวอร์
- การใช้เอนจินฟิสิกส์แบบคัสตอมทำให้สามารถปรับฟีเจอร์และประสิทธิภาพให้ตรงกับความต้องการของเกมได้โดยตรง
- งานด้านประสิทธิภาพเน้นไปที่ ต้นไม้ที่ล้ม เป็นพิเศษ
- ต้น redwood ขนาดมหึมาตกลงบนภูมิประเทศแบบ voxel อย่างรวดเร็ว
- งานทำให้ mesh collision และ CCD ทำงานได้เสถียรมีสัดส่วนมาก
- ต้องสร้าง collision mesh สำหรับระบบ voxel ได้อย่างรวดเร็วขณะรันไทม์ด้วย
- voxel มีลักษณะเป็นกริด จึงจัดโครงสร้างด้วย median split ได้ดี
- streaming ก็เป็นความต้องการสำคัญเช่นกัน
- stronghold ประกอบขึ้นด้วย kitbashing
- stronghold ขนาดใหญ่อาจมี collision mesh แยกกันประมาณ 50,000 ชิ้น
- หากโหลดเข้าเอนจินฟิสิกส์ทีละชิ้นจะไม่มีประสิทธิภาพและใช้หน่วยความจำมาก
- จึงสร้าง compound collision system ที่ปรุง collision shape แยกต่างหากให้เป็นโครงสร้างข้อมูลที่เหมาะสม แล้วโหลดเป็น uber shape เดียว
- วิธีนี้ขจัด overhead จากการสร้าง body และ shape หลายพันรายการ
เหตุผลที่ทำเป็นโอเพนซอร์สและกลุ่มผู้ใช้เป้าหมาย
- ผู้พัฒนาเริ่มสร้างเอนจินฟิสิกส์สำหรับเกมมาตั้งแต่ปี 2004 และทุกครั้งที่ย้ายงานก็ต้องทิ้งผลงานนั้นไว้ข้างหลัง
- Box2D มีแง่มุมที่ถูกสร้างขึ้นเพื่อสะสมความรู้และความพยายามไว้ในโปรเจกต์โอเพนซอร์ส และใช้เป็นฐานสำหรับงานต่อไปในอนาคต
- ฝั่ง 3D มีภาระที่ต้องสร้างงานลักษณะคล้ายกันซ้ำแล้วซ้ำเล่า
- Kintsugiyama อนุญาตให้เปิด Box3D เป็นโอเพนซอร์สและทำงานกับมันเป็นส่วนหนึ่งของงานได้
- Box3D ไม่ใช่โปรเจกต์ที่พยายามแข่งขันกับเอนจินฟิสิกส์อื่น และหากผู้ใช้ชอบการออกแบบของ Box2D ก็มีโอกาสสูงที่ Box3D จะเหมาะเช่นกัน
วิธีเริ่มต้นและเอกสาร
- หากต้องการเริ่มใช้ Box3D ให้ติดตั้ง git และ CMake พื้นฐาน จากนั้น clone Box3D repository
- วิธี build อยู่ใน README
- หลัง build แล้วสามารถรัน sample เพื่อตรวจสอบฟีเจอร์ และเริ่มเขียนโค้ดจาก sample code ได้
- header ของเอนจินมีคอมเมนต์ Doxygen ครบถ้วน และคู่มือแบบเขียนเป็นเอกสารยังอยู่ระหว่างดำเนินการ
- มี documentation ที่โฮสต์ไว้ให้ใช้งาน
- โค้ดตัวอย่างขั้นต่ำดูได้ที่ HelloWorld test
สถานะการใช้งานปัจจุบันและแผนต่อไป
- Box3D ถูกใช้งานแล้วในหลายที่นอกเหนือจาก The Legend of California
- s&box: แพลตฟอร์มเกมของ Facepunch Studios
- Esoterica: เอนจินเกมโอเพนซอร์สที่นำโดย Bobby Anguelov
- A 1000-player space game: เกมมัลติเพลเยอร์ของ Glenn Fiedler
- แม้ถูกใช้งานในหลายเกมแล้ว แต่ Box3D ยังถือเป็น ซอฟต์แวร์ระยะอัลฟา
- มีแผนจะสร้างแท็ก v0.1 เร็ว ๆ นี้ และพัฒนาไปจนถึงรุ่น v1.0
- ยังต้องการการทดสอบเพิ่มเติมและเอกสารที่สมบูรณ์ขึ้น แต่ชุดฟีเจอร์อยู่ในตำแหน่งที่ดีแล้ว
- งานที่กำลังพิจารณามีดังนี้
- เสริมความสามารถด้านการเคลื่อนที่ของตัวละคร
- ปรับปรุงการลด ghost collision
- optimization
- ปรับปรุง joint solver
- คาดว่าจะสนับสนุน Box3D ไปอย่างไม่มีกำหนดควบคู่กับ Box2D
- เมื่อถึงระดับ mature แล้ว อาจพักจากงานฟีเจอร์ไปสักระยะ
- ต่างจาก Box2D คาดว่า Box3D จะรับ pull request และมีความเป็นไปได้ที่จะใช้ CLA
- จะไม่สร้างเว็บไซต์หรือเซิร์ฟเวอร์ Discord แยกสำหรับ Box3D
- อัปเดตจะให้ผ่านเว็บไซต์ Box2D
- การสนทนาจะเกิดขึ้นใน Box2D Discord server
- หากต้องการดู Box3D ทำงานใน The Legend of California สามารถติดตามได้ผ่าน home page และ Steam
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ทุกครั้งที่มีการพูดถึง Box2D ก็จะนึกถึงเรื่องเก่า ๆ พร้อมกับความเชื่อมโยงที่ชัดเจนว่าเป็นไลบรารี Box3D จากผู้เขียนคนเดียวกัน
https://kotaku.com/this-guy-created-angry-birds-physics-and-...
Vesterbacka ตอบว่า “มาหาผมหลังจบงานนะครับ” และบางทีตอนนั้น Erin อาจได้รับ hoodie ไปด้วย หลังจากนั้นไม่นานก็มีการเพิ่มชื่อเขาในเครดิต
สิ่งที่ทุกคนประหลาดใจคือคนฝ่ายการตลาดรู้ด้วยว่าใช้ physics engine ตัวไหน
Box2D เคยเป็นรากฐานของเกมอินดี้ที่อิงฟิสิกส์อยู่ช่วงหนึ่ง
สงสัยเหมือนกันว่าสภาพแวดล้อมตอนนี้ยังว่างพอให้กลับมารุ่งได้อีกไหม
การมีรายการใหม่เพิ่มเข้ามาในลิสต์ที่เล็กและปิดแบบนี้ เป็นเรื่องน่ายินดีเสมอ
C API ของ Box2D และตอนนี้ Box3D ใช้งานดีมากจริง ๆ
อันนี้น่ายินดีมาก Erin Catto เป็นแฮกเกอร์ที่ยอดเยี่ยม และขอบคุณที่แชร์โค้ดให้ชุมชนโอเพนซอร์ส
ในประกาศไม่ได้พูดถึง determinism แต่ก็อยากดูเรื่องนั้นเพิ่มเติมด้วย ถ้าจะทำเกมบิลเลียดแบบเครือข่ายด้วยฟิสิกส์ในตัวของ Unity จะค่อนข้างปวดหัว เพราะไคลเอนต์ต่าง ๆ ตกลงกันไม่ได้ว่าเกิดอะไรขึ้นกันแน่
ตามเอกสารระบุว่าไม่รองรับ
-ffast-mathดังนั้นบางทีอาจตั้งใจให้มี determinism ข้ามแพลตฟอร์มก็ได้: https://box2d.org/documentation3d/recording.htmlแก้ไข: ทำให้ความหมายเกี่ยวกับ
ffast-mathชัดเจนขึ้นในฐานะนักวิจัย machine learning ผมคุ้นกับ Box2D เพราะ สภาพแวดล้อม reinforcement learning มันเป็นฐานรองรับ environment benchmark มาตรฐานอย่าง Lunar Lander หรือ Car Racing ใน OpenAI Gym
https://gymnasium.farama.org/environments/box2d/car_racing/
การจำลองฟิสิกส์ เป็นหลุมกระต่ายอันตรายมาก แค่โฟกัสเฉพาะ rigid body และพฤติกรรมที่ดูสมจริงทางฟิสิกส์ ก็มีปัญหาเปิดจำนวนมากทั้งในการตรวจจับการชนและการแก้การชน
สำหรับ geometry มักใช้ convex approximation หรือ decomposition ส่วน solver ก็มักปรับจูนด้วยมือ และต้องแลก robusteness กับความแม่นยำเพื่อความเร็วอยู่ตลอด
รอสิ่งนี้มานานจริง ๆ เมื่อก่อนเคยประสบความสำเร็จพอสมควรกับ Box2D และในบรรดา F/OSS นี่เป็นผลงานระดับท็อปอย่างแน่นอน
Spectre VR บน Box3D? อันนี้ต้องออกมาแน่ ๆ มีกลิ่นอายของ Tanarus ด้วย
แก้ไข: ช่วงในเดโม Legend of California (บน Unreal Engine) ที่สลับไปเป็นการอัดและเล่นซ้ำ ดูเหมือนเป็นก้าวกระโดดที่ค่อนข้างฉับพลัน ตอนแรกอาจรู้สึกพื้นฐานอยู่บ้าง แต่ควรดูวิดีโอเดโมอย่างน้อยถึงนาทีที่ 18 มันเริ่มน่าสนใจแบบดิบ ๆ มาก และฟีเจอร์อัดกับเล่นซ้ำนั้นเจ๋งมาก
พอรู้จัก Rapier และก่อนหน้านั้นก็ Cannon กับ Ammo นิดหน่อย เลยสงสัยว่าเทียบกับ Box3D แล้วเป็นอย่างไร
เสริมว่าเมื่อไม่กี่สัปดาห์ก่อนผมทำ physics engine สำหรับพื้นที่ 3D เองและแชร์ไว้ที่นี่ด้วย จริง ๆ แล้วมันมีแค่บรรทัดเดียวที่ขยับวัตถุลงตามช่วงเวลา แต่ก็ทำงานได้ดีอย่างน่าประหลาดแล้ว จากมุมมองการเรียนรู้ มันสนุกมาก แนะนำให้ลองทำดู
เมื่อไม่กี่วันก่อนเพิ่งเริ่มใช้ Jolt ทำเกม 3D สไตล์ Tron สำหรับเบราว์เซอร์ เห็นอันนี้พอดีเลยน่าสนุกดี จนถึงตอนนี้ Jolt ทำงานได้ค่อนข้างดี แต่ก็จะลองดูอันนี้ด้วยแน่นอน
1 - ผมถือโดเมนนี้มาหลายปีแล้ว: https://lightcycles.io
สงสัยว่าจะเทียบกับ Jolt อย่างไร ทั้งคู่ดูมีประวัติดี ฝั่งหนึ่งเกี่ยวกับ Valve และ Erin Catto ส่วนอีกฝั่งใช้ในเกม Horizon
“ฝั่ง Valve ยังพัฒนา Rubikon ต่อไปอยู่ และ Dirk ได้พัฒนา optimization ที่คล้ายกับ Box3D ในเอนจินใหม่ Ragnarok เราจะได้เห็นมันในเกม Valve ในอนาคต”
เดี๋ยวนะ…
Box3D
3D
3
ความหวัง!