7 进阶功能

此章节介绍了几种进阶功能,用于开发者的一些特定需求以及优化。

7.1 显示帧速率

如想实时显示帧速率,请进入Pvr_UnitySDK的Inspector面板,勾选Pvr_UnitySDKManager组件下的“Show FPS”:

_images/7.1.png

图7.1 FPS开启

7.2 场景切换渐变效果

SDK提供场景切换渐变效果 通过选项开启,开启方式如下

_images/7.2.png

图7.2 Screen Fade开启

可通过图7.3 设置场景切换渐变的颜色与持续时间(时间单位为S)

_images/7.3.png

图7.3 Screen Fade开启后颜色与持续时间

7.3 限制帧率

SDK提供限制帧率功能,通过取消选中Use Default FPS选项开启,开启方式如下

_images/7.4.png

图7.4 开启限制帧率

然后在FPS文本框中输入需要的帧率值。

7.4 配置EyeBuffer大小

SDK提供配置Eyebuffer大小的功能,通过取消选中Use Default RenderTexture选项开启,开启方式如下

_images/7.5.png

图7.5 Eyebuffer配置尺寸

Tips: 建议开发者使用Use Default RenderTexture(采用硬件建议纹理尺寸),仅在特殊需求场合使用自定义RT大小。对于该选项开发者必须了解以下两点:

  • RT设置过小,会带来性能的提升,减少延迟,但同时也导致了分辨率降低;
  • RT设置过大,会带来性能的降低,;增加延迟,因此不建议RT设置超过硬件建议纹理尺寸;

7.5 自定义应用启动动画

SDK提供自定义应用启动动画的功能,点击菜单栏Pvr_UnitySDK/ Splash Screen打开Splash Screen编辑界面,如图:

_images/7.6.png

图7.6 Splash Screen 选项

SplashScreenType包含两种类型的值:UseUnitySplashScreen,UsePicoSplashScreen,每种类型对应不同的应用启动动画,下面分别对两种启动动画的配置方法进行说明。

7.5.1 使用Unity应用启动动画

SplashScreenType选择UseUnitySplashScreen,然后点击ok,log信息提示Congratulations时配置完成。此时应用启动动画使用的是Unity PlayerSetting->Splash Image中设置的启动动画。

7.5.2 使用Pico SDK提供的默认应用启动动画

SplashScreenType选择UsePicoSplashScreen,然后点击ok,log信息提示Congratulations时配置完成。 此时应用启动动画使用的是Pico SDK提供的默认启动动画。

7.5.3 使用自定义应用启动动画

SplashScreenType选择UseDynamicSplashScreen,Splash Screen界面如图:

_images/7.7.png

图7.7 Splash Screen界面

SplashImage:应用启动时的帧动画文件数组,数组中帧动画文件的顺序要和播放的顺序对应。图片像素大小应小于1080x720。

Inside_background:应用启动动画的背景图。图片像素大小应小于1080x720。

Use Splash Text:应用启动时的启动文案,勾选即可开启该功能。勾选后出现子项如图:

_images/7.8.png

图7.8 Use Splash Text选项

Default Text:默认启动文案,如果设备的系统语言不属于LanguageLocalization中的任何一种,则显示默认启动文案。

LanguageLocalization:针对不同的语言填写相应的启动文案内容即可,应用启动时会根据设备的系统语言选择显示哪种启动文案,如果LanguageLocalization中不包含当前系统语言,会显示Default Text默认启动文案内容。

FontSize:启动文案文字大小。

FontColor:启动文案文字颜色。

TextHeight:启动文案文字距离屏幕底部的距离,单位是像素。

Use Carousel:跑马灯,勾选跑马灯功能后,如果启动文案文字内容太长,会滚动显示。

Alignment:启动文案文字的对齐方式。

所有配置项配置完成以后,点击OK按钮保存配置。Log信息提示Congratulations以后保存完成。

7.6 眼球追踪

Pico Neo2 Pro设备支持眼球追踪, 眼球追踪可以追踪眼球注视位置,配合注视点渲染可以优化渲染性能。眼球追踪功能的开关在Pvr_UnitySDK中Head下,勾选Track Eyes即可,如图:

_images/7.9.png

7.7 注视点渲染

注视点渲染可以优化渲染场景的能力,为视野中心区域提供高分辨率,周边视野则大大降低场景的细节。相关的属性设置在Pvr_UnitySDK中Head下:

Foveation Gain:Vector2类型,X/Y轴方向外围像素的缩减率,值越大缩减的越多。

Foveation Area:float类型,以注视点为中心,以Foveation Area值为半径的范围内不降低分辨率。

Foveation Minimum:float类型,纹理过滤函数的纹理坐标参数。

Foveation Level:提供了Low,Med,High三种级别选择。每种级别对应了不同的Foveation参数。

_images/7.10.png

图7.10 注视点渲染

7.8 VR Compositor Layers

通常情况下,我们的场景内容会直接渲染到“Eye Buffer”上,然后“Eye Buffer”经过ATW线程的采样处理,最终渲染到VR屏幕上。

