Unity 검색

Unity 2021 LTS의 유니버설 렌더 파이프라인 알아보기

2022년 11월 15일 엔진 & 플랫폼 | 25 분 소요
Shedding some light on the Universal Render Pipeline for Unity 2021 LTS | Hero image
Shedding some light on the Universal Render Pipeline for Unity 2021 LTS | Hero image
공유

Is this article helpful for you?

Thank you for your feedback!

조명을 전문적으로 구현하려면 씬에 어울리는 분위기와 타겟 플랫폼의 성능 및 기술적 한계 사이에서 적절한 균형을 찾아야 합니다. 이번 포스팅에서는 스티븐 카나반이 Unity 2021 LTS에서 유니버설 렌더 파이프라인(URP)을 사용할 때의 조명 팁을 소개합니다.

E-book | Introduction to the Universal Render Pipeline for advanced Unity creators

스티븐은 게임 개발 업계에 15년째 몸담은 베테랑이자 Accelerate Solutions – Games 팀의 시니어 디벨롭먼트 컨설턴트이며, Unity의 스크립터블 렌더 파이프라인(SRP) 전문가입니다. 또한 그는 최근 출간된 Unity 고급 사용자를 위한 유니버설 렌더 파이프라인 전자책에 주요 기고자로서 참여하기도 했습니다. 해당 전자책은 여기(한국어)에서 확인할 수 있습니다. 여기서 소개할 팁을 비롯하여 더 많은 내용을 알아보려면 가이드 전문을 확인해 보세요.

URP 조명 설정

주요 설정부터 살펴보겠습니다. 먼저 URP의 전역 조명 설정 대부분은 유니버설 렌더 파이프라인 에셋이나 URP 에셋에서 확인할 수 있습니다.

설정을 확인하려면 프로젝트(Project) 창에서 Universal Render Pipeline Asset을 선택하고 인스펙터(Inspector)를 여세요. 특정 렌더러의 설정을 조정하려면 프로젝트 창에서 렌더러 에셋(예: URP Universal Renderer)을 선택한 다음 인스펙터에서 해당 렌더러의 설정을 조정하세요.

광원 레이어 이름을 변경하려는 경우에는 Edit 메뉴를 열어서 Project Settings > Graphics > URP Global Settings를 선택하면 됩니다. 설정을 변경하려면 Lighting 창으로 이동하세요(Window > Rendering > Lighting).

URP 에셋

URP 에셋은 조명에 영향을 미치는 여러 설정을 포함합니다. 이러한 설정은 LightingShadows 섹션에 해당하지만, 인스펙터Rendering, Quality, Post-processing 섹션에도 일부 설정이 있습니다.

Settings available under the Quality section of the URP Asset
URP 에셋의 Quality 섹션에서 사용 가능한 설정

Dynamic Range

Dynamic Range 프로퍼티는 Unity의 명도 저장 방식을 결정합니다. 톤 매핑과 포스트 프로세싱 효과에 이 명도 데이터를 활용하여 사실적인 효과를 구현할 수 있습니다.

HDR(High Dynamic Range)을 활성화하려면 인스펙터에서 URP 에셋을 열고 Quality 설정을 펼친 다음 HDR 프로퍼티를 활성화하세요. HDR이 비활성화 상태인 경우 URP는 LDR(Low Dynamic Range)을 기본으로 사용합니다. 대부분의 경우에는 최적의 품질을 유지할 수 있도록 HDR을 활성화해 두세요.

HDR을 비활성화하면 조명 결과 및 기타 효과가 0.0에서 1.0의 명도 범위로 제한됩니다. LDR을 통해 성능과 대역폭을 향상할 수도 있지만 그만큼 화질이 저하됩니다.

HDR을 활성화하면 URP가 1.0이 넘는 값을 지원하는 임시 텍스처를 렌더링합니다. 이렇게 높은 명도와 포스트 프로세싱 효과를 결합하면 더욱 사실적인 비주얼을 구현하거나 카메라 효과를 시뮬레이션할 수 있습니다. 렌더링 프로세스의 마지막 단계에서 URP는 포스트 프로세싱 과정 또는 최종 블릿 중에 HDR 콘텐츠를 LDR 포맷으로 변환합니다. 또한 URP에서는 포스트 프로세싱 중에 톤 매핑을 적용할 수 있습니다.

LDR로 전환해야 하는 이유는 일부 플랫폼에서 HDR 출력을 지원하지 않을 수 있기 때문입니다. 예를 들어 URP는 HDR 콘텐츠를 표시할 수 있는 플랫폼에서 HDR 출력을 지원하지 않습니다.

참고: PC 및 콘솔의 HDR 디스플레이에 대한 지원은 Unity 2022 LTS용 URP에서 제공될 예정입니다.

A scene in HDR to the left and in LDR to the right
HDR을 적용한 씬(좌), LDR을 적용한 씬(우)

