SlideShare une entreprise Scribd logo
1  sur  62
Télécharger pour lire hors ligne
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...
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

Contenu connexe

Tendances

Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리MinGeun Park
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow MappingSukwoo Lee
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기강 민우
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)MinGeun Park
 
Compute shader
Compute shaderCompute shader
Compute shaderQooJuice
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)포프 김
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능Yongha Kim
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용JP Jung
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화 tartist
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5YEONG-CHEON YOU
 
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner   pre-integrated skin rendering (siggraph 2011 advances in real-time r...Penner   pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...JP Lee
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다Lee Dustin
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우Sukwoo Lee
 

Tendances (20)

Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
Motion blur
Motion blurMotion blur
Motion blur
 
[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)[0821 박민근] 렌즈 플레어(lens flare)
[0821 박민근] 렌즈 플레어(lens flare)
 
Compute shader
Compute shaderCompute shader
Compute shader
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
Ndc11 이창희_hdr
Ndc11 이창희_hdrNdc11 이창희_hdr
Ndc11 이창희_hdr
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner   pre-integrated skin rendering (siggraph 2011 advances in real-time r...Penner   pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 

Similaire à [Kgc2012] deferred forward 이창희

실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬현찬 양
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기changehee lee
 
다해상도 지연 렌더링
다해상도 지연 렌더링다해상도 지연 렌더링
다해상도 지연 렌더링Jaeyun Lee
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4민웅 이
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
gametech 2012 Gladius project
gametech 2012 Gladius projectgametech 2012 Gladius project
gametech 2012 Gladius projectWuwon Yu
 
09_Bilateral filtering/Reprojection Cache 소개
09_Bilateral filtering/Reprojection Cache 소개09_Bilateral filtering/Reprojection Cache 소개
09_Bilateral filtering/Reprojection Cache 소개noerror
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipelinechangehee lee
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 JiUng Choi
 
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shadingMinGeun Park
 
(Paper Review)Kernel predicting-convolutional-networks-for-denoising-monte-ca...
(Paper Review)Kernel predicting-convolutional-networks-for-denoising-monte-ca...(Paper Review)Kernel predicting-convolutional-networks-for-denoising-monte-ca...
(Paper Review)Kernel predicting-convolutional-networks-for-denoising-monte-ca...MYEONGGYU LEE
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)민웅 이
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2Kyoung Seok(경석) Ko(고)
 
Real-Time Global Illumination Techniques
Real-Time Global Illumination TechniquesReal-Time Global Illumination Techniques
Real-Time Global Illumination TechniquesJangho Lee
 
NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요  NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요 Wuwon Yu
 
Deferred Shading
Deferred ShadingDeferred Shading
Deferred Shading종빈 오
 
비디오 코덱
비디오 코덱비디오 코덱
비디오 코덱greenday96
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환Yggdrasil610
 

Similaire à [Kgc2012] deferred forward 이창희 (20)

실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
다해상도 지연 렌더링
다해상도 지연 렌더링다해상도 지연 렌더링
다해상도 지연 렌더링
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
gametech 2012 Gladius project
gametech 2012 Gladius projectgametech 2012 Gladius project
gametech 2012 Gladius project
 
09_Bilateral filtering/Reprojection Cache 소개
09_Bilateral filtering/Reprojection Cache 소개09_Bilateral filtering/Reprojection Cache 소개
09_Bilateral filtering/Reprojection Cache 소개
 
High dynamic range
High dynamic rangeHigh dynamic range
High dynamic range
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
 
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shading
 
(Paper Review)Kernel predicting-convolutional-networks-for-denoising-monte-ca...
(Paper Review)Kernel predicting-convolutional-networks-for-denoising-monte-ca...(Paper Review)Kernel predicting-convolutional-networks-for-denoising-monte-ca...
(Paper Review)Kernel predicting-convolutional-networks-for-denoising-monte-ca...
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2
 
Real-Time Global Illumination Techniques
Real-Time Global Illumination TechniquesReal-Time Global Illumination Techniques
Real-Time Global Illumination Techniques
 
NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요  NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요
 
Deferred Shading
Deferred ShadingDeferred Shading
Deferred Shading
 
비디오 코덱
비디오 코덱비디오 코덱
비디오 코덱
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환
 

Plus de changehee lee

Gdc 14 bringing unreal engine 4 to open_gl
Gdc 14 bringing unreal engine 4 to open_glGdc 14 bringing unreal engine 4 to open_gl
Gdc 14 bringing unreal engine 4 to open_glchangehee lee
 
Smedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphicsSmedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphicschangehee lee
 
Fortugno nick design_and_monetization
Fortugno nick design_and_monetizationFortugno nick design_and_monetization
Fortugno nick design_and_monetizationchangehee lee
 
모바일 엔진 개발기
모바일 엔진 개발기모바일 엔진 개발기
모바일 엔진 개발기changehee lee
 
Mobile crossplatformchallenges siggraph
Mobile crossplatformchallenges siggraphMobile crossplatformchallenges siggraph
Mobile crossplatformchallenges siggraphchangehee lee
 
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)changehee lee
 
