Slide 1

Slide 1 text

넥슨 코리아 데브캣 스튜디오 드래곤하운드(프로젝트DH) 개발팀 리드 그래픽스 프로그래머 김혁 ([email protected]) <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법

Slide 2

Slide 2 text

목차 1. 파트 1 – 언리얼 엔진 4의 PBR과 레이트레이싱 2. 파트 2 – 드래곤 하운드의 PBR과 레이트레이싱

Slide 3

Slide 3 text

다룰 내용 • PBR과 레이트레이싱 반사 • 레이트레이싱 데모 제작 경험 공유 • 드래곤 하우드의 새 기능 다루지 않을 내용 • DirectX 12, DXR API • 레이트레이싱 알고리즘 • RTShadow • RTAO (raytraced ambient occlusion • RTGI (raytraced global illumination)

Slide 4

Slide 4 text

Dragonhound: GeForce RTX Real-Time Ray Traced Reflections and Shadows - GDC 2019 https://www.youtube.com/watch?v=ncv5Oe5q5zs

Slide 5

Slide 5 text

들어가기 전 언리얼 엔진 4를 기준으로 합니다. 언리얼 엔진 4와 드래곤 하운드의 레이트레이싱 구현은 아직 실험 기능입니다.

Slide 6

Slide 6 text

들어가기 전 GDC 데모나 이 발표에 쓰인 리소스나 세팅은 현재 제작 단계이거나 임시 리소스로 출시 때 변경 될 수 있습니다

Slide 7

Slide 7 text

파트 1 – 언리얼 엔진4의 PBR과 레이트레이싱 1. 레이트레이싱이란? 2. 디퓨즈와 스페큘러 3. 스페큘러와 레이트레이싱

Slide 8

Slide 8 text

레이트레이싱이란?

Slide 9

Slide 9 text

레이트레이싱이란? 1. 레이와 가장 가까이 충돌하는 삼각형을 탐색 2. 그 삼각형의 무게중심좌표(barycentric coordinate)를 이용해서 쉐이딩에 필요한 정보를 얻음 (예, 보간된 버텍스 정보)

Slide 10

Slide 10 text

레이트레이싱 반사의 역할 • 레이트레이싱으로 모든 것을 렌더링? 아니다 • 래스터라이제이션(rasterization)으로 G버퍼를 생성하고 • 반사 부분만 레이트레이싱으로 수행한다 (디퍼드 렌더링과 hybrid) • 레이트레이싱 이전에 이 부분을 담당했던 기술 – IBL, SSR

Slide 11

Slide 11 text

레이트레이싱 이전의 반사 • IBL (Image-Based Lighting)* • 환경맵 형태로 구워둠 (Pre-Filtered Environment Map) * Real Shading in Unreal Engine 4, Brian Karis (Epic Games), 2013

Slide 12

Slide 12 text

레이트레이싱 이전의 반사 • SSR (Screen-Space Reflections) • 이미 렌더링한 화면에서 가져옴 • 화면 안이라는 제약을 제외하면 매우 훌륭한 퀄리티

Slide 13

Slide 13 text

그럼 레이트레이싱을 쓰면 뭐가 달라질까요?

Slide 14

Slide 14 text

렌더링 공식 2 ( , ) ( , ) ( , )cos r r r i r i i i i H L x f x L x d       = →  BRDF (물체의 반사 특성) 사방에서 들어오는 빛 반사되어 나가는 빛 (예, 눈으로 들어오는 빛) 빛의 각도에 따라 달라지는 빛의 양 모든 빛에 대해 계산 후 적분(더함)

Slide 15

Slide 15 text

렌더링 공식 2 ( , ) ( , ) ( , )cos r r r i r i i i i H L x f x L x d       = →  사방에서 들어오는 빛 직접광 간접광

Slide 16

Slide 16 text

렌더링 공식 2 ( , ) ( , ) ( , )cos r r r i r i i i i H L x f x L x d       = →  직접광 간접광 디렉셔널 라이트 포인트 라이트

Slide 17

Slide 17 text

렌더링 공식 2 ( , ) ( , ) ( , )cos r r r i r i i i i H L x f x L x d       = →  직접광 간접광 디렉셔널 라이트 포인트 라이트 디퓨즈 스페큘러

Slide 18

Slide 18 text

렌더링 공식 2 ( , ) ( , ) ( , )cos r r r i r i i i i H L x f x L x d       = →  직접광 간접광 디렉셔널 라이트 포인트 라이트 디퓨즈 SH 라이트맵 스페큘러

Slide 19

Slide 19 text

렌더링 공식 2 ( , ) ( , ) ( , )cos r r r i r i i i i H L x f x L x d       = →  직접광 간접광 디렉셔널 라이트 포인트 라이트 IBL SSR 디퓨즈 SH 라이트맵 스페큘러 레이트레이싱 반사

Slide 20

Slide 20 text

BRDF (Bidirectional Reflectance Distribution Function)

Slide 21

Slide 21 text

금속의 스페큘러 비금속의 디퓨즈+스페큘러* * Physics and Math of Shading , Naty Hoffman (2K), 2015 비금속과 금속

Slide 22

Slide 22 text

• 비금속 (메탈릭 0) • 디퓨즈 – 베이스 컬러 • 스페큘러 - 흰색 0%~4%~8% • 금속 (메탈릭 1) • 디퓨즈 없음 • 스페큘러 - 베이스 컬러 (0%~100%)

Slide 23

Slide 23 text

• 비금속 (메탈릭 0) • 디퓨즈 – 베이스 컬러 • 스페큘러 - 흰색 0%~4%~8%

Slide 24

Slide 24 text

반사율 100% 반사율 2% 프레넬 반사율

Slide 25

Slide 25 text

반사율 4% 반사율 ~100%

Slide 26

Slide 26 text

레이트레이싱 켬

Slide 27

Slide 27 text

레이트레이싱 끔

Slide 28

Slide 28 text

발표/시연을 위한 임시 리소스입니다

Slide 29

Slide 29 text

디퓨즈 스페큘러 발표/시연을 위한 임시 리소스입니다

Slide 30

Slide 30 text

미세면(Microfacet)과 러프니스 정반사 (specular reflection) 글로시 (glossy) 디퓨즈에 가까운 스페큘러 러프니스 >> 0 러프니스 > 0 러프니스 = 0

Slide 31

Slide 31 text

레이트레이싱 글로시 - 디노이저 • 글로시는 수십, 수백개 이상의 레이가 필요 • 실시간에서는 1개 혹은 몇 개의 레이를 사용 후 디노이저로 보완 • SSR (Screen-Space Reflections)도 비슷* * Stochastic Screen-Space Reflections, Tomasz Stachowiak (Electronic Arts/Frostbite), 2015

Slide 32

Slide 32 text

디노이즈 전 디노이즈 후

Slide 33

Slide 33 text

디노이저 끔 디노이저 켬

Slide 34

Slide 34 text

요약 • 레이트레이싱 반사는 스페큘러만 다룬다 • 메탈릭(금속/비금속)은 반사율에 큰 영향을 준다 • 러프니스가 반사의 모양을 결정 • 중요한 요소는 글로시와 디노이저

Slide 35

Slide 35 text

파트 2 – 드래곤 하운드의 PBR과 레이트레이싱 1. 리소스 제작 팁 2. 반사 성능 최적화 3. 드래곤 하운드의 새 구현

Slide 36

Slide 36 text

드래곤 하운드의 레이트레이싱 히스토리 GDC 2018 DirectX Raytracing, RTX 등장 컴퓨트 쉐이더로 레이트레이싱 시험 구현

Slide 37

Slide 37 text

드래곤 하운드의 레이트레이싱 히스토리 DXR 샘플을 참고하여 직접 UE4에 포팅 에픽의 구현으로 이전

Slide 38

Slide 38 text

2.1 리소스 제작 팁 1. 반사 표현 2. 노말 3. 넌유니폼 스케일링 (non-uniform scaling) 4. 금속의 베이스 컬러

Slide 39

Slide 39 text

(1) 반사 표현 • 정반사(러프니스 0)인 물체는 별로 없다 • 거울, 크롬 • 자동차는 클리어 코트 (clear coat) • 자연스러운 것은 글로시 스타워즈 스타워즈 Nubian royal starship

Slide 40

Slide 40 text

(1) 반사 표현 • 억지스러움은 테크 데모로 충분 • 자연스러우면 티가 안나고, • 티가 나면 억지스럽다 • 반사상을 식별하게 하는 건 어려움 • 평면이 아닌 볼록이나 오목은 반사상이 잘 식별 되지 않는다

Slide 41

Slide 41 text

(1) 반사 표현 • IBL과 SSR은 사실 매우 훌륭한 기술 • 단순한 반사의 느낌을 위해서는 사실 레이트레이싱은 필요 없다 • 레이트레싱의 강점은 동적인 표현

Slide 42

Slide 42 text

반사 후 그림자

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

(2) 노말 • 러프니스가 0인 재질은 노말 텍스쳐가 매우 중요하고 가장 까다로움 • IBL/SSR과 달리 노말의 문제가 레이트레이싱에서 크게 나타남

Slide 45

Slide 45 text

구름이 일그러짐 반사 되는 상이 멀리 있을 수록 일그러짐이 심해짐

Slide 46

Slide 46 text

원인 같은 스무딩 그룹 노말맵 계산

Slide 47

Slide 47 text

노말맵 평면화를 사용하지 않으면 되나? 128, 128, 255 127, 127, 255 • 맥스에서 구운 평면 노말맵도 심하진 않지만 비슷한 문제 발생 • 하이폴리곤에서 만든 노말맵에 오차가 섞여 있다

Slide 48

Slide 48 text

해결 방법 • 노말맵의 의존도를 낮춘다 • 오차 없이 버텍스 노말만 사용 • FlattenNormal으로 노말맵의 의존도를 낮춤 • 필요하면 스무딩 그룹의 분리후 노말 텍스쳐를 수동으로 밀어줌

Slide 49

Slide 49 text

발표/시연을 위한 임시 리소스입니다

Slide 50

Slide 50 text

(3) 넌유니폼 스케일링 (non-uniform scaling) • 넌유니폼 문제는 그래픽스에서 잘 알려진 문제 • 잘못된 노말로 반사 방향이 물체 뒤로 넘어간다 • 노말의 변환 행렬 계산을 제대로 해줘야한다 • 넌유니폼의 변환 행렬은 위치 버텍스의 계산과 다름

Slide 51

Slide 51 text

올바른 상황 잘못된 상황

Slide 52

Slide 52 text

반사 방향 오류 발표/시연을 위한 임시 리소스입니다

Slide 53

Slide 53 text

해결/우회 방법 1. 넌유니폼 스케일링을 쓰지 않음 2. 넌유니폼의 노말 변환을 제대로 계산하도록 엔진을 수정* 3. 넌유니폼 스케일링 된 메시를 유니폼으로 바꾸어 저장 (드래곤 하운드 GTC/GDC 데모에서는 이 방법을 사용) * Normal Transformations by Jason L. McKesson

Slide 54

Slide 54 text

(4) 금속의 베이스 컬러 • 물리적으로 올바른 베이스 컬러를 사용하는 것은 매우 중요 • 비금속에서 베이스 컬러 = 디퓨즈 반사율 금속에서 베이스 컬러 = 스페큘러 반사율 • 드래곤 하운드에서는 (여러 이유로) 전반적인 베이스 컬러가 낮게 되어 있어서 적절하게 상향 조절 * 이미지: 언리얼 엔진 4 문서 – 물리기반 머티리얼

Slide 55

Slide 55 text

요약 • 레이트레이싱의 강점은 글로시와 동적 스페큘러 • 러프니스 0인 정반사는 주의가 필요하다 • 반사가 더 정확해지면서 노말의 중요도가 매우 높아졌다

Slide 56

Slide 56 text

2.2 반사 성능 최적화 1. 응집성 (coherence) 2. 레이 적게 쏘기 3. 래스터라이제이션 최적화

Slide 57

Slide 57 text

반사 성능 최적화 1. 응집성 (coherence) 2. 레이 적게 쏘기 3. 래스터라이제이션 최적화

Slide 58

Slide 58 text

응집성 (coherence) 응집성 높음 응집성 낮음 성능 >

Slide 59

Slide 59 text

응집성 (coherence) • 개념만 알아도 도움이 됩니다 • 응집성이 낮으면, • 레이 탐색이 느려진다 • 다수의 텍스쳐를 읽어야한다 • 쉐도우는 응집성이 높고, 반사는 응집성이 낮은 편

Slide 60

Slide 60 text

반사 성능 최적화 1. 응집성 (coherence) 2. 레이 적게 쏘기 3. 래스터라이제이션 최적화

Slide 61

Slide 61 text

레이 적게 쏘기 • (ㅁ) 반사 스크린 퍼센티지 낮추기 (100%->50%) • (ㅁ) 반사 계산시 지정된 러프니스 보다 높으면 IBL을 사용 • 기본값 0.6으로 성능과 씬에 따라 조절 가능 • (ㅁ) 최대 반사 바운스 조절 • 반사 바운스 비주얼라이저 • 적응형 최대 러프니스

Slide 62

Slide 62 text

반사 바운스 비주얼라이저 • 러프니스가 바운스에 영향을 주고, 이건 성능으로 직결 된다 • 리플렉션이 되는 횟수를 색깔로 표현하는 비주얼라이저를 제작 • 필요 이상으로 트레이싱이 많이 되는 부분을 확인하여 러프니스를 조절

Slide 63

Slide 63 text

1 2 3

Slide 64

Slide 64 text

적응형 최대 러프니스 (Adaptive Max Roughness) • 첫번째 반사에서는 최대 러프니스(Max Roughness) 보다 초과일 경우 IBL을 사용 • 두번째 반사에서는 이 기준을 반으로 줄임 세번째 반사는 또 그의 절반 • 예, 최대 러프니스 값이 0.6이라면 두번째 반사는 0.3, 세번째는 0.15 • 두번째 반사부터 이전 반사가 비금속일 경우 레이트레이싱 반사 가능성을 줄임 • 레이가 (뎁스버퍼 대비) 먼 곳에서 날아 왔으면 그 다음 반사 가능성을 줄임

Slide 65

Slide 65 text

적용 전 적용 후

Slide 66

Slide 66 text

적응형 최대 러프니스 (Adaptive Max Roughness) • 적게 쏘니 당연히 성능 향상이 크다 많게는 3 ms ~10 ms • 하지만 퀄리티 차이도 없을 순 없다 (차이를 최소화하기 위해 공식을 개선 중) • 퀄리티보다 성능을 원할 때 사용 (아직은 대부분 성능이 더 필요하다) 9 ms 향상

Slide 67

Slide 67 text

적응형 최대 러프니스 (Adaptive Max Roughness) • 전반적으로는 비슷하지만 암부의 디테일이 떨어진다 • 성능은 9 ms 향상 • 반사 대신 스페큘러 AO를 사용하면 비용을 줄일 수 있지 않을까? 적용 전 적용 후

Slide 68

Slide 68 text

반사 성능 최적화 1. 응집성 (coherence) 2. 레이 적게 쏘기 3. 래스터라이제이션 최적화

Slide 69

Slide 69 text

래스터라이제이션의 최적화 • 레이트레이싱이라고 래스터라이제이션의 최적화가 필요 없지 않다 • 반사 후 머티리얼/라이팅 계산은 포워드 쉐이딩과 같다 • 머티리얼 평가 비용(쉐이더 비용) 줄이기 • 텍스쳐 사용 줄이기 • LOD 적극 사용하기 • 레이트레이싱이 적용된 거리는 눈에 보이는 것보다 길다

Slide 70

Slide 70 text

요약 • 응집성(coherence)이 낮으면 성능 하락이 크다 • 그림자에 비해 반사의 응집성은 많이 낮은 편 • 반사 바운스가 높으면 응집성이 떨어지고 크게 성능이 하락한다 • 씬의 구성에 따라, 최대 러프니스, 최대 바운스, 반사 해상도 등을 조절하여 성능 향상을 얻을 수 있다

Slide 71

Slide 71 text

2.3 드래곤 하운드의 새 구현 1. 드래곤 하운드의 반투명 및 굴절 2. 스크린 스페이스 포톤 매핑

Slide 72

Slide 72 text

드래곤 하운드의 반투명 및 굴절 • 드래곤 하운드의 용은 몸에 용석이 달려 있다 • 용석은 크리스탈과 비슷 • 드래곤 하운드의 핵심 비주얼 중 하나 발표/시연을 위한 임시 리소스입니다

Slide 73

Slide 73 text

래스터라이제이션의 반투명 • 불투명만 G버퍼에 그림 • 반투명한 물체는 카메라 기준으로 정렬 후 드로우 • 스켈레탈 메시로 있는 용석은 전부 나누지 않는 이상 정렬 불가 • 다른 방법: Order-Independent Transparency • OIT는 픽셀 안에서 정렬 • 툼 레이더의 헤어, 어센던트 원* * 프로젝트 A1의 AAA급 캐릭터 렌더링 기술, 기현우, 2016

Slide 74

Slide 74 text

레이트레이싱 반투명 – 에픽의 방법 • 래스터라이제이션과 같은 형태로 반투명 물체를 제외한 불투명 물체만 G버퍼에 렌더링 • 레이트레이싱을 이용해서 순차적으로 드로우

Slide 75

Slide 75 text

반투명 물체는 G버퍼에 그리지 않음 G버퍼 원본 메시

Slide 76

Slide 76 text

원하는 최종 결과 G버퍼

Slide 77

Slide 77 text

반투명을 포함해서 레이트레이싱 카메라 부터 G버퍼(뎁스 버퍼) 바로 앞까지만

Slide 78

Slide 78 text

반투명 물체에 닿으면 추가 레이트레이싱

Slide 79

Slide 79 text

드래곤 하운드의 방법 • 에픽의 구현은 범용적이고 일반적인 구현 • 드래곤 하운드에서는 속도를 위해서 모양이 명확한 물체에 특화 된 구현으로 변형

Slide 80

Slide 80 text

반투명 물체까지 G버퍼에 그림 G버퍼 (쉐이딩 모델 ID) 원본 메시

Slide 81

Slide 81 text

쉐이딩 모델 ID 반사만 적용

Slide 82

Slide 82 text

쉐이딩 모델 ID를 이용 반투명 물체에 대해서만 레이트레이싱

Slide 83

Slide 83 text

발표/시연을 위한 임시 리소스입니다

Slide 84

Slide 84 text

성능 • 한 단계를 줄인 만큼은 당연히 빨라지고 • 한 단계 줄인거 이상으로 약간의 추가 이득이 있음 (불필요한 첫번째 레이를 쏘지 않기 때문) • 플레이 뷰에서는 충분히 사용 가능. 근접 성능은 개선 중 에픽 드래곤 하운드 성능 향상 가까이 볼 때 8.2 ms 3.2 ms 5 ms 플레이 뷰 2.2 ms 1.2 ms 1 ms

Slide 85

Slide 85 text

스크린 스페이스 포톤 매핑 (SSPM) • 커스틱을 위한 스크린 스페이스 포톤 매핑 (screen-space photon mapping) • 커스틱은 굴절이나 반사로 빛이 모여서 주변보다 밝게 보이는 현상 커스틱의 예시 렌더링 이미지 (오프라인 렌더링)

Slide 86

Slide 86 text

구현 설명은 시간 관계로 생략 • Ray Tracing Gems 에 수록* (E북(킨들, PDF)은 무료) 1. 포톤(photon, 광자, 빛 알갱이)을 월드에 뿌리고 2. 스크린 스페이스안에 들어갈 포톤만 저장 3. 포톤 맵 텍스쳐 디노이징 • 저장된 포톤이 반사와 비슷하다는 것에서 착안 • NVIDIA GameWorks Denoiser 로 시범 구현 * Caustics using Screen-Space Photon Mapping, 김혁 (넥슨 코리아), 2019

Slide 87

Slide 87 text

No content

Slide 88

Slide 88 text

포톤 맵 디노이징 전 포톤 맵 디노이징 후 결과

Slide 89

Slide 89 text

SSPM - Reflection Caustics and Complex Scene https://www.youtube.com/watch?v=T_b6StxmMfQ

Slide 90

Slide 90 text

결론 • 응집성이 높아서 레이트레이싱 성능은 좋다 • 디노이저의 성능과 퀄리티가 관건 • 자체 SSPM 전용 디노이저를 제작 중 • 성능 데이터 및 게임 적용은 다음 기회에 공개

Slide 91

Slide 91 text

마무리

Slide 92

Slide 92 text

결론 • 반사 레이트레이싱은 스페큘러의 퀄리티를 극적으로 향상 시킨다 • IBL과 SSR을 넘어서 동적 글로시 스페큘러 • 성공의 주요 포인트는 디노이저 (성능, 퀄리티) • 굴절, 커스틱, GI 등 반사를 넘어서 다양하게 활용 가능

Slide 93

Slide 93 text

이후 작업 (다 하겠다는건 아닙니다) * Physically-Based Shading at Disney, Brent Burley, SIGGRAPH 2012 • 스페큘러 AO • 스페큘러에 이어 디퓨즈 개선하기 (Burley(디즈니) 디퓨즈?)* • 반투명 근접 성능 개선 • 반사 시 계산할 라이트 선정 (포워드 쉐이딩 개선) • 무지개빛/회절 (iridescence/diffraction) • 반사 안정화 후 GI 적용을 고려

Slide 94

Slide 94 text

레퍼런스 • Physics and Math of Shading , Naty Hoffman (2K), SIGGRAPH 2015 • Real Shading in Unreal Engine 4, Brian Karis (Epic Games), SIGGRAPH 2013 • Stochastic Screen-Space Reflections, Tomasz Stachowiak (Electronic Arts/Frostbite), SIGGRAPH 2015 • Exploring the Ray Traced Future in 'Metro Exodus', Oles Shyshkovtsov et al., GDC 2019 • Normal Transformations by Jason L. McKesson https://paroj.github.io/gltut/Illumination/Tut09 Normal Transformation.html • 언리얼 엔진 4 물리기반 머티리얼 https://api.unrealengine.com/KOR/Engine/Rendering/Materials/PhysicallyBased/index.html • 프로젝트 A1의 AAA급 캐릭터 렌더링 기술, 기현우 (넥슨 코리아), NDC 2016 • Caustics using Screen-Space Photon Mapping (Ray Tracing Gems), Hyuk Kim (NEXON Korea), 2019 • Physically-Based Shading at Disney, Brent Burley, SIGGRAPH 2012

Slide 95

Slide 95 text

이미지 출처 • 호수 사진 https://www.fhwa.dot.gov/byways/byways/2302/photos • “Reflections” – A Star Wars UE4 Real-Time Ray Tracing Cinematic Demo https://www.youtube.com/watch?v=lMSuGoYcT3s • J-type 327 Nubian royal starship https://starwars.fandom.com/wiki/J-type_327_Nubian_royal_starship • Mental Ray - Caustics Asset Scene https://www.youtube.com/watch?v=KatVWgFCyS0

Slide 96

Slide 96 text

감사합니다