Version: Unity 6.0 (6000.0)
언어 : 한국어
Android용 싱글 패스 스테레오 렌더링
Vulkan API 사용 허용 또는 거부

프레임버퍼 방향

애플리케이션의 프레임버퍼 방향이 기기의 네이티브 디스플레이 방향(대부분의 기기에서는 세로)과 일치하지 않는 경우 Android는 매 프레임마다 기기의 디스플레이와 일치하도록 애플리케이션의 프레임버퍼를 회전시킵니다. 기기의 하드웨어 성능에 따라 이러한 추가 회전은 성능에 부정적인 영향을 미칠 수 있습니다. 애플리케이션에서 Vulkan 그래픽스 API를 사용하고 기기에서 Vulkan을 지원하는 경우 Unity는 렌더링 중에 이 회전을 적용하여 회전의 성능 영향을 줄일 수 있습니다. 이를 사전 회전이라고 합니다.

Unity에서 사전 회전 사용

Unity에서 사전 회전을 적용하기 위해 C# 스크립트 또는 Unity 에디터를 사용할 수 있습니다.

  • C# 스크립트: PlayerSettings.vulkanEnablePreTransformtrue로 설정합니다.

  • Unity 에디터 사용:

    1. Edit > Project Settings를 선택합니다.
  • Player Settings 창에서 Player 탭을 선택하고 Android Player Settings를 엽니다.

  • Other Settings 섹션에서 Apply display rotation during rendering을 활성화합니다.

Unity에서 사전 회전 적용 방법

Unity는 렌더 텍스처에 렌더링할 때가 아니라 기기의 백버퍼에 직접 렌더링할 때 사전 회전을 적용합니다. 회전을 적용하기 위해 Unity는 UNITY_MATRIX_MVPUNITY_MATRIX_P 빌트인 셰이더 변수에 영향을 주는 투사 매트릭스를 수정합니다. 즉, Unity는 버텍스 셰이더에 회전을 적용합니다.

사전 회전을 사용하면 Unity의 C# API 동작에 영향을 미치지 않습니다. 예를 들어 Screen.width를 사용하여 화면 너비에 액세스할 수 있습니다. 뷰포트와 시저 사각도 마찬가지입니다. Unity는 필요에 따라 이 값을 조정하며, Grab Pass, ReadPixels, Screenshot 등과 같은 백버퍼의 리드백(되읽기) 작업도 처리합니다.

Unity는 셰이더에서 특수한 경우를 처리하기 위한 유틸리티 매크로를 제공합니다(자세한 내용은 아래의 제한 사항 섹션 참조).

UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION 매크로는 다음의 모든 조건이 true일 때에만 정의되고, 그렇지 않으면 정의되지 않습니다.

  • Player Settings에서 preTransform이 활성화되었습니다.
  • 플랫폼이 Android로 설정되었습니다.
  • 그래픽스 API가 Vulkan으로 설정되었습니다.

UNITY_DISPLAY_ORIENTATION_PRETRANSFORM은 현재 preTransform 회전으로 설정된 상수입니다. 이 값은 다음 중 하나입니다.

  • UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_0
  • UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_90
  • UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_180
  • UNITY_DISPLAY_ORIENTATION_PRETRANSFORM_270

UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION이 정의되지 않거나, 렌더 텍스처로 렌더링되면 UNITY_DISPLAY_ORIENTATION_PRETRANSFORM 값은 UNITY_DISPLAY_ORIENTATION_0입니다.

UNITY_DISPLAY_ORIENTATION_PRETRANSFORM은 Vulkan 한정 상수로 변환되므로 if 또는 switch 문에서 효율적으로 사용할 수 있습니다.

제한

다음과 같은 경우 preTransform을 활성화하려면 Unity 프로젝트를 사용하기 전에 추가 수정이 필요할 수 있습니다.

  • Unity의 투사 매트릭스를 사용하지 않는 셰이더
  • 프래그먼트 셰이더에서 현재 픽셀 위치에 종속되는 셰이더(SV_Position)
  • 스크린 공간 파생물(ddx, ddy)을 사용하는 셰이더
  • Vulkan 스왑체인 이미지를 사용하는 네이티브 렌더링 플러그인을 수정해야 할 수 있음
  • 다른 렌더 텍스처와 더불어 MRT 설정의 Unity RenderPass API와 함께 백버퍼 사용

이러한 경우는 백버퍼로 직접 렌더링할 때만 적용됩니다.

추가 리소스

Android용 싱글 패스 스테레오 렌더링
Vulkan API 사용 허용 또는 거부