Bevy 0.20 버전 및 Bevy 개발 경험 공유
요약
본 글은 Bevy 엔진 0.20 버전 업데이트와 개발 경험을 공유하며, 특히 CPU 렌더링 최적화 등 기술적인 개선 사항에 대해 언급합니다. 또한, 복잡한 도시 시뮬레이터 및 실시간 전략 게임(StarCraft 2 유사) 제작 과정을 통해 Bevy의 활용 가능성을 보여주며, 엔진의 아키텍처와 잠재력에 대한 기대를 나타냅니다.
핵심 포인트
- Bevy 0.20 버전에서 CPU 렌더러 계산량이 최적화됨.
- 복잡한 도시 시뮬레이터 및 RTS 게임 제작 경험 공유.
- Bevy는 멋진 아키텍처를 갖추고 있어 잠재력이 높음.
- 엔진의 지속적인 개선과 자동 서식 지정 기능이 기대됨.
이번 릴리스에는 좋은 개선 사항이 많습니다. 저도 렌더링 코드에 기여했는데, 특히 CPU에서 렌더러의 계산량을 O(변경된 엔티티 수)로 줄인 작업은 릴리스 노트에 빠져 있습니다.
다만 BSN 문법은 좋지 않고 점점 나빠지고 있습니다. 특수 기호가 너무 많고, 목록 요소를 구분하는 데 --까지 쓰는 것은 설계가 막다른 길에 몰렸다는 징후입니다. LR(1)이 아니라는 사실부터 설계가 잘못되었다는 신호로 봤어야 합니다. 장면 형식은 편집기 중심으로 다시 설계하고, 버전 관리 시스템에서 쉽게 병합할 수 있도록 하는 것을 최우선으로 삼아야 합니다.
설계 과정이 궁금해서 찾아보니 이 이슈에서 일부 절충안을 논의하고 있었습니다. 개인적으로는 세미콜론과 쉼표를 조합해 엔티티와 컴포넌트를 구분하는 방식을 좋아했지만, 결국 이중 하이픈에 익숙해져야 할 것 같습니다.
Bevy가 해주는 작업이 좋아서, 어떤 그래픽 및 성능 개선을 준비하는지 보려고 종종 계정명으로 PR 목록을 필터링합니다. BSN 문법에 대한 비판에도 동의합니다. 절충의 결과겠지만 당분간 하위 호환성을 깨는 변경도 가능할 테니, 앞으로 몇 차례 릴리스에서 어떻게 개선할 수 있을지 궁금합니다.
특히 기대하는 것은 자동 서식 지정입니다. 문법의 모양과 사용감도 신경 쓰지만, 그보다 코드베이스 전체의 일관성이 더 중요합니다.
주로 Godot을 쓰며 선택에 만족하지만, 멀리서 본 Bevy 기여자들의 전문성과 뚜렷한 주관은 조금 부러움이 납니다. 각자 기여하는 분야를 깊이 아는 사람이 많아 보이며, 어쩌면 Rust 전반에서 더 흔한 특성일 수도 있겠다는 느낌입니다.
Godot은 일단 기능부터 구현하는 데 집중하고, 이후 여러 릴리스와 UX를 신경 쓰는 사람들의 손길을 거쳐야 완성도 있게 느껴지는 일이 꽤 잦습니다.
몇 년 동안 SimCity나 Cities: Skylines 같은 도시 건설 게임을 직접 만들 생각만 하다가, 마침 지난주에 Rust와 Bevy로 시뮬레이터 제작을 시작했습니다. 최대한 현실적인 도시 시뮬레이터를 목표로 경제 모형, 복지, 이민, 사회 정책 등에 관한 학술 논문을 각 시뮬레이션 요소의 기반으로 삼고, 그 결과로 게임을 구동하려고 합니다. 지금까지는 에이전트 팀으로 초기 단계를 구현했는데 꽤 유망해 보입니다. 이렇게 복잡한 게임은 처음이지만 앞으로 어떻게 발전할지 무척 기대됩니다.
이 소식을 보고 Bevy로 게임을 만들기 시작했다는 글을 자꾸 보는데, 뒤이어 게임을 만드는 에이전트 팀이 등장하곤 합니다.
최근 재미 삼아 Bevy를 배우고 있는데 정말 즐거움입니다. 호환성을 깨는 변경이 쏟아지지만, 중요한 부분을 해결하기 위한 과정이라고 봅니다. 다만 지금은 실제 상용 제품을 걸기에는 미성숙한 듯합니다. 출시의 실용성보다 멋진 아키텍처에 끌리는 나 자신도 그렇게 느낍니다.
Bevy 팀이 훌륭한 작업을 꾸준히 이어가는 모습이 보기 좋습니다. 게임 개발자는 아니지만, 시뮬레이션 개발 회사의 채용 공고에도 Bevy가 등장하는 것이 흥미롭습니다.
SC3가 FPS가 된다는 소식을 듣고 Bevy로 StarCraft 2와 비슷한 실시간 전략 게임을 만들었습니다. Claude Fable·Opus·Sonnet 에이전트 팀으로 Blender 자산 제작과 코드 대부분을 처리하고, 그림에는 생성 모델을 활용했습니다. 게임의 형태와 새 기능을 쉽게 추가할 수 있었던 데에는 Bevy의 설계도 한몫한 듯합니다.
에이전트를 백그라운드와 야간에 돌려 일주일 만에 완성했으며, 꽤 재미있고 LAN 모드도 지원합니다. SC2만큼 다듬어지거나 균형 잡히지는 않았지만 실제로 비교할 만한 수준이라는 사실이 놀라움입니다.
공개되어 있다면 직접 해보고 싶습니다!
Rust를 쓰는 분들이 모인 김에 질문합니다. Rust에서 가장 배우기 어려운 부분은 무엇인가요? 수명(lifetime)인가, 아니면 Box·Arc·Rc·Pin 같은 것들인가요?
사람마다 다르고, 기존 프로그래밍 경험의 영향이 크다. Rust의 여러 개념을 다른 언어에서 이미 익혔을 수도 있다. 나는 프로그래밍을 시작한 지 2년쯤 되었을 때 Rust를 배웠고, 당시에는 C·C++와 약간의 어셈블리 기초 경험이 있었다.
거의 모든 부분이 어려웠으며, 특히 트레이트(trait)가 헷갈렸다. 나중에 Haskell의 타입 클래스(type class)를 다뤄보고서야 제대로 이해한 듯하다. 반면 수명(lifetime)은 크게 어렵지 않았는데, 컴파일러가 흔한 문제의 수정안을 잘 제안해 주고 포인터와 세그멘테이션 오류 디버깅에 익숙했던 것이 도움이 되었다. 기존의 프로그램 구조화 방식을 Rust에 억지로 맞추려 하지 않았던 것도 도움이 된 듯하다. Box·Arc·Rc는 필요할 때 익히면 되며, 수명 제약에서 벗어나게 해주는 도구로 생각할 수 있다. Pin은 한참 동안 신경 쓰지 않아도 된다. 다만 Rust 입문 첫 과제로 FuturesUnordered를 완전히 이해하라고 내가 맡긴 사람은 예외다. 관심이 있다면 내 가이드도 참고할 수 있으며, 다른 자료도 많다.
그중에서는 Pin이 단연 가장 어렵다.
마침 최근 Bevy와 다른 엔진을 살펴보고 있었다. 모듈성을 높이기 위해 라이브러리 설계에 공을 들인 듯하지만, 정작 시작하기가 무척 어렵다. 아직 빌드조차 성공하지 못했다.
설계가 잘 되어 있고, 모듈성 덕분에 Jackdaw 같은 편집기와 LLM 보조 코딩을 모두 지원하기 좋은 구조이다.
Bevy의 개발 편의성은 새 마이너 버전이 나오기 전까지는 훌륭하다. 그때부터는 게임플레이를 출시하는 대신 엔진 마이그레이션에 매달리게 된다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기