Box3D - 오픈소스 3D 물리 엔진 공개

4 hours ago 1
  • 게임 서버에서 대규모 3D 물리 시뮬레이션을 직접 제어해야 하는 요구가 커지면서, Box3D가 Box2D 계열의 오픈소스 3D 물리 엔진으로 공개됨
  • 구조는 Box2D와 가깝고 C API, C17 소스, 서브스테핑 솔버, 연속 충돌, 그래프 컬러링, wide SIMD 접촉 솔버, 멀티스레딩 훅을 포함함
  • Unreal Engine의 Chaos에서 자이로스코픽 토크, 나무 낙하, 대규모 broad-phase 요구를 만족하기 어려웠던 경험이 개발의 직접 배경이 됨
  • 삼각형 메시·높이 필드·baked compound collision, double 기반 대형 월드, 크로스플랫폼 결정성, 기록/재생이 3D 게임용 기능으로 들어감
  • 여러 게임·엔진에서 이미 쓰이고 있지만 아직 알파 소프트웨어이며, v0.1 태그 이후 v1.0까지 테스트와 문서 보강이 필요함

Box3D의 성격과 핵심 기능

  • Box3D는 GitHub에 공개된 오픈소스 3D 물리 엔진이며, Box2D의 설계를 3D 게임 요구에 맞게 확장한 프로젝트에 가까움
  • 핵심 아키텍처는 Box2D와 거의 동일하고, 라이브러리 전체 소스는 C17로 작성됨
  • 주요 엔진 기능은 다음과 같음
    • C API

      • 서브스테핑 솔버
      • 연속 충돌
      • 대형 섬용 그래프 컬러링
      • wide SIMD 접촉 솔버
      • 멀티스레딩 훅
      • 선택적 내부 스케줄러
      • 위치에 double을 쓰는 대형 월드 지원
      • 크로스플랫폼 결정성
      • 기록과 재생
      • 3D 게임을 위해 추가된 충돌 기능도 포함됨
      • 삼각형 메시 충돌
      • 높이 필드 충돌
      • baked compound collision

The Legend of California에서 생긴 필요

  • Box3D의 첫 개발 동기는 Kintsugiyama에서 개발 중인 The Legend of California였음
  • 이 게임은 Unreal Engine으로 제작되며, 프로젝트는 Unreal 5.0에서 시작함
  • Unreal의 기본 물리 엔진인 Chaos 실험에서 여러 한계가 드러남
    • 자이로스코픽 토크 시뮬레이션을 지원하지 않아, 가느다란 물체가 각속도를 보존하며 오래 회전하는 동작을 처리하기 어려웠음
    • 개발자는 2015년 GDC에서 물리 엔진에 자이로스코픽 토크를 추가하는 약 10줄짜리 드롭인 알고리듬을 발표한 적이 있음
    • Epic은 이 기능을 2024년 말 Unreal Engine에 추가함
  • 더 큰 문제는 생존 게임의 핵심 기능인 나무 베기에서 발생함
    • 쓰러지는 나무가 불규칙하게 움직이고 화면에서 순간이동함
    • 상황은 큰 캡슐이 매끄러운 삼각형 메시 위로 떨어지는 시뮬레이션이었고, 쉽게 처리돼야 하는 사례였음
  • 서버에 수십만 엔티티가 존재하므로 빠른 broad-phase도 필요했음
    • 이 요소가 게임의 중심이어서 미들웨어에 맡기기에는 위험하다고 판단함
    • 개발자는 broad-phase 자료구조 경험이 많고 관련 GDC 발표도 진행한 적이 있음

Rubikon-Lite에서 Box3D로

  • 기존 오픈소스 물리 엔진인 Jolt 사용도 검토했지만, Dirk Gregorius가 Rubikon-Lite를 포크해 필요에 맞게 수정하는 방식을 제안함
  • Dirk Gregorius는 Half-Life: Alyx에 들어간 커스텀 물리 엔진 Rubikon을 만든 물리 프로그래머이며, 취미·홈 버전의 Rubikon을 유지하고 있음
  • Rubikon-Lite를 Unreal에 직접 연결하자 자이로스코픽 토크가 동작했고, 나무도 정상적으로 쓰러짐
  • Unreal의 물리 엔진 교체에서는 몇 가지 지름길을 활용할 수 있었음
    • Blueprint가 아닌 자체 스크립팅 시스템을 사용함
    • Esoterica animation system을 Unreal로 포팅해 사용함
    • Box3D에 직접 연결되는 커스텀 ECS를 사용함
  • Box2D v3.0의 최적화를 Rubikon-Lite 포크에 가져오려다 보니, 2D와 3D 작업을 가능한 한 비슷하게 유지할 필요가 생김
    • Rubikon-Lite의 거의 모든 API, 자료구조, 알고리듬을 Box2D 코드로 교체함
    • 2D와 3D의 자료구조는 상당 부분 공간 차원에 무관했음
  • 시간이 지나며 Rubikon-Lite 포크는 Box3D로 바뀜
    • 현재 Box3D에는 convex hull 생성과 일부 충돌 알고리듬에 Rubikon-Lite 코드가 남아 있음
    • 나머지는 Box2D 코드와 Box3D용 신규 코드임
  • Valve 쪽에서는 Rubikon이 계속 발전 중이며, Dirk는 Box3D와 유사한 최적화를 새 엔진 Ragnarok에 개발함

