EN

# 三、功能介绍

# 3.1 Eye Resolution Scale

设置RenderTexture缩放系数,默认为 1(推荐)。系数越小,画面清晰度越低,但帧率会提升,功耗降低;系数越大,画面清晰度提升,但是帧率会降低,功耗和内存会增加。建议最大值不要超过1。开发者可根据场景需要调整,通过UE引擎功能vr.pixelDensity调整画面像素密度。支持以下两种方式调节:

  1. Blueprint设置

使用“Execute Console Command”节点,调用“vr.pixeldensity 1”命令(注意空格)。需要保证该命令的执行时机足够早,建议放在关卡蓝图的EventBeginPlay后。

图3.1.1 vr.pixeldensity命令蓝图接口
  1. ini设置

打开文件 Project/Config/DefaultEngine.ini,然后在“[/Script/Engine.RendererSettings]”标签下添加字符串“vr.pixeldensity=1”

图 3.1.2 DefaultEngine.ini

文档地址:https://www.unrealengine.com/en-US/blog/significant-changes-coming-to-vr-resolution-settings-in-4-19?lang=en-US (opens new window)

注:已取消SDK低版本提供的“Plugins-QIYU-SDK-Eye Resolution Scale”功能。

# 3.2 注视点渲染(Foveation Rendering)

注视点渲染(Foveation Rendering)可以优化VR场景的渲染,该技术通过为视野中心提供全分辨率(无损),降低周边视野(人眼焦点区域之外)分辨率的方式来达到优化渲染的目的。固定注视渲染(FFR)是指将视野焦点固定在视口中心位置,实现从中心向周围逐渐降低清晰度的效果。

图3.2.1 Foveation Rendering原理示意图

可以在此处选择Low,Med,High三种模式。Foveation Level等级越高帧率越高,但是像素损失越多,会影响边缘区域清晰度,请根据渲染需要选择合适的等级。开发者也可以通过配置面板设置自定义注视点渲染参数。

图3.2.2 FFR设置
  • 同时可以通过以下蓝图接口设置注视点渲染的等级或具体参数:
图3.2.3 设置注视点渲染等级
图3.2.4 设置注视点渲染参数

# 3.3 Multi View

SDK支持引擎提供的Mobile MultiView功能,通过一个Camera实现立体渲染,可降低10~50%的DrawCall,对于CPU占用高的场景帧率提升明显。可以通过勾选Project Setting > Rendering > VR > Mobile Multi-View,来开启MultiView功能。

图3.3 开启MultiView功能

需要注意的是,开关该选项,务必重启引擎,来使引擎适配此设置。同时,开启Multi View前,务必关闭Mobile HDR功能。

# 3.4 Vulkan

Vulkan可以提供高性能和低CPU负担的图形绘制接口,许多方面继承于OpenGL ES,可以带来更好的CPU计算性能,但无法提高GPU性能。

由于Unreal引擎不同版本的限制,启用Vulkan渲染模式的方式不同。推荐开发者使用4.27版本进行Vulkan开发。

  • Unreal Engine 4.26
  1. 使用源码版引擎,并对源码进行修改。

将EngineSourcePath\Engine\Source\Runtime\Core\Private\Android\AndroidPlatformMisc.cpp文件中的函数IsStandaloneStereoOnlyDevice修改成如下所示:

bool FAndroidMisc::IsStandaloneStereoOnlyDevice()
{
  // Oculus HMDs are always in stereo mode
  if (FAndroidMisc::GetDeviceMake() == FString("Oculus"))
  {
   return true;
  }
#if USE_ANDROID_JNI
  extern bool AndroidThunkCpp_HasMetaDataKey(const FString& Key);
  if (AndroidThunkCpp_HasMetaDataKey(FString("android.device.bQiyuPlatform")))
  {
   return true;
  }
#endif
  return false;
}

Unreal 4.26的下载和编译请参考如下链接:

https://docs.unrealengine.com/4.26/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/DownloadingSourceCode/ (opens new window)

  1. 在项目设置 -> Android -> Build模块下勾选 Support Vulkan,取消勾选SupportOpenGL ES3.1.

图3.4 启用Vulkan

注:建议使用C++类型的工程.

  • Unreal Engine 4.27

直接使用标准版引擎即可。设置内容如下:

  1. 在项目设置 -> Android -> Build模块下勾选 Support Vulkan,取消勾选SupportOpenGL ES3.1。参见上图3.4

  2. 关闭除QIYU 之外的其他所有VR插件(包含OpenXR)

  • Vulkan已知问题:

    • 复杂场景Vulkan帧率较低
    • 不支持打开HDR
    • 使用MultiView时,MSAA 4×、8× 不生效
    • UnrealEngine4.25暂不支持Vulkan功能

# 3.5 Tracking Origin Mode

用于设置追踪原地的模式。

Eye:以头显位置和方向作为参考进行追踪,Recenter会复原虚拟相机的位置

