Deferred Rendering
최재현
선택 이유
Deferred Rendering
 물체의 표면에 빛이 반사되는 계산(Bidirectional Reflectance
Distribution Function)을 실시간으로(DynamicLight), 효율적으로 처
리해보자.
Lambert = dot(N,L)
Physically Based
일반적인 렌더링 과정.
Game
Loop
Tick
Object.Draw
Object.Draw
Object.Draw
Object.Draw
GraphicLibrary.SetMesh
GraphicLibrary.SetTexture
GraphicLibrary.SetShader
GraphicLibrary.SetWorldMatrix
GraphicLibrary.SetLightObject
….(DataToGPU)
GraphicLibrary.Draw
In Object Drawing~
GraphicLibrary?
DirectX
OpenGL
….
In GPU
일반적인 렌더링 과정.
Bidirectional Reflectance Distribution Function
필요한 변수들
Position
NormalVector
LightVector
LightDirectionVector
LightPosition
ViewVector
DefuseColor
AmbientColor
SpeculerTex
NormalTex
ReflectionMap
……..
각 BRDF모델에 따라 필요한 변수들이 조금씩
혹은 엄청 많이 다르다.
일반적으로 Pixel Shading단계에서 계산을 수행한다.
Forward Renderering Light Calculate
Object.Draw
Object.Draw
Object.Draw
Object.Draw
Frame Buffer
Forward Renderering Light Calculate
Object.Draw
Object.Draw
Object.Draw
Object.Draw
Frame Buffer
Forward Renderering Light Calculate
Object.Draw
Object.Draw
Object.Draw
Object.Draw
….
화면에 그려지는 오브젝트의 픽셀 수(중복포함) * 라이트 개수
= 라이팅 연산 총합
Frame Buffer
쓸모없이 반복되는(?) 라이팅 연산을 줄일
수 없을까? => Defferd Rendering
Forward 렌더링
Game
Loop
Tick
Object.Draw
Object.Draw
Object.Draw
Object.Draw
GraphicLibrary.SetMesh
GraphicLibrary.SetTexture
GraphicLibrary.SetShader
GraphicLibrary.SetWorldMatrix
GraphicLibrary.SetLightObject1
GraphicLibrary.SetLightObject2
GraphicLibrary.SetLightObject3
….(DataToGPU)
GraphicLibrary.Draw
In Object Drawing
In GPU
Defferrd 렌더링
Game
Loop
Tick
Object.Draw
Object.Draw
Object.Draw
Object.Draw
Light1.Draw
Light2.Draw
Light3.Draw
GraphicLibrary.SetMesh
GraphicLibrary.SetTexture
GraphicLibrary.SetShader
GraphicLibrary.SetWorldMatrix
….(DataToGPU)
GraphicLibrary.DrawToG-Buffer
(NeedMultiRenderTarget)
In Object Drawing
In GPU
GraphicLibrary.SetLightData
GraphicLibrary.DrawToFrameBuffer
Defferd Rederering Light Calculate
Object.Draw
Object.Draw
Object.Draw
Object.Draw
Light.Draw
Defferd Rederering Light Calculate
Object.Draw
Object.Draw
Object.Draw
Object.Draw
Light.Draw
Frame Buffer
Defferd Rederering Light Calculate
Object.Draw
Object.Draw
Object.Draw
Object.Draw
….
Light.Draw
화면의 픽셀 수 * 라이트 개수
= 라이팅 연산 총합
Frame Buffer
어떻게 가능한가?
일반적인 렌더링 과정.
Bidirectional Reflectance Distribution Function
필요한 변수들
Position
NormalVector
LightVector
LightDirectionVector
LightPosition
ViewVector
DefuseColor
AmbientColor
SpeculerTex
NormalTex
ReflectionMap
……..
각 BRDF모델에 따라 필요한 변수들이 조금씩
혹은 엄청 많이 다르다.
일반적으로 Pixel Shading단계에서 계산을 수행한다.
라이팅 계산에 필요한 변수들을
미리 텍스쳐에 적어놓는다!
Light 렌더링 과정.
Bidirectional Reflectance Distribution Function
필요한 변수들
LightVector
LightDirectionVector
LightPosition
RT1
RT2
RT3
RT1, RT2, RT3에 적혀있는 정보를 바탕으로
픽셀당 라이팅계산을 수행한다.
Deferred Rendering
이미 1988년 시그래프 논문에서 이 기법이 소개 되었다.
그래픽 카드의 발달로 이젠 실시간에 사용가능!
Deferred Rendering이 가능하려면…
MRT(Multi Render Target)을 기본적으로 4장 이상 사용할 수 있어야
한다.
ShaderModel 3.0이상
Deferred Rendering의 장점.
 많은 수의 동적 라이팅을 효율적으로 처리할 수 있다.
 G-Buffer의 속성을 다른 기법에서 활용할수 있다. (포스트
프로세싱 등)
Deferred Rendering의 단점.
 반투명한 오브젝트의 렌더링이 불가능하다.
 쓸모없이 반복되는(?) 라이팅 연산이 쓸모있어지는 순간..
 MRT -> 메모리증가
 안티엘리어싱이 힘들다. (2D스크린 화면에서의 계산이기때문)
Unity에서 Deferrd Rendering
 안티앨리어싱 X
 반투명 오브젝트 처리 x
 위의 오브젝트들은 forward렌더링방식을 사용하여 렌더링하도록 추천.
 RT0, ARGB32 format: Diffuse color (RGB), unused (A).
 RT1, ARGB32 format: Specular color (RGB), roughness (A).
 RT2, ARGB2101010 format: World space normal (RGB), unused (A).
 RT3, ARGB32 (non-HDR) or ARGBHalf (HDR) format: Emission + lighting +
lightmaps + reflection probes buffer.
 Depth+Stencil buffer.
 http://docs.unity3d.com/kr/current/Manual/RenderTech-
DeferredShading.html 구현 세부사항.
Unity에서 Deferrd Rendering
모바일 모바일은?
MRT를 지원하는 모바일 GPU는 아직까
지 손에 꼽는다…. Orz..
참고자료
 http://www.slideshare.net/agebreak/ndc11-deferred-shading
(알콜코더님의 슬라이드셰어 사실...이것만 보시면되요)
 http://http.download.nvidia.com/developer/presentations/2004/680
0_Leagues/6800_Leagues_Deferred_Shading.pdf
 http://gamedevelopment.tutsplus.com/articles/forward-rendering-
vs-deferred-rendering--gamedev-12342
 http://http.download.nvidia.com/developer/SDK/Individual_Samples
/DEMOS/Direct3D9/DeferredShading.zip (예제 코드)

2015.12.10 defferd renderring_