SlideShare a Scribd company logo
Forward Rendering /
 Deferred Rendering
   이창희(cagetu@softnette.com)
               ㈜소프트네트
이창희
(@cagetu)
            - 소프트네트
            -   CCR
            -   Hi-Win
            -   Netmarble(現, CJ E&M)
            -   DreamSEED
            -   SAMSONCORE
오늘의 주제
• 더욱 사실감 있는 Dynamic Lighting을 처
  리하기 위해 Rendering Pipeline이 어떻
  게 발전했는지를 알아본다.
   • Forward Rendering / Deferred Rendering
   • Tile Based Rendering
   • Forward +
(전통적인)

FORWARD RENDERING
Forward Rendering
      • 전통적인 렌더링 파이프라인을
        통해서 셰이딩 되는 방식을 말
        한다.
Shading.
• Forward Rendering 에서 다수의 라이팅을
  처리하는 방법.
문제점
• 화면에 렌더링되지 않아도 되는 면(Culling)
  도 셰이딩 연산을 해야만 한다.
• 라이트 증가에 따른 계산의 복잡성이 증가
   •   다른 라이트 종류 (directional, spot, point …)
   •   오브젝트가 영향 받는 “light list”를 찾아야…
   •   라이트 개수/종류에 따른 “Shader Explosion”
   •   한 번에 계산할 수 있는 라이트 수의 한계 (셰이더 상수)
(전통적인)

DEFERRED RENDERING
Deferred Rendering
      • 모든 Occlusion이 해결된 후에 Shading을 수행하
        는 렌더링 파이프라인을 재구성해보자!
        – 각 픽셀에서 보이는 surface geometry에 대한
          정보를 출력 (a.k.a “g-buffer”)
        – Shading은 모든 geometry 처리가 끝날 때까지
          지연되어, 실제 화면에 보이는 면(Pixel)에 대해
          서만 G-Buffer를 참조하여 처리 된다
        – 셰이딩과 지오메트리 렌더링의 분리
Pipeline
Pass 1 : Geometry Pass
  – G-Buffer에 화면에 보이는 Geometry 정보를
    기록
Pass 2 : Shading Pass
  – 화면 공간에서 G-Buffer를 샘플링해서 셰이딩
    을 계산한다.
G-Buffer
• 셰이딩에 필요한 모든 Geometry의 정보를
  버퍼(Multiple Render Target)에 기록한다.
 – Position, Normal
 – Specular Information
 – Albedo
 – Etc...
[Kgc2012] deferred forward 이창희
G-Buffer
• G-Buffer의 효율적으로 관리가 중요!
 – DX9 : 최대 4장, DX11 : 최대 8장
 – Normal Encording (XYZ -> XY)
 – Position Restruction (Depth -> Position)
 – Bit Packing (16bit Channel -> 8bit<<8bit)
Shading.
• 화면공간에서 각 라이트에 대해서 G-Buffer를 샘
  플링하여 셰이딩을 계산하고, 그 결과를 누적!
문제점
MSAA
  – 2D 스크린 상에서 처리되기 때문에 MSAA 지원 불가
  – Screen Space Anti Aliasing …
Transparency
  – 반투명 불가능
  – 별도의 포워드 렌더링으로 처리
MRT
  – 제한된 Shading 모델 (G-Buffer의 한계)
  – 많은 양의 Memory 사용
  – High Bandwidth cost (각 라이트 계산 시, G-Buffer를 Reload)
사례)
사례)
라이트 프리 패스

LIGHT PRE PASS RENDERING
Light Pre-Pass Rendering
                                                                             • Forward Rendering
  Render opaque Geometry sorted front-to-back




                                                                               하기 전에 Lighting을
    Normals
                            Depth                      Color
 Specular Power



                    Blit Lights into Light Buffer (sorted front-to-back)       미리 계산!
             Light Buffer                                                         • 제한적 Material과 많
                    Render opaque Geometry sorted front-to-back                     은 메모리 사용에 대한
                                                                                    해결
                    or
                    Blit ambient term and other lighting terms into final image


             Frame Buffer




[Siggraph09] The Light Pre Pass Renderer
Pipeline
Pass 1 : Geometry Pass
  – Normal과 Depth 만 기록
Pass 2 : Lighting Pass
  – Light 계산을 통하여, Light Property들을 기록
     • Ex) Diffuse : Sum(dot(N, Li))
Pass 3 : Geometry Pass (Shading)
  – Lighting Pass의 결과을, Forward Rendering의 셰이딩
    할 때 적용
     • Ex) Color = Albedo * GetDiffuseLit(screenPixelPos)
