Light Pre-Pass

2,305 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,305
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
18
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Light Pre-Pass

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

×