VR 硬件适配与调试经验

UE 适配不同 VR 设备的高度问题

在 UE 适配 Oculus Rift 和 HTC Vive 时注意把 TrackingOrigin(EHMDTrackingOrigin::Type) 改为Floor,不然默认的追踪起源是在眼睛位置,导致头盔位置在游戏场景中高度不对。

还有一个问题是,使用 PlayerStart 放置时,PlayerStart是有高度的,所以高度可能是不对的 (取决于你的 Pawn 是怎么写的),解决的办法是可以重写AGameModeBaseSpawnDefaultPawnAtTransform,来指定高度。

UE 中游戏启动 VR 头显初始化

1
2
Stereo On/Off
Notice: Enables or Disables stereo rendering for Head Mounted Display (HMD) devices.

重置 VR 头显旋转和位置

因为 VR 头显默认的朝向 X 轴是与房间设置的定位有关的,所以,当我们初始就与定位时的朝向偏离时,进入游戏就会偏离我们设定让玩家看到的东西,所以需要进行修正。
可以使用以下函数:

1
2
3
4
5
6
7
8
9
/**
* Resets orientation by setting roll and pitch to 0, assuming that current yaw is forward direction and assuming
* current position as a 'zero-point' (for positional tracking).
*
* @param Yaw (in) the desired yaw to be set after orientation reset.
* @param Options (in) specifies either position, orientation or both should be reset.
*/
UFUNCTION(BlueprintCallable, Category="Input|HeadMountedDisplay")
static void ResetOrientationAndPosition(float Yaw = 0.f, EOrientPositionSelector::Type Options = EOrientPositionSelector::OrientationAndPosition);

蓝图中也是同名的节点。

在 UE 中使用 Oculus Rift

在 Oculus Rift 设备安装完成之后需要在 Oculus 商店中启用Unknow Source,不然无法在 UE 中使用 Oculus Rift 预览。

Unreal 的文档中适配 Oculus Rift 的页面:Developing for Oculus Rift.

Oculus 官方提供的按键操作介绍:

以及 Oculus Rift 在 UE 中的按键映射:

HTC Vive 的按键映射

与上面的 Oculus Rift 作为对比,附一张 HTC Vive 的按键映射:

HTC VIVE 设备设置



SteamVR 2.0 定位基站

HTC Vive Pro 支持的定位器是 SteamVR 2.0,支持 150°和 7 米的追踪范围,而且支持基站串联(最多 16 个) 实现大空间定位方案。

注意:二代基站不支持一代 HTC Vive 头显。

使用 Proxifier 让 Oculus 走 SS 代理

昨天公司买了台 Oculus Rift 设备,在安装设备时需要全局代理,在 Windows 下我使用的是 Proxifier 来让 Oculus 相关软件走代理。
首先先添加 Proxifier 的代理:

测试连接成功之后即可执行下列操作。

上面连接成功后可以添加一个代理规则,而 Oculus 程序相关的进程如下,我们需要做的是让下列的进程走 SS 的代理:

1
OculusSetup.exe;OculusClient.exe;OVRServiceLauncher.exe;OVRServer_x64.exe;OculusVR.exe;OculusCompatCheck.exe;CompatToolCommandLine.exe;OculusLogGatherer.exe;OVRLibrarian.exe;oculus-driver.exe;OVRLibraryService.exe;oculus-overlays.exe;OVRRedistributableInstaller.exe;

将上面的内容填入 应用程序 文本框内之后,选择走 SS 的本地代理端口就可以了。

其他的程序(如外服游戏、Steam 等),如果需要强制走 SS 代理也是同样的方法。

VR 画面模糊的问题

因为 UE 项目中默认的 Screen Percentage 值是很低的,所以会感觉很模糊,但直接调高之后会有严重的帧率下降问题。
一般设置为 200 以内画面质量就不错了,下面列有 UE 的建议值(理想值)。然后需要美术在此基础上对场景进行优化,保证接近满帧的帧率。

在 4.19 之前 (不含 4.19),VR HMD 建议的理想值(r.ScreenPercentage) 为:

DeviceType r.ScreenPercentage
Oculus Rift 133
HTC Vive 140
PSVR 140
GearVR 120
GoogleVR 120

在 4.19 之后 UE 增加了 vr.PixelDensity,在r.ScreenPercentage 保持为 100 时,就可以在不同平台的设备上使用标准化的值:

DeviceType r.ScreenPercentage vr.PixelDensity
Oculus Rift 100 1
HTC Vive 100 1
PSVR 100 1
GearVR 100 1
GoogleVR 100 1

Lower values will perform faster but will be undersampled (more blurry) while values over 1 will perform slower and will supersample (extra sharp).

这样就可以通过控制 vr.PixelDensity 这个标准化的值来控制显示质量。
具体介绍链接:Significant Changes Coming To VR Resolution Settings in 4.19

HTC VIVE 定位器故障 (03) 的解决办法

如果定位器面板上闪红灯且 SteamVR 显示 ** 定位器故障 (03)**,请试着手动烧录定位器(基站) 固件。步骤如下:
固件路径在 Steam 的安装路径下:Steam\steamapps\common\SteamVR\tools\lighthouse\firmware\lighthouse_tx\archive\htc_2.0,找到以下两个文件:

1
2
* lighthouse_tx_htc_2_0-calibration-rescue-244.bin
* lighthouse_tx_htc_2_0-244-2016-03-12.bin
  1. 在定位器 (基站) 未通电情况下,将其通过 micro-B USB 传输线连接到电脑。
  2. 按住定位器 (基站) 背后的模式键并插入电源线.
  3. 一旦电脑端确认为 USB 大容量存储设备(USB mass storage device),才可以释放模式键。
  4. 被连接的定位器 (基站) 储存设备名为“CRP_DISABLED”,打开后包含一个文件“firmware.bin”,删除它。
  5. 将“lighthouse_tx_htc_2_0-calibration-rescue-244.bin”文件复制到基站的储存空间上。
  6. 复制完成后,拔掉电源线。
  7. 等几秒,然后再次插上电源。在此过程中不要按模式键。几秒后定位器 (基站) 应该会快速的闪烁绿灯或者红灯。绿灯表示修复成功。
  8. 如果它闪烁红灯,这表示不能自动修复,请您送修。
  9. 再次拔下电源。
  10. 重复步骤 1 到 7,但第 5 步复制文件改为“lighthouse_tx_htc_2_0-244-2016-03-12.bin”。
  11. 完整后定位器 (基站) 就恢复正常了,讲其频道设置为“A”并单独跟踪(另一个基站不通电)来确认运行情况。一旦确认工作正常,再打开另一个基站。

如果出现闪烁绿灯无法正常使用,重复步骤 1 到 7,但在第五步清除”CRP_DISABLED”中所有文件,只复制 “lighthouse_tx_htc_2_0-244-2016-03-12.bin” 即可。

  • 如果手动烧录定位器 (基站) 固件和校准文还是无效,请使用手机拍照确定下列两个雷射点是否正常(不能用 iphone/ipad 雷射点拍不出來),如果这两个雷射点任一个没有显示,代表雷射损坏,请送客服检查。


参考链接:定位器故障(03)