Compositor Layers(又称“透传层”)提供了一种不同于“将场景内容直接渲染到Eye Buffer ”的渲染方式:该方式不需要将场景内容渲染到“Eye Buffer”上,而是直接将场景内容“透传”给ATW线程进行采样、合成处理,这样可以避免一次纹理采样过程(将内容渲染到“Eye Buffer”上),提高纹理、视频的清晰度。

Compositor Layers最多支持15层(超过15层将不会显示)。

“透传层”目前支持两种纹理类型:

  • StandardTexture : 标准2D纹理
  • EquirectangularTexture:全景图纹理(360°)

“透传层”功能由Pvr_UnitySDKEyeOverlay.cs脚本提供,相关的属性设置如下:

_images/7.11.png

图7.11 OverLay使用方式

相关的属性设置:

Layer Index:设置渲染优先级(数值越小,优先渲染)

Image Type:设置纹理类型

  • 标准2D纹理(StandardTexture)
  • 360全景纹理(EquirectangularTexture)

Textures:指定左右眼的纹理资源

  • Left Texture:左眼纹理
  • Right Texture:右眼纹理

7.8.1 标准2D纹理

为了方便开发者快速体验2D纹理透传功能,SDK中提供了一个2DOverlay示例,帮助开发者了解如何使用“透传层”功能,开发者可以直接打包安装到设备上体验效果(Editor无法体验该功能)。

如果开发者将该功能应用到自己的项目中,可按照以下步骤进行:

  • Step 1:打开Unity建立一个空场景,在PicoMobileSDK/Pvr_UnitySDK/Prefabs/文件夹下找到Pvr_UnitySDK.prefab并拖入空场景中,并删除Main Camera对象。
_images/7.12.png

图7.12 拖入Pvr_UnitySDK预制体

  • Step 2:在场景中创建一个Quad,命名为OverlayTransform,调整该Quad的位置,使其处于Camera可见位置,待确定显示位置后,在Inspector检视面板上取消勾选Mesh Render、Mesh Collider组件。
_images/7.13.png

图7.13 创建一个Quad

_images/7.14.png

图7.14 取消Mesh Renderer等组件

Tips:“透传层”功能将会使用该Quad的Transform信息:位置、旋转、缩放

  • Step 3:在上一步创建的Quad上绑定Pvr_UnitySDKEyeOverlay.cs脚本,并在检视面板上调整其属性参数。
_images/7.15.png

图7.15 绑定Pvr_UnitySDKEyeOverlay.cs脚本

  • Layer Index:设置渲染优先级(数值越小,优先渲染);
  • Image Type:选择StandardTexture类型(2D纹理);
  • Textures:指定左右眼透传2D纹理(Tips:左右眼必须指定同一张纹理,否则会导致左右眼显示内容不一样,引起眩晕);

Tips:开发者如果需要动态修改“透传2D纹理”,可以调用Pvr_UnitySDKEyeOverlay.cs脚本中的SetTexture(Texture texture)接口.

  • Step 4:最后一步,打包安装到设备上体验效果
_images/7.16.png

图7.16 运行效果

7.8.2 360全景纹理

通常我们实现“360全景视图”需要三步:

  1. 在场景中建立球体模型;
  2. 创建“360全景纹理”材质,并指定给球体模型,然后修改shader剔除正面渲染(Cull Front);
  3. 将Camera放置在球体中心;

而使用“透传层”功能,只需要两步:

  1. 在场景中建立一个空物体,并绑定Pvr_UnitySDKEyeOverlay.cs脚本;
  2. 设置ImageType为EquirectangularTexture类型,然后指定一张“360全景纹理”即可;

为了方便开发者快速熟悉“360全景纹理透传”功能,SDK中提供了一个360Overlay示例,开发者可以直接打包安装到设备上体验效果(注:Editor无法体验该功能)。

如果开发者将该功能应用到自己的项目中,可按照以下步骤进行:

  • Step 1:步骤同“标准2D纹理”一样;
  • Step 2:在场景中建立一个空物体,命名为360OverlayTransform,并绑定Pvr_UnitySDKEyeOverlay.cs脚本;
_images/7.17.png

图7.16 创建一个空物体

  • Step 3:在脚本检视面板上设置属性参数。
_images/7.18.png

图7.17 设置脚本属性

  • ImageType:选择EquirectangularTexture类型;
  • Textures:指定左右眼透传360全景纹理;

Tips:EquirectangularTexture类型不需要设置LayerIndex来指定渲染优先级,默认优先渲染。

  • Step 4:最后一步,打包安装到设备上体验效果
_images/7.19.png

图7.19 运行效果

7.8.3 Head-Locked & World-Locked模式

默认情况下,“透传层”都是Word-Locked模式,如果想要实现Head-Locked模式,只需要在Head节点下创建一个空Transform,并绑定Pvr_UnitySDKEyeOverlay.cs脚本即可。

_images/7.20.png

图7.20 Head-Locked模式

7.9 单目相机

双目相机:从不同的角度为每只眼睛提供单独的图像,物体会和现实生活中更接近。

单目相机:使用单张图像,渲染到两只眼睛上,可有效减少渲染。

启用单目相机的方式如下:勾选 Use Monoscopic启用单目相机,否则使用双目相机。

_images/7.21.png

图7.21 单目相机切换方式