Deferred Shading (지연 세이딩)박민근(알콜코더)네이버초중급 게임 개발자 스터디[데브루키]2011.03.26
Real-Time Rendering최근 게임들은 수 많은 라이트와수많은 오브젝트 들이 등장한다.-> 라이팅 계산양의 증가
리얼 타임 라이팅을 위한 세가지 주요 기법포워드 렌더링(Forward Rendering)
Single-pass, Multi-light
Multi-pass, Multi-light
디퍼드렌더링
Deferred Shading포워드 렌더링
Single-pass, multi-lightfor each object do	for each light doframebuffer= light_model(object,light);
Single-pass, multi-light화면에 렌더딩 되지 않을 면도 셰이딩 연상을 해야만 한다.
멀티 라이트 상황에서 관리가 어렵다
싱글 템플릿 셰이더에서 수천 가지의 조합의 코드가 생성될 수 있다.
그림자와의 통합이 어렵다Single-pass, multi-light1억 개의 오브젝트, 50개의 라이트[라이팅만을 위한 계산양]1억 * 50
Multi-pass, multi-lightfor each light do	for each object affected by light doframebuffer+= light_model(object,light);
Multi-pass, multi-light화면에 렌더딩 되지 않을 면도 셰이딩 연상을 해야만 한다.
높은 배치 카운트
1/object/light
각패스마다 중복된 작업이 많다.
Vertex Transform & setup
Anisotropic filteringMulti-pass, multi-light1억 개의 오브젝트, 50개의 라이트[라이팅만을 위한 계산양]50 * 라이트의 영향을 받는 오브젝트 개수
디퍼트렌더링
Deferred Shadingfor each objectdoG-buffer= lighting properties of object;for each light doframebuffer+= light_model(G-buffer,light);
Deferred Shading굉장히 배치가 간단해지고, 엔진에서 관리가 쉽다
일반적인 그림자 테크닉들과 통합이 쉽다
라이팅을 위한 계산이 “완전한” O(1) 복잡도를 가진다.
오브젝트의 개수와 상관없다
수많은 작은 동적 라이팅 사용이 가능하다Deferred Shading1억 개의 오브젝트, 50개의 라이트[라이팅만을 위한 계산양]라이트 개수 * 라이트에영향받는 픽셀 개수
Deferred Shading일종의 포스트 프로세싱처럼 수행된다
2D 렌더타겟간의 계산이다.
3D 계산을 -> 2D 계산으로 변환 시킨다.
오브젝트는 라이팅 계산이 전혀 없이 속성만을 렌더링 한다.
화면에 실제로 렌더링 되는 픽셀만 라이팅 계산을 수행한다.Deferred Shading라이팅 계산을 먼저 하지 않고, 미루어 두었다가 실행하기 때문에 지연(Deferred) 셰이딩이라고 불리운다.
Deferred Shading이미 1988년의 시그래프 논문에서 이 기법이 소개 되었다. 그때는 Deferred 라는 용어는 사용하지 않았다.그래픽 카드의 발달으로 이젠 실시간에 사용 가능!!
요구 조건MRT(Multi Render Target)을 기본적으로 4장 이상 사용한다
DirectX 9 이상
지포스6800 이상
ShaderModel 3.0 이상
위 조건이면 사용 가능
현재의 그래픽 카드로는 당연히!! 전부 지원 가능사용한 게임들
실장된 엔진들CryEngine 3기타등등…
샘플 동영상Unity 엔진 – Deferred Rendering샘플 동영상UDK(언리얼) - Samaritan디퍼드렌더링구현 방법
General Architecture
G-Buffer란?Geometry Buffer
Per-pixel 라이팅에 필요한 모든 정보
Normal
Position
Deffuse / Specular Albedo, Other Attributes
지오메트리 패스(G버퍼 작성)
지오메트리 패스3D 공간의 지오메트리(오브젝트) 데이터의 속성값들을G-Buffer에 렌더링 하는 단계
라이팅 처리는 하지 않는다!
MRT(Multi Render Target)을 사용해서, 한 패스에 4개의 렌더타겟에 정보를 렌더링 한다.
Depth
Normal
Diffuse / Specular지오메트리 패스
2. 라이팅 패스(픽셸셰이딩)
라이팅 패스라이팅을지오메트리 형태로 렌더링된다.
Point Light = Sphere
Spot Light = cone
Sun = full Screen Quad라이팅 패스각각의 라이팅에 대해서
라이팅에 영향을 받는 픽셀을 찾아내서 체크한다.
만약 라이팅이 스크린에 영향을 준다면…
Render Shadow Map

[0326 박민근] deferred shading