RetroWarp
요약
RetroWarp는 가상의 레트로 GPU를 순수 Vulkan compute shader로 구현한 프로젝트입니다. 이 시스템은 기존의 고정 기능 유닛(래스터라이저, ROP 등)을 사용하지 않고 소프트웨어 렌더링 방식으로 작동합니다. `viewer`와 `dump-bench` 도구를 통해 glTF 파일을 실시간으로 렌더링하고 성능을 벤치마킹할 수 있습니다.
핵심 포인트
- 순수 Vulkan compute shader를 이용한 가상 레트로 GPU 구현체입니다.
- 고정 기능 유닛(래스터라이저, ROP 등) 없이 소프트웨어 렌더링이 가능합니다.
- `viewer`는 glTF 파일을 실시간으로 테스트하고 조작할 수 있습니다.
- `dump-bench`는 생성된 프레임을 반복 재생하며 성능을 측정합니다.
RetroWarp
이것은 가상의 레트로 GPU를 구현한 순수한 Vulkan compute shader 구현체입니다.
대상 Vulkan GPU의 고정 기능 유닛(래스터라이저, ROP, 텍스처 유닛)을 사용하지 않고 '순수' 소프트웨어 렌더링으로 GPU가 구현되었습니다.
빌드 (Build)
표준 CMake 빌드를 따릅니다. GCC, Clang 및 MSVC 2015 이상에서 빌드할 수 있습니다.
서브모듈 업데이트 (Update submodules)
이 구현체는 저의 Granite 엔진을 사용합니다. 빌드하기 전에 이것이 체크아웃되었는지 확인하십시오.
git submodule update --init --recursive
viewer
glTF 2.0 파일을 실시간으로 렌더링하는 간단한 테스트 프로그램입니다.
모든 메시가 SWRenderableComponent로 변환되어야 하므로 좋은 호환성을 기대해서는 안 됩니다. 이 컴포넌트는 일부 모델을 로드하는 데 필요한 최소한의 기능을 구현합니다.
제가 사용한 몇 가지 테스트 모델은 KhronosGroup/glTF-Sample-Models에서 가져온 Sponza, Suzanne 또는 Lantern입니다.
참고: 모든 버텍스 처리가 최적화되지 않은 CPU 코드로 이루어지기 때문에, 'freeze' 기능을 사용하지 않는 한 애플리케이션은 대부분 CPU 바운드(CPU bound)일 가능성이 높습니다.
조작법 (Controls)
- WASD: 카메라 이동
- 오른쪽 클릭을 누른 상태로 마우스를 움직임: 카메라 회전
- U: 프레임을 정지시키고 CPU에서 버텍스 처리를 수행하지 않는데, 이는 GPU 바운드 시나리오를 테스트하는 데 유용합니다.
- C: 현재 프레임을 텍스처와 함께
retrowarp.dump로 저장합니다. 이것은dump-bench에서 재생 및 벤치마킹할 수 있습니다. - Space: 가변 주사율 동기화(vsync) 토글
옵션 (Options)
--width: 해상도 제어. 최대값은 2048입니다.--height: 해상도 제어. 최대값은 2048입니다.--tile-size: 타일 크기, 8 또는 16을 사용합니다.--ubershader: 분할 셰이더 아키텍처 대신 ubershader를 사용합니다.--nosubgroup: 모든 서브그룹 지원 비활성화.--async-compute: 비동기 컴퓨트(async compute) 지원 활성화.
dump-bench
viewer 애플리케이션이 생성한 .dump 파일을 받아 해당 프레임을 반복적으로 재생합니다.
마지막에, 성능 지표가 시간/반복 횟수(즉, 프레임)로 보고됩니다.
옵션 (Options)
– --tile-size: 타일 크기(Tile size)를 지정하며, 8 또는 16을 사용합니다.
– --ubershader: 분할 셰이더 아키텍처(split shader architecture) 대신 ubershader를 사용합니다.
– --nosubgroup: 모든 서브그룹 지원(subgroup support)을 비활성화합니다.
– --async-compute: 비동기 컴퓨트 지원(async compute support)을 활성화합니다.
– --iterations: 반복 횟수(Number of iterations)입니다.
해상도(Resolution)는 더미 파일에 포함되어 있으며, 삼각형 설정 데이터(post-triangle setup data)를 담고 있어 재조정할 수 없습니다.
Dataset
벤치마킹을 위한 샘플 데이터셋은 dataset/에서 찾을 수 있습니다.
Implementation
Triangle processing
삼각형 처리(Triangle processing), 클리핑 및 설정은 triangle_converter.hpp와 triangle_converter.cpp에 구현되어 있습니다.
이 구현체는 속도를 염두에 두고 설계되지 않았으며, 여기서는 래스터화(rasterization) 부분에 초점을 맞추었습니다.
Rasterization
rasterizer_gpu.hpp와 rasterizer_gpu.cpp가 Vulkan 측의 기능을 구현합니다. 셰이더는 assets/shaders 폴더에 포함되어 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub GameDev의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기