Light Pre-Pass Rendering
• 기본적으로 Forward Rendering!
• Material 사용에 제한이 없다.
• Geometry Pass를 두 번 렌더링!
    • Draw Call이 2배로 늘어난다!
    • 최적화하기 위한 방안들이 필요!
• Bandwidth를 줄이지는 못한다.
    • 각 라이팅 계산에 대해서, G-Buffer reload
Light Pre Pass 사례




         [OROCHI] 건슬링거 스트라토스
Light Pre Pass 사례




         워해머 40,000 : 스페이스 마린
다른 풀이 방식들…

MORE CASE
Light Indexed Deferred
 Rendering
• 각 light의 인덱스를 할당하고,
  Pixel마다 인덱스를 저장
• Pipeline
  – Depth만 렌더링
  – Lighting Pass
     • Light Index Texture에 Light Volume
       을 렌더링
     • RGBA 채널 당 1개의 Light Index 할당
  – Geometry Pass
     • Light Index Buffer를 가지고, Lighting

                                      http://code.google.com/p/lightindexed-deferredrender/
Inferred Rendering
• 반투명 처리가 가능하다.
• Pipeline
 – Light Pre Pass의 확장 개념
 – G-Buffer Pass
    • Normal, Depth, ObjectID
    • 낮은 해상도로 렌더링
 – Lighting Pass
    • 낮은 해상도로 렌더링
 – Geometry Pass
    • DSF Filter를 사용해서 Upsampling

                                http://www.slideshare.net/guardin/inferred-lighting-3001875
Call Of Duty : Black Ops
• Forward Rendering 선택!
 – Performance를 최우선!! (60 FPS 목표!)
   • Deferred Rendering은 60FPS에 부적합!
 – “하나의 주 라이트+ Based Lights”
   • Lights Maps, Environment Probes, …
 – “Microfacet BRDF” 사용
   • 라이팅을 위해 더 많은 Material Property가 필요

                            http://advances.realtimerendering.com/s2011/index.html
Physically Based Lighting   http://cagetu.egloos.com/5547735
Call Of Duty : Black Ops
God of War 3
• Forward Rendering에서도 효율적으로
  Mutiple Lighting의 처리가 가능함을 보
  여줌
 – Vertex Shader에서 Light들을 하나의 라이트
   로 합성, Pixel Shader에서는 하나의 라이트만
   처리하는 방식
God of War 3
Sample




         [Source Code]
             http://cagetu.egloos.com/5603566
             http://dragonjoon.egloos.com/10845216
Deferred Rendering

LIGHT CULLING
Light Culling
• Lighting 계산은 Screen-Space에서 처리되기
  때문에, 각 라이트에 대해서 라이팅 범위
  (Pixel)을 최소화 해야 함.
   – Light Region Scissors Test
   – Light Volume
   • Stencil Test
   • Z Tests
 – Tile Based Light Culling
Light Culling
• Scissors Test
  – 라이트에 의해 영향을 받는 Screen-Space
    Region을 계산하여, Scissor Test로 불필요한
    Pixel 연산을 제외시킨다
  – Masking과 비슷
[GDC2011] Deferred Shading Optimization
Light Culling
• Light Volume
  – 라이트 범위에 맞게 Light Volume을 렌더링!
    • Point Light (Sphere)
    • Spot Light (Cone)
    • Directional Light (FullScreen)
Stencil Light Volume
• Stencil Shadow와 유사하게,
  extrude된 Shadow Volume과 장
  면 geometry와 교차된 부분만
  Shading!
• 최적화가 가능하지만, 각 라이트
  에 대해서 RenderState 변경이 요
  구되고, 2 Pass 렌더링이 요구된
  다. 즉, Batching 처리를 방해!
Stencil Light Volume
Light Volume Z tests
• 단순히 Z Test만을 이용해서, (Stencil보다는
  덜 정교하지만) Shading 되는 부분을 얻는다.
   • Light Volume 뒷면을 그린다면, D3DCMP_GREATER
     – 라이트가 “공중에 떠 있는” 부분을 제거
   • Light Volume의 앞면을 그린다면, D3DCMP_LESS
     – “지면 아래에 묻히는” 라이트 지역을 제거

• Batching이 가능하기 때문에, Light Volume
  Rendering에 대한 부담이 조금을 줄어든다.
Light Volume
• 샘플 장면…
Tile Based Light Culling

TILE BASED RENDERING
Tile Based Deferred Rendering
or Shading
Tile Based Deferred Rendering
  – 렌더링할 화면을 여러 타일로 분할하여 타일 단위로
    Rasterization 수행
     • PowerVR SGX (iPhone, iPad)
  – Memory 접근을 아주 효율적으로 할 수 있다.
  – Framebuffer내의 pixel값을 더 효율적으로 Caching 할 수
    있다.
