실시간 GPU 패스 트레이싱 엔진
그래픽 관련 모든 것을 게시하는 제 텔레그램 채널에 참여하세요!
YouTube에서 데모 시청하기
Bistro scene
주요 기능 (Features)
- Compute shader를 사용한 실시간 GPU wavefront 패스 트레이싱
GpuApi를 통한 Vulkan 및 D3D12 백엔드 지원
- 선택된 백엔드가 Ray Query를 지원하는 경우 하드웨어 레이 트레이싱(Hardware ray tracing)을 통한 기능 제공
- Ray Query를 사용할 수 없는 경우 GPU 순회와 함께 CPU로 구축된 BVH 폴백 (fallback)
- Lambert 확산 및 GGX 반사 BRDFs
- 점광원, 방향광원 및 환경광 샘플링
- 시간적 리프로젝션 필터 (Temporal reprojection filter)
- 깊이(Depth), 법선(normals), 알베도(albedo) 및 모션 벡터 AOV 생성
- 런타임 컴퓨트 파이프라인 핫 리로드 (Runtime compute pipeline hot reload)
레이 트레이싱 경로 (Ray Tracing Paths)
애플리케이션은 가속 구조체 경로를 자동으로 선택합니다:
Device::SupportsRayQuery()가 true인 경우, HardwareRtAccelerationStructure는 각 메시별로 BLAS 객체를 구축하고 씬 인스턴스에 대한 TLAS를 만듭니다. 트레이싱에는 trace_rayquery.cs와 trace_shadow_rayquery.cs가 사용됩니다.
- 그렇지 않은 경우,
Bvh는 씬 메시/인스턴스로부터 CPU BVH를 구축하고 노드와 삼각형을 업로드하며, 트레이싱에는 trace_bvh.cs와 trace_shadow_bvh.cs가 사용됩니다.
두 경로 모두 동일한 상위 레벨 씬 모델을 유지합니다: SceneInstance는 메시 인덱스와 변환(transform)을 저장하고, 레이 히트 데이터는 instance_id와 primitive_id를 저장합니다.
빌드 (Building)
필수 요구 사항:
- CMake
- C++17 컴파일러
- GLFW
- Vulkan 백엔드를 위한 Vulkan SDK
- D3D12 백엔드를 위한 Windows SDK
서브모듈과 함께 클론(Clone)합니다:
git clone --recursive https://github.com/AlexanderVeselov/RayTracing.git
cd RayTracing
생성 및 빌드 (Generate and build):
cmake -S . -B build
cmake --build build --config Release --target RayTracingApp
Visual Studio 프로젝트는 디버거 작업 디렉토리를 리포지토리 루트로 설정합니다. dxcompiler.dll과 dxil.dll은 빌드 후 RayTracingApp 옆에 복사됩니다.
실행 (Running)
리포지토리 루트에서 RayTracingApp을 실행하세요:
명령줄 옵션:
--help: 명령줄 도움말을 출력합니다.
-w <width>: 창 너비를 설정하며, 기본값은 1280입니다.
-h <height>: 창 높이를 설정하며, 기본값은 720입니다.
--scene <path>: OBJ 씬 경로를 설정하며, 기본값은 assets/ShaderBalls.obj입니다.
--scale <scale>: 가져온 씬의 스케일을 설정하며, 기본값은 1.0입니다.
--flip_yz <0|1>: 임포트 중 Y축과 Z축을 뒤집습니다 (플립). 기본값은 0입니다.
--backend <vulkan|d3d12>: 렌더 백엔드를 선택하며, 기본값은 vulkan입니다.
앱이 실행되는 동안 R 키를 누르면 등록된 컴퓨트 파이프라인을 다시 로드합니다. 이 재로드는 셰이더 컴파일 또는 리플렉티드 레이아웃 호환성 검사 실패 시 이전 파이프라인을 유지합니다.
run_bistro.bat은 Amazon Lumberyard Bistro 콘텐츠를 assets 폴더에 다운로드하고, 프로젝트를 빌드한 후 Bistro 씬을 실행합니다.