Shadow Mapping
오늘날의그림자 매핑은 2단계를 거쳐 렌더링한다.
6
Rendering
Shadow Map
Rendering
Scene
깊이 버퍼 그림자 매핑 https://www.slideshare.net/SukwooLee4/20181222-126893802
8.
Shadow Map
그림자맵은 깊이 버퍼를 이용해서 생성한다. (깊이 버퍼 그림자 버퍼)
이때 한 점의 광원 위치로부터 가장 가까운 객체 표면의 거리를 깊이 버퍼에 저장한다.
7
A
B
C
D
0.0
0.5
0.7
0.85
1.0
깊이 버퍼 그림자 매핑 https://www.slideshare.net/SukwooLee4/20181222-126893802
9.
Perspective Projection
LightSpace의 위치를 원근 투영하여 그림자 맵에 저장한다.
8
Perspective Projection
0.0
1.0
Spotlight Shadow, Point Light Shadow에 적용 가능
한 점의 광원에서 빛이 전방위로 방사한다고 가정
Light View Transformation
월드 공간의 위치를 (광원 기준) 시야 공간으로 변환
31
한가지 특이한 점은 World Center를 기준으로 뷰 매트릭스를 생성하였다.
이렇게 하는 이유는 Directional Light의 위치를 특정하기 어렵기 때문이다.
33.
Light View Transformation
월드 공간의 위치를 (광원 기준) 시야 공간으로 변환
32
Eye position
World Center
Directional light vector
Look at
Geometry Shader
46
지오메트리쉐이더 코드를 보면 하나의 삼각형에 대한 3개의 버텍스를 모든 쉐도우 맵에 출력
한다.
이는 해당 쉐도우 맵 위치에 없는 것도 출력한다는 것을 의미한다.
물론 하드웨어가 알아서 클리핑해주긴 하지만 굉장히 비효율적으로 보인다.
직접 코드를 작성하여 컬링할 수도 있는데 왜 이렇게 처리하는 것일까?
그 이유는 컬링 계산에 대한 비용이 만만치 않기 때문이다.
여기선 하드웨어가 클리핑하도록 냅두고 있지만 시간 남아도는 사람만 컬링 테스트 해보도록
하자.