[ShaderX5] 4.4 Edge Masking and Per-Texel Depth Extent Propagation For Computation Culling During Shadow Mapping.
1. Edge Masking and Per-Texel Depth
Extent Propagation
For Computation Culling
During Shadow Mapping
ohyecloudy(http://dodoubt.tistory.com)
shader study(http://cafe.naver.com/shader.cafe)
2. 개요
어떻게 하면 그림자 aliasing을 줄일 수
있을까?
어떻게 하면 shadow map을 잘 만들까 (X)
shadow map 후처리를 할 수 있는 영역을 어떻게 하면
잘 찾을 수 있을까 (O)
3. 그림자 경계 영역 :
anti-aliasing을 위해 더 많은 texture fetch와 processing이
필요한 부분
4. 계산이 더 필요한 그림자 경계 영역을 구
하는 두 가지 방법 소개.
이렇게 구한 영역만 anti-aliasing을 줄
이기 위한 복잡한 연산을 한다.
SM 3.0 필요
loop, dynamic flow control 등 제대로 된 flow-control을
사용할 수 있다.
6. Computation Masking and Edge
Dilation Using Mipchain Generation
Depth-Extent Propagation for
Computation Masking
7. graphics hardware에 최적화된 간단한
방법.
edge mask로부터 mipchain을 생성한
다.
shadow mask의 효과적인 근사 확장
8 pixel로 확장하고 싶다면 miplevel을 3.
8. edge pixel 과 nonedge pixel 을 구분
할 threshold 필요.
highest-resolution miplevel 의 edge filter 결과 값.
bilinear filtering을 사용
2x2 box filtering을 사용하면 mip level이 올라갈수록 모
든 방향으로 확장되는게 아니라 한쪽으로 확장되는 경우
가 발생.
9. Computation Masking and Edge
Dilation Using Mipchain Generation
mipchain을 생성하고 확장하려는 edge 픽셀에 맞게
miplevel을 설정한다.
Depth-Extent Propagation for
Computation Masking
10. depth extent map
확장된 edge mask 대신에 light로부터 min, max 거리
사용.
edge-filtered shadow map 사용
11. shadow map 텍스쳐 좌표가 주어 졌을때(확장된 edge 영역),
z 좌표가 min, max 사이일 때만 복잡한 연산 수행.
edge
9 점에서 min, max 값을 뽑아서 저장
edge가 아니므로 min = 1, max = 0 으로 저장
15. Computation Masking and Edge
Dilation Using Mipchain Generation
mipchain을 생성하고 확장하려는 edge 픽셀에 맞게
miplevel을 설정한다.
Depth-Extent Propagation for
Computation Masking
3x3의 min, max depth값을 기록해 depth extent map
을 만들고 projection된 shadow map 텍스쳐 z좌표와
비교해 min, max 범위 안이면 복잡한 연산을 한다.
16. 결론
최대 3배까지 성능 향상.
edge map, mipmap 을 생성하더라도 부분적으로만 많
은 tap의 PCF를 거는 게 싸다는 결롞
Image-processing 연산.
standard shadow mapping 알고리즘을 사용.
추가적인 geometry 정보가 필요 없다.