Tile Based Deferred Shading
  – Tile Based Deferred Rendering과 구분없이 사용하지만, 엄
    밀히 말하면, Shading에 대해서만, Tile 단위로 처리를 하
    는 방식이기 때문에, Tile Based Shading이라고 해야 한다!
Tile Based Deferred Shading
                                           • Screen Space의 Overhead
                                             를 분산시키는 것이 목표!
                                                        • 장면을 고정된 크기의 타일로
                                                          나누고, 타일에서 영향을 받는
                                                          라이트만 계산
                                                        • G-Buffer를 한번만 읽으면 모
                                                          든 라이트를 계산할 수 있다.



[GDC08] The Technology of Uncharted : Drake’s Fortune
Tile Based Deferred Shading




                     Just like…
Tile Based Deferred Shading
• Pipeline
  – G-Buffer Pass
     • G-Buffer는 동일하게 렌더링한다.
  – Light Culling & Shading Pass
     • G-Buffer를 읽어온다.
     • 장면을 고정된 크기의 타일로 나누고, 각 타일과 교차하는
       light source를 결정한다.
        – 각 타일에 대한 Frustum을 가지고, 라이트 Culling
        – 각 타일에 보이는 라이트의 인덱스 리스트 저장
     • 각 타일 pixel에 대해, 보이는 light source들로 Lighting!
        – 각 타일에 대해 라이트의 인덱스 리스트를 이용해서, 라이트 정보
          를 읽어온다.
     • Lighting 결과와 Shading Albedo 조합
Tile Based Light Culling
• Compute Shader의 도입!
   • Compute Shader가 2D Thread
     Group을 가지고 처리할 수 있도록
     Screen Space Tile로 구분한다면, 싱
     글 패스에서 모든 처리가능!
   • 타일 당 Thread Group, 픽셀 당
     Thread 할당
Tile Based Light Culling




       [Siggraph2010] Deferred Rendering for Current and Future Rendering Pipelines
Tile Based Deferred Shading
• 장점
 – Bandwidth Cost를 줄일 수 있다.
    • G-Buffer Read Once
 – Screen Space Lighting Accumulation Overhead를 줄인다.
• 단점
 – 일반적으로 아주 많은 수의 라이트에 적합하다고 알려짐
    • 적은 수의 라이트 소스에 대해서는 Culling Overhead가 발생…


• 차세대 콘솔이나 GPU와 같이 높은 계산 능력과
  Bandwidth의 비율을 가지는 디바이스에 사용하기 효
  율적이다.
Tile Based Deferred Shading
• GPU를 봤을 때, 메모리 대역폭(Memory
  Bandwidth)보다 연산 능력
  (Computation Power)의 증가가
  더 두드러지는 경향을 보인다!
 – Compute Shader기반의
   Tile Based Light Culling에 주목!!!
Must be Deferred?
점점 더 복잡한 셰이딩 모델을 요구!
  – Physically Based Lighting
    • Microfacet BRDF, Anisotropic, Oren-Nayer, …
  – G-Buffer의 한계
DirectX11
  – Compute Shader, UAV등의 사용으로, 직접 연
    산이 빠르게 가능해졌음!
Tile Based Forward Shading
• “Light Pre Pass Rendering”과 유사
  – Shading은 Forward Rendering 위치에서 처리
    • G-Buffer가 필요없다.
    • Material에 대해 제한이 없다.
    • Shading 하기 위해서 한번 더 각 pixel들을 그려줘야
      한다.
• Tile Based Light Culling 방식
  – Per Tile / Light Culling with Compute Shader
Forward +
Forward +
• Forward + Light Culling
• Light Culling
   – Tile Based Light Culling과 동일
   – 결과는 Tile당 Light Index List 저
     장
• Forward Shading
   – Material 정보를 바로 적용
   – Light Culling에서 계산된 Tile에
     서 Light Index List를 얻어,
     Shading을 계산
Clustered Shading
“Cluster”
  – Tile Based Shading의 각 타일은 min/max Z 값을
    가지고, sub frustum을 만든다. 하지만, 카메라 시
    점에 따라, depth bound 영향으로 성능과 강한
    의존성을 가지게 된다.
  – 고정된 3차원 영역으로 장면을 나누어, 뷰에 의존
    해서 성능이 감소할 경우는 없다!
  – 고정된 3D 영역을 “Cluster”라고 한다.