각 프로젝트의 아트 스타일과 성능 고려 사항에 따라 가장 적합한 Dynamic Range 옵션이 달라집니다. 사실적인 비주얼이 필요하거나 밝은 부분과 어두운 부분이 강렬하게 대조되어야 하는 프로젝트라면 HDR이 바람직합니다. 하지만 비교적 단순하거나 캐주얼한 아트를 위한 조명을 사용하며, 블룸처럼 높은 범위의 포스트 프로세싱 효과를 사용할 필요가 없는 프로젝트라면 LDR로도 충분합니다.

The intermediate buffer state after a transparent object has been drawn for this scene: The pixels in green have a value greater than 1.0.
씬에 투명한 오브젝트를 드로우한 이후의 임시 버퍼 상태: 녹색 픽셀은 1.0 이상의 값을 가집니다.

위의 RenderDoc 이미지에는 스페큘러 반사와 HDR 스카이박스로 인해 0.0–1.0 범위 이상의 값을 갖는 영역이 존재합니다. 이러한 영역은 마지막 이미지에서 블룸에 영향을 미쳐 씬의 비주얼을 더욱 사실적으로 보이게 만듭니다.

한편 HDR은 성능에 영향을 미칩니다. HDR에 필요한 시스템 리소스 수준은 사용하는 텍스처 포맷에 영향을 받으며, URP가 이미지를 표시 가능한 포맷으로 전환할 때 거쳐야 하는 추가적 단계에 따라서도 달라집니다.

일반적으로 플로트 텍스처는 크기가 크기 때문에 더 많은 메모리와 대역폭이 필요합니다. 크기가 큰 포맷일수록 픽셀당 더욱 많은 비트가 필요하므로 이를 처리하기 위해 필요한 메모리와 성능도 더 많아질 수밖에 없습니다. 이는 저사양 기기에서 과열을 일으킬 수 있으므로 문제가 됩니다. 이 문제를 해결하기 위해 URP는 LDR과 유사한 대역폭 리소스가 필요한 B10G11R11_UFloatPack32 API 포맷을 사용하려고 시도합니다(플랫폼이 이를 지원하고 preserveFramebufferAlpha가 비활성화된 경우).

화면 해상도포맷범위픽셀당 비트크기(MB)
1920x1080R16G16B16A16_SFloatHDR6415.82MB
1920x1080B10G11R11_UFloatPack32HDR327.91MB
1920x1080R8G8B8A8_UNormLDR327.91MB
1920x1080R8G8B8A8_SRGBLDR327.91MB

참고: R16G16B16A16_SFloat는 32비트와 달리 알파 지원이 가능하며 청색 채널에서의 정밀도 손실로 인한 변색이 발생하지 않는 등의 장점이 있습니다. 따라서 Unity 2022.2 이상에서는 고정밀도 텍스처 사용 여부를 직접 설정할 수 있습니다.

조명

The Lighting Settings in the URP Asset
URP 에셋에서의 조명 설정

URP 에셋의 Lighting 섹션에서는 주요 광원추가 광원의 설정을 모두 변경할 수 있습니다. 주요 광원은 씬에서 가장 중요한 방향 광원이며 추가 광원은 이를 제외한 나머지 방향, 스폿, 광원을 가리킵니다. 하나의 씬에 이러한 광원을 대량으로 배치할 수 있지만, 일반적으로는 한 화면에 표시 가능한 광원 수에 제한이 있으며 포워드 렌더러 경로에는 오브젝트당 제한도 있습니다.

주요 광원은 씬의 조명 설정(Window > Rendering > Lighting > Environment)에서 태양 소스로 지정하는 광원 또는 가장 밝은 실시간 방향 광원입니다. 하지만 실제로는 대부분 가장 밝은 방향 광원이 주요 광원이 되며, Render ModeAuto 혹은 Important로 설정되고 ModeMixed 혹은 Real-time으로 설정됩니다.

Unity는 Render Mode 옵션을 ImportantAuto로 설정한 방향 광원의 밝기를 결정할 때 해당 광원 ColorGrayscale 값에 그 광원의 Intensity와 그림자를 드리우는 조명의 조정값을 곱합니다(예: (Red x 0.3 + Green x 0.59 + Blue x 0.11) x Intensity 값 x 조정값).

씬에 Not Important 상태의 방향 광원만 존재할 경우 URP는 각 조명의 강도 값을 비교하여 주요 광원을 결정합니다. 하지만 Unity가 그림자를 드리우는 조명에 조정값을 적용하기 때문에, 밝은 광원 대신에 Cast Shadows가 활성화된 어두운 광원이 선택될 수도 있습니다.

Lighting 섹션에서는 주요 광원과 추가 광원의 그림자에 아틀라스 크기를 할당할 수 있습니다. URP 에셋의 Shadows 섹션 설정과 함께, 이 설정은 주요 광원에서 캐스케이드 그림자에 사용하는 아틀라스 URP에 영향을 미칩니다. Additional Lights 섹션에서는 Shadow Resolution 등급을 설정할 수 있습니다. URP는 해상도(Custom, High, Medium, Low)를 기반으로 하여 그림자가 있으며 눈에 보이는 광원 모두를 아틀라스에 배치하려고 합니다.

