- Rust로 3D 게임을 개발하는 것에 대해 1년전에 글을 작성했고, 그 이후 흐름을 1년간 살펴본 후기
- 여전히 Rend3, WGPU, Vulkan 그래픽스 스택을 활용중이며, 현재는 꽤 잘 작동함
- 2024년에 Rust로 진행되던 몇몇 대형 게임 프로젝트들이 중단됨
- 소유권(ownership) 제약을 부담스럽게 느낀 팀도 있었음
- 컴파일 시간 등을 이유로 불만을 제기한 팀도 존재함
-
arewegameyet.rs가 2024년 7월 이후 업데이트가 뜸해, 관련 정보가 뒤처지는 경향이 있음
-
Rend3가 개발 중단되어 직접 포크한 rend3-hp를 유지 관리하고 있음
- wgpu, winit, egui 등 최신 버전에 맞춰 업데이트했고, 오래된 레이스 컨디션 버그를 수정함
- GPU 성능을 최대한 끌어쓰면 여전히 CPU 병목이 일어나는 문제가 있음. NVidia 3070에서 GPU 부하 25%에서 CPU 시간이 부족해짐
- Vulkan의 bindless 와 여러 Vulkan 큐가 필요하며, 2025년에 wgpu가 이를 지원할 가능성이 있음
- 최대 성능이 필요하지 않다면 이 스택은 적절히 작동
- Orbit, Renderling 등 다른 렌더링 프로젝트가 있었으나, 활발히 유지되지 않음
- Renderling은 그나마 가능성이 있지만 아직 사용 준비가 되지 않았으며, 개발자는 한 명뿐
- Rust로 3D 작업시, 그래픽스 스택 하부를 직접 유지 관리하는 데 시간이 크게 소요됨
- winit, wgpu, egui 등이 API를 변경할 때마다 맞춰가야 하며, 깨진 부분을 모두 수정해야 하는 부담이 있음
- 하나가 변경되면 다른 것들이 따라잡는 데 1-2개월씩 걸림
- Rust 생태계에서 흔히 발생하는 문제로, 안전한 Rust 구문 대신 자체 할당 방식을 쓰면 멀티 스레드에서 버그 찾기가 어려워짐
- 렌더링 구조의 한계
- 대부분의 렌더러가 공간 정보를 따로 관리하지 않고, 광원별로 모든 물체에 대한 연산을 수행하는 구조(O(N*M))가 많이 쓰이고 있음
- 대규모 장면을 다루려면 공간 분할(scene graph) 개념이 필요하고, 이는 곧 게임 엔진급 구조(예: Bevy)로 가야 한다는 문제에 부딪힘
- Bevy는 자체 ECS 시스템으로 Rust의 소유권 모델을 크게 활용하지 않으며, Bevy 방식을 강제한다는 단점이 있음
- 결론적으로 Rust로 복잡한 3D 작업을 하는 것은 가능하지만 많은 노력이 필요함