Box3D - Mesin Fisika 3D Open Source Dirilis
(box2d.org)- Seiring meningkatnya kebutuhan untuk mengendalikan langsung simulasi fisika 3D berskala besar di server game, Box3D dirilis sebagai mesin fisika 3D open source dari lini Box2D
- Strukturnya mirip dengan Box2D dan mencakup C API, source C17, solver sub-stepping, continuous collision, graph coloring, wide SIMD contact solver, serta hook multithreading
- Pengalaman kesulitan memenuhi kebutuhan gyroscopic torque, pohon tumbang, dan broad-phase skala besar di Chaos milik Unreal Engine menjadi latar belakang langsung pengembangannya
- Fitur untuk game 3D mencakup triangle mesh, height field, baked compound collision, large world berbasis double, determinisme lintas platform, serta record/replay
- Meski sudah digunakan di beberapa game dan engine, saat ini masih berupa software alpha, dan membutuhkan lebih banyak pengujian serta dokumentasi sebelum mencapai v1.0 setelah tag v0.1
Karakter Box3D dan fitur utamanya
- Box3D adalah mesin fisika 3D open source yang dipublikasikan di GitHub, dan dapat dilihat sebagai proyek yang memperluas desain Box2D agar sesuai dengan kebutuhan game 3D
- Arsitektur intinya hampir sama dengan Box2D, dan seluruh source library ditulis dalam C17
- Fitur utama engine adalah sebagai berikut
-
C API
- solver sub-stepping
- continuous collision
- graph coloring untuk island besar
- wide SIMD contact solver
- hook multithreading
- scheduler internal opsional
- dukungan large world yang memakai double untuk posisi
- determinisme lintas platform
- record dan replay
- juga mencakup fitur collision tambahan untuk game 3D
- collision triangle mesh
- collision height field
- baked compound collision
-
Kebutuhan yang muncul dari The Legend of California
- Motivasi awal pengembangan Box3D adalah The Legend of California yang sedang dikembangkan di Kintsugiyama
- Game ini dibuat dengan Unreal Engine, dan proyeknya dimulai di Unreal 5.0
- Dalam eksperimen dengan Chaos, mesin fisika bawaan Unreal, terlihat beberapa keterbatasan
- Chaos tidak mendukung simulasi gyroscopic torque, sehingga sulit menangani perilaku benda ramping yang mempertahankan kecepatan sudut dan terus berputar lama
- Pengembang pernah mempresentasikan algoritme drop-in sekitar 10 baris untuk menambahkan gyroscopic torque ke mesin fisika pada GDC 2015
- Epic menambahkan fitur ini ke Unreal Engine pada akhir 2024
- Masalah yang lebih besar muncul pada fitur inti game survival, yaitu menebang pohon
- Pohon yang roboh bergerak tidak beraturan dan sesekali berpindah tempat di layar
- Situasinya adalah simulasi kapsul besar yang jatuh di atas triangle mesh halus, kasus yang seharusnya mudah ditangani
- Karena ada ratusan ribu entitas di server, dibutuhkan juga broad-phase yang cepat
- Karena elemen ini sangat sentral bagi game, dianggap terlalu berisiko jika diserahkan ke middleware
- Pengembang memiliki banyak pengalaman dengan struktur data broad-phase dan juga pernah membawakan presentasi GDC terkait hal itu
Dari Rubikon-Lite ke Box3D
- Penggunaan Jolt, mesin fisika open source yang sudah ada, sempat dipertimbangkan, tetapi Dirk Gregorius mengusulkan pendekatan mem-fork Rubikon-Lite dan memodifikasinya sesuai kebutuhan
- Dirk Gregorius adalah programmer fisika yang membuat Rubikon, mesin fisika kustom yang digunakan di Half-Life: Alyx, dan ia juga memelihara Rubikon versi hobi/rumahan
- Saat Rubikon-Lite dihubungkan langsung ke Unreal, gyroscopic torque berfungsi dan pohon juga roboh dengan normal
- Dalam mengganti mesin fisika Unreal, beberapa jalan pintas bisa dimanfaatkan
- Menggunakan sistem scripting sendiri, bukan Blueprint
- Mem-porting Esoterica animation system ke Unreal untuk digunakan
- Menggunakan ECS kustom yang terhubung langsung ke Box3D
- Saat mencoba membawa optimisasi Box2D v3.0 ke fork Rubikon-Lite, muncul kebutuhan untuk menjaga agar pekerjaan 2D dan 3D tetap semirip mungkin
- Hampir semua API, struktur data, dan algoritme Rubikon-Lite diganti dengan kode Box2D
- Sebagian besar struktur data di 2D dan 3D ternyata tidak bergantung pada dimensi ruang
- Seiring waktu, fork Rubikon-Lite berubah menjadi Box3D
- Saat ini Box3D masih menyisakan kode Rubikon-Lite untuk pembuatan convex hull dan beberapa algoritme collision
- Selebihnya terdiri dari kode Box2D dan kode baru khusus Box3D
- Di pihak Valve, Rubikon terus berkembang, dan Dirk mengembangkan optimisasi serupa Box3D pada engine baru bernama Ragnarok
Menyesuaikan kebutuhan game dengan mesin fisika kustom
- The Legend of California adalah proyek dengan open world besar dan arsitektur server-authoritative
- Pohon tumbang, ragdoll, voxel, pintu saloon, dan tumbleweed semuanya disimulasikan di server
- Dengan mesin fisika kustom, fitur dan performa bisa disesuaikan langsung dengan kebutuhan game
- Pekerjaan performa terutama banyak difokuskan pada pohon tumbang
- Pohon redwood raksasa jatuh cepat di atas terrain voxel
- Banyak pekerjaan dilakukan agar mesh collision dan CCD bekerja stabil
- Collision mesh untuk sistem voxel juga harus bisa dibuat cepat saat runtime
- Karena voxel berbentuk grid, median split bekerja dengan baik untuk penyusunannya
- Streaming juga merupakan kebutuhan penting
- Stronghold disusun dengan teknik kitbashing
- Stronghold besar bisa memiliki sekitar 50.000 collision mesh terpisah
- Jika semuanya dimuat satu per satu ke mesin fisika, hasilnya tidak efisien dan memakan banyak memori
- Karena itu dibuat sistem compound collision yang memasak collision shape terpisah ke dalam struktur data yang dioptimalkan lalu memuatnya sebagai satu uber shape
- Pendekatan ini menghilangkan overhead pembuatan ribuan body dan shape
Alasan dibuka sebagai open source dan target pengguna
- Pengembang sudah membuat mesin fisika untuk game sejak 2004, dan setiap kali pindah kerja ia harus meninggalkan hasil pekerjaannya
- Box2D sebagian dibuat agar pengetahuan dan upaya tersebut bisa diakumulasikan dalam proyek open source dan menjadi dasar bagi pekerjaan berikutnya
- Di sisi 3D, ada beban untuk terus mengulang pekerjaan serupa dari awal
- Kintsugiyama mengizinkan Box3D dirilis sebagai open source dan dikerjakan sebagai bagian dari pekerjaan
- Box3D bukan proyek yang dibuat untuk bersaing dengan mesin fisika lain, tetapi jika seseorang menyukai desain Box2D, besar kemungkinan Box3D juga cocok untuknya
Cara memulai dan dokumentasi
- Untuk mulai memakai Box3D, cukup pasang git dan CMake, lalu clone repository Box3D
- Cara build tersedia di README
- Setelah build, pengguna dapat menjalankan sample untuk memeriksa fitur dan mulai menulis kode dari sample tersebut
- Header engine memiliki komentar Doxygen lengkap, dan manual tertulis masih dalam proses
- Tersedia documentation yang di-host
- Kode contoh minimum bisa dilihat di HelloWorld test
Penggunaan saat ini dan rencana ke depan
- Selain The Legend of California, Box3D juga sudah digunakan di beberapa tempat lain
- s&box: platform game dari Facepunch Studios
- Esoterica: engine game open source yang dipimpin Bobby Anguelov
- A 1000-player space game: game multipemain dari Glenn Fiedler
- Meski sudah digunakan di beberapa game, Box3D masih dianggap sebagai software alpha
- Dalam waktu dekat akan dibuat tag v0.1 dan dikembangkan menuju rilis v1.0
- Masih dibutuhkan lebih banyak pengujian dan dokumentasi yang lebih matang, tetapi set fiturnya sudah berada di posisi yang baik
- Beberapa pekerjaan yang sedang dipertimbangkan adalah sebagai berikut
- peningkatan fitur pergerakan karakter
- perbaikan mitigasi ghost collision
- optimisasi
- peningkatan joint solver
- Box3D diperkirakan akan terus didukung tanpa batas waktu bersama Box2D
- Saat sudah mencapai tahap matang, pekerjaan penambahan fitur bisa dihentikan sementara
- Berbeda dengan Box2D, Box3D diperkirakan akan menerima pull request, dan mungkin akan menggunakan CLA
- Tidak akan dibuat situs web atau server Discord terpisah untuk Box3D
- Update akan disediakan lewat situs Box2D
- Percakapan akan berlangsung di server Discord Box2D
- Untuk melihat Box3D berjalan di The Legend of California, pengguna bisa mengikuti lewat home page dan Steam
1 komentar
Pendapat di Hacker News
Setiap kali Box2D disebut, saya teringat kisah lama, bersama kaitan yang jelas bahwa ini adalah library Box3D dari penulis yang sama
https://kotaku.com/this-guy-created-angry-birds-physics-and-...
Vesterbacka menjawab, “Temui saya setelah acara selesai,” dan mungkin saat itulah Erin mendapat hoodie. Tak lama setelah itu namanya kabarnya ditambahkan ke credit
Yang membuat semua orang terkejut adalah fakta bahwa orang pemasaran tahu engine fisika apa yang digunakan
Box2D dulu pernah menjadi fondasi bagi game indie berbasis fisika
Saya penasaran apakah ekosistem sekarang cukup kosong sehingga ada ruang untuk kebangkitan lagi
Tambahan baru pada daftar sekecil dan setertutup ini selalu patut disambut
C API Box2D, dan kini Box3D, sangat enak digunakan
Ini benar-benar kabar menyenangkan. Erin Catto adalah hacker hebat, dan terima kasih karena telah membagikan kodenya ke komunitas open source
Pengumumannya tidak membahas determinisme (determinism), tetapi saya ingin melihat lebih jauh soal itu juga. Jika mencoba membuat game biliar jaringan dengan fisika bawaan Unity, cukup memusingkan karena klien-klien tidak bisa saling menyepakati apa yang terjadi
Menurut dokumentasi,
-ffast-mathtidak didukung, jadi mungkin saja determinisme lintas platform memang dimaksudkan: https://box2d.org/documentation3d/recording.htmlEdit: memperjelas maksud tentang
ffast-mathSebagai peneliti machine learning, saya akrab dengan Box2D berkat lingkungan reinforcement learning. Ini menjadi fondasi di balik lingkungan benchmark standar seperti Lunar Lander atau Car Racing di OpenAI Gym
https://gymnasium.farama.org/environments/box2d/car_racing/
Simulasi fisika adalah lubang kelinci yang berbahaya. Bahkan jika hanya berfokus pada rigid body dan gerakan yang masuk akal secara fisik, masih ada banyak masalah terbuka dalam deteksi tumbukan dan penyelesaian tumbukan
Untuk geometri, biasanya dipakai aproksimasi atau dekomposisi konveks; solver disetel manual; dan ketangguhan serta presisi terus-menerus harus ditukar dengan kecepatan
Saya benar-benar menunggu ini. Dulu saya cukup sukses memakai Box2D, dan ini jelas termasuk hasil karya papan atas di antara F/OSS
Spectre VR berbasis Box3D? Rasanya ini pasti akan muncul. Ada nuansa Tanarus juga
Edit: bagian di demo Legend of California (berbasis Unreal Engine) yang beralih ke perekaman dan pemutaran ulang terasa seperti lompatan yang cukup drastis. Meski awalnya terasa agak mendasar, pastikan menonton setidaknya sampai menit ke-18 di video demo. Setelah itu menjadi cukup liar dan menarik, dan fitur perekaman serta pemutaran ulangnya keren
Saya sedikit mengenal Rapier, dan sebelumnya Cannon serta Ammo, jadi penasaran bagaimana perbandingannya dengan Box3D
Tambahan: beberapa minggu lalu saya membuat sendiri engine fisika untuk ruang 3D dan juga membagikannya di sini. Sebenarnya hanya satu baris yang menurunkan objek ke bawah pada interval tertentu, tetapi sudah bekerja dengan sangat mengejutkan. Dari sudut pandang pembelajaran, ini benar-benar menyenangkan, jadi saya rekomendasikan untuk dicoba
Sejak beberapa hari lalu saya mulai memakai Jolt untuk membuat game 3D bergaya Tron di browser, jadi menarik melihat ini muncul tepat sekarang. Sejauh ini Jolt bekerja cukup baik, tetapi saya juga pasti akan melihat yang ini
1 - Saya sudah memiliki domain ini selama beberapa tahun: https://lightcycles.io
Saya penasaran bagaimana ini dibandingkan dengan Jolt. Keduanya tampak punya rekam jejak bagus; yang satu dari sisi Valve dan Erin Catto, sedangkan yang lain digunakan di game-game Horizon
“Di pihak Valve, Rubikon terus dikembangkan, dan Dirk mengembangkan optimisasi yang mirip dengan Box3D untuk engine baru Ragnarok. Kita akan melihatnya di game Valve mendatang.”
Tunggu dulu…
Box3D
3D
3
Harapan!