Version: 2023.1
언어: 한국어
Android용 싱글 패스 스테레오 렌더링
테스트와 디버그

프레임버퍼 방향

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

Unity에서 사전 회전 사용

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

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

  • Unity 에디터 사용:

  • 1.Edit > Project Settings를 선택합니다.

  • Project settings 창에서 Player 탭을 선택한 다음 아래와 같이 Android Player Settings를 엽니다.

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

Unity에서 사전 회전 적용 방법

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

사전 회전을 사용해도 Unity의 C# API 동작에는 영향을 미치지 않습니다.예를 들어 여전히 Screen.width를 사용하여 화면 너비에 액세스할 수 있습니다.뷰포트와 시저 사각에도 동일하게 적용됩니다.Unity는 필요에 따라 이를 조정하고 그랩 패스, 리드픽셀, 스크린샷과 같은 백버퍼에서 리드백(되읽기) 작업도 처리합니다.

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

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

  • 플레이어 설정에서 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용 싱글 패스 스테레오 렌더링
테스트와 디버그