섀도우(Shadows)
전역 조명

방향 광원 섀도우

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

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

원근 앨리어싱은 섀도우 맵에 부드러운 섀도우와 높은 해상도를 사용하는 경우 눈에 덜 띱니다. 하지만 이런 기능을 사용하면 그래픽스 하드웨어 리소스가 더 많이 요구되므로 프레임 속도가 낮아질 수 있습니다.

섀도우 캐스케이드

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

절두체의 먼 쪽은 섀도우 맵 픽셀 20개로 덮이지만, 가까운 쪽은 픽셀 4개로만 덮입니다. 하지만 양쪽 모두 화면상에는 같은 크기 로 나타납니다. 그 결과 맵의 해상도는 카메라에 가까운 섀도우 영역에서 사실상 훨씬 더 낮습니다(실제로는 해상도가 20x20보다 훨씬 높고 맵은 일반적으로 카메라에 완벽하게 맞지 않습니다).

전체 맵에 더 높은 해상도를 사용하면 덩어리진 영역의 영향을 줄일 수 있지만, 그러면 렌더링 중에 더 많은 메모리와 대역폭이 사용됩니다. 하지만 다이어그램에서 보면 섀도우 맵의 큰 부분이 절두체의 끝자락에서 보이지 않기 때문에 낭비되고 있습니다. 또한 카메라에서 멀리 떨어진 섀도우의 해상도가 너무 높을 가능성이 큽니다. 절두체 영역을 카메라에서 떨어진 거리에 따라 두 개의 존으로 나눌 수 있습니다. 끝자락의 존에는 픽셀 수가 어느 정도 균등해지도록 크기가 더 작은 (하지만 해상도는 같은)별도의 섀도우 맵을 사용할 수 있습니다.

이런 섀도우 맵 크기의 단계적 감소를 cascaded shadow maps이라고 하며, 때로는 “Parallel Split Shadow Maps”라고도 합니다. 품질 설정에서 주어진 품질 레벨에 대해 캐스케이드를 0개, 2개 또는 4개 설정할 수 있습니다.

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

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

Note: on mobile platforms, shadow cascades are not available for directional lights.

섀도우 거리(Shadow distance)

오브젝트의 섀도우는 오브젝트가 카메라에서 멀수록 눈에 덜 띄는 경향이 있습니다. 이런 섀도우는 화면에서 더 작아 보이고, 멀리 있는 오브젝트에는 일반적으로 주의가 집중되지 않습니다. Unity에서는 품질 설정Shadow Distance 프로퍼티를 사용하여 이 효과를 이용할 수 있습니다. 카메라에서 이 거리보다 멀리 떨어져 있는 오브젝트는 섀도우가 전혀 없지만, 이 거리에 근접하는 오브젝트의 섀도우는 점차적으로 페이드 아웃됩니다.

Setting the shadow distance as low as possible will help improve rendering performance since distant objects will not need to be rendered into the shadow map at all. Additionally, the scene will often actually look better with distant shadows removed. Getting the shadow distance right is especially important for performance on mobile platforms since they don’t support shadow cascades.

Visualising shadow parameter adjustments

The Scene View has a draw mode called Shadow Cascades that uses coloration to show the parts of the scene using the different cascade levels. You can use this to help you get the shadow distance, cascade count and cascade split ratios just right.

씬 뷰의 섀도우 캐스케이드 드로우 모드
씬 뷰의 섀도우 캐스케이드 드로우 모드
섀도우(Shadows)
전역 조명