Floor:以头显检测到的地面为参考面进行追踪,Recenter不会改变虚拟相机的高度

此方法可以直接蓝图中调用:

3.5 Tracking Origin 蓝图接口

# 3.6 VR Loading Screen

Unreal Engine启动画面并非VR模式,为了提升视觉体验,奇遇SDK提供了自定义VR启动画面的功能。使用步骤:

  1. 将所需的启动图片压缩为“loading.zip”,替换Plugins\QIYUVR\Source\QIYUVRLib\Libs\Android\assets路径下的loading.zip文件。文件要求:
  • 压缩文件名必须为“loading.zip”
  • 图片格式必须为PNG
  • 图片长宽比为1:1
  • 如果压缩多张图片,可实现序列帧图片动画效果
  1. 勾选SDK提供的开关
图3.6.1 勾选Loading Srceen开关
图3.6.2 切换启动画面
  1. 取消勾选引擎提供的“Show Launch Image”选项。具体操作是进入Project Setting > Platform > Android > Launch Images,取消勾选 Show launch image 选项。
图3.6.3 关闭引擎原生LoadingScreen

# 3.7 Boundary Blueprint

Function Blueprint Introduction
GetBoundaryGeometry 获取安全围栏点的集(X,Y,Z)
GetBoundaryDimensions 获取安全围栏的尺寸
SetBoundaryChangeDelegate 设置安全围栏状态变化的委托(写入用于获取变化状态的指针)

# 3.8 设备

  • 获取设备名称、厂商信息
设备 奇遇3 奇遇 Dream 奇遇 Dream Pro 奇遇 MIX 未来其他奇遇设备
厂商 iQIYI Smart iQIYI Smart Dreamagic Dreamagic Dreamagic
头显 QiyuHMD-3 QiyuHMD-Dream QiyuHMD-Dream Pro QiyuHMD-MIX QiyuHMD
左手柄 Qiyu Controller-Left-3 Qiyu Controller-Left-Dream Qiyu Controller-Left-Dream Qiyu Controller-Left-MIX Qiyu Controller-Left
右手柄 Qiyu Controller-Right-3 Qiyu Controller-Right-Dream Qiyu Controller-Right-Dream Qiyu Controller-Right-MIX Qiyu Controller-Right

SDK中分别提供了奇遇三、奇遇Dream、奇遇MIX的手柄模型(Dream 和Dream Pro为同款),开发者可根据实际需求,选择手柄模型,路径如下图所示。

# 3.9 Stereo Layer Component

为了提升文字、图片、视频等资源的渲染清晰度,可以将需要高清显示的图形图像区域通过立体图层 (StereoLayer)进行渲染。

StereoLayer允许您向VR头戴式显示器(HMD)发送单独的纹理,并使其在与项目其余部分不同的单独渲染通道中重新投影。这对于您想要附加到HMD但不受后期处理或抗锯齿影响的用户界面(UI)元素非常有用。由于合成层渲染会使系统负载增加,在使用过程中不建议统一场景使用过多的Overlay或Underlay,建议小于5个。在以下文档中,我们将介绍如何设置和使用立体图层。

  • 立体层设置

要将立体图层与您的VR Pawn一起使用,你需要执行以下操作。

  1. 打开要使用立体图层的Pawn,然后转到Viewport面板
  1. 从显示的下拉列表中单击添加组件按钮,然后搜索Stereo Layer组件。
  1. 保证StereoLayer组件和Camera在相同父节点下,与Camera同级。
  1. 从组件类别中选择StereoLayer组件,然后在细节面板中调节组件到合适的位置,以便在一体机中轻松查看。
  1. 在细节面板的StereoLayer部分,设置StereoLayer组件相应的属性。

完成以上步骤,即可在一体机中正常查看到StereoLayer组件,该组件在PC平台上不显示。

  • 立体层属性说明

目前SDK支持的属性如下:

设置名称 描述
Support Depth 如果立体图层需要支持与场景几何体的深度相交,则为真。
Texture 立体图层上显示的纹理(SDK不支持左右眼显示不同纹理,即双目均显示该纹理)。
Stereo Layer Type 指定将四边形渲染到屏幕的方式和位置。
StereoLayerShape 指定它是哪种类型的图层。
Priority 在所有立体图层中渲染优先级,较高优先级在较低优先级之上渲染。

上表中部分属性说明:

  1. Stereo Layer Type: 目前SDK仅支持FaceLock和WorldLock,TrackerLock的效果同FaceLock。

    • FaceLock :立体图层会和Camera的相对位置保持不变,效果是立体图层在屏幕的固定位置进行渲染。

    • WorldLock:立体图层在游戏世界内的位置不变。

  2. StereoLayerShape:目前SDK仅支持Cylinder Layer 和 Quad Layer。

    • Cylinder Layer:该类型为圆柱面,开发者可以通过Radius属性调节圆柱面的半径,通过Overlay Arc属性调节圆柱面的弧长,通过Height属性调节圆柱面的高度。

    • Quad Layer:该类型为四边形开发者可以通过Quad Size属性调节四边形的长宽。

