8. Circle Shadow
u 캐릭터의 발 밑 부분에 원형의 그림자 텍스처를 입힌다.
u 모든 캐릭터가 원형의 그림자를 갖게 되어 리얼리티가 떨어진다.
u 울퉁불퉁한 지형에서 사용할 수 없고 오직 평지에서만 사용이 가능하다.
u 광원이 하나여도 그림자가 겹친 부분이 더 어두워지는 현상이 발생한다.
10. Projected Shadow Mapping
u 그림자는 광원의 위치에 따라 빛의 방향이 다르고 이에 따라 바닥에 투영시켜야
한다. 이를 Projected Shadow Mapping이라 한다.
u 광원에서 본 오브젝트의 실루엣을 그림자 텍스쳐에 저장한다.
u 광원 방향으로 투영하듯 텍스처를 매핑한다.
13. 깊이버퍼 그림자 매핑
Depth Buffer Shadow Mapping
u GPU 성능이 점점 좋아져 픽셀 계산 능력이 올라가면서 Depth Buffer Shadow
Mapping이 사용되기 시작했다.
u 이 방법은 광원을 기준으로 그림자를 생성할 지 판단한다.
14. 그림자는 어디에 생성되어야 할까?
u 빛은 직진성을 가지기 때문에 통과하지 못하는 곳은 그림자가 생긴다.
A
B
C
D
(a) (b) (c) (d) (f) (e)
15. 그림자 생성 여부의 판단
u 광원으로부터 가장 가까운 객체까지의 거리를 저장하여 현재 객체가 멀면 그림자
를 생성하면 된다.
A
B
C
D
0.0
0.5
0.7
0.85
1.0
16. 비슷한 컨셉의 Z버퍼링
u 위의 방법은 Z버퍼링과 유사하다.
u Z버퍼링은 카메라로부터 객체까지의 거리를 깊이버퍼
에 픽셀단위로 저장하여 거리 비교를 통해 카메라에 가
장 가까운 객체를 보여주는 방법이다.
17. 깊이버퍼 그림자 매핑의 모티브
u 카메라가 아닌 광원 기준으로 가장 가까운 객체의 거리값을 텍스처에 저장한다면….
u 텍스처를 이용하여 그림자의 생성 여부를 판단할 수 있다.
u 여기서 광원에서 가장가까운 객체까지의 거리값을 저장한 2차원 텍스처를 그림자맵
(Shadow Map)이라 한다.
18. 그림자 맵
u 그림자 맵에 저장된 데이터는 광원기준으로 원근 투영된 후 ndc 공간으로 변환
된 z 값이다. 따라서 0과 1 사이 값으로 저장된다.
u 그림자 맵을 가시화하면 아래와 같이 회색조의 이미지를 볼 수 있다.
19. 그림자 매핑의 과정
u 그림자맵 생성
① 그림자맵을 저장할 렌더타겟으로 한다.
② 카메라를 광원의 위치에 두고 물체들을 그린다.
③ 픽셀셰이더에서 빛으로부터 현재 픽셀까지의 깊이를 반환한다.
u 그림자 적용
① 렌더타겟을 백버퍼로 설정한다.
② 카메라를 기준으로 물체들을 그린다.
③ 빛으로부터 현재 픽셀까지의 깊이를 그림자맵에 담겨 있는 결과와 비교한다. 현재
깊이가 그림자맵의 깊이보다 크면 그림자를 씌운다.
26. 그림자맵 만들기 쉐이더 구현
u 여기서는 정점만 있으면 거리 계산이 가능하므로 정점만 입력으로 받아온다.
27. 그림자맵 만들기 쉐이더 구현
u 버텍스쉐이더에서는 클립 공간으로 변환한 후 정점을 반환한다.
28. 그림자맵 만들기 쉐이더 구현
u 픽셀쉐이더는 클립 공간 위치의 z 성분을 변환하면 될거 같지만 그전에 w로 나
눈 값을 반환해야 한다.
u 위치벡터에 원근투영행렬을 곱하면 w 성분은 1이 아니다. 동차좌표를 화면상
좌표로 사용하려면 w값으로 좌표로 나누어 줘야 한다. (x/w, y/w, z/w, 1)
36. 깊이 버퍼 그림자 매핑의 장점
u 비교적 저렴한 비용으로 그럴듯한 그림자 효과를 얻을 수 있다.
u 이전에는 까다로웠던 셀프 쉐도우나 다른 객체에 대한 그림자를 쉽게 구현할 수 있다.
u Circle Shadow에서 발생했던 그림자 겹침 현상이 발생하지 않는다.
37. 깊이 버퍼 그림자 매핑의 단점(1)
u 픽셀 단위의 구현으로 인해 그림자 맵의 해상도가 낮으면 그만큼 그림자의 세밀
함이 떨어지게 된다.
38. 깊이 버퍼 그림자 매핑의 단점(2)
u 아무리 해상도가 좋아도 광원 절두체와 시야 절두체가 서로 포함하는 영역이 적을수록
그림자의 품질 저하는 피할 수 없다.
u 객체 D는 카메라에는 가까이 있지만 광원에는 멀리 있다. 따라서 광원 기준으로 투영
된 깊이 버퍼에서 작은 영역에 포함되어 있을 것이다. 그러나
A
B
C
D
39. 깊이 버퍼 그림자 매핑의 단점(3)
u 실제 그림자는 안쪽이 가장 어둡지만 모서리 부분으로 갈수록 흐려지는 특징이
있다. 이를 소프트 쉐도우라 하는데 깊이 버퍼 그림자 매핑은 이런 정교한 구현
이 불가능하다.
40. 깊이 버퍼 그림자 매핑의 단점(4)
u 하드 쉐도우라는 것은 양날의 검이기도 한데 장점은 그림자 겹침 현상이 없다는 것이다.
이는 광원이 하나 일 경우 유효한 물리적 현상이다.
u 반면 광원이 다수일 경우 그림자 또한 다수가 존재하는 데 이때에는 그림자 겹침 현상
이 발생하는 것이 물리적으로 옳지만 구현이 불가능 하다.
u 또한 광원이 다수이면 이에 대응하는 깊이 버퍼도 다수여야 하므로 자원 소모가 커진다.
41. 그림자의 계단 현상을 보완한 기술들
u 케스케이드 그림자 매핑 : 여러 개의 그림자맵을 생성하여 카메라에 가까운 객
체들은 고해상도 그림자맵을 사용하고 멀리 떨어진 객체들은 저해상도 그림자
맵을 사용하는 방법.
u 퍼센티지 클로저 필터링 : 그림자의 외곽선을 부드럽게 필터링 해주기 위해 사
용하는 기법.
u 배리언스 그림자 매핑: 하드웨어 텍스처 필터링이 가능하도록 깊이 값을 저장하
는 방법.
u 향후 발표 예정…