하지만 URP가 해당 그림자를 사용자가 원하는 해상도로 렌더링할 때 필요한 크기가 아틀라스보다 크다면, URP는 그림자를 축소하게 되며 때에 따라서는 그림자를 모두 제거할 수도 있습니다. 이러한 현상은 가능한 최소의 광원 해상도(하드 섀도우는 8x8, 소프트 섀도우는 16x16)를 위한 공간이 부족하거나, 모바일 기기에서 하드웨어 성능의 한계에 도달했을 때 발생합니다. 따라서 수많은 광원이 보이거나 혹은 소수의 광원이 아틀라스의 상당한 비율을 차지하는 경우(예: 아틀라스에 여섯 개의 슬라이스가 필요한 점 광원), 펑추얼 광원의 그림자 품질이 크게 달라질 수 있습니다.

A simple scene with multiple shadow-casting lights: The atlasing changes to ensure that the Point lights can fit as they are enabled.
그림자를 드리우는 광원이 여러 개 존재하는 간단한 씬: 활성화된 점 광원을 알맞게 구현하기 위해 아틀라스가 변경됩니다.

몇 가지 방법으로 이러한 문제를 해결할 수 있습니다.

  • 조명의 그림자가 영향을 미치는 반경(스크린 공간 또는 월드 공간)에 따라 그림자에 우선순위를 부여합니다.
    • 멀리 위치한 광원이나 스크린의 작은 영역에만 영향을 미치는 광원은 낮은 해상도나 중간 해상도를 적용해도 괜찮습니다.
    • 반대로 눈에 보이는 지오메트리의 넓은 영역에 영향을 미치는 광원에는 높은 해상도나 커스텀 해상도를 사용해야 합니다.
  • 아틀라스의 크기를 줄이는 방법은 다음과 같습니다.
    • 그림자를 드리우는 조명의 수를 줄입니다.
    • 일부 혹은 모든 등급이 사용하는 아틀라스의 크기를 줄입니다.
    • 최대한 점 광원 대신 스폿 광원을 사용합니다.
  • 가장 쉬운 해결책은 아틀라스의 크기를 늘리는 것입니다.
    • 이 경우 저사양 플랫폼에는 부적합한 수준의 메모리와 대역폭 리소스가 소모될 수 있습니다.
  • 프로그래밍을 통해 해상도를 관리합니다.
    • 예상되는 스크린 공간 및 애플리케이션에 중요한 요소와 같은 중요도 순서에 따라 해상도 등급을 주기적으로 업데이트하는 관리자 클래스를 사용합니다.
    • 광원의 중요도가 높아지거나 낮아지면 그에 따라 필요한 아틀라스 사이즈를 변경합니다. 결과적으로는 부담이 줄어들며 더욱 중요한 광원이 아틀라스를 더 많이 확보하게 됩니다.

Additional Lights 섹션의 Per Object Limit 설정에서는 포워드 렌더러 경로를 사용하여 URP가 렌더링하는 오브젝트에 영향을 미칠 수 있는 광원의 수를 제한합니다. 따라서 만약 유니버설 렌더러포워드 경로를 사용하면 제한 설정이 모든 오브젝트에 영향을 미치게 됩니다. 하지만 디퍼드 경로를 사용할 경우, 포워드 렌더링 기술을 통해 머티리얼을 사용하는 오브젝트에만 이러한 제한이 적용됩니다(예: Complex Lit 또는 Transparent 머티리얼).

Multiple lights (19 Point lights) that affect the same geometry in a scene using the Forward path (left) and the Deferred path (right)
포워드 경로(좌)와 디퍼드 경로(우)를 사용하여 씬의 동일한 지오메트리에 영향을 미치는 19개의 점 광원

특정 오브젝트가 총 제한을 초과할 만큼 많은 광원의 조명을 받게 되면 Unity는 가장 중요도가 떨어지는 조명들을 배제합니다. 이때 Unity는 오브젝트 중심의 강도와 광원의 렌더 모드를 모두 고려하여 어떤 조명들을 배제할지 결정합니다. 그에 따라 시각적 결함이 나타났다가 사라질 수 있습니다.