개발자여! 스터디를 하자!
개발자여! 스터디를 하자!개발자여! 스터디를 하자!
개발자여! 스터디를 하자!changehee lee
 
Gamificated game developing
Gamificated game developingGamificated game developing
Gamificated game developingchangehee lee
 
Windows to reality getting the most out of direct3 d 10 graphics in your games
Windows to reality   getting the most out of direct3 d 10 graphics in your gamesWindows to reality   getting the most out of direct3 d 10 graphics in your games
Windows to reality getting the most out of direct3 d 10 graphics in your gameschangehee lee
 
Basic ofreflectance kor
Basic ofreflectance korBasic ofreflectance kor
Basic ofreflectance korchangehee lee
 
Valve handbook low_res
Valve handbook low_resValve handbook low_res
Valve handbook low_reschangehee lee
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기changehee lee
 

Plus de changehee lee (20)

Visual shock vol.2
Visual shock   vol.2Visual shock   vol.2
Visual shock vol.2
 
Shader compilation
Shader compilationShader compilation
Shader compilation
 
Gdc 14 bringing unreal engine 4 to open_gl
Gdc 14 bringing unreal engine 4 to open_glGdc 14 bringing unreal engine 4 to open_gl
Gdc 14 bringing unreal engine 4 to open_gl
 
Smedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphicsSmedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphics
 
Fortugno nick design_and_monetization
Fortugno nick design_and_monetizationFortugno nick design_and_monetization
Fortugno nick design_and_monetization
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링
 
Paper games 2013
Paper games 2013Paper games 2013
Paper games 2013
 
모바일 엔진 개발기
모바일 엔진 개발기모바일 엔진 개발기
모바일 엔진 개발기
 
V8
V8V8
V8
 
Wecanmakeengine
WecanmakeengineWecanmakeengine
Wecanmakeengine
 
Mobile crossplatformchallenges siggraph
Mobile crossplatformchallenges siggraphMobile crossplatformchallenges siggraph
Mobile crossplatformchallenges siggraph
 
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
 
개발자여! 스터디를 하자!
개발자여! 스터디를 하자!개발자여! 스터디를 하자!
개발자여! 스터디를 하자!
 
Light prepass
Light prepassLight prepass
Light prepass
 
Gamificated game developing
Gamificated game developingGamificated game developing
Gamificated game developing
 
Windows to reality getting the most out of direct3 d 10 graphics in your games
Windows to reality   getting the most out of direct3 d 10 graphics in your gamesWindows to reality   getting the most out of direct3 d 10 graphics in your games
Windows to reality getting the most out of direct3 d 10 graphics in your games
 
Basic ofreflectance kor
Basic ofreflectance korBasic ofreflectance kor
Basic ofreflectance kor
 
C++11(최지웅)
C++11(최지웅)C++11(최지웅)
C++11(최지웅)
 
Valve handbook low_res
Valve handbook low_resValve handbook low_res
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...
  • 12.
  • 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