애플리케이션의 프레임버퍼 방향이 디스플레이의 기본 방향(대부분의 기기에서 세로 방향)과 일치하지 않는 경우 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
이 활성화되었습니다.UNITY_DISPLAY_ORIENTATION_PRETRANSFORM은 현재 preTransform
회전으로 설정된 상수입니다. 이 값은 다음 중 하나입니다.
UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION이 정의되지 않거나, 렌더 텍스처로 렌더링되면 UNITY_DISPLAY_ORIENTATION_PRETRANSFORM 값은 UNITY_DISPLAY_ORIENTATION_0입니다.
UNITY_DISPLAY_ORIENTATION_PRETRANSFORM은 Vulkan의 특수화 상수로 변환되어 if
또는 switch
문에서 유용하게 사용됩니다.
다음과 같은 경우 preTransform을 활성화하려면 Unity 프로젝트를 사용하기 전에 추가 수정이 필요할 수 있습니다.
SV_Position
)이러한 경우는 백버퍼로 직접 렌더링할 때만 적용됩니다.