TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 27 READS

러스트 게임엔진 Bevy 0.20, 실시간 패스트레이서와 씬 시스템을 다듬다

러스트 게임엔진 Bevy 0.20, 실시간 패스트레이서와 씬 시스템을 다듬다
SOURCE IMAGE · HACKER NEWS

러스트로 작성된 데이터 주도형 오픈소스 게임엔진 Bevy가 0.20 버전을 crates.io에 공개했다. 이번 릴리스에는 227명의 기여자가 참여했고 817개의 풀 리퀘스트가 반영됐다. 수치만 보면 수개월 주기의 통상적인 업데이트처럼 보이지만, 실제 변경 내역을 들여다보면 렌더링 품질과 씬 작성 경험을 실무 수준으로 끌어올리려는 의도가 뚜렷하다. Bevy를 쓰고 있거나 러스트 기반 그래픽스 스택을 검토 중인 개발자라면 특히 렌더러와 씬 시스템, 셰이더 언어 교체 부분을 눈여겨볼 만하다.

실시간 패스트레이서 Solari의 재조정

가장 큰 변화는 실시간 패스트레이싱 렌더러 Solari다. ReSTIR 구현이 개선되면서 렌더링 결과가 대체로 편향 없는(unbiased) 상태에 가까워졌고, 그 결과 조명 표현이 한층 정확해졌다. 움직이는 물체의 그림자가 뒤처지며 끌려오던 현상이 사라졌고, 특히 비금속 재질에서 모션 중 반사가 번쩍이던 문제도 눈에 띄게 줄었다.

흥미로운 지점은 Bevy 팀이 그 ReSTIR를 기본값에서 꺼버렸다는 사실이다. 이유는 현실적이다. DLSS-RR가 최근 업데이트에서 상당히 좋아진 반면, ReSTIR는 장면에 따라 성능을 적잖이 잡아먹으면서도 화질 개선 폭이 크지 않은 경우가 많기 때문이다. 다만 ReSTIR를 끄면 조명이 많은 장면에서 그림자 품질이 떨어지고 모션 중 그림자가 누락될 수 있어, 0.19에서 Solari를 쓰던 프로젝트는 자신의 장면에서 체감 손실을 확인한 뒤 필요하면 SolariLighting::restir을 다시 켜야 한다. 이는 전형적인 품질 대 비용의 트레이드오프이며, 범용 기본값이 모든 게임에 맞지 않는다는 점을 엔진 측이 인정한 셈이다.

그 연장선에서 SolariLighting에는 월드 캐시 크기, 픽셀당 광원 샘플 수, 시간적 누적, 패스트레이싱 바운스 횟수 같은 조절 노브가 새로 추가됐다. 기본값으로도 폭넓게 동작하도록 설계했다지만, 실제로는 하드웨어와 장면 특성에 맞춰 손수 튜닝해야 최적점을 찾을 수 있다는 뜻이기도 하다. 또한 Solari의 씬 관리 코드가 보존형(retained)으로 바뀌고 전반적으로 최적화되면서 CPU 비용이 크게 줄었다. 조명 지원 범위도 넓어져 기존의 디렉셔널 라이트와 발광 메시에 더해 대기(Atmosphere)와 환경맵 라이트까지 다룰 수 있게 됐고, 포인트·스폿·렉트 라이트는 향후 과제로 남겼다. Solari는 macOS에서도 돌아가지만 내장 디노이저가 없다는 한계가 있으며, dlss_wgpu 크레이트가 DLSS-RR 4.5를 지원해 디노이징 품질이 개선됐다. DLSS 사용자는 신버전 SDK를 설치하지 않으면 컴파일 오류를 만난다는 점에 주의해야 한다.

씬 포맷 BSN과 셰이더 언어의 정리

지난 릴리스에서 도입된 차세대 씬 시스템 BSN은 실사용에서 드러난 거친 부분을 다듬었다. 모든 씬 참조에 @ 접두사를 요구하도록 통일한 대신, 성가시던 template_value 래퍼를 컴포넌트 값에서 전반적으로 걷어낼 수 있게 됐다. 열거형도 Default와 Clone만 구현하면 VariantDefaults 없이 쓸 수 있는데, 이는 임의의 러스트 열거형과의 호환성을 높이는 대신 모든 필드를 명시해야 한다는 제약을 수반한다. 엔티티 구분자는 쉼표와 괄호에서 -- 로 바뀌어 들여쓰기와 구문 잡음을 줄였고, 기존 방식은 모두 디프리케이트됐다. 또한 씬이 자식까지 완전히 스폰된 뒤 '준비됨' 시점에 로직을 실행할 수 있는 Ready 이벤트가 추가돼, 하향식인 기존 Add 이벤트로는 어렵던 상향식 처리가 가능해졌다.

셰이더 쪽에서는 꽤 과감한 결정이 있었다. Bevy가 독자적으로 쓰던 확장 WGSL 방언을 걷어내고, 모듈·임포트·조건부 컴파일을 지원하는 표준 확장 언어 WESL로 전환했다. 자체 방언을 유지하기보다 더 넓은 셰이더 생태계와 자원을 공유하고 wgsl-analyzer 같은 언어 서버 기반 IDE 도구의 혜택을 받겠다는 판단이다. 실무 관점에서는 이전 방언으로 작성한 커스텀 셰이더를 WESL로 옮기고 확장자를 .wesl로 바꿔야 하는 마이그레이션 부담이 생긴다. 다만 전처리기 지시문이 없는 순수 WGSL 파일은 그대로 동작한다.

그 밖의 실무 기능들

이번 릴리스에는 생산성 측면의 개선도 고루 담겼다. 에디터 지향 UI 툴킷 Feathers에는 색상 선택기, 드롭다운형 선택 필드, 팝업 메뉴, 입력과 드래그 스크러빙을 모두 지원하는 숫자 입력 위젯이 추가됐고, bevy_ui_widgets에는 포커스·접근성과 통합된 헤드리스 탭 동작이 들어왔다. 스프라이트 렌더러는 3D 인프라를 재활용하는 백엔드로 교체되면서 성능과 유지보수성이 함께 개선됐고, MaterialExtension2d 트레이트를 통한 커스텀 스프라이트 머티리얼과 2D용 ExtendedMaterial2d가 새로 제공된다. 커뮤니티 플러그인 bevy_editor_cam은 PanOrbitCamera로 상류화돼 CAD 스타일 카메라 조작을 기본 제공한다.

고급 사용자를 위한 메시 셰이더도 파이프라인 캐시와 통합돼 초기 지원이 시작됐다. 전통적인 버텍스 셰이더를 컴퓨트 셰이더로 대체해 GPU에서 직접 지오메트리를 생성하는 방식인데, 플랫폼별 성능 편차가 크고 StandardMaterial과의 손쉬운 연동이나 상위 API는 아직 미완이며 웹에서는 지원되지 않는다. 시스템 스케줄링에서는 chain_weak, before_weak, after_weak가 추가돼, 데이터 접근이 실제로 충돌하는 시스템 사이에서만 순서를 강제한다. 기존 .chain()이 집합 전체를 경직되게 묶어 워커 스레드를 놀게 만들던 문제, 특히 렌더 월드에서 잦던 유휴 시간을 줄일 수 있는 실용적 장치다. 전반적으로 Bevy 0.20은 화려한 신기능을 내세우기보다, 앞선 릴리스에서 던져둔 기능들을 실사용 수준으로 안착시키는 데 무게를 둔 버전으로 읽힌다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://bevy.org/news/bevy-0-20/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...