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

Vulkan 스왑체인 사전 회전

애플리케이션의 프레임버퍼 방향이 디스플레이의 기본 방향(대부분의 기기에서 세로 방향)과 일치하지 않는 경우 Android는 렌더링된 프레임이 화면에 나타날 때마다 추가 회전을 적용해야 합니다. 이러한 추가 회전으로 인해 기기의 하드웨어 성능에 따라 성능 부하가 발생할 수 있습니다.

대부분의 경우 매우 작은 오버헤드로 렌더링 중에 이러한 회전을 적용할 수 있습니다. 이렇게 하려면 Android 플레이어 설정(PlayerSettings.vulkanEnablePreTransform도 참조)으로 이동하여 Apply display rotation during rendering을 활성화하십시오.

참고: 회전은 Unity가 백버퍼에 직접 렌더링할 때만 적용됩니다. 렌더 텍스처로 렌더링하는 경우에는 아무 영향도 미치지 않습니다.

회전을 적용하기 위해 Unity는 투사 매트릭스(UNITY_MATRIX_MVP, UNITY_MATRIX_P)를 수정합니다. 즉 회전 자체가 버텍스 셰이더에 적용됩니다.

preTransform 설정은 Unity의 C# API 동작에 영향을 주지 않습니다. 예를 들어 Screen.width의 값은 preTransform 설정으로 인해 변경되지 않습니다. 이는 뷰포트와 시저 렉트에도 동일하게 적용됩니다. Unity는 필요에 따라 이 값을 조정하며, Grab Pass, ReadPixels, Screenshot 등과 같은 백버퍼의 리드백(되읽기) 작업도 처리합니다.

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

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

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

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

  • UNITY_DISPLAY_ORIENTATION_0
  • UNITY_DISPLAY_ORIENTATION_90
  • UNITY_DISPLAY_ORIENTATION_180
  • UNITY_DISPLAY_ORIENTATION_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용 싱글 패스 스테레오 렌더링
테스트와 디버그