커스텀 물리 엔진으로 맞춘 게임 요구

  • The Legend of California는 큰 오픈월드와 서버 권한 구조를 가진 프로젝트임
  • 쓰러지는 나무, 래그돌, 복셀, 살룬 문, 회전초가 모두 서버에서 시뮬레이션됨
  • 커스텀 물리 엔진을 쓰면 게임 요구에 맞춰 기능과 성능을 직접 조정할 수 있음
  • 성능 작업은 특히 쓰러지는 나무에 많이 들어감
    • 거대한 redwood 나무가 복셀 지형 위로 빠르게 떨어짐
    • 메시 충돌과 CCD를 안정적으로 동작시키는 작업이 큼
  • 복셀 시스템용 충돌 메시도 런타임에 빠르게 만들어야 함
    • 복셀은 격자형이어서 median split으로 잘 구성됨
  • 스트리밍도 중요한 요구였음
    • stronghold는 kitbashing으로 구성됨
    • 큰 stronghold에는 별도 충돌 메시가 약 50,000개 있을 수 있음
    • 이를 물리 엔진에 하나씩 로드하면 비효율적이고 메모리를 많이 씀
    • 별도 충돌 형상을 최적화된 자료구조로 조리해 단일 uber shape으로 로드하는 compound collision system을 만들었음
    • 이 방식은 수천 개 body와 shape을 만드는 오버헤드를 제거함

오픈소스화한 이유와 사용 대상

  • 개발자는 2004년부터 게임용 물리 엔진을 만들어왔고, 직장을 옮길 때마다 그 작업을 두고 와야 했음
  • Box2D는 지식과 노력을 오픈소스 프로젝트로 축적해 이후 작업의 기반으로 쓰기 위해 만들어진 측면이 있음
  • 3D 쪽에서는 비슷한 작업을 계속 다시 만드는 부담이 있었음
  • Kintsugiyama는 Box3D를 오픈소스로 공개하고 업무의 일부로 작업할 수 있도록 허용함
  • Box3D는 다른 물리 엔진과 경쟁하려는 프로젝트가 아니며, Box2D의 설계가 마음에 드는 사용자라면 Box3D도 잘 맞을 가능성이 큼

시작 방법과 문서

  • Box3D를 시작하려면 기본 gitCMake를 설치한 뒤 Box3D repository를 클론하면 됨
  • 빌드 방법은 README에 있음
  • 빌드 후 샘플을 실행해 기능을 확인하고, 샘플 코드로 코딩을 시작할 수 있음
  • 엔진 헤더에는 전체 Doxygen 주석이 있으며, 작성된 매뉴얼은 진행 중임
  • 호스팅된 documentation이 제공됨
  • 최소 예제 코드는 HelloWorld test에서 볼 수 있음

현재 사용처와 앞으로의 계획

  • Box3D는 The Legend of California 외에도 여러 곳에서 이미 사용 중임
  • 여러 게임에서 사용 중이지만 Box3D는 아직 알파 소프트웨어로 간주됨
  • 곧 v0.1 태그를 만들고 v1.0 릴리스까지 발전시킬 계획임
  • 더 많은 테스트와 완성도 높은 문서가 필요하지만, 기능 세트는 이미 좋은 위치에 있음
  • 검토 중인 작업은 다음과 같음
    • 캐릭터 이동 기능 강화
    • ghost collision 완화 개선
    • 최적화
    • joint solver 개선
  • Box2D와 함께 Box3D도 무기한 지원할 것으로 예상함
  • 성숙 단계에 도달하면 기능 작업에서 잠시 쉴 수 있음
  • Box2D와 달리 Box3D는 pull request를 받을 것으로 예상하며, CLA를 사용할 가능성이 있음
  • Box3D용 별도 웹사이트나 Discord 서버는 만들지 않음
  • Box3D가 The Legend of California에서 동작하는 모습을 보려면 home pageSteam을 통해 팔로우할 수 있음
Read Entire Article