URL
EMBED
Page 0:
Page 1: Light Pre-Pass
작성 : 이창희 (cagetu79@gmail.com) 발표: 2009년7월 4일
Page 2: 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: Introduction(Cont.)
First Phase
– Deferred Lighting Renderer는 G-Buffer안에 material property들을 저장하는 반면에, Light PrePass는 depth와 normal을 1개나 2개의 RenderTarget 저장한다.
Second Phase
– Light Pre-Pass Renderer는 light buffer안으로 모 든 light들의 light property들을 저장한다. 그래서 Deferred Lighting renderer가 각 light에 대해 전체 조명계산식을 사용하는 반면에, light buffer안에 오 직 조명계산식의 일부분을 저장한다.
Page 4: Geomety Phase
Opaque object들 에 대해서, view space normal과 eye-space depth 를 저장한다. Transparent Object들은 분리 된 rendering 하나의 RenderTarget에 저장 path를 이용한다
-RG: normal.xy -BA: depth
Page 5: 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 * Att LightColor.g * N.L * Att LightColor.b * N.L * Att R.V^n * N.L * Att
Page 6: Re-Construct
Forward rendering pass에서 pixel 마다 개별 적으로 diffuse와 specular항을 재구성하는 방 법
1. 나눠져 있는 term은 forward rendering pass에서 나중에 specular항을 재구성하기 위해 저장될 수 있다. 2. Specular항을 구성하기 위한 규칙들이 Light PrePass Renderer에 더 적합하도록 새로운 항을 생 성하여 알맞게 바뀔 수 있다. 3. 더 tight하게 압축된 render target을 만들기 위해 다른 공간 안에 이동
Page 7: Re-Construct(Cont.)
추가적인 diffuse term을 저장
– LightColor.r * N.L * Att LightColor.g * N.L * Att LightColor.b * N.L * Att R.V^n * N.L * Att N.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: :Diffuse Light Buffer
:Specular Light Buffer
Page 9: 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: 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: Reference
http://diaryofagraphicsprogrammer.blogspot.com/2008/03/light-prepass-renderer.html http://www.gamedev.net/community/forums/topic.asp?topic_id=5222 34 http://www.gamedev.net/community/forums/topic.asp?topic_id=4871 54 http://blog.nextrevision.com/?p=49 http://drilian.com/category/development/graphics/light-pre-passrender/ http://www.flickr.com/photos/killerbunny/sets/72157604880714722/ http://game.sorenhannibal.com/
Page 12: Q&A
Page 13: