Version: 5.3
그림자
Light troubleshooting and performance

Directional Light Shadows

A directional light typically simulates sunlight and a single light can illuminate the whole of a scene. This means that the shadow map will often cover a large portion of the scene at once and this makes the shadows susceptible to a problem called “perspective aliasing”. Simply put, perspective aliasing means that shadow map pixels seen close to the camera look enlarged and “chunky” compared to those farther away.

Shadows close to camera show perspective aliasing
Shadows close to camera show perspective aliasing

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

Shadow Cascades

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

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

Using a higher resolution for the whole map can reduce the effect of the “chunky” areas but this uses up more memory and bandwidth while rendering. You will notice from the diagram, though, that a large part of the shadow map is “wasted” at the near end of the frustum because it will never be seen; also shadow resolution far away from the camera is likely to be too high. It is possible to split the frustum area into two zones based on distance from the camera. The zone at the near end can use a separate shadow map at a reduced size (but with the same resolution) so that the number of pixels is evened out somewhat.

이런 섀도우 맵 크기의 단계적 감소를 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.

Shadow Cascades draw mode in the Scene view
Shadow Cascades draw mode in the Scene view
그림자
Light troubleshooting and performance