[Kgc2012] deferred forward 이창희

9,805 views
9,556 views

Published on

KGC12 발표자료입니다.
http://cagetu.egloos.com으로

0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,805
On SlideShare
0
From Embeds
0
Number of Embeds
5,349
Actions
Shares
0
Downloads
110
Comments
0
Likes
16
Embeds 0
No embeds

No notes for slide

[Kgc2012] deferred forward 이창희

  1. 1. Forward Rendering / Deferred Rendering 이창희(cagetu@softnette.com) ㈜소프트네트
  2. 2. 이창희(@cagetu) - 소프트네트 - CCR - Hi-Win - Netmarble(現, CJ E&M) - DreamSEED - SAMSONCORE
  3. 3. 오늘의 주제• 더욱 사실감 있는 Dynamic Lighting을 처 리하기 위해 Rendering Pipeline이 어떻 게 발전했는지를 알아본다. • Forward Rendering / Deferred Rendering • Tile Based Rendering • Forward +
  4. 4. (전통적인)FORWARD RENDERING
  5. 5. Forward Rendering • 전통적인 렌더링 파이프라인을 통해서 셰이딩 되는 방식을 말 한다.
  6. 6. Shading.• Forward Rendering 에서 다수의 라이팅을 처리하는 방법.
  7. 7. 문제점• 화면에 렌더링되지 않아도 되는 면(Culling) 도 셰이딩 연산을 해야만 한다.• 라이트 증가에 따른 계산의 복잡성이 증가 • 다른 라이트 종류 (directional, spot, point …) • 오브젝트가 영향 받는 “light list”를 찾아야… • 라이트 개수/종류에 따른 “Shader Explosion” • 한 번에 계산할 수 있는 라이트 수의 한계 (셰이더 상수)
  8. 8. (전통적인)DEFERRED RENDERING
  9. 9. Deferred Rendering • 모든 Occlusion이 해결된 후에 Shading을 수행하 는 렌더링 파이프라인을 재구성해보자! – 각 픽셀에서 보이는 surface geometry에 대한 정보를 출력 (a.k.a “g-buffer”) – Shading은 모든 geometry 처리가 끝날 때까지 지연되어, 실제 화면에 보이는 면(Pixel)에 대해 서만 G-Buffer를 참조하여 처리 된다 – 셰이딩과 지오메트리 렌더링의 분리
  10. 10. PipelinePass 1 : Geometry Pass – G-Buffer에 화면에 보이는 Geometry 정보를 기록Pass 2 : Shading Pass – 화면 공간에서 G-Buffer를 샘플링해서 셰이딩 을 계산한다.
  11. 11. G-Buffer• 셰이딩에 필요한 모든 Geometry의 정보를 버퍼(Multiple Render Target)에 기록한다. – Position, Normal – Specular Information – Albedo – Etc...
  12. 12. G-Buffer• G-Buffer의 효율적으로 관리가 중요! – DX9 : 최대 4장, DX11 : 최대 8장 – Normal Encording (XYZ -> XY) – Position Restruction (Depth -> Position) – Bit Packing (16bit Channel -> 8bit<<8bit)
  13. 13. Shading.• 화면공간에서 각 라이트에 대해서 G-Buffer를 샘 플링하여 셰이딩을 계산하고, 그 결과를 누적!
  14. 14. 문제점MSAA – 2D 스크린 상에서 처리되기 때문에 MSAA 지원 불가 – Screen Space Anti Aliasing …Transparency – 반투명 불가능 – 별도의 포워드 렌더링으로 처리MRT – 제한된 Shading 모델 (G-Buffer의 한계) – 많은 양의 Memory 사용 – High Bandwidth cost (각 라이트 계산 시, G-Buffer를 Reload)
  15. 15. 사례)
  16. 16. 사례)
  17. 17. 라이트 프리 패스LIGHT PRE PASS RENDERING
  18. 18. 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
  19. 19. PipelinePass 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)
  20. 20. Light Pre-Pass Rendering• 기본적으로 Forward Rendering!• Material 사용에 제한이 없다.• Geometry Pass를 두 번 렌더링! • Draw Call이 2배로 늘어난다! • 최적화하기 위한 방안들이 필요!• Bandwidth를 줄이지는 못한다. • 각 라이팅 계산에 대해서, G-Buffer reload
  21. 21. Light Pre Pass 사례 [OROCHI] 건슬링거 스트라토스
  22. 22. Light Pre Pass 사례 워해머 40,000 : 스페이스 마린
  23. 23. 다른 풀이 방식들…MORE CASE
  24. 24. 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/
  25. 25. 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
  26. 26. 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
  27. 27. Physically Based Lighting http://cagetu.egloos.com/5547735
  28. 28. Call Of Duty : Black Ops
  29. 29. God of War 3• Forward Rendering에서도 효율적으로 Mutiple Lighting의 처리가 가능함을 보 여줌 – Vertex Shader에서 Light들을 하나의 라이트 로 합성, Pixel Shader에서는 하나의 라이트만 처리하는 방식
  30. 30. God of War 3
  31. 31. Sample [Source Code] http://cagetu.egloos.com/5603566 http://dragonjoon.egloos.com/10845216
  32. 32. Deferred RenderingLIGHT CULLING
  33. 33. Light Culling• Lighting 계산은 Screen-Space에서 처리되기 때문에, 각 라이트에 대해서 라이팅 범위 (Pixel)을 최소화 해야 함. – Light Region Scissors Test – Light Volume • Stencil Test • Z Tests – Tile Based Light Culling
  34. 34. Light Culling• Scissors Test – 라이트에 의해 영향을 받는 Screen-Space Region을 계산하여, Scissor Test로 불필요한 Pixel 연산을 제외시킨다 – Masking과 비슷
  35. 35. [GDC2011] Deferred Shading Optimization
  36. 36. Light Culling• Light Volume – 라이트 범위에 맞게 Light Volume을 렌더링! • Point Light (Sphere) • Spot Light (Cone) • Directional Light (FullScreen)
  37. 37. Stencil Light Volume• Stencil Shadow와 유사하게, extrude된 Shadow Volume과 장 면 geometry와 교차된 부분만 Shading!• 최적화가 가능하지만, 각 라이트 에 대해서 RenderState 변경이 요 구되고, 2 Pass 렌더링이 요구된 다. 즉, Batching 처리를 방해!
  38. 38. Stencil Light Volume
  39. 39. Light Volume Z tests• 단순히 Z Test만을 이용해서, (Stencil보다는 덜 정교하지만) Shading 되는 부분을 얻는다. • Light Volume 뒷면을 그린다면, D3DCMP_GREATER – 라이트가 “공중에 떠 있는” 부분을 제거 • Light Volume의 앞면을 그린다면, D3DCMP_LESS – “지면 아래에 묻히는” 라이트 지역을 제거• Batching이 가능하기 때문에, Light Volume Rendering에 대한 부담이 조금을 줄어든다.
  40. 40. Light Volume• 샘플 장면…
  41. 41. Tile Based Light CullingTILE BASED RENDERING
  42. 42. Tile Based Deferred Renderingor ShadingTile 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이라고 해야 한다!
  43. 43. Tile Based Deferred Shading • Screen Space의 Overhead 를 분산시키는 것이 목표! • 장면을 고정된 크기의 타일로 나누고, 타일에서 영향을 받는 라이트만 계산 • G-Buffer를 한번만 읽으면 모 든 라이트를 계산할 수 있다.[GDC08] The Technology of Uncharted : Drake’s Fortune
  44. 44. Tile Based Deferred Shading Just like…
  45. 45. 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 조합
  46. 46. Tile Based Light Culling• Compute Shader의 도입! • Compute Shader가 2D Thread Group을 가지고 처리할 수 있도록 Screen Space Tile로 구분한다면, 싱 글 패스에서 모든 처리가능! • 타일 당 Thread Group, 픽셀 당 Thread 할당
  47. 47. Tile Based Light Culling [Siggraph2010] Deferred Rendering for Current and Future Rendering Pipelines
  48. 48. Tile Based Deferred Shading• 장점 – Bandwidth Cost를 줄일 수 있다. • G-Buffer Read Once – Screen Space Lighting Accumulation Overhead를 줄인다.• 단점 – 일반적으로 아주 많은 수의 라이트에 적합하다고 알려짐 • 적은 수의 라이트 소스에 대해서는 Culling Overhead가 발생…• 차세대 콘솔이나 GPU와 같이 높은 계산 능력과 Bandwidth의 비율을 가지는 디바이스에 사용하기 효 율적이다.
  49. 49. Tile Based Deferred Shading• GPU를 봤을 때, 메모리 대역폭(Memory Bandwidth)보다 연산 능력 (Computation Power)의 증가가 더 두드러지는 경향을 보인다! – Compute Shader기반의 Tile Based Light Culling에 주목!!!
  50. 50. Must be Deferred?점점 더 복잡한 셰이딩 모델을 요구! – Physically Based Lighting • Microfacet BRDF, Anisotropic, Oren-Nayer, … – G-Buffer의 한계DirectX11 – Compute Shader, UAV등의 사용으로, 직접 연 산이 빠르게 가능해졌음!
  51. 51. 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
  52. 52. Forward +
  53. 53. Forward +• Forward + Light Culling• Light Culling – Tile Based Light Culling과 동일 – 결과는 Tile당 Light Index List 저 장• Forward Shading – Material 정보를 바로 적용 – Light Culling에서 계산된 Tile에 서 Light Index List를 얻어, Shading을 계산
  54. 54. Clustered Shading“Cluster” – Tile Based Shading의 각 타일은 min/max Z 값을 가지고, sub frustum을 만든다. 하지만, 카메라 시 점에 따라, depth bound 영향으로 성능과 강한 의존성을 가지게 된다. – 고정된 3차원 영역으로 장면을 나누어, 뷰에 의존 해서 성능이 감소할 경우는 없다! – 고정된 3D 영역을 “Cluster”라고 한다.
  55. 55. Clustered ShadingPipeline – 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의 라이팅 정보를 읽어온다.
  56. 56. 정리 & 결론CONCLUSION
  57. 57. 정리• 효율적인 Dynamic Multiple Lighting에 대 한 기술의 발전! • 기본적으로 Deferred 방식 출발 • 더 빠르고 많은 Lighting 처리 요구 • 더 복잡한 Shading 처리에 대한 요구 • Low Bandwidth Cost, High Computation으로 발전!• 아직 결론은 없다. 계속 발전 중… • 매년 GDC, Siggraph를 지켜봐주세요~
  58. 58. 맺음말• 게임의 성격에 맞게 적합한 선택하는것이 매우 중요 – 게임 엔진 입장에서는 “유연한 파이프라인”을 제 공할 필요! • 지금 시점에서… – DirectX9 : Deferred / Light Pre Pass / Forward – DirectX11 : Tile Based Deferred / Forward • Mobile에서도 Multiple Lighting의 시대 Coming Soon!!
  59. 59. 물어본다 & 대답한다Q&A
  60. 60. 참고자료
  61. 61. • 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

×