Upload
changhee-lee
View
1.883
Download
2
Embed Size (px)
Citation preview
Introduction
Deferred Renderer 의 경우– G-Buffer 안에 Material Property 들을 저장하는
데 , G-Buffer 의 공간은 매우 제한적이다 . – 모든 Material 들에 대해서 아주 유사한 Lighting
공식이 사용되는 것을 요구한다 .– Lighting Stage 안에서 Pixel shader switching 은
screen space 에서 pixel 마다 발생할 것이기 때문에 아주 비쌀 것이다 .
제한적인 Material 지원과 많은 양의 memory bandwidth 는 Light Pre-Pass Renderer 의 원인이 되었다 .
Introduction(Cont.)
First Phase– Deferred Lighting Renderer 는 G-Buffer 안에
material property 들을 저장하는 반면에 , Light Pre-Pass 는 depth 와 normal 을 1 개나 2 개의 RenderTarget 저장한다 .
Second Phase– Light Pre-Pass Renderer 는 light buffer 안으로
모든 light 들의 light property 들을 저장한다 . 그래서 Deferred Lighting renderer 가 각 light 에 대해 전체 조명계산식을 사용하는 반면에 , light buffer 안에 오직 조명계산식의 일부분을 저장한다 .
Geomety Phase
Opaque object들에 대해서 , view space normal 과 eye-space depth를 저장한다 .
Transparent Object 들은 분리된 rendering path 를 이용한다하나의 RenderTarget 에
저장-RG: normal.xy-BA: depth
Light Phase Light property 들을 그리는 기본적인 요구는 어떻게 light property 들과 모든 다른 property
들을 에 분리하고 나중에 다시 구성할 수 있도록 조명계산식을 분리하느냐에 방법을 찾는 것이다 .
간단한 Point Light 공식 :Color = Ambient + Shadow * Att * (N.L * DiffColor * DiffIntensity * LightColor + R.V^n *
SpecColor * SpecIntensity * LightColor)
모든 property 들은 light vector 와 light color 에 의존한다- N.L- LightColor- R.V^n- Attenuation
Light property 들을 저장하는 하나의 방법은 4 개의 channel render target 을 사용하는 것 LightColor.r * N.L * AttLightColor.g * N.L * AttLightColor.b * N.L * AttR.V^n * N.L * Att
Re-Construct
Forward rendering pass 에서 pixel 마다 개별적으로 diffuse 와 specular 항을 재구성하는 방법1. 나눠져 있는 term 은 forward rendering pass
에서 나중에 specular 항을 재구성하기 위해 저장될 수 있다 .
2. Specular 항을 구성하기 위한 규칙들이 Light Pre-Pass Renderer 에 더 적합하도록 새로운 항을 생성하여 알맞게 바뀔 수 있다 .
3. 더 tight 하게 압축된 render target 을 만들기 위해 다른 공간 안에 이동
Re-Construct(Cont.)추가적인 diffuse term 을 저장
– LightColor.r * N.L * AttLightColor.g * N.L * AttLightColor.b * N.L * AttR.V^n * N.L * AttN.L * Att
– (R.V^n * N.L * Att) / (N.L * Att) 을 통해서 , (R.V^n)^mn * SpecColor 로 light 의 specular 항과 material 의 specular power / specular color 를 사용할 수 있다 .
– 단 , 4 개의 저장할 수 있는 channel 이 넘으므로 , 추가적인 Render Target 가 Light Buffer 를 위해 요구된다 .
Specular lighting 규칙들을 변경– (R.V^n * N.L * Att) ^ nm
:Diffuse Light Buffer
:Specular Light Buffer
Conculsion MRT 의 지원이 없어도 구현이 가능하다 . 따라서 , low spec
graphic hardware 에서 구현이 가능하다 .( 이게 의미가 있나 ?) 마지막 pass 가 forward renderer 를 이용하기 때문에 , Deferred
Lighting 의 단점인 MSAA 의 문제를 해결할 수 있다 . 각 light source 에 대해 쓰고 읽을 수 있는 render target 들에
의해 소모되는 memory bandwidth 의 양이 Deferred Lighting Render 가 4 개의 텍스쳐를 사용하는 데 비해 , 각 라이트에 대해 불려지는 단 2 개의 텍스쳐가 필요하기 때문에 더 작아진다 .
Deferred Lighting 과 비교하여 Light Pre-Pass 는 material 구현에 관하여 더 유연성 (flexibility) 를 제공한다 .
Conclusion(Cont.)
Deferred Lighting 과는 결과를 놓고 비교해보기 전에는 알 수 없음 . 단 , Memory bandwidth면에서 봤을 때에는 확실한 이득을 얻을 수 있다 . (MT 프레임웍 2.0의 기사 참고)
여러 개의 light 에 대해서 specular 항을 계산할 때의 문제점 (GameDev.net)– (Ra.Va)^n + (Rb.Vb)^n + ... + (Ri.Vi)^n != (Ra.Va
+ Rb.Vb + .. + Ri.Vi)^n아직은 아이디어일 뿐 , 실제로는 더 연구가 요망
Reference http://diaryofagraphicsprogrammer.blogspot.com/2008/03/light-pre-p
ass-renderer.html http://www.gamedev.net/community/forums/topic.asp?topic_id=5222
34 http://www.gamedev.net/community/forums/topic.asp?
topic_id=487154 http://blog.nextrevision.com/?p=49 http://drilian.com/category/development/graphics/light-pre-pass-
render/ http://www.flickr.com/photos/killerbunny/sets/72157604880714722/ http://game.sorenhannibal.com/
Q & A