Clustered Shading
Pipeline
   – G-Buffer에 장면 렌더링
   – Cluster Assignment
      • Cluster 마다 Cluster Key를 부여
   – Finding Unique Clusters
      • Unique Cluster를 찾기 위해서 Key Buffer를 Sorting하고 Compacting!
   – Light Assignment
      • 각 Cluster에 영향을 주는 Light들의 리스트를 계산
      • Cluster는 Bounding Volume으로 표현
      • 다수의 라이트 vs 다수의 Cluster 는 Spatial Tree가 필요!
   – Shading
      • 각 샘플은 미리 계산된 Cluster Key를 사용하여 Cluster Index를 읽어올
        수 있다. Cluster Index를 이용해서, Cluster의 라이팅 정보를 읽어온다.
정리 & 결론

CONCLUSION
정리
• 효율적인 Dynamic Multiple Lighting에 대
  한 기술의 발전!
    •   기본적으로 Deferred 방식 출발
    •   더 빠르고 많은 Lighting 처리 요구
    •   더 복잡한 Shading 처리에 대한 요구
    •   Low Bandwidth Cost, High Computation으로 발전!
• 아직 결론은 없다. 계속 발전 중…
    • 매년 GDC, Siggraph를 지켜봐주세요~
맺음말
• 게임의 성격에 맞게 적합한 선택하는
것이 매우 중요
 – 게임 엔진 입장에서는 “유연한 파이프라인”을 제
   공할 필요!
  • 지금 시점에서…
    – DirectX9 : Deferred / Light Pre Pass / Forward
    – DirectX11 : Tile Based Deferred / Forward
  • Mobile에서도 Multiple Lighting의 시대 Coming Soon!!
물어본다 & 대답한다

Q&A
참고자료
• Lecture 12: Deferred Shading. Kayvon Fatahalian, Graphics and
  Imaging Architectures (CMU 15-869, Fall 2011)
• Practical Rendering & Computation with Direct3D11
• The Light Pre Pass Renderer [Siggraph09]
   –   http://www.bungie.net/News/content.aspx?type=topnews&link=Siggraph_09
• Light Indexed Deferred Rendering
   –   http://code.google.com/p/lightindexed-deferredrender/
• Inferred Rendering
   –   http://mynameismjp.wordpress.com/2010/01/10/inferred-rendering/
• Dynamic Lights in GOW3
   –   http://cagetu.egloos.com/5603566
• Clustered Rendering
   –   http://www.cse.chalmers.se/~olaolss/main_frame.php?contents=publications
• Forward +
   –   http://developer.amd.com/gpu_assets/AMD_Demos_LeoDemoGDC2012.ppsx

More Related Content

PPTX
[Ndc11 박민근] deferred shading
PDF
멀티스레드 렌더링 (Multithreaded rendering)
PDF
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
PDF
Cascade Shadow Mapping
PPT
Shadow mapping 정리
PPTX
Compute shader DX11
PDF
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
PDF
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
[Ndc11 박민근] deferred shading
멀티스레드 렌더링 (Multithreaded rendering)
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
Cascade Shadow Mapping
Shadow mapping 정리
Compute shader DX11
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술

What's hot (20)

PPTX
Hierachical z Map Occlusion Culling
PPTX
Implements Cascaded Shadow Maps with using Texture Array
PDF
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
PPTX
[1023 박민수] 깊이_버퍼_그림자_1
PDF
Ndc11 이창희_hdr
PPTX
[0122 구경원]게임에서의 충돌처리
PDF
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
PPTX
Tips and experience of DX12 Engine development .
PPTX
리플렉션과 가비지 컬렉션
PPTX
DirectX 11 Rendering in Battlefield 3
PDF
2018.12.22 깊이 버퍼 그림자 매핑
PDF
빠른 렌더링을 위한 오브젝트 제외 기술
PPTX
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
PDF
[NDC 2018] 유체역학 엔진 개발기
PPTX
AAA게임_UI_최적화_및_빌드하기.pptx
PDF
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
PDF
고대특강 게임 프로그래머의 소양
PPT
모바일 게임 최적화
PDF
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
PPTX
Hierachical z Map Occlusion Culling
Implements Cascaded Shadow Maps with using Texture Array
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
[1023 박민수] 깊이_버퍼_그림자_1
Ndc11 이창희_hdr
[0122 구경원]게임에서의 충돌처리
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
Tips and experience of DX12 Engine development .
리플렉션과 가비지 컬렉션
DirectX 11 Rendering in Battlefield 3
2018.12.22 깊이 버퍼 그림자 매핑
빠른 렌더링을 위한 오브젝트 제외 기술
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[NDC 2018] 유체역학 엔진 개발기
AAA게임_UI_최적화_및_빌드하기.pptx
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
고대특강 게임 프로그래머의 소양
모바일 게임 최적화
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
Ad

