虚幻引擎 Pico 大空间 VR 开发:原点坐标与项目优化技巧
介绍基于虚幻引擎(UE5)和 Pico 一体机的大空间 VR 开发流程。涵盖追踪原点设置(SetTrackingOrigin)、不同模式下的坐标朝向处理、移动端与串流环境的性能优化策略(如关闭 Lumen、调整分辨率、抗锯齿设置)、网络同步方案(UDP 广播 NPC 模拟)以及打包常见问题(内存、CPU 调度、路径限制)。提供了针对 PicoXR 插件的配置注意事项及光照色差修正方法。

介绍基于虚幻引擎(UE5)和 Pico 一体机的大空间 VR 开发流程。涵盖追踪原点设置(SetTrackingOrigin)、不同模式下的坐标朝向处理、移动端与串流环境的性能优化策略(如关闭 Lumen、调整分辨率、抗锯齿设置)、网络同步方案(UDP 广播 NPC 模拟)以及打包常见问题(内存、CPU 调度、路径限制)。提供了针对 PicoXR 插件的配置注意事项及光照色差修正方法。

一体机设备开启大空间定位识别,并框选障碍物范围。非企业版设备若无内置大空间功能,需使用第三方定位方案。
大空间一体机范围设置文档参考官方技术文档。
通过 UE5 默认的 VR 项目模板,修改 SetTrackingOrigin 记录(括号内为旧版本枚举选项):
PlayerStart 坐标如图左下角,真人位置如图右侧。在大空间项目场景,Pawn 在原地不同,用户带着头显走路,即为 Camera 移动坐标。
推荐使用 VREP 项目模板进行开发,移动时有 SetActorLocationVR 方法调用,可以快速移动 Camera 到目标位置。使用 SetActorLocation 也可以,需要自己封装个方法计算目标位置的 Pawn 相对于 Camera 坐标的偏移量。
使用虚幻商城的 VR Advanced Framework 项目模板开发大空间 VR,该模板默认功能为项目运行启动后,以现实里的头显朝向为虚幻场景的正北 正 X 方向。
修改方法:把过渡蓝图的 BP_Transition 和 BP_PlayerPosition 的瞬移方法参数 UseRotation 改为 false。
VRAF 框架源码在瞬移时设置了根据头显坐标重置了胶囊体位置,不适用于大空间,BP_Pawn_Base 的子类 BP_Pawn_VR 中屏蔽 AutoAdjustCapsulePosition 方法。
针对一体机开发打包 apk,使用 PicoXR 打包 apk,使用 picoOpenXR 打包 apk 或者 exePicoXR 和 PicoOpenXR 不能同时使用。使用 PicoXR 插件时,也不能勾选 OpenXR 插件。UE 项目设置,以 VR 启动勾选。使用 PicoXR 插件或者 PicoOpenXR 插件打包 apk 时,查阅 Pico 官网开发注意事项。
目前,在 UE5 中使用 PICO Unreal Integration SDK 开发应用你需要注意以下事项:
若你需在 UE5 中使用平台服务,除上述问题外,还需关注以下问题:
如果使用 OpenXR 插件 +PicoOpenXR 插件打包 exe 串流,可以 Lumen 光追,但是代价特别卡,因为头显设备 2 个眼睛屏幕+PC 屏幕,性能开销特别大。追踪原点 SetTrackingOrigin 为 Local floor(StandFloor、FloorLevel) 站姿模式。
如果开发 PC 串流 VR 项目,可以 SteamVR 串流或者 OpenXR 串流。项目推荐关闭 Lumen,否则性能开销特别大。
VivePro2 头显(5K 分辨率),VivePro 头显(3K 分辨率),Pico4UE 头显(4k+ 分辨率)。分辨率参考相关技术文档。
在 SteamVR 串流时,可以在 SteamVR 的设置修改串流时的单眼渲染分辨率。3K 分辨率 100%,单眼分辨率 2016x2240。5k 分辨率 150%,单眼 5920x5920。默认即使不启动 VR 项目,头显观看 SteamVR 默认木屋大厅时,高端显卡显存占用较高。
VivePro2 官网单眼分辨率显示是 2448x2448,SteamVR 相当于在高分辨率采样渲染输出 3 块屏幕,导致 VR 项目的性能占用特别高。所以关闭 lumen,降低渲染 SteamVR 分辨率,开启 DLSS 可以有效提高帧数。
在展会现场时,因为周围相邻的展厅音响震耳欲聋,隔壁的射灯,瓷砖地板反射,导致信号接收器数据不稳定,头显运行时间长导致过热,都会导致 5k 头显运行 VR 项目时变卡。最大原因可能是音响的震动,导致信号器一直抖动。解决方法是把 5k 头显换成 3k 头显,抗干扰性好,因为设备分辨率渲染输出压力没有 5k 头显那么大。
移动端的法线贴图和热贴图显示不明显,可以删除节约性能,WorldPositionOffset 和 AmbientOcclusion 和 PixetDepthOffset 断开。
修改材质球中的金属值 0、镜面反射高光值 0、粗糙度 0.6~1,从向量计算改为固定值适用于移动端。
模型 lod 处理,实例化静态模型,Landscape 的 mobile 材质 使用全精度。
PicoXR 打包文档参考官方技术文档。
缩小游戏压缩包:勾选 创建压缩烘焙包(Created compressed cooked package)。
若安装 APK 文件至 PICO 设备时失败,并出现类似 Requires newer sdk version #30 (current version is #29) 的报错信息,你需参考配置 Android SDK 将 SDK API Level 设为 matchndk,将 NDK API Level 设为 android-29。
使用虚幻引擎 5 打包的 Shipping 模式的 .apk 文件装到 PICO 设备中打开后,如果该应用亮灭屏后闪退,有可能是你在 编辑 > 项目设置 > 插件 > AndroidFileServer 的 打包 选卡下,取消勾选了 使用 AndroidFileServer。你需勾选该选项后重试。
VREP 开源模板的 Render 默认设置,可做打包 apk 时的参考。
PC 和移动端的光照环境的色差问题,打包 apk 的画面默认偏灰。
UE5.4 里左眼阴影闪烁,除了定向光源属性不能是可移动,还可以通过控制台命令 r.Shadow.Virtual.OnePassProjection 0 解决灯光闪烁,但是它禁用了优化,所以预期会有轻微的帧数下降。
打包 apk 时,所有贴图纹理降低成最小的 mipmap 质量,包括烘焙的阴影贴图。论坛解决方法是渲染设置里关闭 TextureStream。
贴图设置参考 UE 文档。UE5.6 纹理流送文档参考官方文档。
慎用贴图选项勾选 'Never Stream' 属性则为永远不流送,同时把 'Compression Settings' 设置为 'UserInterface2D' 后,性能开销非常大。
只有 PicoXR 文档参考官方技术文档。PicoOpenXR 打包 apk 时也能参考优化技巧。
细节面板的 层次细节 选项卡中通过 Mip 生成设置 自定义 mip-map 链内容的外观。
与 Trilinear Filtering 相比,Anisotropic Filtering 的性能开销更高。建议仅为墙面、地面等有需要的纹理开启 Anisotropic Filtering 即可。
企业版一体机用户可以使用 Pico 运营系统,pico 的运营播控系统提供了多个队伍之间的通讯以及显示队友形象的功能。
尝试过无 PC 服务器,直接一体机做内容服务器,FindSession 的 RPC 角色同步方案和 PC 做房主的内容服务器,改成了 PC WebSocket 服务器,只发送接受头显坐标数据,然后一体机内接受队友头显坐标,创建一个 NPC 模拟队友进行同步移动,最后改成了无 PC 服务器,每个一体机设备 udp 群发自身头显坐标,其他设备接受坐标后创建对应的 NPC。
因为 VR 项目,各个游客之间没有内容上的游玩互动,只需要显示队友位置,避免游客相互撞到即可。
根据播控系统开发文档可以得知 pico 的播控系统使用 TCP+ 心跳验证,5m 内同步靠近玩家的形象数据用于避免碰撞。大空间播控系统运营方案,可以通过飞书向 pico 申请阅读文档权限。
内容运营解决方案的播控系统的服务收费标准暂未知晓。Pico 官网收费:设企业设备管理平台收费标准:试用一年,29 元/台/月,299 元/台/年;其功能为设备管理同步地图数据。
Pico 一体机如果搭配台式电脑主机使用,可以使用无线 Wifi 串流,局域网 Wifi5G 支持 4 个客户端,局域网 Wifi2.4G 支持 2 个客户端流程运行。
如果客户端过多,同个物理空间内 Wifi 信道重叠对网速有影响。
猜想未验证:如果 2 台 wifi 设备放在房间两侧,通过 mesh 组网,当 4 台一体机同时呆在房间一侧,是不是出现 4 台一体机都自动连上这一侧的 wifi 设备,就容易导致一边的这台 wifi 设备出现高负载。如果 2 台 wifi 设备用不同名字不同信道,且各自能翻盖全房间,是不是 1 台 wifi 设备只连接 2 台主机 2 台 pico,就能极大地改善串流延迟。
提高视频分辨率,专属视频编码,例如 Pico 自带的全景视频复制到 PC 中则无法用 PopPlayer 播放器直接播放。
打包 exe 时,提示 shader 材质球渲染相关报错,可能是 cpu 问题,重启电脑可以正常打包。可能是 cpu 缩缸,在 bios 中关闭 xmp 自动睿频,或者关闭 EXPO,或者关闭 gameboost,再进行打包。降频降压使用,验证是否还能正常使用就是通过黑猴的着色器渲染的测试。
因为项目资源太大,打包失败提示内存不足,有一台电脑 32g 内存添加 70g 虚拟内存后,就可以正常打包。
Win10 电脑虚拟内存设置方法参考相关技术文档。
Error: The following files are set to be staged, but contain restricted folder names ("Desktop")
UE5 项目内不能使用 Desktop 作为文件夹名字,属于限制关键词,否则打包 android 失败。
因为需要修改 render 配置和反复打包 apk,win10 系统的 cpu 在大小核调度上有问题,导致编译 shader 时 cpu 不能占用 100%。
解决方法是在引擎的 BaseEngine.ini 文件,将 NumUnusedShaderCompilingThreads=3 改为 NumUnusedShaderCompilingThreads="你的数量(CPU 线程数量)"。
如果上述方法没有提升,使用另一种方法,对大小核 CPU 调度有明显提升。在 BaseEngine.ini 文件,搜索 PercentageUnusedShaderCompilingThreads,把默认 50 改成 5。或者升级 win11 系统,提高大小核调度。
如果直接 BuildRun 后想在真机上查看运行效果,真机最好需要按手柄按键或者戴上头显设备,目的是触发 adb 激活连接,激活 Pico 设备才可以正常自动打包、传输、启动 apk 后显示画面,否则有概率黑屏。
避免黑屏概率问题,推荐流程是先打包成 apk,然后手动鼠标双击 install.bat 文件安装 apk,再在一体机中用手柄射线启动 apk。
使用 PicoOpenXR 或者 PicoXR 插件,在增强输入配置 Pico 设备的按键映射,VR 运行时抓握缺失部分动画,可能是优先级问题,VRPawn 的 Begin 中的 AddMappingContext 优先级改为 1 即可。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online