1 คะแนน โดย GN⁺ 4 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เมื่อความต้องการควบคุมการจำลองฟิสิกส์ 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 ความคิดเห็น

 
GN⁺ 4 시간 전
ความคิดเห็นบน Hacker News
  • ทุกครั้งที่มีการพูดถึง Box2D ก็จะนึกถึงเรื่องเก่า ๆ พร้อมกับความเชื่อมโยงที่ชัดเจนว่าเป็นไลบรารี Box3D จากผู้เขียนคนเดียวกัน
    https://kotaku.com/this-guy-created-angry-birds-physics-and-...

    • เป็นเรื่องที่ได้ยินมาตอนทำงานที่ Rovio (ผู้สร้าง Angry Birds): ระหว่างที่ Peter Vesterbacka หัวหน้าฝ่ายการตลาดกำลังบรรยายและรับคำถาม ผู้ฟังคนหนึ่งถามว่าเกมใช้ physics engine อะไร แล้ว Vesterbacka ตอบถูกต้องว่า Box2D จากนั้นคนนั้นก็พูดว่า “แล้วทำไมไม่มีชื่อในเครดิตล่ะครับ? อ้อ ผมคือ Erin Catto ผู้สร้าง Box2D”
      Vesterbacka ตอบว่า “มาหาผมหลังจบงานนะครับ” และบางทีตอนนั้น Erin อาจได้รับ hoodie ไปด้วย หลังจากนั้นไม่นานก็มีการเพิ่มชื่อเขาในเครดิต
      สิ่งที่ทุกคนประหลาดใจคือคนฝ่ายการตลาดรู้ด้วยว่าใช้ physics engine ตัวไหน
  • Box2D เคยเป็นรากฐานของเกมอินดี้ที่อิงฟิสิกส์อยู่ช่วงหนึ่ง
    สงสัยเหมือนกันว่าสภาพแวดล้อมตอนนี้ยังว่างพอให้กลับมารุ่งได้อีกไหม

    • ตั้งแต่แรกก็มี 3D physics engine แบบฟรีและโอเพนซอร์สไม่มากนัก รุ่นบรรพบุรุษเก่า ๆ ก็มี ODE, Bullet, Newton Dynamics ซึ่งทั้งหมดเริ่มออกมาในช่วงต้นทศวรรษ 2000 จากนั้นก็แทบว่างไปเกือบ 20 ปี ก่อนจะมี Jolt ในปี 2021 และตอนนี้ก็ Box3D ดูเหมือนเป็นแนวโน้มแบบนั้น
      การมีรายการใหม่เพิ่มเข้ามาในลิสต์ที่เล็กและปิดแบบนี้ เป็นเรื่องน่ายินดีเสมอ
    • จำช่วงที่ติด Incredibots ได้ ตอนนั้นเป็นครั้งแรกที่รู้จัก Box2D
    • Box2D ยังดีมากอยู่ สำหรับ โปรเจกต์เกมฟิสิกส์ 2D แนะนำได้อย่างมั่นใจ
      C API ของ Box2D และตอนนี้ Box3D ใช้งานดีมากจริง ๆ
    • เมื่อก่อนเคยลองใช้ Chipmunk2D นิดหน่อย และสำหรับงานแปลก ๆ ที่ผมทำอยู่ มันใช้ง่ายกว่า
  • อันนี้น่ายินดีมาก Erin Catto เป็นแฮกเกอร์ที่ยอดเยี่ยม และขอบคุณที่แชร์โค้ดให้ชุมชนโอเพนซอร์ส
    ในประกาศไม่ได้พูดถึง determinism แต่ก็อยากดูเรื่องนั้นเพิ่มเติมด้วย ถ้าจะทำเกมบิลเลียดแบบเครือข่ายด้วยฟิสิกส์ในตัวของ Unity จะค่อนข้างปวดหัว เพราะไคลเอนต์ต่าง ๆ ตกลงกันไม่ได้ว่าเกิดอะไรขึ้นกันแน่

    • กำลังหาเรื่องเดียวกันอยู่ มี กลไก replay เลยดูเหมือนน่าจะ deterministic อยู่บ้าง แต่ถ้าเป็นฟิสิกส์แบบ floating point ก็อาจไม่ใช่ข้ามแพลตฟอร์ม
      ตามเอกสารระบุว่าไม่รองรับ -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 มันเริ่มน่าสนใจแบบดิบ ๆ มาก และฟีเจอร์อัดกับเล่นซ้ำนั้นเจ๋งมาก

    • ผมนึกถึง Tanarus อยู่เสมอ แต่แทบไม่เคยเห็นใครพูดถึงเลย
  • พอรู้จัก 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 ในอนาคต”
    เดี๋ยวนะ…

    • อย่าคาดหวังมากเกินไปน่าจะดีกว่า อาจเอาไปใช้กับโหมดเกมวอลเลย์บอลของ Deadlock
    • มีข่าวว่า Valve กำลังทำเกมที่มีโค้ดเนมว่า HLX และใช้ฟีเจอร์ฟิสิกส์เยอะมาก แต่ไม่รู้เลยว่า “HLX” หมายถึงอะไร
    • Valve
      Box3D
      3D
      3
      ความหวัง!
    • Half-Life 2D ยืนยันแล้ว?
    • Day of Defeat Source 2.1 เหลืออีกแค่หนึ่งสัปดาห์!