2D 조명 시스템 소개
URP에 포함된 2D 조명 시스템은 스프라이트 렌더러와 같은 핵심 Unity 컴포넌트와 익숙한 3D Light 컴포넌트의 2D 대응 역할을 하는 2D Light 컴포넌트를 통해 조명이 있는 2D 씬을 빠르게 생성하도록 도와주는 아티스트 친화적인 툴 및 런타임 컴포넌트 세트로 구성되어 있습니다.
이러한 툴은 스프라이트 렌더러, 타일맵 렌더러, 스프라이트 셰이프 렌더러 등과 같은 2D 렌더러와 원활하게 통합되도록 설계되었습니다. 이 툴 및 컴포넌트 시스템은 모바일 시스템과 여러 플랫폼에서 실행할 수 있도록 최적화되었습니다.
3D 광원과의 차이
2D 광원과 3D 광원의 구현 및 동작에는 다음과 같은 몇 가지 주요 차이점이 있습니다.
새로운 2D 전용 컴포넌트 및 렌더 패스
2D 조명 시스템에는 2D 조명 및 렌더링을 위해 특별히 설계된 자체 2D Light 컴포넌트 세트, 셰이더 그래프 서브 타겟, 커스텀 2D 렌더 패스가 포함되어 있습니다. 2D 광원 및 패스 설정을 위한 에디터 툴도 패키지에 포함되어 있습니다.
동일 평면
2D 조명 모델은 동일 평면 및 멀티 레이어 2D 월드에서 작동하도록 특별히 설계되었습니다. 2D 광원은 2D 광원과 2D 광원이 비추는 오브젝트 간의 뎁스 분리가 필요하지 않습니다. 2D 그림자 시스템도 동일 평면에서 작동하며 뎁스 분리가 필요하지 않습니다.
비 물리 기반
2D 광원의 조명 계산은 3D 광원과 마찬가지로 물리 기반이 아닙니다. 조명 모델 계산에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
3D 광원 및 3D 렌더러와 상호호환성 미지원
현재 3D 및 2D 광원은 각각 3D 및 2D 렌더러에만 영향을 줄 수 있습니다. 2D 조명은 메시 렌더러 같은 3D 렌더러에서 동작하거나 영향을 주지 않으며, 마찬가지로 3D 조명도 스프라이트 렌더러 같은 2D 렌더러에 영향을 주지 않습니다. 향후 각 광원과 렌더러 간의 상호호환성이 개발될 수 있지만, 현재는 카메라 스태킹 기법을 사용하여 단일 씬에서 2D 및 3D 광원과 2D 및 3D 렌더러의 조합을 구현할 수 있습니다.
2D 조명 그래픽스 파이프라인의 기술 세부 정보
2D 조명 그래픽스 파이프라인 렌더링 프로세스는 크게 다음의 두 단계로 나눌 수 있습니다. 1) 광원 렌더 텍스처 그리기 2) 렌더러 그리기
광원 렌더 텍스처는 스크린 공간에서 광원의 컬러와 모양에 대한 정보를 포함하고 있는 렌더 텍스처입니다.
이 두 단계는 고유한 조명이 있는 광원 레이어 세트에 대해서만 반복됩니다. 즉 정렬 레이어 1-4에 완전히 동일한 조명 세트가 있는 경우 위 작업 세트를 한 번만 수행합니다.
기본 설정에서는 렌더러를 그리기 전에 여러 개의 배치를 미리 그려서 타겟 전환을 줄입니다. 이상적인 설정은 파이프라인이 모든 배치에 대한 광원 렌더 텍스처를 렌더링한 후에 렌더러를 그리는 것입니다. 이렇게 하면 컬러 타겟의 로드와 언로드를 방지할 수 있습니다. 자세한 내용은 최적화를 참조하십시오.
Pre-phase: 정렬 레이어 배칭 계산
렌더링 단계를 진행하기 전에 2D 조명 그래픽스 파이프라인은 먼저 씬을 분석하여 단일 그리기 작업에서 어떤 레이어를 함께 배칭할 수 있는지 평가합니다. 레이어의 배칭 여부를 결정하는 기준은 다음과 같습니다.
- 연속된 레이어입니다.
- 완전히 동일한 광원 세트를 공유합니다.
광원 렌더 텍스처 그리기 작업 수를 최소화하고 성능을 개선하려면 가능한 한 많은 레이어를 배칭하는 것이 좋습니다.
1단계: 광원 렌더 텍스처 그리기
사전 단계 배칭 후 파이프라인은 해당 배치에 대한 광원 텍스처를 그립니다. 이 작업은 기본적으로 렌더 텍스처에 광원의 모양을 그립니다. 광원의 컬러와 모양은 광원의 설정에 따라 애디티브 또는 알파 블렌디드를 사용하여 타겟 광원 렌더 텍스처에 블렌딩할 수 있습니다.
광원 렌더 텍스처는 하나 이상의 2D 광원이 타겟일 때만 생성된다는 점에 유의하십시오. 예를 들어 레이어의 모든 광원이 Blendstyle #1만 사용하는 경우 광원 렌더 텍스처는 하나만 생성됩니다.
2단계: 렌더러 그리기
모든 광원 렌더 텍스처가 그려지면 파이프라인이 렌더러 그리기를 진행합니다. 시스템은 어떤 광원 렌더 텍스처 세트가 어떤 렌더러 세트를 그리는지 추적합니다. 연결은 사전 단계의 배칭 프로세스 중에 이루어집니다.
렌더러가 그려질 때 모든(각 블렌딩 스타일당 하나씩) 이용 가능한 광원 렌더 텍스처에 액세스할 수 있습니다. 셰이더에서 최종 컬러는 지정된 연산을 사용하여 입력 컬러와 광원 렌더 텍스처의 컬러를 결합하여 계산됩니다.
네 개의 활성 블렌딩 스타일이 있는 설정 예시로, 여러 블렌딩 스타일의 조합 방식을 보여줍니다. 대개의 경우에는 원하는 효과를 얻기 위해 두 가지 블렌딩 스타일만 필요합니다.
최적화
드로우 콜 감소, 셰이더 컬링 및 최적화와 같은 표준 최적화 기법 외에도 2D 조명 그래픽스 파이프라인에는 몇 가지 고유한 기법과 고려 사항이 있습니다.
블렌딩 스타일 수
렌더링 성능을 높이는 가장 쉬운 방법은 사용되는 블렌딩 스타일 수를 줄이는 것입니다. 각 블렌딩 스타일은 렌더링한 후 업로드해야 하는 렌더 텍스처입니다.
블렌딩 스타일 수를 줄이면 성능에 직접적인 영향을 미칩니다. 간단한 씬에는 하나의 블렌딩 스타일만으로 충분할 수 있습니다. 또한 한 씬에 최대 2개의 블렌딩 스타일을 사용하는 것이 일반적입니다.
광원 렌더 텍스처 스케일
2D 조명 시스템은 스크린 공간 광원 렌더 텍스처를 사용하여 광원 기여도를 캡처합니다. 즉 업로드 이후에 그려지는 렌더 텍스처가 많습니다. 적절한 렌더 텍스처 크기를 선택하면 성능에 직접적인 영향을 미칩니다.
기본적으로 화면 해상도의 0.5배로 설정됩니다. 광원 렌더 텍스처 크기가 작을수록 성능이 향상되고 시각적 결함이 줄어듭니다. 화면 절반 크기의 해상도로 설정하면 대부분의 상황에서 눈에 띄는 결함 없이 좋은 성능을 경험할 수 있습니다.
실험을 통해 프로젝트에 적합한 스케일을 찾아보십시오.
레이어 배칭
광원 렌더 텍스처의 수를 더 줄이려면 정렬 레이어를 배칭할 수 있도록 만드는 것이 중요합니다. 배칭된 레이어는 동일한 광원 렌더 텍스처 세트를 공유합니다. 고유한 조명이 있는 레이어는 자체 세트를 가지므로 필요한 작업량이 증가합니다.
레이어가 동일한 조명 세트를 공유하면 레이어를 함께 배칭할 수 있습니다.
광원 렌더 텍스처의 사전 렌더링
렌더러를 그리기 전에 여러 광원 렌더 텍스처 세트를 미리 렌더링할 수 있습니다. 이상적인 상황에서는 모든 광원 렌더 텍스처를 미리 렌더링한 후 파이프라인이 최종 컬러 출력에 렌더러를 그리는 작업을 진행합니다. 이렇게 하면 최종 컬러 출력의 로드/언로드/재로드할 필요성이 줄어듭니다.
고유한 조명이 있는 레이어가 많은 매우 복잡한 설정에서는 모든 광원 렌더 텍스처를 미리 렌더링하는 것이 실용적이지 않을 수 있습니다. 2D 렌더러 데이터 인스펙터에서 제한을 설정할 수 있습니다.
노멀 맵
노멀 맵을 사용하여 뎁스를 시뮬레이션하는 작업은 현재 비용이 매우 많이 듭니다. 이 기능을 활성화하면 뎁스 프리패스 동안 전체 크기의 렌더 텍스처가 생성되고 렌더러가 그 위에 그려집니다. 이 작업은 각 레이어 배치에 대해 수행됩니다.
뎁스 인식을 시뮬레이션하는 노멀 매핑 효과가 필요하지 않은 경우 모든 광원에 노멀 맵 옵션이 비활성화되어 있는지 확인하십시오.