Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[NDC 2019] 드래곤 하운드의 PBR과 레이트레이싱 렌더링 기법

Hyuk Kim
April 26, 2019

[NDC 2019] 드래곤 하운드의 PBR과 레이트레이싱 렌더링 기법

언리얼 엔진 4를 이용한 드래곤 하운드의 레이트레이싱 기법을 소개합니다

Hyuk Kim

April 26, 2019
Tweet

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. 레이트레이싱이란?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  14. 렌더링 공식
    2
    ( , ) ( , ) ( , )cos
    r r r i r i i i i
    H
    L x f x L x d
         
    = →

    BRDF (물체의 반사 특성)
    사방에서 들어오는 빛
    반사되어 나가는 빛
    (예, 눈으로 들어오는 빛)
    빛의 각도에 따라
    달라지는 빛의 양
    모든 빛에 대해 계산 후 적분(더함)

    View full-size slide

  15. 렌더링 공식
    2
    ( , ) ( , ) ( , )cos
    r r r i r i i i i
    H
    L x f x L x d
         
    = →

    사방에서 들어오는 빛
    직접광
    간접광

    View full-size slide

  16. 렌더링 공식
    2
    ( , ) ( , ) ( , )cos
    r r r i r i i i i
    H
    L x f x L x d
         
    = →

    직접광
    간접광
    디렉셔널 라이트
    포인트 라이트

    View full-size slide

  17. 렌더링 공식
    2
    ( , ) ( , ) ( , )cos
    r r r i r i i i i
    H
    L x f x L x d
         
    = →

    직접광
    간접광
    디렉셔널 라이트
    포인트 라이트
    디퓨즈
    스페큘러

    View full-size slide

  18. 렌더링 공식
    2
    ( , ) ( , ) ( , )cos
    r r r i r i i i i
    H
    L x f x L x d
         
    = →

    직접광
    간접광
    디렉셔널 라이트
    포인트 라이트
    디퓨즈
    SH
    라이트맵
    스페큘러

    View full-size slide

  19. 렌더링 공식
    2
    ( , ) ( , ) ( , )cos
    r r r i r i i i i
    H
    L x f x L x d
         
    = →

    직접광
    간접광
    디렉셔널 라이트
    포인트 라이트
    IBL
    SSR
    디퓨즈
    SH
    라이트맵
    스페큘러
    레이트레이싱 반사

    View full-size slide

  20. BRDF (Bidirectional Reflectance Distribution Function)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  25. 반사율 4%
    반사율 ~100%

    View full-size slide

  26. 레이트레이싱 켬

    View full-size slide

  27. 레이트레이싱 끔

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  32. 디노이즈 전
    디노이즈 후

    View full-size slide

  33. 디노이저 끔 디노이저 켬

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  42. 반사 후 그림자

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  50. 올바른 상황 잘못된 상황

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  63. 적용 전 적용 후

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  74. 원하는 최종 결과 G버퍼

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  79. 쉐이딩 모델 ID 반사만 적용

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  90. 레퍼런스
    • 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

    View full-size slide

  91. 이미지 출처
    • 호수 사진
    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

    View full-size slide

  92. 감사합니다

    View full-size slide