12
Light Pre-Pass 작작 : 작작작 ([email protected] m) 작작 : 2009 작 7 작 4 작

Light Pre-Pass

Embed Size (px)

Citation preview

Page 1: Light Pre-Pass

Light Pre-Pass

작성 : 이창희([email protected]

om)발표 : 2009 년 7 월 4

Page 2: Light Pre-Pass

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 의 원인이 되었다 .

Page 3: Light Pre-Pass

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 안에 오직 조명계산식의 일부분을 저장한다 .

Page 4: Light Pre-Pass

Geomety Phase

Opaque object들에 대해서 , view space normal 과 eye-space depth를 저장한다 .

Transparent Object 들은 분리된 rendering path 를 이용한다하나의 RenderTarget 에

저장-RG: normal.xy-BA: depth

Page 5: Light Pre-Pass

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

Page 6: Light Pre-Pass

Re-Construct

Forward rendering pass 에서 pixel 마다 개별적으로 diffuse 와 specular 항을 재구성하는 방법1. 나눠져 있는 term 은 forward rendering pass

에서 나중에 specular 항을 재구성하기 위해 저장될 수 있다 .

2. Specular 항을 구성하기 위한 규칙들이 Light Pre-Pass Renderer 에 더 적합하도록 새로운 항을 생성하여 알맞게 바뀔 수 있다 .

3. 더 tight 하게 압축된 render target 을 만들기 위해 다른 공간 안에 이동

Page 7: Light Pre-Pass

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

Page 8: Light Pre-Pass

:Diffuse Light Buffer

:Specular Light Buffer

Page 9: Light Pre-Pass

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) 를 제공한다 .

Page 10: Light Pre-Pass

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아직은 아이디어일 뿐 , 실제로는 더 연구가 요망

Page 11: Light Pre-Pass

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/

Page 12: Light Pre-Pass

Q & A