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

> Clean Markdown view of GeekNews topic #31037. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=31037](https://news.hada.io/topic?id=31037)
- GeekNews Markdown: [https://news.hada.io/topic/31037.md](https://news.hada.io/topic/31037.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-07-02T12:36:23+09:00
- Updated: 2026-07-02T12:36:23+09:00
- Original source: [box2d.org](https://box2d.org/posts/2026/06/announcing-box3d/)
- Points: 1
- Comments: 1

## Topic Body

- 게임 서버에서 대규모 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](https://www.kintsugiyama.com/)에서 개발 중인 **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](https://developer.valvesoftware.com/wiki/Rubikon)을 만든 물리 프로그래머이며, 취미·홈 버전의 Rubikon을 유지하고 있음
- Rubikon-Lite를 Unreal에 직접 연결하자 자이로스코픽 토크가 동작했고, 나무도 정상적으로 쓰러짐
- Unreal의 물리 엔진 교체에서는 몇 가지 지름길을 활용할 수 있었음
  - Blueprint가 아닌 자체 스크립팅 시스템을 사용함
  - [Esoterica animation system](https://github.com/BobbyAnguelov/Esoterica)을 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를 시작하려면 기본 [git](https://git-scm.com/)과 [CMake](https://cmake.org/)를 설치한 뒤 [Box3D repository](https://github.com/erincatto/box3d)를 클론하면 됨
- 빌드 방법은 [README](https://github.com/erincatto/box3d/blob/main/README.md)에 있음
- 빌드 후 샘플을 실행해 기능을 확인하고, 샘플 코드로 코딩을 시작할 수 있음
- 엔진 헤더에는 전체 **Doxygen** 주석이 있으며, 작성된 매뉴얼은 진행 중임
- 호스팅된 [documentation](https://box2d.org/documentation3d/)이 제공됨
- 최소 예제 코드는 [HelloWorld test](https://github.com/erincatto/box3d/blob/main/test/test_world.c)에서 볼 수 있음

### 현재 사용처와 앞으로의 계획
- Box3D는 The Legend of California 외에도 여러 곳에서 이미 사용 중임
  - [s&box](https://sbox.game/): Facepunch Studios의 게임 플랫폼
  - [Esoterica](https://github.com/BobbyAnguelov/Esoterica): Bobby Anguelov가 이끄는 오픈소스 게임 엔진
  - [A 1000-player space game](https://mas-bandwidth.com/so-im-making-a-space-game/): Glenn Fiedler의 멀티플레이어 게임
- 여러 게임에서 사용 중이지만 Box3D는 아직 **알파 소프트웨어**로 간주됨
- 곧 v0.1 태그를 만들고 v1.0 릴리스까지 발전시킬 계획임
- 더 많은 테스트와 완성도 높은 문서가 필요하지만, 기능 세트는 이미 좋은 위치에 있음
- 검토 중인 작업은 다음과 같음
  - 캐릭터 이동 기능 강화
  - ghost collision 완화 개선
  - 최적화
  - joint solver 개선
- Box2D와 함께 Box3D도 무기한 지원할 것으로 예상함
- 성숙 단계에 도달하면 기능 작업에서 잠시 쉴 수 있음
- Box2D와 달리 Box3D는 pull request를 받을 것으로 예상하며, CLA를 사용할 가능성이 있음
- Box3D용 별도 웹사이트나 Discord 서버는 만들지 않음
  - 업데이트는 Box2D 사이트에서 제공됨
  - 대화는 [Box2D Discord server](https://discord.com/invite/NKYgCBP)에서 진행함
- Box3D가 The Legend of California에서 동작하는 모습을 보려면 [home page](https://www.kintsugiyama.com/)와 [Steam](https://store.steampowered.com/app/2550530/The_Legend_of_California/)을 통해 팔로우할 수 있음

## Comments



### Comment 61048

- Author: neo
- Created: 2026-07-02T12:36:24+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=48745445) 
- **Box2D**가 언급될 때마다, 같은 저자인 Box3D의 라이브러리라는 당연한 연결과 함께 예전 이야기가 떠오름  
  [https://kotaku.com/this-guy-created-angry-birds-physics-and-...](<https://kotaku.com/this-guy-created-angry-birds-physics-and-all-he-got-was-5906541>)
  - Rovio(Angry Birds 제작사)에서 일할 때 들은 이야기인데, 마케팅 책임자 Peter Vesterbacka가 강연 중 질문을 받다가 한 청중이 게임에 어떤 물리 엔진을 쓰는지 물었고, Vesterbacka가 **Box2D**라고 정확히 답하자 그 사람이 “왜 크레딧에 없나요? 참고로 저는 Box2D 제작자 Erin Catto입니다”라고 했다고 함  
    Vesterbacka는 “행사 끝나고 저에게 오세요”라고 답했고, 아마 그때 Erin이 후디를 받았을지도 모름. 이후 곧 크레딧에 이름이 추가됐다고 함  
    다들 놀랐던 건 마케팅 담당자가 어떤 물리 엔진을 쓰는지 알고 있었다는 점이었음

- **Box2D**는 한때 물리 기반 인디 게임들의 기반이었음  
  지금 환경이 충분히 비어 있어서 다시 부흥할 여지가 있는지 궁금함
  - 애초에 무료 오픈소스 **3D 물리 엔진**이 많지 않았음. 오래된 선조 격으로는 ODE, Bullet, Newton Dynamics가 있고 모두 2000년대 초반에 처음 나왔으며, 그 뒤 거의 20년 동안 비어 있다가 2021년에 Jolt, 이제 Box3D가 나온 흐름으로 보임  
    이렇게 작고 폐쇄적인 목록에 새 항목이 추가되는 건 언제나 환영할 일임
  - Incredibots에 빠져 있던 시절이 기억남. 그때 처음 **Box2D**를 알게 됐음
  - Box2D는 여전히 꽤 훌륭함. **2D 물리 게임 프로젝트**에는 확실히 추천할 만함  
    Box2D와 이제 Box3D의 C API는 작업하기 정말 좋음
  - 예전에 **Chipmunk2D**를 조금 써봤는데, 내가 하던 난해한 작업에는 더 쓰기 쉬웠음

- 이건 정말 반가움. Erin Catto는 멋진 해커이고, 오픈소스 커뮤니티에 코드를 공유해줘서 고마움  
  발표에는 **결정성(determinism)** 이야기가 없었지만, 그 부분도 더 보고 싶음. Unity 내장 물리로 네트워크 당구 게임을 만들려고 하면, 클라이언트들이 무슨 일이 일어났는지 서로 맞추지 못해서 꽤 골치 아픔
  - 같은 걸 찾고 있었음. **리플레이 메커니즘**이 있으니 결정적인 것처럼 보이긴 함. 다만 부동소수점 물리라면 플랫폼 간에는 아닐 수 있음  
    문서에 따르면 `-ffast-math`는 지원하지 않는다고 하니, 어쩌면 플랫폼 간 결정성을 의도한 것일 수도 있음: [https://box2d.org/documentation3d/recording.html](<https://box2d.org/documentation3d/recording.html>)  
    수정: `ffast-math`에 대한 의미를 명확히 함

- 머신러닝 연구자로서 Box2D는 **강화학습 환경** 덕분에 익숙함. OpenAI Gym에서 Lunar Lander나 Car Racing 같은 표준 벤치마크 환경을 떠받치는 기반임  
  [https://gymnasium.farama.org/environments/box2d/car_racing/](<https://gymnasium.farama.org/environments/box2d/car_racing/>)

- **물리 시뮬레이션**은 위험한 토끼굴임. 강체와 물리적으로 그럴듯한 동작에만 집중해도 충돌 감지와 충돌 해결에는 열린 문제가 많음  
  기하에는 볼록 근사나 분해를 쓰고, 해법기는 손으로 튜닝하는 게 일반적이며, 견고성과 정밀도를 속도와 계속 맞바꿔야 함

- 이걸 정말 기다리고 있었음. 예전에 Box2D로 꽤 성공한 적이 있고, **F/OSS** 중에서도 확실히 최상위권에 드는 결과물임  
  Box3D 기반 Spectre VR? 이건 꼭 나올 것 같음. Tanarus의 느낌도 있음  
  수정: Legend of California 데모(Unreal Engine 기반)에서 녹화와 재생으로 전환되는 부분은 꽤 급격한 도약처럼 보임. 처음엔 좀 기본적으로 느껴져도 데모 영상의 최소 18분 지점까지는 꼭 봐야 함. 꽤 거칠게 흥미로워지고, 녹화와 재생 기능이 멋짐
  - **Tanarus**를 항상 떠올리는데, 언급하는 사람은 거의 못 봄

- Rapier, 그 전에는 Cannon과 Ammo를 조금 알고 있는데, **Box3D**와는 어떻게 비교되는지 궁금함  
  덧붙이면 몇 주 전에 직접 3D 공간의 물리 엔진을 만들었고 여기에도 공유했음. 사실 일정 간격으로 물체를 아래로 내리는 한 줄짜리지만, 이미 놀랄 만큼 잘 작동함. 학습 관점에서는 정말 재미있으니 한번 해보길 추천함

- 며칠 전부터 **Jolt**를 써서 브라우저용 Tron 스타일 3D 게임을 만들기 시작했는데, 마침 이걸 보니 재미있음. 지금까지 Jolt는 꽤 잘 작동하지만 이것도 꼭 살펴볼 생각임  
  1 - 이 도메인은 몇 년째 가지고 있었음: [https://lightcycles.io](<https://lightcycles.io>)
  - Jolt라면 [https://github.com/jrouwe/JoltPhysics](<https://github.com/jrouwe/JoltPhysics>)를 말하는 건가?

- **Jolt**와 어떻게 비교될지 궁금함. 둘 다 이력이 좋아 보이는데, 한쪽은 Valve와 Erin Catto 쪽이고, 다른 한쪽은 Horizon 게임들에서 쓰였음

- “Valve 쪽에서는 Rubikon이 계속 발전 중이고, Dirk가 Box3D와 비슷한 최적화를 새 엔진 Ragnarok에 개발했다. 향후 Valve 게임에서 보게 될 것이다.”  
  잠깐만…
  - 너무 기대하지 않는 게 좋음. 아마 **Deadlock**의 배구 게임 모드에 쓰일 것임
  - Valve가 코드명 **HLX**인 게임을 만들고 있고, 물리 기능을 엄청 많이 쓴다고 알려져 있음. 다만 “HLX”가 무슨 뜻인지는 전혀 모르겠음
  - Valve  
    Box3D  
    3D  
    3  
    희망!
  - Half-Life 2D 확정?
  - Day of Defeat Source 2.1이 딱 일주일 남았음!