제한을 늘리는 것도 방법이긴 하지만 최대 8개의 광원이 한계이며, 특히 저사양 기기에서는 성능 문제로 인해 보다 더 수를 제한하는 것이 바람직합니다. 대부분의 프로젝트에서는 문제가 되지 않겠지만, 문제가 발생한다면 다음과 같은 몇 가지 대안을 활용할 수 있습니다.

  • 조명 설정을 최적화합니다.
    • 한자리에 고정된 실시간 광원은 훨씬 부담이 적은 Baked Mode로 바꾸는 것을 추천드립니다.
    • 일부 광원을 제거하거나 비교적 적은 지오메트리에 영향을 미치는 레이어로 옮겨서 씬의 복잡도를 떨어뜨립니다.
    • 광원이 증가하면 영향을 받는 지오메트리의 영역도 늘어납니다. 따라서 디퍼드 렌더링을 활용할 수 없으며 Unity가 문제의 지오메트리에 영향을 미치는 광원을 컬링하거나 제거할 수 없을 경우, 해당 지오메트리를 작게 쪼개는 방법을 고려해 보세요.
  • 디퍼드 경로로 변경합니다.
    • 이 방법을 사용하면 대역폭 리소스 수요가 증가하므로 저사양 기기에서는 문제가 될 수 있습니다. 하지만 많은 광원을 지원하려는 경우에는 많은 이점을 누릴 수 있습니다.
    • Complex Lit 셰이더를 사용하는 머티리얼과 투명 오브젝트는 여전히 포워드 경로를 사용하므로 문제가 발생할 수 있습니다.
  • 가짜 조명 효과를 활용합니다.
    • 특정 콘텐츠에서는 실제 광원을 사용하기보다 셰이더에서 가짜 조명을 활용하는 편이 더 간편하며 부담이 덜할 수 있습니다.
    • 예를 들어 셰이더 그래프의 이미시브 채널을 통해 장비나 의류에 작은 가짜 광원을 구현하거나, 투명 이미시브 머티리얼이 있는 빌보드 및 메시를 사용하여 블룸과 결합했을 때 매우 효과적인 가짜 볼류메트릭 조명을 만들 수도 있습니다.
    • 그 외에는 광원 쿠키(Light Cookie)를 사용하여 적은 수의 광원으로 복잡한 조명 설정을 생성하는 방법이 있습니다.

참고: Unity 2022.2 이상에서는 Forward+ 렌더러를 사용할 수 있습니다. 이 렌더러는 픽셀에 영향을 미칠 수 있는 광원의 개수를 늘려 주며 오브젝트당 제한도 없애 줍니다.

광원 쿠키

An example of light cookies
광원 쿠키의 예시

최근 URP는 주요 방향 광원에 광원 쿠키를 지원하게 되었습니다. 추가 광원에 대해서도 유사한 지원을 하고 있지만, 해당 추가 광원들은 하나의 아틀라스를 공유해야 합니다. 해당 아틀라스의 크기는 Additional Lights 섹션의 Cookie Atlas ResolutionCookie Atlas Format 설정을 통해 변경할 수 있습니다.

쿠키가 적용된 펑추얼 광원이 보이게 되면 URP는 해당 광원을 아틀라스에 추가합니다. 그리고 아틀라스에 공간이 부족하면 쿠키들의 크기를 줄입니다. 더 이상 보이지 않게 된 조명은 재구성해야 할 때까지(예: 아틀라스 전체의 스케일링 인자가 변할 경우) 아틀라스에 머무릅니다. 바꿔 말하면 URP가 아틀라스를 업데이트하는 경우가 드물다는 것입니다.

실질적으로 URP는 슬롯이 변경될 때만 업데이트를 수행합니다. 이러한 상황은 쿠키가 렌더 텍스처 를 사용하거나 에디터에서 쿠키 텍스처를 다시 임포트할 때 발생할 수 있습니다. 대부분의 기기에서는 쿠키를 사용하기 위해 많은 리소스를 필요로 하지 않습니다. 하지만 이미지 화질에 문제가 발생한다면 아틀라스 크기와 개별 광원 쿠키 이미지를 다시 확인해 볼 수 있습니다. 모든 광원이 다른 것처럼 쿠키 텍스처도 마찬가지입니다. 따라서 아틀라스의 공간을 확보해야 한다면 가장 중요도가 낮은 쿠키 텍스처의 크기부터 줄이세요.

물론 쿠키 아틀라스 포맷 에는 여러 가지 옵션이 있습니다. 각 프로젝트에 가장 적합한 옵션은 메모리 요구 사항과 소스 쿠키 텍스처에 따라 달라집니다.

대부분은 기본 옵션인 Color High로 충분하겠지만 다음과 같은 경우에는 다른 포맷을 고려해 보는 것이 좋습니다.

  • 소스 텍스처가 그레이스케일로만 설정되어 있을 때
    • 이때는 Grayscale Low 혹은 Grayscale High가 최적의 옵션입니다. 소스 텍스처가 8비트로만 구성되어 있다면 R8_UNorm 포맷에서와 마찬가지로 Grayscale Low 옵션이 가장 적합합니다. 한편 프로젝트가 쿠키에 렌더 텍스처나 16비트 텍스처를 사용하는 경우, R16_UNorm 포맷에서와 마찬가지로 Grayscale High 옵션이 적합합니다.
  • 메모리와 대역폭이 문제가 되는 프로젝트일 때
    • 이때는 16비트 컬러 포맷(기기가 지원하는 경우)을 사용하며 특히 Color High에 비해 메모리 사용량을 줄일 수 있는 Color Low를 선택합니다.
  • HDR 텍스처를 쿠키로 사용할 때
    • 이때는 HDR 텍스처가 1.0을 넘는 폭넓은 값을 취할 수 있는 부동 소수점 값을 사용하므로 Color HDR을 사용하여 입력 값을 보존합니다. 이는 광원이 에디터에 설정된 것보다 더 높은 강도를 지닐 수 있다는 뜻입니다.

