Shadow mapping 정리

3,594 views

Published on

kasastudy 발표자료.

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

No Downloads
Views
Total views
3,594
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
29
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Shadow mapping 정리

  1. 1. Shadow Mapping Shadow Mapping을 정리해보자… 작성 : 이창희 (cagetu79@gmail.com)
  2. 2. 개요 <ul><li>전통적인 shadow map </li></ul><ul><ul><li>Light 의 view point 에서 장면을 texture 에 rendering 한다 . </li></ul></ul><ul><ul><li>Eye 의 view point 에서 장면을 랜더링한다 . </li></ul></ul><ul><ul><ul><li>모든 물체들은 shadow map 안으로 투영되어 있다 . </li></ul></ul></ul><ul><ul><ul><li>Depth>Depth(shadow) 라면 , 오브젝트는 그림자 안에 있다 . </li></ul></ul></ul><ul><li>문제점 : aliasing 문제 </li></ul>
  3. 3. Aliasing을 해결해보자 <ul><li>Increase shadow map resolution </li></ul><ul><li>Unit cube clipping </li></ul><ul><li>Cascaded Shadow Maps (????) </li></ul><ul><li>Perspective Shadow Maps (Stamminger, 2002) </li></ul><ul><li>Light-Space PSMs (Wimmer, 2004) </li></ul><ul><li>Trapezoidal Shadow Maps (Martin, 2004) </li></ul><ul><li>Parallel-Split Shadow Maps </li></ul><ul><li>Variance Shadow Maps </li></ul>
  4. 4. Unit Cube Clipping <ul><li>화면에 보이는 객체들에만 shadow map 으로 초점을 맞춘다 . – 오직 보이는 receiver 들만 shadow map 에 투영한다 . </li></ul><ul><li>For large light sources / scenes, this may be a small percentage of the total scene </li></ul><ul><li>Shadow aliasing will depend on the viewer, but quality improvement can be substantial </li></ul><ul><ul><li>Quality is always at least as good as not clipping </li></ul></ul>
  5. 5. Unit Cube Clipping <ul><li>각 라이트에 대해 , 보이는 오브젝트들은 라이트로부터 그림자가 드리워질지를 결정한다 . </li></ul><ul><li>이 오브젝트들에 의해 사용될 그림자 맵 영역을 최소화하는 light projection matrix 를 구한다 . </li></ul><ul><ul><li>변경되지 않은 lightProj 에 의해 receiver 들의 AABB 를 변환한다 . </li></ul></ul><ul><ul><li>전체 bounding 영역으로 AABB 들을 병합한다 . </li></ul></ul><ul><ul><li>전체 shadow map 을 감싸기 위한 AABB 만들기 위해 bias & scale 로 ortho 변환을 계산한다 . (Compute ortho transform to bias & scale resulting AABB to cover the entire shadow map) </li></ul></ul><ul><ul><li>lightProj’ = ortho * lightProj; </li></ul></ul>
  6. 6. Shadow Caster/Receiver <ul><li>알맞은 shadow map 을 만들기 위해선 , 적절하게 shadow caster 와 receiver 를 나누어서 , shadow map 을 만드는 영역을 최소화 해야 한다 . </li></ul><ul><ul><li>일반 view frustum 을 이용해서 , 화면에 그려질 녀석과 아닌 녀석을 일차적으로 나눈다 . </li></ul></ul><ul><ul><li>View frustum 내에 있는 객체의 경우에는 , caster 와 receiver 가 모두 된다 . </li></ul></ul><ul><ul><li>View frustum 외부에 있다면 , 그림자가 화면 안으로 드리워지는지를 판별하여 , caster 로 구분한다 . </li></ul></ul><ul><li>장면 그래프를 사용할 때에는 , 상위 노드가 하위 노드의 컬링을 담당하게 되므로 , 상위 노드가 하위 노드를 컬링하게 되더라도 , caster/receiver 를 산출하기 위해서는 추가적인 하위 노드 ( 객체 ) 들에 대해 , 장면 순회를 적용해야 한다 . </li></ul>
  7. 7. Perspective Shadow Maps <ul><li>PSM 은 표준적인 그림자 맵과 매우 비슷하나 , 카메라에 가까운 영역들이 멀리 있는 영역보다 더 큰 해상도를 가지도록 왜곡된다는 점이 다르다 . </li></ul><ul><li>표준 그림자맵은 광원의 시점에서 장면을 랜더링한다 . 하지만 , PSM 은 원근 이후 광원을 이용해서 , 원근 이후 공간 (Post-Perspective Space) 에서 그림자맵을 만든다 . 먼저 , 장면과 광원을 원근 이후 공간으로 변환하고 , 원근 이후 공간의 장면을 랜더링한다 . </li></ul><ul><ul><li>원근 투영 이후의 view 공간으로 화면을 변환한다 . </li></ul></ul><ul><ul><li>Light 에 대한 투영 변환을 계산한다 . </li></ul></ul><ul><ul><ul><li>원근 투영 이후의 공간 안에 라이트 위치로 부터 </li></ul></ul></ul><ul><ul><li>장면에 라이트 투영 변환을 적용한다 . </li></ul></ul><ul><ul><li>개념은 단순하지만 , 실제로는 쉽지 않다 . </li></ul></ul><ul><ul><ul><li>원근 투영 이후 공간은 문제점이 꽤 많다 . </li></ul></ul></ul><ul><ul><ul><li>가까운 오브젝트들에 대해 많은 shadow texel 들을 소비한다 . </li></ul></ul></ul>
  8. 8. Perspective Shadow Maps <ul><li>원근이후공간에서의광원 </li></ul><ul><ul><li>시선방향과수직인평행광원은원근이후공간에서 xy 평면과평행을유지한다 . </li></ul></ul><ul><ul><li>관찰자를향한평행광원은원근이후공간에서무한평면상의점광원이된다 . </li></ul></ul><ul><ul><li>관찰자뒤에서장면을비추는평행광원의경우 , 원래의평행광원이뿜어낸광선들은 원근이후공간에서한점 ( 소실점 ) 으로수렴된다 . 이는빛이무한평면상의한점에서 장면으로도달한다는뜻이아니라무한평면에있는빛싱크 (sink) 에도달한다는뜻이다 . </li></ul></ul><ul><ul><li>원근이후광원의위치 P 일때 , </li></ul></ul><ul><ul><ul><li>Pw = 0 이면 , 1 의경우 , </li></ul></ul></ul><ul><ul><ul><li>Pw > 0 이면 , 2 의경우 , </li></ul></ul></ul><ul><ul><ul><li>Pw < 0 이면 , 3 의경우 </li></ul></ul></ul>
  9. 9. Perspective Shadow Maps <ul><li>문제점 </li></ul><ul><ul><li>PSM 은 관찰자의 시야 절두체의 Near 평면이 너무 가까이 있지 않은 경우에만 좋은 결과를 나타냄 </li></ul></ul><ul><ul><ul><li>가까운 평면을 최대한 밀어낸다 . Or </li></ul></ul></ul><ul><ul><ul><li>시야 절두체를 확장한다 . 관찰자를 가상으로 뒤로 옮기고 가까운 평면과 먼 평면을 그만큼 옮긴다 . </li></ul></ul></ul><ul><ul><li>시야 절두체 전체를 그림자 맵이 덮는다면 , 공간 낭비가 심하다 . </li></ul></ul><ul><ul><ul><li>시야 절두체와 장면의 경계상자와의 교집합에 대한 그림자 맵을 생성한다면 , 원근 이후 공간에서 광원이 비추는 빛 절두체를 최대한 맞추도록 한다 . </li></ul></ul></ul>
  10. 10. Light Space Perspective Shadow Maps <ul><li>라이트 공간 (light Space) 에서 원근 투영 매핑을 사용한다 . </li></ul><ul><ul><li>모든 라이트를 directional light 처럼 취급하고 , 라이트의 방향을 바꾸지 않는 것에 관련된 문제점이 원근 투영 매핑은 가지지 않는 이점이 있다 . 따라서 , PSM 의 모든 문제점을 피할 수 있다 . </li></ul></ul><ul><ul><li>Perpective mapping 을 사용하기 때문에 , PSM 의 장점인 가까운 물체가 큰 해상도를 가진다 . </li></ul></ul><ul><li>개요 </li></ul><ul><ul><li>PSM 은 view 변환에 의해 주어진 원근 투영 변화에 따라 shadow map 을 감싸도록 하여 그림자의 질을 향상시킨다 . </li></ul></ul><ul><ul><li>원근 투영 변환들은 shadow map 을 감싸기 위한 유효한 작업이지만 , PSM 에서처럼 view frustum 과 연관될 필요가 없다 . 사실 어떤 독단적인 원근 투영 변환이 사용되었다 (?) </li></ul></ul><ul><ul><li>원근 투영 변환의 주된 목적은 shadow map pixel 들의 분포를 변화하는 것이기 때문에 , shadow map 평면에 대부분 영향을 주도록 감싸져야 하고 , shadow map 과 이 축이 수직이면 안된다 . </li></ul></ul><ul><ul><li>위의 점들은 light space 의 좌표축들에 관하여 명시된 원근 투영 변환을 만들어 낸다 . 이 변환은 PSM 과 대조적으로 , view plane 과 light vector 가 평행하기 때문에 , light source 들의 방향이 변하기 않고 , 이상 현상이 생기지 않는다 (has no relevant singularities) . 이 결과 PSM 에서 발견된 많은 문제점을 피할 수 있는 직관적인 변환을 만들 수 있다 . </li></ul></ul>
  11. 11. Light Space Perspective Shadow Maps <ul><li>그림자 계산에 적합한 Caster 들의 적합한 Convex Body 를 만든다 . </li></ul><ul><li>Light space 에서의 원근 투영된 절두체 (Perspective frustum) 를 만든다 . </li></ul><ul><ul><li>Y 축은 라이트 벡터 l 에 의해 정의된다 . (but pointing towards the light) </li></ul></ul><ul><ul><ul><li>Point 라이트의 경우 , spot direction 벡터가 light vector 처럼 사용된다 . </li></ul></ul></ul><ul><ul><ul><li>Spot 라이트들은 일반적으로 shadow map 에서 사용되지 않는다 . </li></ul></ul></ul><ul><ul><li>Z 축은 관찰자 view vector v 와 light vector 를 포함한 평면에 놓이기 위해 light vectror 에 수직이 되도록 정의한다 . </li></ul></ul><ul><ul><li>X 축은 직교 좌표 시스템 형태를 하기 위해서 다른 두 좌표로 보충한다 . </li></ul></ul><ul><ul><li>xz 평면은 shodow-map 평면에 평행하고 , Z 축은 eye 좌표 시스템의 깊이 좌표에  거의 일치한다 . </li></ul></ul><ul><ul><li>왼손 라이트 공간 좌표계에서 , Z 축은 view Vector 와 같이 동일한 방향을 가진다 , 오른손 좌표계에서는 Z 축은 반대로 만들어준다 .  </li></ul></ul><ul><ul><li>원근 변환된 프러스텀  Pf 에 대해서 , near 와 far 평면들은 xy- 좌표 평면에 평행한 평면들로 정의되고 , body B 의 위치들 사이의  최소와 최대의 light-space z- 좌표에 놓인다 . </li></ul></ul><ul><ul><li>Pf 에 대해 proection reference point p 의 x, y 좌표는 결과 프러스텀이  거의 좌우 대칭이 되도록 조절해야 한다 . x 좌표는 변환된 viewpoint 로부터 , y 좌표는 body 의 최소와 최대의 y 좌표의 중간값을 사용한다 . </li></ul></ul>
  12. 12. Light Space Perspective Shadow Maps <ul><li>Construction of the perspective frustum P in 3D. </li></ul>
  13. 13. Light Space Perspective Shadow Maps <ul><li>Choosing the free parameter n </li></ul><ul><ul><li>Pf 에 대해 남아있는 near 평면에서 projection reference p 의 거리 n - free parameter 은 어떻게 shadow map 을 정확하게 감쌀 것인지가 영향을 준다 . </li></ul></ul><ul><ul><li>- 만약 Pf 의 near 평면을 선택한다면 , 원근 왜곡이 심해질 것이다 . 그리고 , 그 효과는 오리지날 shadow map 과 거의 유사하다 . </li></ul></ul><ul><ul><li>- 만약 Pf 의 far 평면에서 너무 멀게 선택한다면 ,  원근 효과는 매우 낮아질 것이고 , 이는 uniform shadow maps 과 유사하게 나타난다 . </li></ul></ul><ul><ul><li>라이트 벡터에 수직인 뷰 방향의 경우 , 이 파라미터에 대한 최적의 선택은  Zn 과 Zf 가 eye view frustum 의 near, far 평면일 때 , Nopt = Zn + Sqrt(Zf*Zn) 이다 . </li></ul></ul><ul><ul><li>또 , viewr 가 light 혹은 그 쪽으로 기울어져 있을 때 , n 은 증가하게 된다 . 그래서 , viewer 가 light 쪽으로 정확하게 바라보게 되거나 그 쪽으로 기울어졌을 때 무한대에 도달하게 된다 . 이 때 , uniform shadow map 과 동일한 결과를 나타나게 된다 . </li></ul></ul><ul><ul><li>   결론적으로 , frustum 평면들은  Pf 의 near 평면 위에 body B 의 모든 포인트들이 투영될 것이고 , near 평면의 x, y 축에 따라 최대와 최소 값들이 기록될 것이다 . </li></ul></ul><ul><li>적용은 standard shadow map 과 마찬가지로 , light view projection matrix 를 구하여 , Target Texture 에 랜더링하여 Shadow map 을 생성하고 , 이 변환 행렬에 Texture 매트릭스를 곱해서 , shadow map 을 랜더링하기 위해 , 텍스쳐 좌표를 생성하여 적용한다 . </li></ul>
  14. 14. 적용?! <ul><li>Key </li></ul><ul><ul><li>Shadow map 은 라이트 마다 한 번의 추가적은 랜더링 패스를 통해서 , shadow map 을 생성해낸다 . </li></ul></ul>
  15. 15. 질문
  16. 16. 참고자료 <ul><li>http://www- gs.informatik.tu-cottbus.de/~wwwgs/Shadow_Mapping.pdf </li></ul><ul><li>http:// www.comp.nus.edu.sg/~tants/tsm.html </li></ul><ul><li>http://www.cg.tuwien.ac.at/research/vr/lispsm/ </li></ul><ul><li>http://hax.fi/asko/PSSM.html </li></ul><ul><li>http://developer.nvidia.com/object/variance-shadow-maps-gdc-2006.html </li></ul>

×