#review 그림자 생성 - 니시카와 젠지
간략한 shadow volume 소개와 여러 shadow mapping 알고리즘을 소개한 아티클이다. 프로그래머뿐만 아니라 게임에 관심이 있는 사람들도 읽을 수 있도록 쉽게 써서 그림자를 구현하기 전에 살짝 읽기에 좋은 글이다.
용어 정리가 조금 아쉽다. 어떤 말이고 하면 깊이 그림자 기법으로 PSM, LiSPSM 등을 소개하는데, PSM과 LiSPSM은 어떻게 shadow map texture를 그리는지에 대한 알고리즘이다. 사실 그림자 back-projection 신경 안 쓰고 셸프 섀도(self shadow)도 관심 없다면 depth map을 안 쓰고 이런 알고리즘대로 그림자 컬러 값을 그리고 지형에 매핑해도 된다. 하긴 요즘 shadow mapping이라 하면 저장한 깊이 값을 비교해서 그림자인지 아닌지 가리는 depth map test를 사용하는 걸로 고정되어 있어서 젠지씨보고 뭐라 하기도 그렇다. 사실 논문 자체 구현도 depth map을 사용하고 있다.
그냥 넘어가면 찝찝하니 한번 구분해보자. shadow mapping을 쪼개보면 두 가지로 나눌 수 있다. 어떻게 shadow map texture를 그릴 것인가? 어떻게 그림자인지 아닌지 구분할 것인가?
어떻게 shadow map texture를 그릴 것인가?
- SSM(Standard Shadow Mapping) or USM(Uniform Shadow Mapping)
- PSM(Perspective Shadow Maps)
- LiSPSM(Light Space Perspective Shadow Map)
- CSM(Cascaded Shadow Maps)
- PSSM(Parallel-Split Shadow Map)
- TSM(Trapezoidal Shadow Map)
- …
어떻게 그림자인지 아닌지 구분할 것인가?
- Projective texture mapping
- 구분이고 뭐고 없다. 그림자를 그린 텍스쳐를 그냥 입힌다.
- Depth texture를 사용한 depth map test
- 요즘 많이 쓰이는 방법. 그냥 shadow mapping이라고 하면 이 방법을 사용한다고 생각하면 된다.
- VSM(VSM:Variance Shadow Maps)
- 에이 어떻게 그림자가 내리는지 안 내리는지 확 0과 1로 판가름 하냐? 확률적으로 그림자인지 아닌지 결정. 그럴듯한 가짜 soft shadow 세계를 보여주지.
휴~ 많다 많어. 그냥 최고 킹왕짱이 나와서 그림자 나라 통일해줬으면 좋겠다. 물론 불가능하겠지만…
번역본
- 그림자 생성(1/10) ~ 3D그래픽스의 2개의 그림자의 존재
- 그림자 생성(2/10) ~ 투사 텍스처 매핑 기법
- 그림자 생성(3/10) ~ 스텐실 그림자 볼륨 기법(Stencil Shadow Volume)(1/2)
- 그림자 생성(4/10) ~ 스텐실 그림자 볼륨 기법(Stencil Shadow Volume)(2/2)
- 그림자 생성(5/10) ~ 깊이 그림자 기법(Shadow Mapping)
- 그림자 생성(6/10) ~ 개량형 깊이 그림자 기법(1/5) : PSM
- 그림자 생성(7/10) ~ 개량형 깊이 그림자 기법(2/5) : LiSPSM
- 그림자 생성(8/10) ~ 개량형 깊이 그림자 기법(3/5) (Cascaded LSPSM)
- 그림자 생성(9/10) ~ 개량형 깊이 그림자 기법(4/5)
- 그림자 생성(10/10) ~ 개량형 깊이 그림자 기법(5/5) (VSM)