레이 트레이싱 [DXR과 최신 API를 사용한 고품질 실시간 렌더링]
- 원서명Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs (ISBN 9781484244265)
- 지은이에릭 헤인스(Eric Haines), 토마스 아케나인 몰러(Tomas Akenine-Möller), 알렉산더 켈러(Alexander Keller), 모건 맥과이어(Morgan McGuire), 제이콥 먼크버그(Jacob Munkberg), 매트 파르(Matt Pharr), 피터 셜리(Peter Shirley), 잉고 발트(Ingo Wald), 크리스 와이만(Chris Wyman), 김혁
- 옮긴이구진수
- ISBN : 9791161755144
- 50,000원
- 2021년 05월 31일 펴냄
- 하드커버 | 748쪽 | 178*254mm
- 시리즈 : 게임 개발 프로그래밍
책 소개
2022년 대한민국학술원 우수학술도서 선정도서
요약
레이 트레이싱의 기초를 설명하는 책으로, 레이 트레이싱의 전문가인 65명의 기고자가 참여한 책이다. 레이 트레이싱과 관련된 초급, 약간의 중급 정보까지 얻을 수 있다. 레이 트레이싱에 관심은 있지만 내부의 처리 방식은 전혀 감이 오지 않는 분에게 추천한다. 이 책을 읽고 샘플 프로젝트를 만들 수 있다면 그 이후는 스스로 더 배워나갈 수 있을 것이다.
추천의 글
단순성, 병렬성, 접근성은 레이 트레이싱에서 떠오르는 주제다. 나는 레이 트레이싱이 글로벌 일루미네이션을 위한 최고의 매개가 돼 줄 것이라 생각하지 못했지만 단순성은 매력적이다. 그래픽 렌더링 알고리즘은 시각화하거나 설명 혹은 코드화하기 쉽지 않다. 이 단순성은 초보 프로그래머가 두 개의 투명 구체와 포인트 라이트 소스로 밝히는 체커보드를 쉽게 렌더링할 수 있게 한다. 실습에서 경로 추적과 원래 알고리즘에서의 다른 출발을 구현하는 것은 좀 더 복잡하지만 경로를 따라 놓여있는 모든 것과 계속 교차한다.
‘처치 곤란 병렬(embarrassingly parallel)’이라는 용어는 레이 트레이싱을 실행할 합리적인 병렬 엔진이 있기 훨씬 이전부터 레이 트레이싱에 적용됐다. 오늘날 레이 트레이싱은 현대 GPU의 탁월한 병렬 처리와 원시 처리 능력에 부합한다.
접근성은 모든 프로그래머에게 항상 중요한 문제였다. 수십 년 전 내가 원하는 것을 컴퓨터가 하지 않으면 나는 그 뒤를 걸어 다니며 회로를 사소하게 변경했을 것이다(농담이 아니다). 요즘은 커스터마이즈하고자 그래픽 API의 레이어 아래를 들여다보는 것은 생각조차 하지 못할 일이 돼버렸다. 프로그래밍할 수 있는 셰이딩의 점진적인 확장으로 인해 수십 년 전에 미묘하게 변경됐다. 지원 프로그래밍 도구와 함께 현대 GPU의 유연성은 병렬 처리 요소에 전례 없는 접근성을 제공한다.
그렇다면 이 모든 것이 실시간 레이 트레이싱으로 어떻게 이어졌을까? 분명 성능, 복잡성, 정확성의 문제는 그래픽 프로그래머가 품질과 속도를 동시에 향상시키는 것을 막지 않았다. 그래픽 프로세서도 진화해 레이 트레이싱은 더할 나위 없이 딱 들어맞게 됐다. 그래픽 하드웨어에 레이 트레이싱 가속 기능을 도입하는 것은 실시간 레이 트레이싱을 일반적인 용도로 가져오는 주요 단계다. 레이 트레이싱의 단순성 및 내재된 병렬성과 최신 GPU의 접근성 및 마력과의 결합은 모든 그래픽 프로그래머가 도달할 수 있는 범위 내로 실시간 레이 트레이싱 성능을 낼 수 있게 만든다. 그러나 운전면허를 받는 것은 자동차 경주에서 우승하는 것이 아니다. 배워야 할 기술이 있고 공유해야 할 경험이 있으며 여느 분야와 마찬가지로 지름길이 있다.
이 책에 공헌한 전문가들이 이러한 트릭과 기술을 공유할 때 그것은 진정한 보석이 된다.
- 터너 위티드(Turner Whitted)/ 2018년 12월
레이 트레이싱은 레스터화 기법이 에뮬레이트하려고 하는 기본 작업(씬의 어느 곳에서든지 원하는 방향으로 쿼리를 생성하고 어떤 오브젝트가 어디서, 얼마나 되는 거리에서 맞았는지를 찾아낼 수 있는지)을 정확하게 제공하기 때문에 이러한 사례를 우아하고 정확하게 해결할 수 있다. 근사치에 제한되지 않고 실제 씬 지오메트리를 검사해 수행할 수 있다. 결과적으로 레이 트레이싱을 기반으로 하는 계산은 모든 종류의 빛 전송을 매우 세부적인 레벨로 시뮬레이션하기 충분할 만큼 정확하다. 목표가 포토리얼리즘인 경우 이 기능을 대신할 것은 없다. 광자가 여행하는 복잡한 길을 결정해야 하기 때문이며, 실시간 도메인에 대한 소개가 컴퓨터 그래픽의 중요한 단계인 이유다.
물론 이미지 생성을 위해 레이 트레이싱을 사용하는 것이 새로운 아이디어는 아니다. 그 기원은 1960년대로 거슬러 올라간다. 영화 렌더링과 디자인 시각화 같은 애플리케이션은 실제와 같은 결과를 제공하기 위해 수십 년간 이 기술에 의존해왔다. 그러나 새로운 것은 현대 시스템에서 광선을 처리할 수 있는 속도다. 전용 레이 트레이싱 실리콘 덕분에 최근 출시된 엔비디아(NVIDIA) 튜닝 GPU의 처리량은 초당 수십억 개의 광선으로 측정된다. 이는 전 세대에 비해 훨씬 향상된 수준이다. 이 수준의 성능을 가능하게 하는 하드웨어는 RT 코어라고 불리는데 연구와 개발에 수년이 걸린 정교한 장치다. RT 코어는 GPU의 스트리밍 멀티프로세서(SM)와 밀접하게 결합돼 있으며, 레이 트레이스 작업의 중요한 ‘내부 루프’인 바운딩 볼륨 계층 구조(BVH, Bounding Volume Hierarchies)와 삼각형에 대한 광선의 교차 테스트를 구현한다. 특수 회로에서 이러한 계산을 수행하는 것은 소프트웨어 구현보다 훨씬 빠르게 실행할 수 있으며 광선이 병렬로 처리되는 동안 셰이딩 같은 다른 작업을 하도록 일반 SM 코어를 자유롭게 한다. RT 코어를 통해 달성한 성능의 획기적인 도약은 까다로운 실시간 애플리케이션에서 레이 트레이싱이 실현 가능하게 되는 토대를 마련했다.
이러한 인터페이스에 들어가는 핵심 설계 결정은 전반적인 추상화 수준을 낮추면서(다이렉트X 12와 불칸의 방향을 유지하면서) 동시에 미래의 하드웨어 개발과 다른 공급업체의 구현을 허용하려는 욕구에 의해 결정됐다. 호스트 API 측면에서 이는 자원 할당과 전송, 셰이더 컴파일, BVH 구성, 다양한 형태의 동기화 같은 측면을 제어하는 애플리케이션을 의미했다. GPU 타임라인에서 생성되는 광선 생성과 BVH 생성은 멀티스레드 디스패칭과 래스터를 통한 레이 트레이싱 작업의 원활한 인터리빙과 계산을 가능하게 하는 명령어 목록을 사용해 호출됐다. 셰이더 테이블 개념은 셰이더 및 리소스와 씬 지오메트리를 연결하는 간단한 방법을 제공하고자 특별히 개발됐으며, 씬 그래프를 추적하는 추가적인 드라이버 사이드 데이터 구조가 필요하지 않다. GPU 디바이스 코드에서 레이 트레이싱은 몇 가지 새로운 셰이더 단계를 통해 노출된다. 이 단계는 광선 처리 중(가령 광선과 씬 사이의 교차점이 발생하는 시기 중) 자연스러운 지점에서 프로그래밍 가능한 훅을 제공한다. 따라서 레이 트레이싱 디스패치의 제어 흐름은 프로그래밍 가능한 단계와 BVH 탐색이나 셰이더 스케줄링 같은 고정된 기능(잠재적으로 하드웨어 가속된) 작업 사이에서 번갈아 나타난다. 래스터라이저(프래그먼트 셰이더의 스케줄러로 볼 수 있는)와 같은 고정 함수로 프로그래밍 가능한 셰이더 실행이 인터리브된 전통적인 그래픽 파이프라인과 유사하다. 이 모델을 통해 GPU 공급업체는 기존 API를 손상시키지 않고 고정 함수 하드웨어 아키텍처를 발전시킬 수 있다.
빠른 레이 트레이싱 GPU와 API는 이제 널리 사용할 수 있고 그래픽 프로그래머의 도구상자에 강력한 새로운 도구를 추가했다. 그러나 이는 결코 실시간 그래픽이 해결된 문제임을 뜻하는 것은 아니다. 실시간 애플리케이션의 자비 없는 프레임 비율 요구치는 무차별 대입(brute force)으로 전체 빛 전달 시뮬레이션을 순진하게 해결하기에는 너무 작다. 수년에 걸친 래스터화 기술의 발전과 달리 실시간 성능과 오프라인에서 렌더링된 ‘최종 픽셀’ 간의 품질 간극을 줄여줄 영리한 레이 트레이싱 기술의 개발을 보게 될 것이다. 이러한 기술 중 일부는 비실시간 생산 렌더링 분야의 광범위한 경험과 연구를 기반으로 한다. 다른 일부는 게임 엔진과 같은 실시간 애플리케이션의 요구에 고유하게 될 것이다. 에픽, SEED, 엔비디아의 그래픽 엔지니어가 첫 번째 DXR 기반 데모의 일부에서 두 가지 훌륭한 사례 연구는 19장과 25장에서 찾을 수 있다.
엔비디아의 레이 트레이싱 기술의 생성을 담당하는 누군가 덕분에 2018년 마침내 기술이 빛을 보게 된 것은 굉장히 보람 있는 경험이었다. 몇 달 만에 실시간 레이 트레이싱은 판매자 독립적인 API 지원, 메인스트림 GPU의 전용 하드웨어, 가속화된 레이 트레이싱 이펙트를 실은 첫 번째 AAA 게임 타이틀(EA의 배틀필드 5)까지 완벽하게 소비자 제품에 녹아들었다. 레이 트레이싱이 게임 엔진 제공업체에 의해 채택되는 속도와 개발자의 열정 수준은 모든 기대를 뛰어 넘는다. 레이 트레이싱만으로 가능한 수준의 실시간 이미지 품질을 얻으려는 강한 열망이 분명히 존재하며, 엔비디아에서 기술을 꾸준히 발전시키려는 영감으로 변한다. 실제로 그래픽은 여전히 레이 트레이싱 시대의 시작 단계다. 앞으로의 10년은 좀 더 강력한 GPU, 알고리즘의 발전, 렌더링의 많은 측면으로 인공지능 통합, 기초부터의 레이 트레이싱을 위한 게임 엔진과 콘텐츠 저작물을 보게 될 것이다. 그래픽이 ‘충분히 좋은’ 상태가 되기까지 해야 할 일이 많으며, 다음 단계에 도달하는 데 도움이 되는 도구 중 하나가 이 책이다.
에릭 헤인스와 토마스 아키네스 몰러는 수십 년 동안 개발자와 연구원을 교육시키고 영감을 준 그래픽 베테랑이다. 이 책에서는 기술이 전례 없는 모멘텀을 모으기 때문에 적시에 레이 트레이싱의 영역에 집중한다. 업계 최고의 전문가 중 일부는 커뮤니티를 위해 이 볼륨의 지식과 경험을 공유해 그래픽의 미래에 지속적인 영향을 미칠 중요한 자원을 만들었다.
- 마틴 스티치(Martin Stich)/ DXR & RTX 레이 트레이싱 소프트웨어 리드, 엔비디아 2018년 12월
이 책에서 다루는 내용
■ 여러 도메인에서 실시간 애플리케이션을 개발하기 위한 최신 레이 트레이싱 테크닉
■ 마이크로소프트 다이렉트X 레이 트레이싱(DXR)을 사용한 렌더링 애플리케이션을 위한 지침, 조언, 최고의 실습
■ 인터렉티브 시각화, 게임, 시뮬레이션 등을 위한 고성능 그래픽을 구현하는 방법
이 책의 대상 독자
■ 실시간 렌더링과 레이 트레이싱을 위해 최신 API와 GPU 기술을 활용하려는 개발자
■ 이 분야의 모범 사례를 배우고자 하는 학생
■ 새로운 GPU를 이해하고 실험하려는 사람
목차
목차
- 1부. 레이 트레이싱 기본
- 1장. 레이 트레이싱 용어
- 1.1 역사적 노트
- 1.2 정의
- 2장. 광선 소개
- 2.1 광선의 수학적 설명
- 2.2 광선 간격
- 2.3 DXR의 광선
- 2.4 결론
- 3장. 다이렉트X 레이 트레이싱 소개
- 3.1 소개
- 3.2 개요
- 3.3 시작
- 3.4 다이렉트X 레이 트레이싱 파이프라인
- 3.5 다이렉트X 레이 트레이싱을 위한 새로운 HLSL 지원
- 3.6 간단한 HLSL 레이 트레이싱 예제
- 3.7 다이렉트X 레이 트레이싱의 호스트 초기화 개요
- 3.8 기본 DXR 초기화와 설정
- 3.9 레이 트레이싱 파이프라인 상태 오브젝트
- 3.10 셰이더 테이블
- 3.11 광선 디스패칭
- 3.12 더 깊게 들어가기와 추가 자원
- 3.13 결론
- 4장. 플라네타리움 돔 마스터 카메라
- 4.1 소개
- 4.2 방법
- 4.3 플라네타리움 돔 마스터 투영 샘플 코드
- 5장. 서브배열의 최소와 최대 계산
- 5.1 동기
- 5.2 나이브한 전체 테이블 탐색
- 5.3 희소 테이블 해결법
- 5.4 (재귀) 범위 트리 방식
- 5.5 반복적인 범위 트리 쿼리
- 5.6 결과
- 5.7 요약
- 2부. 교차와 효율성
- 6장. 자기 교차를 피하는 빠르고 강력한 방법
- 6.1 서론
- 6.2 방법
- 6.3 결론
- 7장. 광선/교차의 정밀도 향상
- 7.1 기본 광선/구체 교차
- 7.2 부동소수점 정밀도 고려 사항
- 7.3 관련 자료
- 8장. 멋진 패치: 광선/이중선형 패치 교차에 대한 지오메트릭 접근
- 8.1 소개와 선행 기술
- 8.2 GARP 세부 사항
- 8.3 결과 논의
- 8.4 코드
- 9장. DXR에서의 다중 충돌 레이 트레이싱
- 9.1 소개
- 9.2 구현
- 9.3 결과
- 9.4 결론
- 10장. 높은 스케일 효율성을 지닌 단순한 로드밸런스 체계
- 10.1 소개
- 10.2 요구 사항
- 10.3 로드밸런싱
- 10.4 결과
- 3부. 반사, 굴절, 셰도우
- 11장. 중첩된 볼륨의 머티리얼 자동 처리
- 11.1 모델링 볼륨
- 11.2 알고리즘
- 11.3 제한
- 12장. 범프 터미네이터 문제를 풀기 위한 미세면 기반 셰도잉 함수
- 12.1 서론
- 12.2 이전 작업
- 12.3 방법
- 12.4 결과
- 13장. 레이 트레이싱된 셰도우: 실시간 프레임 비율 유지
- 13.1 소개
- 13.2 관련 작업
- 13.3 레이 트레이싱된 셰도우
- 13.4 적응 샘플링
- 13.5 구현
- 13.6 결과
- 13.7 결론과 향후 연구
- 14장. DXR을 통한 단일 산란 매체의 광선 유도된 볼루메트릭 물 코스틱
- 14.1 소개
- 14.2 볼루메트릭 라이팅과 굴절 라이트
- 14.3 알고리즘
- 14.4 구현 세부 사항
- 14.5 결과
- 14.6 향후 작업
- 14.7 데모
- 4부. 샘플링
- 15장. 샘플링의 중요성
- 15.1 소개
- 15.2 예제: 앰비언트 오클루전
- 15.3 분산 이해
- 15.4 직접 조명
- 15.5 결론
- 16장. 샘플링 변환 동물원
- 16.1 샘플링의 메커니즘
- 16.2 배포 소개
- 16.3 1차원 배포
- 16.4 2차원 분포
- 16.5 균일하게 표면 샘플링
- 16.6 샘플링 방향
- 16.7 볼륨 산란
- 16.8 동물원 컬렉션에 추가
- 17장. 레이 트레이싱 시의 불편함 무시
- 17.1 소개
- 17.2 동기
- 17.3 클램핑
- 17.4 경로 정규화
- 17.5 결론
- 18장. GPU에서 많은 빛의 중요성 샘플링
- 18.1 서론
- 18.2 이전 알고리즘의 리뷰
- 18.3 기초
- 18.4 알고리즘
- 18.5 결과
- 18.6 결론
- 5부. 노이즈 제거와 필터링
- 19장. 실시간 레이 트레이싱과 노이즈 제거를 지닌 UE4에서의 시네마틱 렌더링
- 19.1 소개
- 19.2 언리얼 엔진 4의 레이 트레이싱 통합
- 19.3 실시간 레이 트레이싱과 노이즈 제거
- 19.4 결론
- 20장. 실시간 레이 트레이싱용 텍스처 레벨의 세부 전략
- 20.1 소개
- 20.2 배경
- 20.3 디테일 알고리즘의 텍스처 레벨
- 20.4 구현
- 20.5 비교와 결과
- 20.6 코드
- 21장. 광선 원뿔과 광선 미분을 사용한 간단한 환경 맵 필터링
- 21.1 소개
- 21.2 광선 원뿔
- 21.3 광선 미분
- 21.4 결과
- 22장. 적응형 레이 트레이싱으로 시간적 안티앨리어싱 개선
- 22.1 소개
- 22.2 이전 시간적 안티앨리어싱
- 22.3 새로운 알고리즘
- 22.4 초기 결과
- 22.5 제한 사항
- 22.6 실시간 레이 트레이싱된 안티앨리어싱의 미래
- 22.7 결론
- 6부. 하이브리드 접근법과 시스템
- 23장. 프로스트바이트에서 인터랙티브 라이트 맵과 조도 볼륨 프리뷰
- 23.1 소개
- 23.2 GI 솔버 파이프라인
- 23.3 가속 기법
- 23.4 라이브 업데이트
- 23.5 성능과 하드웨어
- 23.6 결론
- 24장. 광자 매핑을 통한 실시간 글로벌 일루미네이션
- 24.1 소개
- 24.2 광자 추적
- 24.3 화면 공간 조도 추정
- 24.4 필터링
- 24.5 결과
- 24.6 향후 작업
- 25장. 실시간 레이 트레이싱용 하이브리드 렌더링
- 25.1 하이브리드 렌더링 파이프라인 개요
- 25.2 파이프라인 분석하기
- 25.3 성능
- 25.4 향후
- 25.5 코드
- 26장. 지연된 하이브리드 경로 추적
- 26.1 개요
- 26.2 하이브리드 접근법
- 26.3 BVH 순회
- 26.4 확산 빛 전송
- 26.5 스페쿨러 빛 전송
- 26.6 투명도
- 26.7 성능
- 27장. 고충실도 공상과학 시각화용 인터랙티브 레이 트레이싱 기술
- 27.1 서론
- 27.2 대형 씬을 레이 트레이싱하는 것과 관련된 문제점
- 27.3 시각화 방법
- 27.4 생각 닫기
- 7부. 글로벌 일루미네이션
- 28장. 불균일한 볼륨의 레이 트레이싱
- 28.1 볼륨에서의 빛 수송
- 28.2 우드콕 추적
- 28.3 예제: 간단한 볼륨 경로 추적기
- 28.4 더 읽을거리
- 29장. 레이 트레이서에서 효율적인 입자 볼륨 스플래팅
- 29.1 동기
- 29.2 알고리즘
- 29.3 구현
- 29.4 결과
- 29.5 정리
- 30장. 화면 공간 광자 매핑을 사용한 화면
- 30.1 소개
- 30.2 개요
- 30.3 구현
- 30.4 결과
- 30.5 코드
- 31장. 경로 재사용이 있는 상태에서 풋프린트 추정을 통한 편차 감소
- 31.1 소개
- 31.2 전체 재사용이 잘못된 가중치를 유발하는 이유
- 31.3 효과적인 계수 재사용
- 31.4 임팩트 구현
- 31.5 결과
- 32장. 라디언스 캐싱을 통한 정확한 실시간 스페쿨러 반사
- 32.1 소개
- 32.2 이전 작업
- 32.3 알고리즘
- 32.4 시공간 필터링
- 32.5 결과
- 32.6 결론
- 32.7 향후 작업