Version: Unity 6.0 (6000.0)
언어 : 한국어
URP에서 그림자 렌더링 최적화
URP의 반사

URP의 그림자 문제 해결

URP(유니버설 렌더 파이프라인)의 그림자 렌더링 문제 해결 기법입니다.

URP에서 그림자 바이어스 설정을 조정

그림자 바이어스 값을 조정하면 섀도우 애크니, 그림자 분리(피터 패닝이라고도 함), 빛 번짐 효과, 셀프 섀도잉과 같은 그림자 결함을 줄이거나 제거할 수 있습니다.

URP에서는 URP 에셋과 개별 광원에서 그림자 바이어스를 설정할 수 있습니다.

URP 에셋에서 그림자 바이어스 설정은 Shadows 섹션에 있습니다. 여기서 설정한 값은 씬의 모든 광원에 대한 기본값입니다.

특정 광원에 대한 그림자 바이어스 값을 설정하는 법은 다음과 같습니다.

  1. Light 컴포넌트의 Shadows 섹션에서 Shadows TypeSoft Shadows 또는 Hard Shadows로 설정합니다.

  2. Bias 프로퍼티를 Custom으로 설정합니다. Unity에 DepthNormal 프로퍼티가 표시됩니다. 해당 프로퍼티들을 사용하여 현재 광원에 대한 그림자 바이어스 값을 설정합니다.

높은 그림자 바이어스 값을 사용하면 광원이 메시를 통한 빛 번짐 효과가 발생할 수 있습니다. 이는 그림자와 해당 그림자를 드리우는 오브젝트 사이에 눈에 보이는 간극이 있어 그림자 모양이 해당 그림자를 드리우는 오브젝트를 정확하게 나타내지 못하기 때문입니다.

URP에서 최대 광원 제한으로 인한 그림자 깜박임 방지

URP에는 카메라 절두체의 가시 광원의 개수에 대한 카메라당 제한이 있습니다. 예를 들어 모바일 플랫폼에서 이 제한은 메인 광원 1개와 추가 광원 32개입니다.

포워드 렌더링 경로에는 오브젝트당 광원 제한도 있습니다.

가시 광원 개수가 제한을 초과하면 Unity는 일부 광원을 비활성화합니다. 실시간 그림자를 드리우는 광원이 비활성화되어 그림자 깜박임이 발생할 수도 있습니다.

이 문제를 방지하려면 카메라 절두체의 가시 광원 개수가 제한을 초과하지 않게 해야 합니다. RenderingData.cullResults API의 cullResults.visibleLights 배열을 사용하여 가시 광원 개수를 파악할 수 있습니다.

다음 예시에서는 cullresults.visibleLights 배열을 사용하는 법을 보여줍니다.

public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
    int visibleLightCount = renderingData.cullResults.visibleLights.Length;
}
URP에서 그림자 렌더링 최적화
URP의 반사