참고: 쿠키는 리소스 요구 수준을 높이므로 저사양 플랫폼에는 바람직하지 않은 편입니다. 프로젝트에서 쿠키를 사용하지 않는다면 그에 따른 추가 리소스도 필요하지 않게 됩니다.

반사 프로브

URP는 반사 프로브 사용에 몇 가지 옵션을 제공합니다. Unity가 프로브에서 샘플링할 때 Reflection Probes에서 Probe Blending 혹은 Box Projection을 사용하도록 설정할 수 있습니다.

In the top image, URP does not use reflection blending, so the capsule in the middle only receives a red tint from the probe to the right. In the bottom image, URP uses reflection blending, which means that the capsule receives green and red tints from both probes.
위쪽 이미지에서 URP는 반사 블렌딩을 사용하지 않습니다. 따라서 가운데 캡슐은 우측에 위치한 프로브의 적색 틴트에만 영향을 받습니다. 아래 이미지에서 URP는 반사 블렌딩을 사용합니다. 따라서 캡슐은 양측 프로브의 녹색 및 적색 틴트 모두 영향을 받습니다.

Probe Blending 옵션을 활성화하면 URP는 최대 두 개의 서로 다른 반사 프로브를 평가하여 각 프로브로부터 샘플링을 수행합니다(바운딩 박스와 블렌드 거리를 기준으로 해당 픽셀에 충분한 영향이 미칠 때). 각 프로브의 가중치 합이 임계값인 0.99f에 미치지 못하면 URP는 앰비언트 프로브도 사용합니다. 이를 통해 탁월한 반사 품질을 확보할 수 있지만, 셰이더를 위해 필요한 대역폭과 컴퓨팅 작업이 증가하게 됩니다. 따라서 이는 저사양 기기에 적합하지 않을 수 있습니다.

블렌딩과 함께 사용할 수 있는 박스 투영 기술은 URP의 반사 샘플링 방식을 변경합니다. Box Projection을 비활성화하면 URP는 반사 소스가 무한히 멀리 있는 것처럼 간주합니다. 이렇게 하면 픽셀의 노멀을 기준으로 한 카메라 의 반사 벡터만을 계산하면 되므로 리소스 부담이 줄어듭니다. 이때 오브젝트의 위치와 관계없이 반사가 시각적으로 동일하게 보일 수 있는데, 작은 밀폐 공간인 씬에서는 상당히 두드러져 보일 수 있습니다.

The image on the left has no Box Projection, whereas the image on the right shows Box Reflection when active, which results in more realistic reflection results based on the enclosed environment.
좌측의 이미지에는 박스 투영이 존재하지 않습니다. 하지만 우측의 이미지는 Box Projection이 활성화되어 있어 밀폐된 환경에서의 자연스러운 반사 효과를 보여 줍니다.

URP 에셋에서 Box Projection을 활성화하면 URP가 반사 프로브를 처리하는 방식이 바뀝니다. 구체적으로 말하자면 URP는 반사를 유한한 것으로 취급하고 반사 벡터를 조정하여 상자의 영역에 매핑합니다. 이를 통해 공간과 더욱 어울리는 반사를 구현할 수 있습니다. 동일한 반사 프로브를 사용하는 오브젝트들의 위치로 매핑되는 반사가 개선되기 때문입니다.

이때는 블렌디드 프로브만큼 많은 리소스가 추가로 필요하지는 않습니다. 하지만 박스 투영은 셰이더의 복잡도를 증가시키며 성능에 영향을 미칩니다. 따라서 실내 씬 혹은 길거리처럼 밀폐된 공간에서만 사용하는 것이 좋습니다. 또한 박스 투영은 거울처럼 반사 능력이 뛰어난 표면을 더욱 사실적으로 구현합니다.

빌트인 렌더 파이프라인에서는 메시 렌더러별로 반사 프로브를 설정할 수 있습니다. 하지만 URP 2021.2 버전에는 이 옵션이 존재하지 않습니다. URP에서 포워드디퍼드를 사용하여 구현하면 해당 값에 액세스할 수 없게 되며, 이를 변경할 경우 반사 프로브 블렌딩에 오류가 발생하기 때문입니다. 기존 프로젝트를 2021 LTS로 업그레이드할 경우 사전에 Blend Probes 옵션을 기본값으로 설정해 두세요.

Click the button in the top-right corner (three dots) and select Show Additional Properties to see more properties.
우측 상단의 점 세 개 버튼을 클릭하고 Show Additional Properties를 선택하여 더 많은 프로퍼티를 표시할 수 있습니다.

URP 에셋 프로퍼티를 통해 Mixed LightingLight Layers를 활성화할 수 있습니다. 이 옵션들은 기본적으로 보이지 않으며, 인스펙터 우측 상단의 점 세 개 버튼()을 클릭하고 Show Additional Properties를 클릭하면 나타납니다. 또는 Core Render Pipeline 설정에서 조정할 수도 있습니다(Preferences > Core Render Pipeline).