Similar to [Kgc2012] deferred forward 이창희 (20)

PDF
Deferred Shading
PPTX
Light in screen_space(Light Pre Pass)
PPTX
[0326 박민근] deferred shading
PPTX
다해상도 지연 렌더링
PDF
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
PPT
Light Pre-Pass
PPTX
[14.10.21] Far Cry and DX9 번역(shaderstudy)
PPTX
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
PPTX
아일렛 온라인에서 사용한 블럭 렌더링 소개
PDF
Ndc12 이창희 render_pipeline
PDF
[Kgc2013] 모바일 엔진 개발기
PDF
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
PDF
Real-Time Global Illumination Techniques
PDF
[2012 대학특강] 아티스트 + 프로그래머
PDF
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
PPTX
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
PPTX
2015.12.10 defferd renderring_
PDF
Unite2015 probelight(150417)
PDF
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
PDF
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
Deferred Shading
Light in screen_space(Light Pre Pass)
[0326 박민근] deferred shading
다해상도 지연 렌더링
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
Light Pre-Pass
[14.10.21] Far Cry and DX9 번역(shaderstudy)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
아일렛 온라인에서 사용한 블럭 렌더링 소개
Ndc12 이창희 render_pipeline
[Kgc2013] 모바일 엔진 개발기
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
Real-Time Global Illumination Techniques
[2012 대학특강] 아티스트 + 프로그래머
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
2015.12.10 defferd renderring_
Unite2015 probelight(150417)
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
Ad

More from changehee lee (20)

PDF
Visual shock vol.2
PDF
Shader compilation
PDF
Gdc 14 bringing unreal engine 4 to open_gl
PDF
Smedberg niklas bringing_aaa_graphics
PDF
Fortugno nick design_and_monetization
PDF
카툰 렌더링
PPTX
Paper games 2013
PPTX
모바일 엔진 개발기
PPTX
Wecanmakeengine
PDF
Mobile crossplatformchallenges siggraph
PDF
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
PPTX
개발자여! 스터디를 하자!
PPT
Light prepass
PPTX
Gamificated game developing
PPTX
Windows to reality getting the most out of direct3 d 10 graphics in your games
PDF
Basic ofreflectance kor
PDF
C++11(최지웅)
PDF
Valve handbook low_res
PPTX
아이폰에 포팅해보기
Visual shock vol.2
Shader compilation
Gdc 14 bringing unreal engine 4 to open_gl
Smedberg niklas bringing_aaa_graphics
Fortugno nick design_and_monetization
카툰 렌더링
Paper games 2013
모바일 엔진 개발기
Wecanmakeengine
Mobile crossplatformchallenges siggraph
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
개발자여! 스터디를 하자!
Light prepass
Gamificated game developing
Windows to reality getting the most out of direct3 d 10 graphics in your games
Basic ofreflectance kor
C++11(최지웅)
Valve handbook low_res
아이폰에 포팅해보기

