그래픽스 컴포지터 사용
Unity 에디터에서 그래픽스 컴포지터 창을 열려면 메뉴에서 Window > Render Pipeline > Graphics Compositor를 선택합니다. 이 창에서 그래픽스 컴포지터를 활성화하고 설정을 제어할 수 있습니다. 그래픽스 컴포지터를 처음 활성화하면 메인 카메라의 출력을 최종적으로 구성된 프레임에 전달하는 기본 "pass-through" 합성 프로파일을 자동으로 사용합니다. 더 많은 레이어를 이 프로파일에 추가하고 프로퍼티를 편집하거나 디스크에서 다른 프로파일을 로드할 수 있습니다. 컴포지터 창의 프로퍼티에 대한 자세한 내용은 컴포지터 창을 참조하십시오.
일반 워크플로
- 씬 뷰에서 씬을 편집할 수 있는 반면 합성 출력은 게임 뷰에서 렌더링됩니다. 출력을 라이브로 미리보려면 씬 뷰와 게임 뷰를 나란히 두거나 에디터에서 사용할 수 있는 경우 게임 뷰를 도킹 해제하고 별도의 모니터에 두는 것이 가장 좋습니다.
- 게임 뷰가 Display 1를 표시하도록 설정된 경우 그래픽스 컴포지터가 (컴포지터 창에) Display 1를 출력하는지 확인해야 합니다. 또한 씬의 카메라를 Display 2이나 Display 3와 같이 다른 디스플레이에 출력하도록 설정해야 합니다. 이렇게 하면 불필요한 드로잉 작업이 발생하지 않고 디스플레이 출력에 충돌이 발생하지 않습니다.
알파 기반 합성
여러 합성 작업에는 알파 채널이 필요합니다. 그래픽스 컴포지터의 모든 기능을 적절히 사용하려면 다음을 수행하는 것이 좋습니다(필수는 아님).
- 렌더링을 위한 컬러 버퍼 포맷을 16비트 하프 플로트(R16G16B16A16)로 설정합니다.
- 포스트 프로세싱을 위한 버퍼 포맷을 16비트 하프 플로트(R16G16B16A16)로 설정합니다.
두 버퍼 포맷 옵션은 HDRP 에셋에 있습니다. 컴포지터가 알파 채널이 없는 버퍼 포맷을 감지하는 경우 경고를 표시합니다. 자세한 내용은 알파 출력을 참조하십시오.
레이어 타입
그래픽스 컴포지터 툴은 일반적으로 다음과 같이 두 가지 타입의 레이어를 처리합니다.
- Composition Layers: 컴포지션 레이어는 최종 이미지를 생성하기 위해 컴포지터가 함께 블렌딩하는 렌더 타겟(이미지)입니다. 컴포지션 그래프에서 정의할 수 있습니다. 컴포지션 그래프는 레이어 수와 조합하는 방법을 정의하지만 각 레이어의 콘텐츠를 정의하지는 않습니다.
- Sub-layers: 하위 레이어는 합성 레이어 콘텐츠 생성에 대한 역할을 담당합니다. 렌더 예약 섹션에 있는 그래픽스 컴포지터 창에서 정의할 수 있습니다. 여러 하위 레이어를 스태킹하여 합성 레이어 콘텐츠를 정의할 수 있습니다. 이런 경우 모든 하위 레이어는 동일한 렌더 타겟을 공유합니다.
합성 그래프
출력 이미지를 생성하기 위해 그래픽스 컴포지터는 여러 합성 레이어를 조합하는 합성 작업 그래프를 사용합니다. 구체적으로 그래픽스 컴포지터는 타겟으로 언릿 마스터 노드와 함께 셰이더 그래프를 사용합니다. 출력 이미지를 지정하기 위해 컴포지터는 Color 포트에 연결하는 값을 사용합니다. 마스터 노드의 다른 포트에 연결할 필요는 없습니다.
참고: 합성 출력이 렌더 타겟일 때 마스터 노드에서 생성하는 머티리얼은 반드시 양면이어야 합니다.
합성 그래프를 생성할 때 다음과 같이 노출할 수 있는 두 가지 메인 타입인 입력 프로퍼티가 있습니다.
- Composition Layer: 모든 Texture2D 프로퍼티는 최종 프레임을 생성하기 위해 그래프가 합성하는 레이어에 해당하는 합성 레이어로 동작합니다. 이러한 프로퍼티는 합성 레이어로 그래픽스 컴포지터 창의 렌더 예약에 자동으로 표시됩니다. 셰이더 그래프의 Mode 옵션은 렌더 예약 리스트의 레이어 가시성을 토글해서 끌 때 셰이더가 사용하는 기본 값에 해당합니다.
참고: 기본적으로 이 값은 흰색으로 설정되지만 여러 합성 작업과 동작의 경우 이 값을 검정색으로 대신 설정하는 것이 좋습니다. - Composition Parameters: 이것은 Texture2D가 아닌 모든 노출된 프로퍼티를 나타냅니다. 합성 파라미터는 합성의 다양한 측면을 제어할 수 있습니다. 합성 파라미터의 예시에는 Texture2D에 색조를 적용하기 위해 전반적인 밝기나 컬러 입력을 제어하는 플로트 입력이 포함됩니다. 이러한 프로퍼티는 그래픽스 컴포지터 창의 합성 파라미터 섹션에 자동으로 표시됩니다.
다음의 그래프에는 위에서 언급한 프로퍼티 타입의 예시가 포함되어 있습니다. Logo 프로퍼티는 합성 레이어의 예시이며 Opacity 프로퍼티는 합성 측면을 제어하기 위한 입력 프로퍼티의 예시입니다.
Unity는 그래픽스 컴포지터 프로퍼티를 .asset 파일에 합성 그래프와 동일한 이름으로 저장합니다. 그래픽스 컴포지터가 합성 그래프를 로드할 때 해당 에셋 파일이 있는 경우 프로퍼티도 로드하고 해당 에셋 파일이 없는 경우 기본 설정으로 새로운 에셋을 생성합니다.
합성 레이어 추가 및 제거
새로운 합성 레이어를 추가하려면 합성 그래프에 새로운 Texture2D 입력 프로퍼티를 생성합니다. 편리성을 높이기 위해 그래프 인스펙터의 노드 설정에 있는 레퍼런스 필드에 짧고 직관적인 이름(예: BackGround Layer)을 입력해야 합니다. 다음에 합성 그래프를 저장할 때 새로운 레이어는 레퍼런스로 사용한 이름으로 그래픽스 컴포지터 창의 렌더 예약 섹션에 자동으로 표시됩니다. 거기에서 레이어 프로퍼티를 제어하고 레이어에 콘텐츠를 추가하는 방법을 지정할 수 있습니다.
이와 유사하게 합성 레이어를 삭제하려면 합성 그래프에서 해당 Texture2D 프로퍼티를 제거합니다.
합성 레이어에 콘텐츠 추가
각 합성 레이어는 하나 이상의 하위 레이어에서 콘텐츠를 제공받을 수 있습니다. 다음은 세 가지 하위 레이어 타입입니다.
- Camera Sub-layer: 해당 콘텐츠 소스는 Unity 카메라입니다. 하위 레이어의 프로퍼티에 사용할 카메라 종류를 선택할 수 있습니다.
- Video Sub-layer: 해당 콘텐츠 소스는 Unity 비디오 플레이어입니다. 하위 레이어의 프로퍼티에 사용할 비디오 플레이어 종류를 선택할 수 있습니다.
- Image Sub-layer: 해당 콘텐츠 소스는 정적 이미지입니다. 하위 레이어의 프로퍼티에 사용할 이미지 종류를 선택할 수 있습니다.
합성 레이어에 하위 레이어를 추가하려면 합성 레이어를 선택하고 Add 드롭다운 버튼을 클릭합니다. 드롭다운에서 하위 레이어 타입을 선택할 수 있습니다.
하위 레이어를 제거하려면 하위 레이어를 선택하고 Delete 버튼을 클릭합니다.
참고: 이 방법으로는 합성 레이어가 아닌 하위 레이어만 삭제할 수 있습니다. 대신 합성 레이어를 삭제하려면 합성 그래프에서 해당 Texture2D 프로퍼티를 제거하십시오.
포스트 프로세싱 및 하위 레이어
합성 레이어의 각 하위 레이어는 고유한 포스트 프로세싱 효과 세트를 가질 수 있습니다. 레이어마다 이런 포스트 프로세싱 타입을 설정하려면 다음을 수행해야 합니다.
- 고유한 포스트 프로세싱 효과가 필요한 모든 하위 레이어에 대해 씬에 고유한 볼륨을 추가합니다.
- 각 볼륨의 경우 Unity 에디터에서 고유한 레이어 마스크를 생성하고 설정합니다.
- 각 하위 레이어의 프로퍼티에서 알맞은 볼륨 마스크를 오버라이드하고 설정합니다.
컴포지터가 하위 레이어에 대한 포스트 프로세싱을 실행할 때 포스트 프로세싱 작업은 0보다 큰 알파 값을 가진 픽셀에만 영향을 미칩니다. 포스트 프로세싱이 이 하위 레이어가 드로우한 픽셀에만 영향을 미치게 하려면 하위 레이어 프로퍼티에서 Clear Alpha 옵션을 선택합니다. Clear Alpha 옵션을 선택하지 않으면 포스트 프로세싱은 현재 하위 레이어에 이전에 드로우한 하위 레이어에도 영향을 미칩니다.
여러 하위 레이어에서 리소스를 많이 소모하는 포스트 프로세싱 효과(예: 뎁스오브필드(피사계심도))를 활성화하는 경우 런타임 성능에 부정적인 영향을 미칩니다. 따라서 가능한 경우 레이어 그룹에 포스트 프로세싱을 실행하는 것이 가장 좋습니다. 이렇게 하려면 하위 레이어 프로퍼티에서 Clear Alpha 옵션을 사용하십시오.
알파 기반 합성 및 블룸
일반적으로 포스트 프로세싱은 0보다 큰 알파 값을 가진 픽셀에만 영향을 미칩니다. 이에 대한 예외로는 생성되는 글로우가 알파 값이 0인 픽셀로 퍼지는 블룸 효과입니다. 하지만 0보다 큰 알파 값을 가진 소스 픽셀만 블룸 효과에 기여합니다(기여도는 알파 값에 비례).
카메라 스태킹
둘 이상의 하위 레이어를 사용하여 합성 레이어의 콘텐츠를 지정할 때 이는 하위 레이어를 동일한 렌더 타겟 상단에 "스태킹"합니다. 렌더 타겟의 크기와 포맷을 지정하려면 부모 합성 레이어의 프로퍼티를 사용합니다. 하위 레이어는 부모 합성 레이어의 크기와 포맷을 상속하며 이러한 프로퍼티를 특정 하위 레이어에 대해 독립적으로 변경할 수 없습니다. 즉 스태킹된 모든 카메라/하위 레이어가 동일한 크기와 포맷이라는 의미입니다.
스태킹 순서를 변경하려면 그래픽스 컴포지터 창의 렌더 예약 섹션에서 하위 레이어를 다시 배열합니다. 합성은 뎁스를 인식하며 이는 표면이 불투명한 레이어의 경우 하위 레이어 순서를 변경해도 결과 이미지에 차이가 없다는 의미입니다. 이는 하위 레이어에서 클리어 뎁스 옵션을 선택하지 않는 한 적용됩니다(하위 레이어 간의 뎁스 유지).
하위 레이어에 올바른 순서를 선택하는 것은 뎁스를 드로우하지 않는 요소(예: UI 요소)와 일반적으로 레이어 간에 적절한 스크린 공간 리플렉션과 투명도를 얻는 데 중요합니다. 예를 들어 3D 월드 상단에서 렌더링해야 하는 반투명 UI 요소가 있는 레이어는 합성 레이어의 스태킹된 하위 레이어에서 마지막으로 표시되어야 합니다.
하위 레이어 프로퍼티 섹션은 스태킹 작업 타입을 제어합니다.
렌더 예약
렌더 예약은 합성 레이어와 하위 레이어의 순서 변경이 가능한 리스트입니다. 하위 레이어는 해당 부모 합성 레이어 아래에 인덴트되어 표시되므로 계층 구조 관계를 알아보기 쉽습니다. 여러 하위 레이어가 한 부모 레이어 아래에 표시되는 경우 카메라 스택을 형성합니다. Unity는 제일 상단에 레이어를 렌더링합니다. 해당 리스트 순서를 변경하려면 합성 레이어와 하위 레이어 모두를 클릭하여 이동할 수 있습니다. 이를 사용하여 카메라 스택의 렌더링 순서를 변경하거나 하위 레이어를 한 부모 합성 레이어에서 다른 부모 합성 레이어로 이동할 수 있습니다.
합성 파라미터
이 섹션은 입력 합성 레이어가 아닌 노출된 모든 프로퍼티를 표시합니다(예: 최종 합성 밝기를 제어하는 플로트 또는 Texture2D에 색조를 적용하는 컬러). 이 섹션에서 창을 사용하여 합성 그래프 밖에서 각 프로퍼티 값을 편집할 수 있습니다. 합성 그래프 내부의 값을 하드코딩하는 대신 그래프에서 그래픽스 컴포지터 창으로 프로퍼티를 노출하는 것이 좋습니다. 이는 값을 편집하기 위해 합성 그래프를 열지 않아도 되는 프로젝트 사이에서 합성 프로파일을 공유하는 데 도움이 됩니다.
스크린 공간 UI 합성
그래픽스 컴포지터를 사용하여 스크린 공간 캔버스(UI) 요소를 구성할 수 있습니다. 캔버스가 Screen Space - Camera 렌더 모드를 사용하는 경우 Render Camera (캔버스 인스펙터에서)를 해당 UI를 드로우하는 하위 레이어 카메라로 설정해야 합니다. 하지만 이러한 경우 UI를 드로우하는 카메라 하위 레이어는 다음과 같습니다.
- 고유한 카메라가 할당되어야 합니다. 이 카메라를 다른 하위 레이어에서 사용해선 안 됩니다.
- 카메라 상태(안티앨리어싱, 컬링 마스크, 볼륨 마스크 등)를 오버라이드해선 안 됩니다. 하위 레이어가 사용하는 소스 카메라에서 이러한 프로퍼티를 변경할 수 있습니다.
또한 그래픽스 컴포지터의 출력 카메라를 컴포지터의 출력 상단에 캔버스 요소를 드로우하기 위해 렌더 카메라로 사용할 수 없습니다. 동일한 효과를 얻으려면 렌더 예약에 새로운 하위 레이어를 추가하고 이 레이어의 카메라를 UI의 렌더 카메라로 사용한 다음 사용할 수 있는 합성 작업(스태킹 또는 그래프 기반 합성)으로 결과 레이어를 구성할 수 있습니다.
퍼포먼스 고려 사항
그래픽스 컴포지터는 CPU와 GPU의 오버헤드가 상당히 높고 비디오 게임처럼 성능이 중요한 애플리케이션에서는 사용을 권장하지 않습니다.
다음은 그래픽스 컴포지터를 사용하는 애플리케이션의 성능을 개선하는 데 도움이 될 수 있는 몇 가지 팁입니다.
렌더 예약에서 하위 레이어의 수를 줄입니다. 모든 하위 레이어는 내부적으로 고유한 카메라를 사용합니다. 이는 동일한 소스 카메라가 UI의 여러 하위 레이어에 할당되는 경우에도 마찬가지입니다.
단순한 오브젝트를 렌더링하는 하위 레이어의 경우 소스 카메라를 선택하고 인스펙터에서 "Custom Frame Settings"를 선택합니다. 거기에서 가능한 한 많이 HDRP 기능을 비활성화합니다. 예를 들어 이 하위 레이어에 대해 스크린 공간 반사(SSR)가 필요하지 않다는 것을 알고 있는 경우 SSR에 대한 지원을 비활성화할 수 있습니다.
최대 해상도로 별도의 레이어에 시각적으로 중요한 요소를 유지하는 동안 특정 합성 레이어 해상도를 감소할 수 있습니다(이 레이어에 스태킹된 모든 하위 레이어에 영향을 미침).