혼합 조명은 동적 광원이 베이크된 광원과 상호 작용할 수 있게 하는 옵션이며 기본적으로 활성화되어 있습니다. 이를 씬에서 사용하려면 Baked Global Illumination을 활성화하고 Lighting 창에서 Subtractive 혹은 Shadowmask Mode를 선택하세요(Windows > Rendering > Lighting > Scene). 혼합 조명을 비활성화하면 빌드 시 프로젝트에서 혼합 광원을 포함하는 셰이더 배리언트가 제거됩니다.

URP에 새로 도입된 광원 레이어를 통해 특정 렌더 레이어에 광원을 설정할 수 있습니다. 이는 특정 지오메트리에만 영향을 미치는 광원을 설정할 때 유용한 기능입니다. 각 광원은 섀도우 패스에 지오메트리를 포함하거나 제외하는 커스텀 그림자 레이어를 가질 수 있습니다.

그림자

Shadow settings in the URP Asset
URP 에셋에서의 그림자 설정

Max Distance는 게임의 모든 그림자에 영향을 미치는 전역 설정입니다. 이는 카메라로부터의 최대 거리로, Unity가 실시간 그림자를 렌더링하기 위해 사용합니다. URP는 방향 광원에 대한 그림자를 섀도우 맵에 렌더링합니다. Max Distance 옵션은 카메라의 절두체 범위를 비롯해 카메라로부터 어느 거리까지 섀도우 맵이 닿는지를 결정합니다. 추가 그림자는 위치 그림자이므로, 이 거리를 기준으로 카메라로부터 너무 멀리 떨어진 추가 그림자는 섀도우 패스에서 제외됩니다. Unity는 Max Distance 값보다 더 멀리 위치한 픽셀에 그림자를 부여하지 않습니다.

Cascade Count 설정을 활용하면 주요 방향 광원에 대한 캐스케이드의 개수를 설정할 수 있습니다. Unity는 절두체를 캐스케이드로 분할하여 카메라에 가까운 그림자를 더욱 정교하게 만듭니다. 반면 URP는 해당 캐스케이드를 _MainLightShadowmapTexture로 패킹합니다. 그러므로 Cascade Count를 1로 설정하면 URP는 전체 텍스처를 사용합니다. 그 외의 경우에는 각 캐스케이드가 아틀라스의 1/4을 차지합니다(그림자 해상도 크기의 절반).

Layout of the _MainLightShadowmapTexture depending on the Cascade Count
캐스케이드 수에 따른 _MainLightShadowmapTexture의 레이아웃

Working Unit 옵션을 사용하면 URP가 캐스케이드 분할에 어떤 유닛을 사용할지 정할 수 있습니다. Metric을 선택하면 URP는 미터법을 사용해서 각 분할에 나타나는 숫자를 측정합니다. 반면 Percent를 선택하면 각 분할에 Max Distance 값에 대한 백분율을 표시합니다. 분할을 직접 조정하려면 Split 필드의 값을 수정하면 됩니다. 아니면 Last Border 프로퍼티 아래에 있는 인포그래픽에서 색으로 구분된 분할 영역을 드래그해도 됩니다.

Last Border 프로퍼티는 주요 광원 혹은 그림자를 드리우는 펑추얼 광원으로부터 그림자를 받는 모든 픽셀에 영향을 미칩니다. Last Border 은 픽셀이 최대 거리에 가까워질 때 URP가 그림자를 페이드 아웃(리니어 페이드)하는 거리를 가리킵니다.

Depth BiasNormal Bias 설정은 프로젝트의 기본 바이어스를 제어합니다. Bias 설정을 Custom으로 변경하면 직접 바이어스를 설정하거나 각 광원을 조정할 수 있습니다(아래 스크린샷 참고).

Shadow Settings for a light in the Inspector
인스펙터에서 광원에 대한 그림자 설정

Conservative Enclosing Sphere 옵션은 그림자 절두체 컬링을 향상하기 위한 용도입니다. 이 옵션을 활성화하면 컬링이 캐스케이드와 더욱 어울리게 조정되며, 섀도우 캐스케이드 모서리에 과도한 그림자 컬링이 발생하지 않습니다. 하지만 이 설정으로 인해 URP가 캐스케이드를 선택하기 위해 사용하는 바운딩 구체들의 크기와 위치가 바뀌게 됩니다. 따라서 기존 프로젝트에서 이를 활성화할 때는 캐스케이드 거리를 조정하는 것이 좋습니다.

게다가 섀도우 패스에 Depth Bias와 Normal Bias를 사용하여 패스 결과를 변경하고, 섀도우 애크니와 같은 자주 발생하는 그림자 관련 문제를 해결할 수도 있습니다. 자세한 내용은 그림자 문제 해결 기술 자료를 참조하세요. 기본적으로 Depth Bias는 섀도우 패스에서 광원 밖으로 지오메트리를 밀어내지만, Normal Bias는 노멀이 광원을 등지고 있는 곳에서 섀도우 캐스터를 축소합니다.

