Version: 6000.3
语言: 中文
适用于 Android 的单通道立体渲染
Vulkan API 和图形作业模式配置

帧缓冲区方向

如果应用的帧缓冲区方向与设备的原生显示方向(对于大多数设备来说是纵向的)不匹配,则 Android 会每帧旋转应用的帧缓冲区以匹配设备的显示。根据设备的硬件功能,这种额外的轮换可能会对性能产生负面影响。如果您的应用程序使用 Vulkan 图形 API 并且设备支持 Vulkan,则 Unity 可以在渲染期间应用此旋转,从而减少旋转对性能的影响。这称为预旋转

在 Unity 中使用预旋转

若要使 Unity 应用预旋转,可以使用 C#脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
或 Unity 编辑器:

Unity 如何应用预轮换

Unity 在直接渲染到设备的后台缓冲区时应用预旋转,而不是在渲染到渲染纹理(Render Texture一种特殊类型的纹理,在运行时创建和更新。要使用它们,请先创建一个新的渲染纹理,并指定要渲染到其中的摄像机之一。然后,你可以在材质中使用渲染纹理,就像使用常规纹理一样。更多信息
请参阅术语表
.为了应用旋转,Unity 修改了影响UNITY_MATRIX_MVPUNITY_MATRIX_P 内置着色器变量。这意味着 Unity 在顶点中应用旋转着色器在 GPU 上运行的程序。更多信息
请参阅术语表
.

使用预轮换不会影响 Unity 的 C# API 的行为。例如,您仍然可以使用Screen.width以访问屏幕的宽度。这同样适用于视口用户在屏幕上应用的可见区域。
请参阅术语表
剪刀式矩形。Unity 会根据需要调整这些作,并处理来自后台缓冲区的回读作,例如 Grab Pass、ReadPixel 或 Screenshot。

Unity 提供了实用工具宏来处理着色器中的特殊情况(有关更多信息,请参阅下面的限制部分)。

仅当以下所有条件都成立时,才会定义宏UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION(否则,它未定义):

  • 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 和图形作业模式配置