14P by neo 6일전 | ★ favorite | 댓글 9개
  • 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는 재미있지만 많은 함정이 있음
    • 관련 저장소 링크 제공