그 결과 URP는 셀프 섀도잉을 줄이기 위해 섀도우 캐스터를 광원에서 밀어내지만, 원래의 경계 안에 머무르기 때문에 셀프 섀도잉 버그가 줄어들게 됩니다. Unity는 절두체 및 해상도 크기에 URP 에셋 또는 광원에 설정된 바이어스를 곱한 값을 기반으로 URP가 캐스터를 움직이는 총량을 계산합니다.

대부분의 경우에는 기본값으로도 충분합니다. 만약 결함이 존재한다면 적절한 값을 찾아내는 데 초점을 맞추고, 가능한 경우 각 광원을 개별적으로 조정해 보세요.

Learn more about URP Shadow Settings in the e-book.
전자책에서 URP 그림자 설정에 대해 자세히 알아보세요.

Soft Shadow 옵션은 URP에서의 소프트 섀도우 지원에 대한 전역 오버라이드입니다. 옵션을 활성화하면 URP가 모든 광원에 대한 하드 섀도우와 소프트 섀도우를 지원하며, 이는 셰이더의 성능에 영향을 미칠 수 있습니다. 따라서 저사양 플랫폼에서는 이 기능을 사용하지 않는 품질 레벨을 추가하는 것이 바람직합니다.

URP가 그림자를 지원하는 셰이더를 통해 픽셀을 렌더링할 때마다 Unity는 그림자 텍스처에서 샘플링을 여러 번 수행해야 합니다(모바일 및 무선 기기에서는 네 번, 기타 플랫폼에서는 아홉 번). 그럼에도 소프트 섀도우는 상당한 대역폭을 요구합니다.

여러 번 샘플링을 하면 캐시 미스나 메모리 인출이 더욱 많이 발생하므로 각 픽셀이 부분적으로 더 많은 리소스를 요구하게 될 수 있습니다. 심지어 오버드로우는 이러한 대역폭 문제를 더욱 심화시킵니다. 그래서 Unity 2022.2부터는 광원별로 소프트 섀도우의 품질(샘플 개수)을 제어할 수 있는 옵션이 추가되었습니다.

유니버설 렌더러 에셋 설정

Shadow options in the Forward Renderer asset
포워드 렌더러 에셋의 그림자 옵션

Unity는 유니버설 렌더러를 사용하여 URP의 씬 렌더링 방식을 설정합니다. 유니버설 렌더러의 Rendering 섹션은 해당 에셋이 사용하는 렌더링 경로를 포함하며, 이 경로는 Forward 혹은 Deferred로 설정할 수 있습니다.

기본 설정은 Forward 렌더링 경로입니다. 이렇게 설정하면 하드웨어와 URP 에셋에 의해 설정된 제한 내에서 각 오브젝트에 대한 유효 조명 정보 전체를 바탕으로 해당 오브젝트를 렌더링합니다. 이때 제한을 넘는 렌더링 지원이 필요하다면 Deferred 경로를 고려해 볼 수 있습니다.

Deferred 렌더링 경로는 불투명 지오메트리를 G-버퍼에 렌더링합니다. 유니티는 Deferred Shading 패스에서 G-버퍼를 사용하여 눈에 보이는 개별 광원을 렌더링합니다. 따라서 Lit이나 Simple Lit을 사용하는 불투명 머티리얼을 가진 오브젝트에 훨씬 많은 광원이 영향을 미치게 됩니다. Complex LitBaked Lit 같은 일부 셰이더는 Forward 경로만을 사용합니다. 따라서 URP는 디퍼드 조명 패스 이후에 이러한 셰이더를 렌더링합니다. URP는 모든 투명 머티리얼을 Forward 경로를 통해 렌더링한다는 점을 알아 두세요.

또 다른 옵션(기본적으로 활성화되어 있음)은 투명 오브젝트가 그림자를 받게 만드는 것입니다. 빌트인 렌더 파이프라인과는 달리 URP는 투명 머티리얼이 그림자를 받도록 지원하는데, 다만 투명 오브젝트가 그림자를 드리우도록 지원하지는 않습니다.

스크린 공간 앰비언트 오클루전(SSAO)렌더러 기능이 URP 패키지에 포함되어 있으며, 에셋의 Renderer Feature 섹션에서 찾아볼 수 있습니다. 이 기능을 사용하면 씬에 더욱 사실적인 그림자를 구현할 수 있습니다.

조명 창

조명 창(Window > Rendering > Lighting)에는 베이크된 조명, 환경 관련 값(스카이박스, 안개, 태양), 반사 관련 설정이 포함됩니다. 빌트인 렌더 파이프라인과 URP의 조명 설정은 크게 다르지 않지만 두 가지 예외 사항을 주의해야 합니다. 하나는 URP에서는 Lens Flare (SRP) 컴포넌트렌즈 플레어를 처리한다는 것이며, 다른 하나는 URP가 현재 헤일로를 지원하지 않는다는 것입니다.

