23년 11월부터 24년 1월까지 DXR로 Path Tracer를 구현한 결과를 잊어버리전에 정리용으로 작성합니다.
https://github.com/TheRealMJP/DXRPathTracer
위 링크에 들어가면 볼 수 있는 Path Tracer처럼 DXR로 Path Tracer를 구현할 수 있는것을 알고있었고 직접 Path Tracer를 구현해보면 그래픽스 지식이 더 확고해질것이고 프로그래밍 실력도 올라가겠다는 생각을 해서 개발을 시작했습니다.
결과를 먼저 적어보자면, 다음 사진에서 보이는 수준까지 개발했습니다.
개발 결과
레퍼런스 이미지
https://pbrt.org/scenes-v3
개발 목표는 이 사이트에서 다운받을 수 있는 PBRT Bathroom씬의 레퍼런스 씬의 렌더링 결과와 최대한 유사한 Path Tracing결과를 렌더링하는 것이었습니다. 텍스처를 읽고 Area Light을 표현하는데까지는 성공했지만, .pbrt의 fourier material같은 재질 특성은 구현하지 못해서 많이 어색해 보이는 상태입니다. 구현하기 위해서 PBRT책으로 더 심화된 렌더링 지식들을 공부할 필요성을 느꼈습니다.
.pbrt
형식의 파일을 렌더링하는 Path Tracer를 개발하기 위해서는 다음내용들을 개발해야 했습니다.
- 매 프레임 랜덤 샘플링을 위한 난수 생성하기
- 매 프레임 생성된 난수를 이용해 랜덤샘플들을 생성하고 샘플값들로 렌더링방정식의 Monte-Carlo적분값 계산하기
.pbrt
파일 로딩하기(Mesh + Light)- 랜덤 샘플들의
TraceRay
재귀 호출과MAX_RECURSION_DEPTH
예외처리
노션을 사용해서 위 개발 요소들의 개발과정들을 정리하면서 개발했습니다.
앞으로 몇개의 글을 더 작성하면서 구체적인 개발내용들을 정리하고자 합니다!