Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
새로운 동적 라이팅의 세계!Deferred Shading (지연 세이딩)<br />박민근 (알콜코더)<br />네오위즈게임즈<br />NDC 2011<br />
강연자 소개<br />박민근(@agebreak)<br />네오위즈게임즈(프로젝트 S개발중)<br />NTL-inc - 드래곤볼 온라인 개발<br />엔씨소프트– PlayNC빌링 서버 개발<br />‘신입 게임 개발자의 ...
Real-Time Rendering<br />최근 게임들은 수 많은 라이트와<br />수많은 오브젝트 들이 필요하다.<br />-> 라이팅 계산양의 증가<br />
수많은 작은 동적 라이팅<br />
낮(Day)<br />
해질녘<br />
저녁(Night)<br />
동영상 시연<br />
리얼 타임 라이팅을 위한 세가지 주요 기법<br /><ul><li>포워드 렌더링(Forward Rendering)
Single-pass, Multi-light
Multi-pass, Multi-light
디퍼드렌더링
Deferred Shading</li></li></ul><li>포워드 렌더링<br />
Single-pass, multi-light<br />for each object do<br />	for each light do<br />framebuffer = light_model(object,light);<br />
Single-pass, multi-light<br /><ul><li>해당 라이트에 영향을 받지 않아도 라이트 연산.
화면에 렌더딩 되지 않는 면(Culling)도 셰이딩 연산을 해야만 한다.
멀티 라이트 상황에서 관리가 어렵다
싱글 템플릿 셰이더에서 수천 가지의 조합의 코드가 생성될 수 있다.
그림자와의 통합이 어렵다</li></li></ul><li>Single-pass, multi-light<br />1억 개의 오브젝트, 50개의 라이트<br />[라이팅만을 위한 계산양]<br />1억 * 50<br />
Multi-pass, multi-light<br />for each light do<br />	for each object affected by light do<br />framebuffer += light_model(...
Multi-pass, multi-light<br /><ul><li>화면에 렌더딩 되지 않을 면도 셰이딩 연상을 해야만 한다.
높은 배치 카운트
1/object/light
각패스마다 중복된 작업이 많다.
Vertex Transform & setup
Anisotropic filtering</li></li></ul><li>Multi-pass, multi-light<br />1억 개의 오브젝트, 50개의 라이트<br />[라이팅만을 위한 계산양]<br />50 * 라이...
디퍼드렌더링<br />
Deferred Shading<br />for each objectdo<br />G-buffer= lighting properties of object;<br />for each light do<br />framebuf...
Deferred Shading<br /><ul><li>굉장히 배치가 간단해지고, 엔진에서 관리가 쉽다
일반적인 그림자 테크닉들과 통합이 쉽다
라이팅을 위한 계산이 “완전한” O(1) 복잡도를 가진다.
오브젝트의 개수와 상관없다
수많은 작은 동적 라이팅사용이 가능하다</li></li></ul><li>Deferred Shading<br />1억 개의 오브젝트, 50개의 라이트<br />[라이팅만을 위한 계산양]<br />라이트 개수 * 라이트에영...
Deferred Shading<br /><ul><li>일종의 포스트 프로세싱처럼 수행된다
2D 렌더타겟간의 계산이다.
3D 계산을 -> 2D 계산으로 변환 시킨다.
오브젝트는 라이팅 계산이 전혀 없이 속성만을 렌더링 한다.
화면에 실제로 렌더링 되는 픽셀만 라이팅 계산을 수행한다.</li></li></ul><li>라이팅 계산을 먼저 하지 않고, 미루어 두었다가 <br />실행하기 때문에 지연(Deferred) 셰이딩<br />이라고 불리운...
Deferred Shading<br />이미 1988년의 시그래프 논문에서 이 기법이 소개 되었다. <br /><ul><li>그때는 Deferred 라는 용어는 사용하지 않았다.</li></ul>그래픽 카드의 발달으로 ...
요구 조건<br /><ul><li>MRT(Multi Render Target)을 기본적으로 4장 이상 사용한다
DirectX 9 이상
지포스6800 이상
ShaderModel 3.0 이상
위 조건이면 사용 가능
현재의 그래픽 카드로는 당연히!! 전부 지원 가능</li></li></ul><li>사용한 게임들<br />
실장된 엔진들<br />CryEngine 3<br />기타등등…<br />
샘플 동영상<br /><ul><li>Unity 엔진 – Deferred Rendering</li></li></ul><li>샘플 동영상<br />
샘플 동영상<br /><ul><li>UDK(언리얼) - Samaritan</li></li></ul><li>디퍼드렌더링<br />구현 방법<br />
General Architecture<br />
G-Buffer란?<br /><ul><li>Geometry Buffer
Per-Pixel 라이팅에 필요한 모든 정보
Normal
Position
Deffuse / Specular Albedo, Other Attributes</li></li></ul><li>
지오메트리 패스<br />(G버퍼 작성)<br />
지오메트리 패스<br /><ul><li>3D 공간의 지오메트리(오브젝트) 데이터의 속성값들을 G-Buffer에 렌더링 하는 단계
라이팅 처리는 하지 않는다!
MRT(Multi Render Target)을 사용해서, 한 패스에 4개의 렌더타겟에 정보를 렌더링 한다.
Depth
Normal
Diffuse / Specular</li></li></ul><li>지오메트리 패스<br />
2. 라이팅 패스<br />(픽셸셰이딩)<br />
라이팅 패스<br /><ul><li>라이팅을지오메트리 형태로 렌더링 한다.
Point Light = Sphere
Spot Light = cone
Sun = full Screen Quad</li></li></ul><li>라이팅 패스<br /><ul><li>각각의 라이팅에 대해서
라이팅에 영향을 받는 픽셀을 찾아내서 체크한다.
만약 라이팅이 스크린에 영향을 준다면…
Render Shadow Map
Upcoming SlideShare
Loading in …5
×

39

Share

Download to read offline

[Ndc11 박민근] deferred shading

Download to read offline

Related Audiobooks

Free with a 30 day trial from Scribd

See all

[Ndc11 박민근] deferred shading

  1. 1. 새로운 동적 라이팅의 세계!Deferred Shading (지연 세이딩)<br />박민근 (알콜코더)<br />네오위즈게임즈<br />NDC 2011<br />
  2. 2. 강연자 소개<br />박민근(@agebreak)<br />네오위즈게임즈(프로젝트 S개발중)<br />NTL-inc - 드래곤볼 온라인 개발<br />엔씨소프트– PlayNC빌링 서버 개발<br />‘신입 게임 개발자의 서울 상경기’<br />(http://agebreak.blog.me)<br />‘초중급 게임 개발자 스터디(데브루키)’<br />(cafe.naver.com/devrookie)<br />VisualStudio 2010 공식 팀 블로그<br />(http://vsts2010.net/)<br />게임 클라이언트 프로그래머<br />30대… 솔로 인생…<br />그리고 오타쿠 프로그래머...<br />언젠가는 우즈벡에.. 일류젼우즈벡 지사를 설립할 예정<br />
  3. 3.
  4. 4. Real-Time Rendering<br />최근 게임들은 수 많은 라이트와<br />수많은 오브젝트 들이 필요하다.<br />-> 라이팅 계산양의 증가<br />
  5. 5. 수많은 작은 동적 라이팅<br />
  6. 6. 낮(Day)<br />
  7. 7. 해질녘<br />
  8. 8. 저녁(Night)<br />
  9. 9. 동영상 시연<br />
  10. 10. 리얼 타임 라이팅을 위한 세가지 주요 기법<br /><ul><li>포워드 렌더링(Forward Rendering)
  11. 11. Single-pass, Multi-light
  12. 12. Multi-pass, Multi-light
  13. 13. 디퍼드렌더링
  14. 14. Deferred Shading</li></li></ul><li>포워드 렌더링<br />
  15. 15. Single-pass, multi-light<br />for each object do<br /> for each light do<br />framebuffer = light_model(object,light);<br />
  16. 16.
  17. 17. Single-pass, multi-light<br /><ul><li>해당 라이트에 영향을 받지 않아도 라이트 연산.
  18. 18. 화면에 렌더딩 되지 않는 면(Culling)도 셰이딩 연산을 해야만 한다.
  19. 19. 멀티 라이트 상황에서 관리가 어렵다
  20. 20. 싱글 템플릿 셰이더에서 수천 가지의 조합의 코드가 생성될 수 있다.
  21. 21. 그림자와의 통합이 어렵다</li></li></ul><li>Single-pass, multi-light<br />1억 개의 오브젝트, 50개의 라이트<br />[라이팅만을 위한 계산양]<br />1억 * 50<br />
  22. 22. Multi-pass, multi-light<br />for each light do<br /> for each object affected by light do<br />framebuffer += light_model(object,light);<br />
  23. 23.
  24. 24. Multi-pass, multi-light<br /><ul><li>화면에 렌더딩 되지 않을 면도 셰이딩 연상을 해야만 한다.
  25. 25. 높은 배치 카운트
  26. 26. 1/object/light
  27. 27. 각패스마다 중복된 작업이 많다.
  28. 28. Vertex Transform & setup
  29. 29. Anisotropic filtering</li></li></ul><li>Multi-pass, multi-light<br />1억 개의 오브젝트, 50개의 라이트<br />[라이팅만을 위한 계산양]<br />50 * 라이트의 영향을 받는 오브젝트 개수<br />
  30. 30. 디퍼드렌더링<br />
  31. 31. Deferred Shading<br />for each objectdo<br />G-buffer= lighting properties of object;<br />for each light do<br />framebuffer+= light_model(G-buffer,light);<br />
  32. 32.
  33. 33. Deferred Shading<br /><ul><li>굉장히 배치가 간단해지고, 엔진에서 관리가 쉽다
  34. 34. 일반적인 그림자 테크닉들과 통합이 쉽다
  35. 35. 라이팅을 위한 계산이 “완전한” O(1) 복잡도를 가진다.
  36. 36. 오브젝트의 개수와 상관없다
  37. 37. 수많은 작은 동적 라이팅사용이 가능하다</li></li></ul><li>Deferred Shading<br />1억 개의 오브젝트, 50개의 라이트<br />[라이팅만을 위한 계산양]<br />라이트 개수 * 라이트에영향받는 픽셀 개수<br />
  38. 38. Deferred Shading<br /><ul><li>일종의 포스트 프로세싱처럼 수행된다
  39. 39. 2D 렌더타겟간의 계산이다.
  40. 40. 3D 계산을 -> 2D 계산으로 변환 시킨다.
  41. 41. 오브젝트는 라이팅 계산이 전혀 없이 속성만을 렌더링 한다.
  42. 42. 화면에 실제로 렌더링 되는 픽셀만 라이팅 계산을 수행한다.</li></li></ul><li>라이팅 계산을 먼저 하지 않고, 미루어 두었다가 <br />실행하기 때문에 지연(Deferred) 셰이딩<br />이라고 불리운다.<br />
  43. 43. Deferred Shading<br />이미 1988년의 시그래프 논문에서 이 기법이 소개 되었다. <br /><ul><li>그때는 Deferred 라는 용어는 사용하지 않았다.</li></ul>그래픽 카드의 발달으로 이젠 실시간에 사용 가능!!<br />
  44. 44. 요구 조건<br /><ul><li>MRT(Multi Render Target)을 기본적으로 4장 이상 사용한다
  45. 45. DirectX 9 이상
  46. 46. 지포스6800 이상
  47. 47. ShaderModel 3.0 이상
  48. 48. 위 조건이면 사용 가능
  49. 49. 현재의 그래픽 카드로는 당연히!! 전부 지원 가능</li></li></ul><li>사용한 게임들<br />
  50. 50.
  51. 51.
  52. 52.
  53. 53. 실장된 엔진들<br />CryEngine 3<br />기타등등…<br />
  54. 54. 샘플 동영상<br /><ul><li>Unity 엔진 – Deferred Rendering</li></li></ul><li>샘플 동영상<br />
  55. 55. 샘플 동영상<br /><ul><li>UDK(언리얼) - Samaritan</li></li></ul><li>디퍼드렌더링<br />구현 방법<br />
  56. 56.
  57. 57. General Architecture<br />
  58. 58. G-Buffer란?<br /><ul><li>Geometry Buffer
  59. 59. Per-Pixel 라이팅에 필요한 모든 정보
  60. 60. Normal
  61. 61. Position
  62. 62. Deffuse / Specular Albedo, Other Attributes</li></li></ul><li>
  63. 63.
  64. 64.
  65. 65.
  66. 66.
  67. 67.
  68. 68.
  69. 69.
  70. 70.
  71. 71.
  72. 72. 지오메트리 패스<br />(G버퍼 작성)<br />
  73. 73. 지오메트리 패스<br /><ul><li>3D 공간의 지오메트리(오브젝트) 데이터의 속성값들을 G-Buffer에 렌더링 하는 단계
  74. 74. 라이팅 처리는 하지 않는다!
  75. 75. MRT(Multi Render Target)을 사용해서, 한 패스에 4개의 렌더타겟에 정보를 렌더링 한다.
  76. 76. Depth
  77. 77. Normal
  78. 78. Diffuse / Specular</li></li></ul><li>지오메트리 패스<br />
  79. 79.
  80. 80. 2. 라이팅 패스<br />(픽셸셰이딩)<br />
  81. 81. 라이팅 패스<br /><ul><li>라이팅을지오메트리 형태로 렌더링 한다.
  82. 82. Point Light = Sphere
  83. 83. Spot Light = cone
  84. 84. Sun = full Screen Quad</li></li></ul><li>라이팅 패스<br /><ul><li>각각의 라이팅에 대해서
  85. 85. 라이팅에 영향을 받는 픽셀을 찾아내서 체크한다.
  86. 86. 만약 라이팅이 스크린에 영향을 준다면…
  87. 87. Render Shadow Map
  88. 88. 라이팅 픽셀을 셰이딩하고FrameBuffer에 추가한다.</li></li></ul><li>라이팅 패스<br /><ul><li>각각의 라이팅에 영향을 받는 픽셀들의 계산 결과를 누적(accumlation) 버퍼에 블렌딩 한다.
  89. 89. Diffuse 값과, Specular 값은 별도로 저장한다.</li></ul>For each light:<br /> diffuse += diffuse(G-buff.N, L))<br /> specular += G-buff.spec* <br /> specular(G-buff.N, G-buff.P, L)<br />
  90. 90. 라이팅 패스<br /><ul><li>최종적으로 원본의 Diffuse 값과 누적 버퍼에 누적된 픽셀 값들을 곱하여 결과를 출력한다.</li></ul>framebuffer = diffuse * G-buff.diffuse+<br /> specular<br />
  91. 91. Per-Pixel Lighting<br />float4 PointLightingPS(VS_OUTPUT1 In) : COLOR<br />{<br /> half4 diffuseTex = tex2D(MRT0Sampler, In.TexCoord);<br /> half4 normalTex = tex2D(MRT1Sampler, In.TexCoord);<br /> half z = tex2D(MRT2Sampler, In.TexCoord);<br />//unpack<br /> half3 albedo = diffuseTex.xyz;<br />…<br />//reconstruct original view-space position<br />…<br />//normalize<br />…<br />//diffuse lighting<br /> half NdotL = dot(normal, lightVec);<br /> half selfShadow = (NdotL > 0) ? 1 : 0;<br /> half3 diffuse = albedo * NdotL * selfShadow * LightColor;<br />
  92. 92. Per-Pixel Lighting<br />float4 PointLightingPS(VS_OUTPUT1 In) : COLOR<br />{<br /> (앞페이지…)<br /> //compute half angle<br /> half3 halfAngle = normalize(lightVec + eyeVec);<br /> half3 specular = max(pow(dot(halfAngle, normal), SpecularExponent), 0) * <br />selfShadow;<br /> …<br /> (후략)<br />}<br />
  93. 93.
  94. 94.
  95. 95.
  96. 96.
  97. 97. 디퍼드셰이딩<br />장점<br />
  98. 98. 완전한 O(1)시간에, 수많은 동적 라이팅의 처리가 가능<br /><ul><li>오브젝트의 개수에 상관없이 상수 시간에 라이팅의 처리가 가능하다.</li></li></ul><li><ul><li>다수의 라이팅의렌더링 처리코드가 간단하며, 관리가 쉽다.
  99. 99. 중간 과정에서 만들어진 G-Buffer의 속성들을 다른 기법에 재활용이 가능하다. (포스트 프로세싱 등)</li></li></ul><li><ul><li>그림자 기법들과 통합이 용이하다. (셀프셰도우, 소프트 셰도우, SSAO 등)</li></li></ul><li>디퍼드셰이딩<br />문제점<br />
  100. 100. MRT(Multi Render Target)<br /><ul><li>많은 렌더타겟을 필요로 한다.
  101. 101. 하지만 어차피 포스트 프로세싱을 한다면? 필요하니까…</li></li></ul><li>MSAA(Anti Aliasing)<br /><ul><li>2D 스크린 화면에서의 계산이기 때문에 계단 현상(Aliasing) 해결이 어렵다.
  102. 102. 포워드 렌더링에서는지오메트리 단계에서 얼라이어싱이 되지만, 디퍼드렌더링에서는되지 않음
  103. 103. 여러가지 개선 방법이 연구 중</li></li></ul><li>Transparency<br /><ul><li>반투명한 오브젝트의 렌더링이 어렵다.
  104. 104. 2D 공간 스크린 정보이기 때문 (뒤 픽셀의 정보를 담을 수 없다)
  105. 105. 파티클등의 반투명한 오브젝트는 나중에 포워드 렌더링으로 따로 렌더링해야만 한다.</li></li></ul><li>같이 사용하면<br />효율적인 기법<br />
  106. 106. <ul><li>SSAO (Screen Space Amibent Occlusion)
  107. 107. Motion Blur
  108. 108. Bloom
  109. 109. HDR</li></li></ul><li><ul><li>GI (전역 조명)
  110. 110. 전역 셰도우 기법들
  111. 111. 기타 포스트 프로세싱 기법들</li></li></ul><li>디퍼드셰이딩<br />개선 기법<br />
  112. 112. Light Indexed Deferred Lighting<br /><ul><li>light volume들이 scene과 교차하는 지점에 light index 값을 저장하여 렌더링하는 기법
  113. 113. 반투명, MSAA 문제 해결됨
  114. 114. 포워드 렌더링과디퍼드렌더링의 장단점을 보완
  115. 115. 지오메트리를2pass 렌더링해야하고, 그림자 제공이 어려움
  116. 116. 아직 연구의 여지가 있는 기법</li></li></ul><li>결론<br />
  117. 117. <ul><li>수많은 동적 라이팅을 화면상의 오브젝트의 개수와 관계없이 상수시간에 처리가 가능함
  118. 118. 이론상 무한개의 동적 라이팅사용 가능
  119. 119. 어두운 실내나, 어두운 배경에 동적라이팅이 많은 경우 최적의 해결 방법 (ex. 데드 스페이스2)</li></li></ul><li><ul><li>현재의 그래픽 카드에서는 당연히 지원됨
  120. 120. 별다른 노력 없이, 유명 상용 엔진에서는 기본적으로 지원됨 (한큐에~)
  121. 121. 직접 구현 해도, 개념이 어렵지 않고, 관리가 쉬움
  122. 122. 셀프셰도우등 그림자 기법이 용이함</li></li></ul><li><ul><li>어차피 다른 포스트 프로세싱(Bloom, HDR등)을 사용하는 게 요즘 게임의 기본 추세라면, 사용하지 않을 이유가 없음. (G-Buffer 재사용 가능)</li></li></ul><li><ul><li>실제 개발하는 MMORPG에 적용해서 개발했던 결과, 전체적으로 그래픽 퀄리티가 확실히 상승하였음</li></ul>우리팀TD<br />그래픽이 짱 좋아졌음~~!! <br />오빠 짱~! 멋있당~~~!<br />
  123. 123. <ul><li>물론, MSAA, Transparency 이 제대로 지원되지 않는 문제를 해결해야 하는 부분이 남아 있음. (상용 엔진의 지원에서는 어느 정도 해결됨)</li></ul>우리팀TD<br />아놔~~<br />님아.. 지금 이게 뭐임?<br />반투명 안되잖아~~!<br />님아 나하고 장난침?<br />
  124. 124. <ul><li>동적 라이팅이 많고, 그래픽연출이 중요한 MMORPG나 FPS등에 적용하면 상당히 좋은 효과를 얻을 수 있을거라 기대됨!</li></li></ul><li>참고 자료<br /><ul><li>Deferred Shading – 오종빈 (Shader Study) 발표 자료
  125. 125. Deferred Shading – Codevania(김태우) 스프링 노트
  126. 126. Deferred Shading Tutorial - Codevania
  127. 127. Deferred Shading –NVIDIA (문서)
  128. 128. HDR Deferred Shading – NVIDIA (예제 코드)
  129. 129. 니시카와켄지의3D게임 팬을 위한 「KILLZONE 2」그래픽스 강좌
  130. 130. Light Indexed Deferred Lighting – Codevania</li></li></ul><li>Q & A<br />
  • SungBaeJeon2

    Oct. 4, 2019
  • GabCho1

    Aug. 12, 2019
  • lsh1208

    Jun. 2, 2019
  • wooseokkim161

    Apr. 14, 2019
  • paxvobis1

    Feb. 7, 2019
  • ssusercf37b2

    May. 24, 2018
  • kimzombie

    Feb. 28, 2018
  • hyeonwoosa

    Dec. 7, 2017
  • mochanpowder

    Dec. 7, 2017
  • jonghyunchoi902

    Nov. 15, 2017
  • ssuserd09b37

    Sep. 4, 2017
  • byungwoongkwon

    Jul. 25, 2017
  • jeongminu

    Jun. 12, 2017
  • chomunhwi

    May. 2, 2017
  • ssuser5f4b7f

    Apr. 21, 2017
  • SungwhanBae

    Dec. 30, 2016
  • SamanthaKang1

    May. 27, 2016
  • WonkyKIM

    May. 20, 2016
  • ssuserc705ec

    Mar. 27, 2016
  • ssuser9cc25a

    Feb. 21, 2016

Views

Total views

17,954

On Slideshare

0

From embeds

0

Number of embeds

381

Actions

Downloads

210

Shares

0

Comments

0

Likes

39

×