GN⁺: Rust로 게임 개발: 1년 후 현황
(users.rust-lang.org)- 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 작업을 하는 것은 가능하지만 많은 노력이 필요함
Rust 는
견고한 엔진, 코어, 프레임워크 등을 만들기에는 적합하지만
어플리케이션 레이어를 구축하는 용도로는
그렇게 추천하고 싶지 않습니다.
저도 Rust로 짧게나마 업무를 해보고 책도 내보려고 조사를 좀 했었는데 요즘에는 확신이 점점 줄고있는 느낌이에요.
Simple is best를 굳게 믿고 있는데, 상반된 언어를 보는것 같아서요.
아무래도 커널에 들어가기도했으니 사라질것 같지는 않겠지만요.
제한적인 소유권 규칙이 있지만, 이를 우회할 수 있는 다양한 데이터 구조가 있어 다소 임시방편적인 느낌을 줌 : 그렇죠 이겁니다 safe하다면서 unsafe가 필요하고 불변이라는데 가변도 되버리고 뒤죽박죽. 쌤통입니다. rust는 잘될수가 없어요
Hacker News 의견
-
Tiny Glade는 Rust로 작성된 인상적인 게임의 예시임
- Rust 게임 개발은 실제 게임보다는 미완성된 크레이트를 출시하는 것에 더 중점을 두는 것 같음
-
Rust를 배우고 있는 중이며, 새로운 팀에 합류할 예정임
- Rust는 재미있지만, 언어에 대한 강한 의견을 가질 만큼 실력이 좋지는 않음
- 언어 디자인이 그리 우아하지 않다고 생각함
- 제한적인 소유권 규칙이 있지만, 이를 우회할 수 있는 다양한 데이터 구조가 있어 다소 임시방편적인 느낌을 줌
-
패턴 매칭과 열거형 타입에 대해 C++ 프로그래머는 감명을 받을 수 있지만, OCaml/Haskell 프로그래머에게는 그다지 인상적이지 않음
-
C++는 어렵고 복잡하지만, 더 현대적인 언어를 사용할 수 있어 신선함
- GC의 성능 오버헤드를 감당할 수 없다면 Rust가 그 간극을 메우지만, 이것이 끝은 아님
- 새로운 프로젝트를 시작하는 사람에게는 현대적인 C++보다 반드시 더 나은 선택인지 의문임
-
Godot가 언급되지 않은 것에 놀라움
- Godot는 GDExtension을 통해 Rust를 포함한 여러 언어를 지원함
- C++는 공식적으로 지원되며, D, Go, Haxe, Rust, Swift는 커뮤니티 지원을 받음
-
자신의 2.5D Ray-caster 엔진을 Rust로 다시 만들고 싶어함
- 현재 구현은 C로 되어 있으며, 약 500줄의 코드로 구성됨
- 리팩토링을 시도했으나 Ray-caster가 망가졌음
- C는 재미있지만 많은 함정이 있음
- 관련 저장소 링크 제공