1 / 78

Deferred Shading ( 지연 세이딩 )

Deferred Shading ( 지연 세이딩 ). 박민근 ( 알콜코더 ) 네이버 초중급 게임 개발자 스터디 [ 데브루키 ] 2011.03.26. Real-Time Rendering. 최근 게임들은 수 많은 라이트와 수많은 오브젝트 들이 등장한다 . -> 라이팅 계산양의 증가. 리얼 타임 라이팅을 위한 세가지 주요 기법. 포워드 렌더링 (Forward Rendering) Single-pass, Multi-light Multi-pass, Multi-light 디퍼드 렌더링

torin
Download Presentation

Deferred Shading ( 지연 세이딩 )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Deferred Shading (지연 세이딩) 박민근(알콜코더) 네이버초중급 게임 개발자 스터디[데브루키] 2011.03.26

  2. Real-Time Rendering • 최근 게임들은 수 많은 라이트와 • 수많은 오브젝트 들이 등장한다. • -> 라이팅 계산양의 증가

  3. 리얼 타임 라이팅을 위한 세가지 주요 기법 • 포워드 렌더링(Forward Rendering) • Single-pass, Multi-light • Multi-pass, Multi-light • 디퍼드렌더링 • Deferred Shading

  4. 포워드 렌더링

  5. Single-pass, multi-light • for each object do • for each light do • framebuffer= light_model(object,light);

  6. Single-pass, multi-light • 화면에 렌더딩 되지 않을 면도 셰이딩 연상을 해야만 한다. • 멀티 라이트 상황에서 관리가 어렵다 • 싱글 템플릿 셰이더에서 수천 가지의 조합의 코드가 생성될 수 있다. • 그림자와의 통합이 어렵다

  7. Single-pass, multi-light • 1억 개의 오브젝트, 50개의 라이트 • [라이팅만을 위한 계산양] • 1억 * 50

  8. Multi-pass, multi-light • for each light do • for each object affected by light do • framebuffer+= light_model(object,light);

  9. Multi-pass, multi-light • 화면에 렌더딩 되지 않을 면도 셰이딩 연상을 해야만 한다. • 높은 배치 카운트 • 1/object/light • 각패스마다 중복된 작업이 많다. • Vertex Transform & setup • Anisotropic filtering

  10. Multi-pass, multi-light • 1억 개의 오브젝트, 50개의 라이트 • [라이팅만을 위한 계산양] • 50 * 라이트의 영향을 받는 오브젝트 개수

  11. 디퍼트렌더링

  12. Deferred Shading • for each objectdo • G-buffer= lighting properties of object; • for each light do • framebuffer+= light_model(G-buffer,light);

  13. Deferred Shading • 굉장히 배치가 간단해지고, 엔진에서 관리가 쉽다 • 일반적인 그림자 테크닉들과 통합이 쉽다 • 라이팅을 위한 계산이 “완전한” O(1) 복잡도를 가진다. • 오브젝트의 개수와 상관없다 • 수많은 작은 동적 라이팅 사용이 가능하다

  14. Deferred Shading • 1억 개의 오브젝트, 50개의 라이트 • [라이팅만을 위한 계산양] • 라이트 개수 * 라이트에영향받는 픽셀 개수

  15. Deferred Shading • 일종의 포스트 프로세싱처럼 수행된다 • 2D 렌더타겟간의 계산이다. • 3D 계산을 -> 2D 계산으로 변환 시킨다. • 오브젝트는 라이팅 계산이 전혀 없이 속성만을 렌더링 한다. • 화면에 실제로 렌더링 되는 픽셀만 라이팅 계산을 수행한다.

  16. Deferred Shading • 라이팅 계산을 먼저 하지 않고, 미루어 두었다가 • 실행하기 때문에 지연(Deferred) 셰이딩 • 이라고 불리운다.

  17. Deferred Shading • 이미 1988년의 시그래프 논문에서 이 기법이 소개 되었다. • 그때는 Deferred 라는 용어는 사용하지 않았다. • 그래픽 카드의 발달으로 이젠 실시간에 사용 가능!!

  18. 요구 조건 • MRT(Multi Render Target)을 기본적으로 4장 이상 사용한다 • DirectX 9 이상 • 지포스6800 이상 • ShaderModel 3.0 이상 • 위 조건이면 사용 가능 • 현재의 그래픽 카드로는 당연히!! 전부 지원 가능

  19. 사용한 게임들

  20. 실장된 엔진들 CryEngine 3 기타등등…

  21. 샘플 동영상 • Unity 엔진 – Deferred Rendering

  22. 샘플 동영상 • UDK(언리얼) - Samaritan

  23. 디퍼드렌더링 구현 방법

  24. General Architecture

  25. G-Buffer란? • Geometry Buffer • Per-pixel 라이팅에 필요한 모든 정보 • Normal • Position • Deffuse / Specular Albedo, Other Attributes

  26. 지오메트리 패스 (G버퍼 작성)

  27. 지오메트리 패스 • 3D 공간의 지오메트리(오브젝트) 데이터의 속성값들을G-Buffer에 렌더링 하는 단계 • 라이팅 처리는 하지 않는다! • MRT(Multi Render Target)을 사용해서, 한 패스에 4개의 렌더타겟에 정보를 렌더링 한다. • Depth • Normal • Diffuse / Specular

  28. 지오메트리 패스

  29. 2. 라이팅 패스 (픽셸셰이딩)

  30. 라이팅 패스 • 라이팅을지오메트리 형태로 렌더링된다. • Point Light = Sphere • Spot Light = cone • Sun = full Screen Quad

  31. 라이팅 패스 • 각각의 라이팅에 대해서 • 라이팅에 영향을 받는 픽셀을 찾아내서 체크한다. • 만약 라이팅이 스크린에 영향을 준다면… • Render Shadow Map • 라이팅 픽셀을 셰이딩하고FrameBuffer에 추가한다.

  32. 라이팅 패스 • 각 라이팅에 영향을 받는 픽셀들의 계산 결과를 누적(accumlation) 버퍼에 블렌딩 한다. • Diffuse 값과, Specular 값은 별도로 저장한다. For each light: diffuse += diffuse(G-buff.N, L)) specular += G-buff.spec* specular(G-buff.N, G-buff.P, L)

More Related