Box3D - Công bố engine vật lý 3D mã nguồn mở
(box2d.org)- Khi nhu cầu tự kiểm soát mô phỏng vật lý 3D quy mô lớn trên máy chủ game ngày càng tăng, Box3D được công bố như một engine vật lý 3D mã nguồn mở thuộc dòng Box2D
- Cấu trúc gần với Box2D và bao gồm C API, mã nguồn C17, solver sub-stepping, va chạm liên tục, tô màu đồ thị, solver tiếp xúc wide SIMD, cùng các hook đa luồng
- Trải nghiệm khó đáp ứng các yêu cầu về mô-men xoắn con quay hồi chuyển, cây đổ và broad-phase quy mô lớn trong Chaos của Unreal Engine là bối cảnh trực tiếp dẫn đến việc phát triển
- Các tính năng dành cho game 3D gồm mesh tam giác, height field, baked compound collision, world lớn dựa trên double, tính quyết định đa nền tảng, và ghi/phát lại
- Dù đã được dùng trong nhiều game và engine, dự án vẫn là phần mềm alpha; sau tag v0.1, cần bổ sung kiểm thử và tài liệu cho đến v1.0
Bản chất và các tính năng cốt lõi của Box3D
- Box3D là một engine vật lý 3D mã nguồn mở được công bố trên GitHub, gần với một dự án mở rộng thiết kế của Box2D để phù hợp với nhu cầu game 3D
- Kiến trúc cốt lõi gần như giống Box2D, và toàn bộ mã nguồn thư viện được viết bằng C17
- Các tính năng chính của engine gồm
-
C API
- Solver sub-stepping
- Va chạm liên tục
- Tô màu đồ thị cho các island lớn
- Solver tiếp xúc wide SIMD
- Hook đa luồng
- Scheduler nội bộ tùy chọn
- Hỗ trợ world lớn dùng double cho vị trí
- Tính quyết định đa nền tảng
- Ghi và phát lại
- Cũng bao gồm các tính năng va chạm được thêm cho game 3D
- Va chạm mesh tam giác
- Va chạm height field
- baked compound collision
-
Nhu cầu phát sinh từ The Legend of California
- Động lực phát triển ban đầu của Box3D là The Legend of California, đang được phát triển tại Kintsugiyama
- Game này được làm bằng Unreal Engine, và dự án bắt đầu từ Unreal 5.0
- Trong quá trình thử nghiệm Chaos, engine vật lý mặc định của Unreal, nhiều giới hạn đã lộ ra
- Do không hỗ trợ mô phỏng mô-men xoắn con quay hồi chuyển, việc xử lý chuyển động của các vật thể mảnh quay lâu trong khi vẫn bảo toàn vận tốc góc trở nên khó khăn
- Nhà phát triển từng trình bày tại GDC 2015 một thuật toán drop-in khoảng 10 dòng để thêm mô-men xoắn con quay hồi chuyển vào engine vật lý
- Epic đã thêm tính năng này vào Unreal Engine vào cuối năm 2024
- Vấn đề lớn hơn xuất hiện ở chặt cây, một tính năng cốt lõi của game sinh tồn
- Cây đang đổ chuyển động bất thường và dịch chuyển tức thời trên màn hình
- Tình huống này là mô phỏng một capsule lớn rơi lên một mesh tam giác trơn, vốn đáng lẽ là trường hợp dễ xử lý
- Vì máy chủ có hàng trăm nghìn thực thể, cũng cần broad-phase nhanh
- Do yếu tố này nằm ở trung tâm của game, việc giao cho middleware được xem là rủi ro
- Nhà phát triển có nhiều kinh nghiệm về cấu trúc dữ liệu broad-phase và cũng từng thuyết trình liên quan tại GDC
Từ Rubikon-Lite đến Box3D
- Việc dùng Jolt, một engine vật lý mã nguồn mở hiện có, cũng đã được xem xét, nhưng Dirk Gregorius đề xuất fork Rubikon-Lite và chỉnh sửa cho phù hợp với nhu cầu
- Dirk Gregorius là lập trình viên vật lý đã tạo engine vật lý tùy chỉnh Rubikon dùng trong Half-Life: Alyx, và đang duy trì phiên bản Rubikon sở thích/tại nhà
- Khi kết nối trực tiếp Rubikon-Lite vào Unreal, mô-men xoắn con quay hồi chuyển hoạt động, và cây cũng đổ bình thường
- Trong việc thay thế engine vật lý của Unreal, có thể tận dụng một số đường tắt
- Sử dụng hệ thống scripting riêng thay vì Blueprint
- Port Esoterica animation system sang Unreal để sử dụng
- Sử dụng một ECS tùy chỉnh kết nối trực tiếp với Box3D
- Khi cố đưa các tối ưu hóa của Box2D v3.0 vào fork Rubikon-Lite, nhu cầu giữ công việc 2D và 3D giống nhau nhất có thể đã xuất hiện
- Gần như toàn bộ API, cấu trúc dữ liệu và thuật toán của Rubikon-Lite được thay bằng mã Box2D
- Cấu trúc dữ liệu của 2D và 3D phần lớn không phụ thuộc vào số chiều không gian
- Theo thời gian, fork Rubikon-Lite đã trở thành Box3D
- Hiện trong Box3D vẫn còn mã Rubikon-Lite ở phần tạo convex hull và một số thuật toán va chạm
- Phần còn lại là mã Box2D và mã mới dành cho Box3D
- Về phía Valve, Rubikon vẫn tiếp tục được phát triển, và Dirk đã phát triển các tối ưu hóa tương tự Box3D cho engine mới Ragnarok
Điều chỉnh engine vật lý tùy chỉnh theo nhu cầu game
- The Legend of California là một dự án có open world lớn và kiến trúc server-authoritative
- Cây đổ, ragdoll, voxel, cửa saloon và tumbleweed đều được mô phỏng trên máy chủ
- Dùng engine vật lý tùy chỉnh cho phép trực tiếp điều chỉnh tính năng và hiệu năng theo nhu cầu của game
- Công việc hiệu năng đặc biệt tập trung nhiều vào cây đổ
- Những cây redwood khổng lồ rơi nhanh xuống địa hình voxel
- Phần việc lớn là làm cho va chạm mesh và CCD hoạt động ổn định
- Mesh va chạm cho hệ thống voxel cũng cần được tạo nhanh ở runtime
- Voxel có dạng lưới nên được cấu trúc tốt bằng median split
- Streaming cũng là một yêu cầu quan trọng
- stronghold được cấu thành bằng kitbashing
- Một stronghold lớn có thể có khoảng 50.000 mesh va chạm riêng biệt
- Tải từng mesh vào engine vật lý là không hiệu quả và tốn nhiều bộ nhớ
- Một compound collision system đã được tạo để cook các hình dạng va chạm riêng biệt thành cấu trúc dữ liệu tối ưu và tải như một uber shape duy nhất
- Cách này loại bỏ overhead của việc tạo hàng nghìn body và shape
Lý do mã nguồn mở và đối tượng sử dụng
- Nhà phát triển đã làm engine vật lý cho game từ năm 2004, và mỗi lần đổi việc đều phải bỏ lại công việc đó
- Một khía cạnh của Box2D là được tạo ra để tích lũy kiến thức và nỗ lực vào một dự án mã nguồn mở, dùng làm nền tảng cho các công việc sau này
- Ở mảng 3D, gánh nặng phải liên tục làm lại công việc tương tự vẫn tồn tại
- Kintsugiyama đã cho phép công bố Box3D dưới dạng mã nguồn mở và cho phép làm việc với nó như một phần công việc
- Box3D không phải là dự án nhằm cạnh tranh với các engine vật lý khác; nếu người dùng thích thiết kế của Box2D, nhiều khả năng Box3D cũng sẽ phù hợp
Cách bắt đầu và tài liệu
- Để bắt đầu với Box3D, chỉ cần cài git và CMake cơ bản, rồi clone Box3D repository
- Cách build có trong README
- Sau khi build, có thể chạy các sample để kiểm tra tính năng và bắt đầu viết code từ mã sample
- Header của engine có đầy đủ chú thích Doxygen, còn tài liệu hướng dẫn dạng manual đang được thực hiện
- Có sẵn documentation được host
- Mã ví dụ tối thiểu có thể xem trong HelloWorld test
Nơi đang sử dụng và kế hoạch sắp tới
- Ngoài The Legend of California, Box3D đã được dùng ở nhiều nơi khác
- s&box: nền tảng game của Facepunch Studios
- Esoterica: engine game mã nguồn mở do Bobby Anguelov dẫn dắt
- A 1000-player space game: game multiplayer của Glenn Fiedler
- Dù đang được dùng trong nhiều game, Box3D vẫn được xem là phần mềm alpha
- Dự án dự định sớm tạo tag v0.1 và phát triển đến bản phát hành v1.0
- Cần thêm nhiều kiểm thử và tài liệu hoàn thiện hơn, nhưng bộ tính năng đã ở vị trí tốt
- Các công việc đang được xem xét gồm
- Tăng cường tính năng di chuyển nhân vật
- Cải thiện giảm thiểu ghost collision
- Tối ưu hóa
- Cải thiện joint solver
- Dự kiến Box3D sẽ được hỗ trợ vô thời hạn cùng với Box2D
- Khi đạt đến giai đoạn trưởng thành, có thể tạm nghỉ khỏi công việc tính năng
- Khác với Box2D, Box3D dự kiến sẽ nhận pull request, và có khả năng sẽ dùng CLA
- Sẽ không tạo website hay máy chủ Discord riêng cho Box3D
- Cập nhật sẽ được cung cấp trên trang Box2D
- Trao đổi diễn ra trên Box2D Discord server
- Nếu muốn xem Box3D hoạt động trong The Legend of California, có thể theo dõi qua home page và Steam
1 bình luận
Ý kiến trên Hacker News
Mỗi khi Box2D được nhắc đến, tôi lại nhớ tới câu chuyện cũ này, cùng với mối liên hệ hiển nhiên rằng đây là thư viện Box3D của cùng một tác giả
https://kotaku.com/this-guy-created-angry-birds-physics-and-...
Vesterbacka đáp: “Hãy gặp tôi sau khi sự kiện kết thúc”, và có lẽ lúc đó Erin đã được tặng một chiếc hoodie. Sau đó chẳng bao lâu tên anh ấy đã được thêm vào phần credit
Điều khiến mọi người ngạc nhiên là nhân viên marketing lại biết game đang dùng engine vật lý nào
Box2D từng là nền tảng cho các game indie dựa trên vật lý
Tôi tự hỏi liệu bây giờ môi trường đã đủ trống để nó có thể phục hưng lần nữa hay chưa
Việc có thêm mục mới trong danh sách nhỏ và khép kín như thế này lúc nào cũng đáng hoan nghênh
C API của Box2D và giờ là Box3D thực sự rất dễ làm việc cùng
Đây thực sự là tin rất đáng mừng. Erin Catto là một hacker tuyệt vời, cảm ơn anh ấy đã chia sẻ mã với cộng đồng mã nguồn mở
Trong phần công bố không thấy nhắc đến tính quyết định (determinism), nhưng tôi cũng rất muốn xem thêm về phần đó. Nếu cố làm một game bi-a mạng bằng vật lý tích hợp sẵn của Unity thì khá đau đầu vì các client không thể đồng bộ với nhau về những gì đã xảy ra
Theo tài liệu thì
-ffast-mathkhông được hỗ trợ, nên có lẽ họ đang nhắm tới tính quyết định xuyên nền tảng: https://box2d.org/documentation3d/recording.htmlSửa: làm rõ ý nghĩa liên quan tới
ffast-mathVới tư cách là một nhà nghiên cứu machine learning, tôi quen thuộc với Box2D nhờ các môi trường học tăng cường. Nó là nền tảng đứng sau những môi trường benchmark tiêu chuẩn như Lunar Lander hay Car Racing trong OpenAI Gym
https://gymnasium.farama.org/environments/box2d/car_racing/
Mô phỏng vật lý là một hang thỏ nguy hiểm. Ngay cả khi chỉ tập trung vào vật thể cứng và hành vi trông hợp lý về mặt vật lý, vẫn còn rất nhiều bài toán mở trong phát hiện va chạm và xử lý va chạm
Hình học thường dùng xấp xỉ lồi hoặc phân rã, bộ giải thì thường phải tinh chỉnh thủ công, và luôn phải đánh đổi độ bền vững cùng độ chính xác lấy tốc độ
Tôi đã chờ cái này từ rất lâu. Trước đây tôi từng khá thành công với Box2D, và đây chắc chắn là một trong những sản phẩm hàng đầu của F/OSS
Spectre VR dựa trên Box3D chăng? Nghe như kiểu chắc chắn sẽ xuất hiện. Cũng có cảm giác của Tanarus
Sửa: đoạn chuyển giữa ghi hình và phát lại trong bản demo Legend of California (dựa trên Unreal Engine) trông như một bước nhảy khá đột ngột. Ban đầu có thể hơi cơ bản, nhưng nhất định phải xem ít nhất đến mốc 18 phút của video demo. Nó trở nên khá thô ráp nhưng đầy thú vị, và tính năng ghi hình/phát lại rất ngầu
Tôi biết sơ qua về Rapier, trước đó là Cannon và Ammo, nên khá tò mò Box3D sẽ so sánh thế nào với chúng
Nhân tiện, vài tuần trước tôi tự làm một engine vật lý trong không gian 3D và cũng chia sẻ ở đây. Thực ra nó chỉ là một dòng code hạ vật thể xuống theo khoảng thời gian đều đặn, nhưng đã hoạt động đáng ngạc nhiên. Xét từ góc độ học hỏi thì thật sự rất vui, nên tôi khuyên mọi người thử một lần
Vài ngày trước tôi bắt đầu dùng Jolt để làm một game 3D kiểu Tron cho trình duyệt, nên thấy cái này đúng lúc khá thú vị. Cho tới giờ Jolt hoạt động khá tốt, nhưng tôi cũng sẽ nhất định xem thử cái này
1 - Tôi đã giữ domain này suốt nhiều năm rồi: https://lightcycles.io
Tôi tò mò nó sẽ so với Jolt ra sao. Cả hai đều có lý lịch rất tốt: một bên là phía Valve và Erin Catto, bên kia thì đã được dùng trong các game Horizon
“Bên phía Valve, Rubikon vẫn đang tiếp tục phát triển, và Dirk đã phát triển các tối ưu hóa tương tự Box3D cho engine mới Ragnarok. Chúng ta sẽ thấy nó trong các game Valve tương lai.”
Khoan đã…
Box3D
3D
3
Hy vọng!