Version: 2020.2
언어: 한국어
그림자 거리
그림자 문제 해결

섀도우 캐스케이드

섀도우 캐스케이드를 사용하면 원근 앨리어싱, 즉 방향 광원의 실시간 그림자가 카메라와 가까이 있을 때 픽셀화되어 보이는 문제를 해결할 수 있습니다.

섀도우 캐스케이드는 방향 광원에서만 작동합니다.

원근 앨리어싱

방향 광원은 일반적으로 햇빛을 시뮬레이션하고, 방향 광원 하나로 씬 전체를 비출 수 있습니다. 따라서 섀도우 맵이 씬의 커다란 부분을 덮고, 이로 인해 섀도우가 원근 앨리어싱이라는 문제가 발생합니다. 원근 앨리어싱은 카메라에 가까이 보이는 섀도우 맵 픽셀이 카메라에서 더 멀리 있는 픽셀에 비해 더 비대하고 덩어리져 보임을 의미합니다.

먼 거리에 있는 섀도우(A)는 해상도가 적절한 반면, 카메라에 가까이 있는 섀도우(B)는 원근 앨리어싱을 나타냅니다.
먼 거리에 있는 섀도우(A)는 해상도가 적절한 반면, 카메라에 가까이 있는 섀도우(B)는 원근 앨리어싱을 나타냅니다.

원근 앨리어싱이 발생하는 이유는 섀도우 맵의 여러 다른 영역이 카메라의 원근에 따라 불균형하게 스케일되기 때문입니다. 광원의 섀도우 맵은 씬에서 카메라에 보이는 부분만 덮으면 됩니다. 이 부분은 카메라의 뷰 절두체에 따라 정의됩니다. 방향 광원이 위에서 바로 내려오는 간단한 경우를 상상해보면 절두체와 섀도우 맵의 관계를 알 수 있습니다.

이 간단한 예제에서 절두체의 먼 쪽은 섀도우 맵 픽셀 20개로 덮이지만, 가까운 쪽은 픽셀 4개로만 덮입니다. 하지만 양쪽 모두 화면상에는 같은 크기로 나타납니다. 그 결과 맵의 해상도는 카메라에 가까운 섀도우 영역에서 사실상 훨씬 더 낮습니다.

섀도우 캐스케이드의 작동 방식

원근 앨리어싱은 소프트 섀도우를 사용하거나, 섀도우 맵에 더 높은 해상도를 사용하면 눈에 덜 띕니다. 하지만 이러한 솔루션은 렌더링하는 동안 더 많은 메모리와 대역폭을 사용합니다.

섀도우 캐스케이드를 사용하면 Unity는 카메라에서 떨어진 거리에 따라 절두체 영역을 두 개의 존으로 분할합니다. 가까운 쪽 끝에 있는 존은 축소된 크기의 별도 섀도우 맵을 사용합니다(해상도는 동일함). 이러한 섀도우 맵 크기의 단계적 감소를 캐스케이디드 섀도우 맵이라고 부릅니다(때때로 평행 분할 섀도우 맵이라고도 불림).

섀도우 캐스케이드 사용

프로젝트에서 섀도우 캐스케이드를 설정하는 경우 0개, 2개 또는 5개의 캐스케이드를 사용할 수 있습니다. Unity는 카메라의 절두체 내에서 캐스케이드의 위치 지정을 계산합니다.

캐스케이드를 많이 사용할수록 섀도우가 원근 앨리어싱의 영향을 덜 받습니다. 개수가 증가하면 렌더링 오버헤드가 증가합니다. 하지만 이 리소스 사용량은 전체 섀도우에 고해상도 맵을 사용하는 경우보다 여전히 적습니다.

캐스케이드를 4개 사용한 이전 예의 섀도우
캐스케이드를 4개 사용한 이전 예의 섀도우

빌트인 렌더 파이프라인의 경우 프로젝트의 품질 설정에서 품질 수준 프로퍼티별로 섀도우 캐스케이드를 설정하십시오.

유니버설 렌더 파이프라인(URP)의 경우 유니버설 렌더 파이프라인 에셋에서 섀도우 캐스케이드를 설정하십시오.

고해상도 렌더 파이프라인(HDRP)의 경우 볼륨별로 섀도우 캐스케이드를 설정하십시오.

그림자 거리
그림자 문제 해결