[Kgc2012] deferred forward 이창희

  • 1. Forward Rendering / Deferred Rendering 이창희(cagetu@softnette.com) ㈜소프트네트
  • 2. 이창희 (@cagetu) - 소프트네트 - CCR - Hi-Win - Netmarble(現, CJ E&M) - DreamSEED - SAMSONCORE
  • 3. 오늘의 주제 • 더욱 사실감 있는 Dynamic Lighting을 처 리하기 위해 Rendering Pipeline이 어떻 게 발전했는지를 알아본다. • Forward Rendering / Deferred Rendering • Tile Based Rendering • Forward +
  • 5. Forward Rendering • 전통적인 렌더링 파이프라인을 통해서 셰이딩 되는 방식을 말 한다.
  • 6. Shading. • Forward Rendering 에서 다수의 라이팅을 처리하는 방법.
  • 7. 문제점 • 화면에 렌더링되지 않아도 되는 면(Culling) 도 셰이딩 연산을 해야만 한다. • 라이트 증가에 따른 계산의 복잡성이 증가 • 다른 라이트 종류 (directional, spot, point …) • 오브젝트가 영향 받는 “light list”를 찾아야… • 라이트 개수/종류에 따른 “Shader Explosion” • 한 번에 계산할 수 있는 라이트 수의 한계 (셰이더 상수)
  • 9. Deferred Rendering • 모든 Occlusion이 해결된 후에 Shading을 수행하 는 렌더링 파이프라인을 재구성해보자! – 각 픽셀에서 보이는 surface geometry에 대한 정보를 출력 (a.k.a “g-buffer”) – Shading은 모든 geometry 처리가 끝날 때까지 지연되어, 실제 화면에 보이는 면(Pixel)에 대해 서만 G-Buffer를 참조하여 처리 된다 – 셰이딩과 지오메트리 렌더링의 분리
  • 10. Pipeline Pass 1 : Geometry Pass – G-Buffer에 화면에 보이는 Geometry 정보를 기록 Pass 2 : Shading Pass – 화면 공간에서 G-Buffer를 샘플링해서 셰이딩 을 계산한다.
  • 11. G-Buffer • 셰이딩에 필요한 모든 Geometry의 정보를 버퍼(Multiple Render Target)에 기록한다. – Position, Normal – Specular Information – Albedo – Etc...
  • 13. G-Buffer • G-Buffer의 효율적으로 관리가 중요! – DX9 : 최대 4장, DX11 : 최대 8장 – Normal Encording (XYZ -> XY) – Position Restruction (Depth -> Position) – Bit Packing (16bit Channel -> 8bit<<8bit)
  • 14. Shading. • 화면공간에서 각 라이트에 대해서 G-Buffer를 샘 플링하여 셰이딩을 계산하고, 그 결과를 누적!
  • 15. 문제점 MSAA – 2D 스크린 상에서 처리되기 때문에 MSAA 지원 불가 – Screen Space Anti Aliasing … Transparency – 반투명 불가능 – 별도의 포워드 렌더링으로 처리 MRT – 제한된 Shading 모델 (G-Buffer의 한계) – 많은 양의 Memory 사용 – High Bandwidth cost (각 라이트 계산 시, G-Buffer를 Reload)
  • 18. 라이트 프리 패스 LIGHT PRE PASS RENDERING
  • 19. Light Pre-Pass Rendering • Forward Rendering Render opaque Geometry sorted front-to-back 하기 전에 Lighting을 Normals Depth Color Specular Power Blit Lights into Light Buffer (sorted front-to-back) 미리 계산! Light Buffer • 제한적 Material과 많 Render opaque Geometry sorted front-to-back 은 메모리 사용에 대한 해결 or Blit ambient term and other lighting terms into final image Frame Buffer [Siggraph09] The Light Pre Pass Renderer
  • 20. Pipeline Pass 1 : Geometry Pass – Normal과 Depth 만 기록 Pass 2 : Lighting Pass – Light 계산을 통하여, Light Property들을 기록 • Ex) Diffuse : Sum(dot(N, Li)) Pass 3 : Geometry Pass (Shading) – Lighting Pass의 결과을, Forward Rendering의 셰이딩 할 때 적용 • Ex) Color = Albedo * GetDiffuseLit(screenPixelPos)
  • 21. Light Pre-Pass Rendering • 기본적으로 Forward Rendering! • Material 사용에 제한이 없다. • Geometry Pass를 두 번 렌더링! • Draw Call이 2배로 늘어난다! • 최적화하기 위한 방안들이 필요! • Bandwidth를 줄이지는 못한다. • 각 라이팅 계산에 대해서, G-Buffer reload
  • 22. Light Pre Pass 사례 [OROCHI] 건슬링거 스트라토스
  • 23. Light Pre Pass 사례 워해머 40,000 : 스페이스 마린
  • 25. Light Indexed Deferred Rendering • 각 light의 인덱스를 할당하고, Pixel마다 인덱스를 저장 • Pipeline – Depth만 렌더링 – Lighting Pass • Light Index Texture에 Light Volume 을 렌더링 • RGBA 채널 당 1개의 Light Index 할당 – Geometry Pass • Light Index Buffer를 가지고, Lighting http://code.google.com/p/lightindexed-deferredrender/
  • 26. Inferred Rendering • 반투명 처리가 가능하다. • Pipeline – Light Pre Pass의 확장 개념 – G-Buffer Pass • Normal, Depth, ObjectID • 낮은 해상도로 렌더링 – Lighting Pass • 낮은 해상도로 렌더링 – Geometry Pass • DSF Filter를 사용해서 Upsampling http://www.slideshare.net/guardin/inferred-lighting-3001875
  • 27. Call Of Duty : Black Ops • Forward Rendering 선택! – Performance를 최우선!! (60 FPS 목표!) • Deferred Rendering은 60FPS에 부적합! – “하나의 주 라이트+ Based Lights” • Lights Maps, Environment Probes, … – “Microfacet BRDF” 사용 • 라이팅을 위해 더 많은 Material Property가 필요 http://advances.realtimerendering.com/s2011/index.html
  • 28. Physically Based Lighting http://cagetu.egloos.com/5547735
  • 29. Call Of Duty : Black Ops
  • 30. God of War 3 • Forward Rendering에서도 효율적으로 Mutiple Lighting의 처리가 가능함을 보 여줌 – Vertex Shader에서 Light들을 하나의 라이트 로 합성, Pixel Shader에서는 하나의 라이트만 처리하는 방식
  • 32. Sample [Source Code] http://cagetu.egloos.com/5603566 http://dragonjoon.egloos.com/10845216
  • 34. Light Culling • Lighting 계산은 Screen-Space에서 처리되기 때문에, 각 라이트에 대해서 라이팅 범위 (Pixel)을 최소화 해야 함. – Light Region Scissors Test – Light Volume • Stencil Test • Z Tests – Tile Based Light Culling
  • 35. Light Culling • Scissors Test – 라이트에 의해 영향을 받는 Screen-Space Region을 계산하여, Scissor Test로 불필요한 Pixel 연산을 제외시킨다 – Masking과 비슷
  • 37. Light Culling • Light Volume – 라이트 범위에 맞게 Light Volume을 렌더링! • Point Light (Sphere) • Spot Light (Cone) • Directional Light (FullScreen)
  • 38. Stencil Light Volume • Stencil Shadow와 유사하게, extrude된 Shadow Volume과 장 면 geometry와 교차된 부분만 Shading! • 최적화가 가능하지만, 각 라이트 에 대해서 RenderState 변경이 요 구되고, 2 Pass 렌더링이 요구된 다. 즉, Batching 처리를 방해!
  • 40. Light Volume Z tests • 단순히 Z Test만을 이용해서, (Stencil보다는 덜 정교하지만) Shading 되는 부분을 얻는다. • Light Volume 뒷면을 그린다면, D3DCMP_GREATER – 라이트가 “공중에 떠 있는” 부분을 제거 • Light Volume의 앞면을 그린다면, D3DCMP_LESS – “지면 아래에 묻히는” 라이트 지역을 제거 • Batching이 가능하기 때문에, Light Volume Rendering에 대한 부담이 조금을 줄어든다.
  • 42. Tile Based Light Culling TILE BASED RENDERING
  • 43. Tile Based Deferred Rendering or Shading Tile Based Deferred Rendering – 렌더링할 화면을 여러 타일로 분할하여 타일 단위로 Rasterization 수행 • PowerVR SGX (iPhone, iPad) – Memory 접근을 아주 효율적으로 할 수 있다. – Framebuffer내의 pixel값을 더 효율적으로 Caching 할 수 있다. Tile Based Deferred Shading – Tile Based Deferred Rendering과 구분없이 사용하지만, 엄 밀히 말하면, Shading에 대해서만, Tile 단위로 처리를 하 는 방식이기 때문에, Tile Based Shading이라고 해야 한다!
  • 44. Tile Based Deferred Shading • Screen Space의 Overhead 를 분산시키는 것이 목표! • 장면을 고정된 크기의 타일로 나누고, 타일에서 영향을 받는 라이트만 계산 • G-Buffer를 한번만 읽으면 모 든 라이트를 계산할 수 있다. [GDC08] The Technology of Uncharted : Drake’s Fortune
  • 45. Tile Based Deferred Shading Just like…
  • 46. Tile Based Deferred Shading • Pipeline – G-Buffer Pass • G-Buffer는 동일하게 렌더링한다. – Light Culling & Shading Pass • G-Buffer를 읽어온다. • 장면을 고정된 크기의 타일로 나누고, 각 타일과 교차하는 light source를 결정한다. – 각 타일에 대한 Frustum을 가지고, 라이트 Culling – 각 타일에 보이는 라이트의 인덱스 리스트 저장 • 각 타일 pixel에 대해, 보이는 light source들로 Lighting! – 각 타일에 대해 라이트의 인덱스 리스트를 이용해서, 라이트 정보 를 읽어온다. • Lighting 결과와 Shading Albedo 조합
  • 47. Tile Based Light Culling • Compute Shader의 도입! • Compute Shader가 2D Thread Group을 가지고 처리할 수 있도록 Screen Space Tile로 구분한다면, 싱 글 패스에서 모든 처리가능! • 타일 당 Thread Group, 픽셀 당 Thread 할당
  • 48. Tile Based Light Culling [Siggraph2010] Deferred Rendering for Current and Future Rendering Pipelines
  • 49. Tile Based Deferred Shading • 장점 – Bandwidth Cost를 줄일 수 있다. • G-Buffer Read Once – Screen Space Lighting Accumulation Overhead를 줄인다. • 단점 – 일반적으로 아주 많은 수의 라이트에 적합하다고 알려짐 • 적은 수의 라이트 소스에 대해서는 Culling Overhead가 발생… • 차세대 콘솔이나 GPU와 같이 높은 계산 능력과 Bandwidth의 비율을 가지는 디바이스에 사용하기 효 율적이다.
  • 50. Tile Based Deferred Shading • GPU를 봤을 때, 메모리 대역폭(Memory Bandwidth)보다 연산 능력 (Computation Power)의 증가가 더 두드러지는 경향을 보인다! – Compute Shader기반의 Tile Based Light Culling에 주목!!!
  • 51. Must be Deferred? 점점 더 복잡한 셰이딩 모델을 요구! – Physically Based Lighting • Microfacet BRDF, Anisotropic, Oren-Nayer, … – G-Buffer의 한계 DirectX11 – Compute Shader, UAV등의 사용으로, 직접 연 산이 빠르게 가능해졌음!
  • 52. Tile Based Forward Shading • “Light Pre Pass Rendering”과 유사 – Shading은 Forward Rendering 위치에서 처리 • G-Buffer가 필요없다. • Material에 대해 제한이 없다. • Shading 하기 위해서 한번 더 각 pixel들을 그려줘야 한다. • Tile Based Light Culling 방식 – Per Tile / Light Culling with Compute Shader
  • 54. Forward + • Forward + Light Culling • Light Culling – Tile Based Light Culling과 동일 – 결과는 Tile당 Light Index List 저 장 • Forward Shading – Material 정보를 바로 적용 – Light Culling에서 계산된 Tile에 서 Light Index List를 얻어, Shading을 계산
  • 55. Clustered Shading “Cluster” – Tile Based Shading의 각 타일은 min/max Z 값을 가지고, sub frustum을 만든다. 하지만, 카메라 시 점에 따라, depth bound 영향으로 성능과 강한 의존성을 가지게 된다. – 고정된 3차원 영역으로 장면을 나누어, 뷰에 의존 해서 성능이 감소할 경우는 없다! – 고정된 3D 영역을 “Cluster”라고 한다.
  • 56. Clustered Shading Pipeline – G-Buffer에 장면 렌더링 – Cluster Assignment • Cluster 마다 Cluster Key를 부여 – Finding Unique Clusters • Unique Cluster를 찾기 위해서 Key Buffer를 Sorting하고 Compacting! – Light Assignment • 각 Cluster에 영향을 주는 Light들의 리스트를 계산 • Cluster는 Bounding Volume으로 표현 • 다수의 라이트 vs 다수의 Cluster 는 Spatial Tree가 필요! – Shading • 각 샘플은 미리 계산된 Cluster Key를 사용하여 Cluster Index를 읽어올 수 있다. Cluster Index를 이용해서, Cluster의 라이팅 정보를 읽어온다.
  • 58. 정리 • 효율적인 Dynamic Multiple Lighting에 대 한 기술의 발전! • 기본적으로 Deferred 방식 출발 • 더 빠르고 많은 Lighting 처리 요구 • 더 복잡한 Shading 처리에 대한 요구 • Low Bandwidth Cost, High Computation으로 발전! • 아직 결론은 없다. 계속 발전 중… • 매년 GDC, Siggraph를 지켜봐주세요~
  • 59. 맺음말 • 게임의 성격에 맞게 적합한 선택하는 것이 매우 중요 – 게임 엔진 입장에서는 “유연한 파이프라인”을 제 공할 필요! • 지금 시점에서… – DirectX9 : Deferred / Light Pre Pass / Forward – DirectX11 : Tile Based Deferred / Forward • Mobile에서도 Multiple Lighting의 시대 Coming Soon!!
  • 62. • Lecture 12: Deferred Shading. Kayvon Fatahalian, Graphics and Imaging Architectures (CMU 15-869, Fall 2011) • Practical Rendering & Computation with Direct3D11 • The Light Pre Pass Renderer [Siggraph09] – http://www.bungie.net/News/content.aspx?type=topnews&link=Siggraph_09 • Light Indexed Deferred Rendering – http://code.google.com/p/lightindexed-deferredrender/ • Inferred Rendering – http://mynameismjp.wordpress.com/2010/01/10/inferred-rendering/ • Dynamic Lights in GOW3 – http://cagetu.egloos.com/5603566 • Clustered Rendering – http://www.cse.chalmers.se/~olaolss/main_frame.php?contents=publications • Forward + – http://developer.amd.com/gpu_assets/AMD_Demos_LeoDemoGDC2012.ppsx