이 가이드는 Unity 블로그 게시물 Spotlight Team 베스트 프랙티스: 조명 파이프라인 설정 - Pierre Yves Donzallaz의 업데이트 버전입니다.
먼저 이 기사에서 자주 등장하는 몇 가지 중요한 그래픽스 렌더링 용어의 정의를 살펴보겠습니다.
이러한 작업은 프레임 속도에 따라 초당 여러 번 반복됩니다.
다음 플로우차트는 콘텐츠 크리에이터의 시각에서 Unity의 전체 조명 파이프라인에 대한 높은 수준의 통찰을 제공합니다.
먼저 렌더 파이프라인을 선택해야 합니다. 그런 다음 그에 따라 간접 조명이 생성되는 방식을 결정하고 전역 조명 시스템을 선택할 수 있습니다. 모든 전역 조명 설정을 프로젝트에 맞게 적절하게 조정하고 나면 광원, 발광 표면, 반사 프로브, 라이트 프로브, 라이트 프로브 프록시 볼륨(LPPV)을 계속 추가할 수 있습니다. 이러한 모든 조명 오브젝트의 사용법과 기능은 이 문서에서 다루지 않습니다. 프로젝트에서 이러한 조명 오브젝트를 올바르게 활용하는 방법은 매뉴얼의 조명 섹션을 참조하시기 바랍니다.
2018년 초까지 Unity에서는 하나의 렌더 파이프라인, 즉 빌트인 렌더 파이프라인만 이용할 수 있었습니다. 이 렌더 파이프라인은 포워드 및 디퍼드 렌더링 경로를 제공합니다.
2018년 1월 Unity는 사용자들이 C# 스크립팅을 통해 렌더링 루프를 커스터마이즈할 수 있도록 해주는 스크립터블 렌더 파이프라인(SRP)을 공개했습니다. 이는 게임 엔진 분야에서 작은 혁명을 일으켰습니다. 덕분에 사용자들은 C++ 같은 저수준 프로그래밍 언어를 사용하지 않고도 오브젝트 컬링, 드로잉, 프레임 포스트 프로세싱을 맞춤화할 수 있습니다.
Unity는 현재 다음의 두 가지 사전 빌드된 SRP를 제공합니다.
타일은 프레임의 작은 2차원 사각형 픽셀 섹션이고, 클러스터는 카메라 절두체 내의 3차원 볼륨입니다. 이 두 가지 타일 및 클러스터 렌더링 기술은 모두 모든 단일 타일 및 클러스터에 영향을 주는 광원 리스트를 사용하며, 각 조명은 해당하는 알려진 광원 리스트를 사용하여 단일 패스로 계산됩니다. 불투명 오브젝트는 타일 시스템을 사용하여 셰이드를 적용할 가능성이 높고, 투명 오브젝트는 클러스터 시스템을 사용합니다. 주요 이점은 아주 느린 멀티 패스 광원 누적을 사용하는 빌트인 렌더 파이프라인(디퍼드)보다 조명을 더 빠르게 처리하고 대역폭 소모를 크게 감소시킨다는 점입니다.
이제 다음의 의사결정 차트를 사용하여 몇 가지 핵심 기준에 따라 가장 적합한 렌더 파이프라인을 빠르게 찾을 수 있습니다.
최신 버전의 HDRP 및 URP는 Unity 패키지 관리자(Window > Package Manager)를 통해 다운로드할 수 있습니다. 이러한 SRP를 가장 손쉽게 사용하려면 Unity Hub에서 새 프로젝트를 만든 후 해당 템플릿 중 하나를 사용하십시오.
HDRP용 프로젝트를 설정하려면 필수 패키지를 설치해야 합니다. 그런 다음 HD 렌더 파이프라인 마법사(Window > Render Pipeline > HD Render Pipeline Wizard)를 사용하여 프로젝트를 간편하게 설정할 수 있습니다.
렌더링에 대해 잘 알고 C#에 익숙하며 프로젝트에 맞게 렌더러를 완전히 조정해야 하는 경우 SRP 콘셉트로 실험하며 고유한 커스텀 스크립터블 렌더 파이프라인을 만들 수 있습니다. 유니버설 렌더 파이프라인은 셰이더 라이브러리가 작고 렌더링 패스를 쉽게 삽입, 제거 및 교체할 수 있어서 확장이 매우 간편합니다.
Unity에서는 빌트인 렌더 파이프라인에서 HDRP 또는 URP로 프로젝트의 머티리얼을 쉽게 포팅할 수 있습니다. Edit > Render Pipeline > Upgrade…에서 머티리얼 컨버터를 한 번만 클릭하면 모든 작업이 끝납니다. 단, 이 작업은 되돌릴 수 없습니다. 반드시 프로젝트를 미리 백업해 두십시오!
반면에 커스텀 셰이더는 수동으로 포팅해야 합니다. 따라서 프로덕션 동안 빌트인 렌더 파이프라인에서 HDRP 또는 URP로 전환하는 작업은 재작성할 커스텀 셰이더 수에 따라 시간이 매우 많이 소요될 수 있습니다.
그리고 HDRP는 빌트인 렌더 파이프라인보다 광원 감쇠 및 분산 등의 부문에서 물리적으로 더 정확하기 때문에 HDRP로 전환한 후에 프로젝트의 모습이 다소 달라질 수 있습니다.
또한 HDRP와 URP는 동일한 렌더링 기능을 공유하지 않기 때문에 상호 호환되지 않습니다. HDRP에서 URP로 또는 그 반대 방향으로 프로젝트를 포팅할 수 있지만, 한 번의 클릭으로 작업이 끝나는 게 아니라 조명, 머티리얼 및 셰이더를 수동으로 다시 작업해야 합니다!
씬에 간접 조명을 포함하려면 Unity의 두 가지 전역 조명 시스템 중 하나를 사용하거나 자체 베이크 솔루션을 사용하여 전역 조명 시스템을 생성해야 합니다. Window > Rendering > Lighting Settings에 있고 Unity에서 사용할 수 있는 두 가지 시스템은 다음과 같습니다.
요약하자면 Unity 2019.3 이상에서 새 프로젝트를 시작하고 URP 또는 HDRP를 사용하는 경우 인라이튼을 사용할 수 없습니다. 빌트인 렌더 파이프라인을 선택하는 경우 2020년 말 또는 2021년 초까지 인라이튼을 계속 사용할 수 있습니다.
프로그레시브 라이트매퍼는 카메라에 보이는 오브젝트에 대한 조명 사전 계산을 우선적으로 처리할 수 있으며 조명에 대한 반복 작업의 속도를 크게 높일 수 있습니다. 단, 전체 씬의 전반적인 베이킹 시간이 증가합니다. 프로그레시브 라이트매퍼는 CPU를 사용하며 경로 추적을 통해 간접 조명을 계산합니다. 새로운 GPU 프로그레시브 라이트매퍼가 현재 프리뷰 단계이며, 씬의 베이킹 시간을 크게 줄여줄 것으로 기대합니다.
인라이튼과 프로그레시브 라이트매퍼는 모두 다른 방식으로 베이크된 조명을 생성하기 때문에 조명 결과가 서로 완전히 일치하지 않을 수 있습니다.
아래 다이어그램에서 각 전역 조명 시스템의 장단점을 살펴본 후 프로젝트에 가장 적합한 전역 조명 시스템을 선택하십시오.
어느 전역 조명 시스템을 사용하든 Unity는 조명의 베이킹/사전 계산 중에 ‘Contribute GI’라고 표시된 오브젝트만 처리합니다. 동적(즉, 비정적) 오브젝트는 간접 조명을 받기 위해 씬 곳곳에 배치한 라이트 프로브를 사용해야 합니다.
조명의 베이킹/사전 계산은 비교적 느린 프로세스이므로 뚜렷한 조명 배리에이션을 가진 크고 복잡한 에셋(예: 오목면, 자체 그림자)에만 ‘Contribute GI’ 태그를 지정해야 합니다. 균일한 조명을 받는 작은 컨벡스 메시는 그렇게 표시하면 안 되며, 조명의 단순 근사치를 저장하는 라이트 프로브에서 간접 조명을 받아야 합니다. 더 큰 동적 오브젝트는 LPPV를 사용하면 더욱 뛰어난 국지적 간접 조명을 받을 수 있습니다. 씬에서 ’Contribute GI’로 태그가 지정된 오브젝트의 수를 제한하면 베이킹 시간을 대폭 줄이고 적절한 조명 품질을 유지할 수 있습니다. 이러한 최적화 프로세스와 프로브 조명의 중요성은 이 튜토리얼에서 자세히 알아볼 수 있습니다.
Unity는 베이크된 GI 시스템과 실시간 GI 시스템을 동시에 활성화하여 모든 조명 기능에 액세스하도록 허용합니다. 하지만 두 시스템을 동시에 활성화하면 런타임 시 베이킹 시간과 메모리 사용량이 크게 증가한다는 경고를 받게 됩니다. 이러한 시스템이 동일한 데이터 집합을 사용하지 않기 때문입니다. 게다가 런타임 시 간접 조명의 인터랙티브 업데이트를 수행하면 CPU에 추가 부하를 주게 되어 베이크된 GI 시스템과 실시간 GI 시스템이 제공한 간접 조명을 육안으로 확인하면 서로 일치하지 않을 수 있습니다. 이는 각 GI 시스템이 서로 다른 기술을 사용하여 간접 조명을 시뮬레이션하고, 때로는 아주 다른 해상도에서 동작하기 때문입니다.
이 두 GI 시스템은 고사양 플랫폼, 또는 성능 소모가 예측 가능한 엄격히 통제된 씬이 포함된 프로젝트에만 동시에 사용해야 합니다. 또한 이 두 GI 시스템을 모두 관리하려면 복잡도가 늘어나기 때문에 모든 조명 설정을 완전히 이해하고 있는 전문가만 사용하는 것이 좋습니다. 따라서 두 GI 시스템 중 하나를 선택하는 것이 대부분의 프로젝트에 바람직합니다. 두 시스템을 모두 사용하는 것은 별로 권장하지 않습니다!
Light 컴포넌트의 Mode 프로퍼티는 다소 혼란스러울 수 있습니다.
광원 인스펙터에서는 다음의 세 가지 광원 모드를 이용할 수 있습니다.
광원 모드는 베이크된 전역 조명 시스템이 활성화된 경우에만 유효하다는 점에 유의해야 합니다. GI 시스템을 사용하지 않거나 실시간 GI 시스템만 사용하는 경우에는 모든 베이크된 광원과 혼합 광원이 Mode 프로퍼티가 Realtime으로 설정된 것처럼 동작합니다.
다음 다이어그램은 의사결정 차트와 비교 표를 결합한 것으로, 씬에 새로운 광원이 추가될 때마다 적절한 광원 모드를 선택하는 데 도움이 됩니다.
이전 다이어그램에서 볼 수 있듯이, 씬의 모든 혼합 광원에는 라이팅 창에서 선택한 조명 모드에 따라 특정한 베이크된 기능과 실시간 기능이 포함되어 있습니다.
다음 세 가지 모드 중에서 선택할 수 있습니다.
섀도우 마스크 조명 모드에는 다음의 두 가지 품질 설정이 있습니다.
HDRP의 섀도우 마스크 조명 모드를 사용하면 섀도우 마스크 기능이 그래픽스 설정에서 할당된 HDRP 에셋에서 활성화됩니다. 그런 다음에는 프레임 설정을 통해 특정 카메라에 대해 활성화해야 합니다.
다음 표는 Unity 2019.3의 각 렌더 파이프라인에서 지원하는 기능에 대한 일반적인 개요를 제공합니다.
지금까지 렌더 파이프라인과 주요 조명 기능에 대해 소개해드렸습니다. 이제는 몇 가지 프로젝트 사례와 각 프로젝트에 사용할 수 있는 조명 설정을 살펴보겠습니다. 모든 프로젝트는 제각기 고유하므로 해당 요구사항에 따라 약간 다른 옵션을 사용할 수 있습니다.
프로토타입을 빌드하기 위해 에셋 스토어를 많이 사용하는 경우 에셋 스토어에 있는 대부분의 에셋이 HDRP 및 URP와 완전히 호환되지 않을 수 있기 때문에 빌트인 렌더 파이프라인을 선택하는 것이 좋습니다. 하지만 에셋 호환성은 시간이 지나면서 개선될 예정입니다. 모든 에셋을 처음부터 빌드하고 프로젝트 요구사항을 분명하게 파악하고 있다면 두 가지 SRP(URP 또는 HDRP) 중에서 한 가지를 선택하거나 커스텀 렌더 파이프라인을 만들 수 있습니다.
(사전) 프로덕션의 초기 단계에 있고 조명에 대한 빠른 턴어라운드와 최대 유연성이 필요한 경우 사전 계산이 필요 없는 완전 실시간 방식을 선택하여 베이크된 GI 시스템과 실시간 GI 시스템을 모두 비활성화할 수 있습니다. 적절한 간접 조명의 부재 문제를 완화하기 위해 스크린 공간 앰비언트 오클루전을 활성화할 수 있습니다. 그러면 성능 부하가 작은 실시간 컨택트 섀도우를 제공하여 씬에 오브젝트를 쉽게 배치할 수 있습니다.
모바일 디바이스를 대상으로 하는 경우 URP를 사용하면 전략 게임에 적합한 성능을 효과적으로 확보할 수 있습니다. 게임에 맞게 렌더링 파이프라인을 커스터마이즈해야 하는 경우 그래픽스 프로그래머가 간단하게 URP를 확장할 수 있습니다. URP를 선택하고 베이크된 전역 조명을 사용하는 경우 현재 섀도우 마스크 혼합 조명 모드가 지원되지 않는다는 점에 유의하십시오.
또는 예를 들어 에셋 스토어의 에셋을 많이 사용하기 때문에 빌트인 렌더 파이프라인을 그대로 사용하기로 결정한 경우에는 모든 혼합 조명 모드가 지원됩니다. 이 경우 섀도우 마스크 조명 모드의 방식을 통해 베이크된 그림자를 제공하는 동시에 동적 오브젝트가 실시간 그림자를 드리우도록 만들 수 있습니다. 섀도우 마스크의 성능 소모가 너무 커서 프로젝트에 사용할 수 없으면 성능 소모가 가장 적은 서브트랙티브 모드로 폴백할 수 있습니다. 마지막으로 현재 레벨에 광원 수가 매우 적고 구형 하드웨어를 대상으로 하는 경우에는 포워드 렌더링 경로가 최고의 옵션일 수 있습니다.
일자형 FPS 게임을 위해 PC와 콘솔에서 AAA급 품질의 비주얼을 구현하고자 하는 경우 HDRP를 렌더 파이프라인으로 선택하는 것이 좋습니다. 다시 말하지만, 그래픽스 프로그래머의 도움을 받아 커스텀 SRP를 개발할 수도 있습니다.
현재 레벨에 실시간 그림자를 드리우는 광원(예: 파괴 가능한 광원 소품과 움직이는 광원)이 많은 경우에는 베이크된 GI 시스템을 베이크된 간접 모드와 함께 사용하면 혼합 방향 광원에서 뛰어난 간접 조명을 얻고 정적 광원 소품에서 베이크된 광원을 얻을 수 있습니다. 현재 레벨에서 그림자를 드리우는 고정 광원의 비율이 큰 경우 섀도우 마스크 모드의 방식을 추천합니다. 이는 HDRP가 제공하는 우수한 하이브리드 섀도우 마스크 모드를 사용하여 실시간 그림자와 베이크된 그림자 간의 블렌드를 더욱 세세하게 제어할 수 있기 때문입니다.
Nintendo Switch도 지원할 계획이라면 URP를 사용하는 것이 좋습니다. 그러면 시장에서 제공되는 대부분의 게임 플랫폼을 지원하게 되며, HDRP에서 URP로 또는 그 반대로 프로젝트를 포팅하는 지루한 프로세스를 거칠 필요가 없습니다.
PC 및 콘솔용 배틀 로얄 게임을 출시하려는 경우에는 대규모 환경과 완전한 동적 조명이 필요하기 때문에 HDRP를 선택하거나, 확장을 통해 렌더링 파이프라인을 프로젝트에 맞춤 설정해야 합니다. AAA 비주얼 정확도를 목표로 하지 않고 모바일 디바이스나 저사양 시스템을 대상으로 한다면 URP를 고려할 수도 있습니다.
낮-밤 사이클을 구현하려는 경우 HDRP 및 URP는 실시간 전역 조명 시스템(인라이튼)을 지원하지 않습니다. 따라서 간접 베이크, 그리고 하루 종일 태양과 간접 빛 강도를 조절하는 커스텀 스크립트를 통해 낮-밤 사이클을 처리해야 합니다.
이러한 특정한 시나리오에서 빌트인 렌더 파이프라인을 사용하는 경우 실시간 GI 시스템과 베이크된 GI 시스템을 동시에 활성화하는 것은 적절하지 않습니다. 그러면 거대한 레벨의 성능 및 씬 관리에 막대한 성능이 소모될 수 있습니다. 이 두 GI 시스템을 동시에 사용하지 말아야 하는 또 다른 이유는 대규모 멀티플레이어 게임의 경우 예측 불가능한 요소가 많기 때문입니다. 따라서 고도로 스크립트화된 리니어 레벨보다 인스턴스에 대한 성능 예측이 더 어렵습니다.
스크립터블 렌더 파이프라인을 도입한 덕분에 지난 몇 년에 걸쳐 Unity의 렌더링 환경이 크게 바뀌었습니다. 따라서 이러한 조명 파이프라인의 모든 변경 사항과 그로 인한 영향을 모두 파악하기가 어려울 수 있습니다.
이 가이드와 여기에 수록된 많은 예시가 각 렌더 파이프라인을 이해하는 데 도움이 되길 바랍니다. 또한 모든 사용자가 올바른 렌더링 및 조명 설정으로 Unity 프로젝트를 자신 있게 시작할 수 있기를 바랍니다!
Unity의 조명과 렌더링 파이프라인에 관한 정보는 다음 페이지에서 자세히 알아볼 수 있습니다.