注:表未列出的属性,SDK暂不支持。

# 3.10 3Dof

奇遇SDK提供了3Dof选项和蓝图接口,加入了“脖子模型”和“手臂模型”,可以比较自然的模拟头部和手部的运动。

开发者可以在打包前在项目设置->Plugins->QIYU中勾选“TrackingRotationOnly”,来开启3Dof功能。

如果需要在运行过程中动态切换3/6Dof模式,可以通过下面两个接口,分别获取当前追踪模式和设置追踪模 式。

# 3.11 屏幕刷新率

屏幕刷新率代表VR设备屏幕每秒刷新次数。刷新率越高,可以支持应用实现更高的帧率、更稳定的追踪和更高的 清晰度。奇遇设备上应用默认刷新率为72,即开发者在不设置或者修改刷新率时,应用以72HZ刷新屏幕。如果 您想以更高刷新率运行应用,可通过下面的接口设置刷新率。

需要注意的是,高刷新率要求应用每帧所消耗的时间更低,应用需确保运行期间的性能,稳定的维持高刷新率,否则可能无法通过奇遇商店的上线审核。奇遇各型号设备支持的刷新率情况如下:

设备型号 支持的刷新率
奇遇 3 72HZ
奇遇 Dream 72HZ
奇遇 Dream Pro 72HZ、90HZ
奇遇 MIX 72HZ、90HZ
  1. 获取可用刷新率列表

​ Refresh Rates:当前设备支持的刷新率列表。

​ Return Value:是否获取成功,True:获取成功,False:获取失败

  1. 获取当前刷新率

​ Display Refresh Rate:获取设备当前设备刷新率

​ Return Value:是否获取成功,True:获取成功,False:获取失败

  1. 设置刷新率

​ Display Refresh Rate:设置设备刷新率

​ Return Value:是否获取成功,True:获取成功,False:获取失败

# 3.12 SetColorScaleAndOffset

用于设置场景以及所有Layer的色彩偏色,在蓝图或者C++中调用如下接口即可。

蓝图接口:

C++接口:

staticvoidUQIYUVRHMDFunctionLibrary::SetColorScaleAndOffset(FLinearColorColorScale,FLinearColor ColorOffset,boolbApplyToAllLayers);

参数说明:

Color Scale:色彩梯度。

Color Offset:色彩偏移。

bApplyToAllLayers:是否应用到所有的layer。(如果为ture时,将会把效果应用到所有的underlay和 overlay中,如果为false时,仅会将效果应用到场景画面中,underlayer和overlayer不受影响)。

注意:

  1. 调节Alpha值,可能会影响Underlay的显示,建议使用Underlay时不要对Alpha值进行修改。

  2. 调节Alpha值,会引起渲染功耗增加,建议根据需要修改。

# 3.13 PC Direct Preview

为了提升开发效率,避免开发过程中频繁打包耗时,PCDirectPreview功能可以帮助开发者在Unreal Editor中 运行场景,同时在头显中可看到实时的画面。

  • 此功能支持的电脑配置:

    • 操作系統:Windows10及以上

    • 显卡:NVIDIAGeForceGTX1060/AMD5700

    • CPU:IntelCorei7-6700/AMDFX8320及以上

    • 内存:8G及以上

  • 使用方法:

  1. 通过USB方式连接电脑和头显。

  2. 安装QiyuPreviewAgent.apk到头显,安装包下载 (opens new window)链接。

  3. 点击编辑器菜单栏 Qiyu Tool - Open Preview Tool按钮,打开配置面板,可根据需要调节各设置项,参考下面的说明。

  4. 点击connect preview app,写入配置文件,并启动PreviewAgent应用。

  5. Unreal Editor中点击VR Preview运行游戏。

  6. 在头显中看到当前场景效果,电脑中同步显示。

  • 设置项说明
    1. Connect Type: 目前支持USB连接
    2. IP Port:电脑和一体机数据转发端口,如非必要,不需要修改该配置项
    3. Render Frame:电脑向一体机发送数据的频率,控制一体机的显示帧率,故电脑的渲染帧率和一体机的显示帧率并不是一致的。
    4. Render Resolution:渲染分辨率,引擎渲染以及一体机显示所用Eyebuffer的单眼大小。渲染分辨率越 大,显示效果越清晰,同时帧率也会越低。请开发者平衡好帧率和清晰度的权重,选择合适的渲染分辨率。
    5. Default Aspect Ratio:是否将渲染分辨率作用到VR Preview的窗口大小上。
    6. Adb Path:SDK中是查找PC的环境变量ANDROID_HOME来定位adb应用程序,如果开发机器未配置该 环境变量,可以通过该功能来执行adb.exe的本机路径。

注:每次编辑器VR Preview运行场景前,请先点击“Connect preview app”按钮,以确保配置正常生效且一体机端Preview Agent应用正常启动。