각 씬은 공유 설정이 포함된 조명 설정 파일을 가리킬 수 있습니다. 서로 다른 씬의 고유 설정을 유지하려면 여러 설정을 만들어야 합니다. 해당 설정들은 Scene, Environment, Real-time lightmaps, Baked lightmaps의 네 가지 섹션으로 나뉩니다.

URP와 빌트인 렌더 파이프라인의 조명 창에 유의미한 차이가 없으므로, 해당 내용은 이 글에서 다루지 않습니다. 유니티를 처음 접하신다면 조명 관련 기술 자료를 읽어 보고, Unity Learn의 입문자용 튜토리얼에서 관련 내용을 학습하세요.

조명 모델

URP는 프로젝트에 사용할 수 있는 세 가지 조명 모델을 제공합니다.

  • LitComplex Lit 셰이더를 사용하는 Physically Based 모델
  • Simple Lit 셰이더를 사용하는 Simple 모델(블린-퐁 반사 모델 기반)
  • Baked Lit 셰이더를 사용하는 Baked Lit 모델

셋은 서로 상이한 모델입니다. 비록 흔한 경우는 아니지만 세 모델을 혼합해서 사용하면 간혹 독특한 비주얼을 구현할 수 있습니다. 또한 Baked Lit 지오메트리를 Lit 또는 Simple 셰이더와 혼합해서 사용하면 성능을 끌어올릴 수 있기는 하지만, 하나의 모델을 유지하는 것이 일반적으로는 가장 좋습니다.

The same scene as Unity renders it with Lit shaders (top), Simple Lit shaders (middle) and Baked Lit shaders (bottom)
동일한 씬을 Lit 셰이더(상단), Simple Lit 셰이더(중앙), Baked Lit 셰이더(하단)를 사용하여 렌더링한 결과

URP의 물리 기반 조명은 쿡 토런스(Cook-Torrance)의 BRDF를 기반으로 합니다. 블린-퐁 모델보다는 많은 리소스를 요구하지만, 머티리얼을 물리적으로 정확하게 렌더링하여 사실적인 표현뿐 아니라 카툰 스타일까지 모든 형태의 비주얼을 강화해 줍니다.

Complex Lit 셰이더는 Lit 셰이더의 상위 세트로, 머티리얼 위에 얇은 투명 레이어를 시뮬레이션하는 클리어 코트 기능을 추가로 제공합니다. 하지만 클리어 코트 기능을 사용하면 URP가 조명을 두 번 평가해야 하기 때문에 Complex Lit 셰이더에 비해 두 배의 리소스가 필요합니다.

한편 Simple Lit 셰이더의 블린-퐁 모델은 오랫동안 활용되었으나 단순하고 물리적으로도 정확하지 않은 모델입니다. 많은 고전 게임이 주로 하드웨어 한계로 인해 이 모델을 사용했습니다. 레트로 비디오 게임처럼 실제 물리와 상관없는 아트 스타일을 사용한다면 블린-퐁 모델은 좋은 선택지가 됩니다.

마지막으로 Baked Lit 셰이더는 라이트맵 또는 라이트 프로브만을 사용하여 오브젝트를 비춥니다. 물리적으로 정확하지는 않지만 적은 리소스로 오브젝트를 렌더링하는 방법입니다. 다만 라이트맵이나 라이트 프로브만을 평가하기 때문에 반사와 동적 광원은 고려하지 못한다는 것이 유일한 단점입니다.

Simple Lit은 다음 상황에서 사용해 볼 수 있습니다.

  • 프로젝트의 아트 스타일이 물리적으로 정확할 필요가 없으며(예: Minecraft, Kentucky Route Zero, Monument Valley), 고전 게임의 비주얼을 따르려고 할 때

Lit 또는 Complex Lit은 다음 상황에서 사용해 볼 수 있습니다.

  • PBR(물리 기반 렌더링)이 필요한 아트 스타일을 사용하거나 PBR을 통해 전반적인 아트 스타일을 향상할 수 있을 때

Baked Lit은 다음 상황에서 사용해 볼 수 있습니다.

  • 실시간 조명이 불필요하며, 반사가 부족하더라도 프로젝트의 화질이 저하되지 않을 때. 또는 저사양 플랫폼과 호환 가능한 성능 프로파일을 목표로 하며, 라이트맵을 저장하기 위해 상당한 양의 메모리를 할당할 의향이 있을 때

URP를 더욱 자세히 알아보려면 지금 무료 가이드(한국어)를 확인해 보세요. 빌트인 렌더 파이프라인에서 유니버설 렌더 파이프라인으로 프로젝트를 마이그레이션하려는 숙련된 유니티 개발자와 테크니컬 아티스트에게 적합한 가이드입니다. URP를 상세하게 살펴보고자 하는 신규 유니티 개발자들에게도 적합합니다.

2022년 11월 15일 엔진 & 플랫폼 | 25 분 소요

Is this article helpful for you?

Thank you for your feedback!

포럼에서 토론에 참여하기
관련 게시물