虚幻版Pico大空间VR入门教程 05 —— 原点坐标和项目优化技巧整理

大空间头显坐标朝向

一体机p4ue设备开启大空间定位识别,并框选障碍物范围,暂时不用Marker贴图精细定位。

大空间一体机范围设置文档:https://business.picoxr.com/cn/doc/Enterprise-LBE-Bestcase

非企业版设备(具体设备型号查看02章节),如果没有内置大空间功能,则需要使用第三方定位,例如RTK,ubw。

通过UE5默认的VR项目模板,修改SetTrackingOrigin记录:(括号内为UE5.3及以前旧版本枚举选项)

OpenXR有线串联模式下, Stage、View(eye、EyeLevel)、Local floor(StandFloor、FloorLevel)、Local(SitFloor)、customOpenXR模式下,大空间标记障碍物和VR场景障碍物匹配,

Reset Orientation and Position 则以当前玩家的位置和头显正朝向作为场景默认初始点;

(如果玩家朝向东南时触发重置头显,则在VR游戏内,现实世界的东南朝向为VR游戏内的正北,

在大空间模式下需要特别注意重置头显操作,否则真实碰撞体和虚拟碰撞体不重叠,容易导致用户跌倒)。

打包Pico Android Apk,在Stage、View(eye)、customOpenXR模式下,则以应用启动的第一次玩家位置和正朝向作为场景默认初始点;

**Local floor(StandFloor、FloorLevel)**站姿模式,正常实现大空间标记障碍物和VR场景障碍物匹配;

Local(SitFloor) 坐姿模式,正常实现大空间标记障碍物和VR场景障碍物匹配,角色模拟坐姿,现实站着对应着VR角色高度只有一半,未来可模拟动物VR视角。

PlayerStart坐标如图左下角,真人位置如图右侧小红人。

在大空间项目场景,Pawn在原地不同,用户带着头显走路,即为Camera移动坐标。

元小先VR大空间移动教程

详细视频教程可查看元小先VR大空间移动方案:https://www.bilibili.com/video/BV1BRN3eYEgM

Up主推荐使用VREP项目模板进行开发,移动时有SetActorLocationVR方法调用,可以快速移动Camera到目标位置。

使用SetActorLocation也可以,需要自己封装个方法计算目标位置的Pawn相对于Camera坐标的偏移量。

【可跳过】VRAF坐标朝向

笔者使用虚幻商城的VR Advanced Framework项目模板开发大空间VR,

该模板默认功能为:①项目运行启动后,以现实里的头显朝向为虚幻场景的正北 正X方向,因为根据目的地旋转值Set Controller Rotation。

修改方法:把过渡蓝图的BP_Transition和BP_PlayerPosition的瞬移方法参数UseRotation改为false

②VRAF框架源码在瞬移时设置了根据头显坐标重置了胶囊体位置,不适用于大空间,BP_Pawn_Base的子类BP_Pawn_VR中屏蔽AutoAdjustCapsulePosition方法。

优化方法记录

元小先常见问题总结

元小先VR开发常见问题总结 https://www.bilibili.com/video/BV1TXHme8ELd?&p=5
视频内容文字版:
①.针对一体机开发打包apk,使用PicoXR打包apk,使用picoOpenXR打包apk或者exe
PicoXR和PicoOpenXR不能同时使用。
使用PicoXR插件时,也不能勾选OpenXR插件
②.UE项目设置,以VR启动勾选
③.使用PicoXR插件或者PicoOpenXR插件打包apk时,查阅Pico官网开发注意事项
PicoXR https://developer-cn.picoxr.com/document/unreal/ue5-feature-support/
PicoOpenXR https://developer-cn.picoxr.com/document/unreal-openxr/ue5-feature-support/ (内容同上)

PicoXR文档 apk 开发注意事项

目前,在 UE5 中使用 PICO Unreal Integration SDK (PicoXR插件只能打包apk) 开发应用你需要注意以下事项:

  • 需关闭 OpenXR 插件;
  • UE5 不支持 OpenGLES,仅支持 Vulkan;
  • 若仅左眼视图被渲染,可通过勾选 Moblie Multi-View 解决。
  • SDK 不支持 Lumen。Lumen 不支持移动平台,有关 Lumen 的技术细节详见 官方文档
  • SDK 不支持 Nanite。目前 Nanite 只用在延迟渲染管线中,暂不支持移动端的前向渲染管线,有关 Nanite 的技术细节,详见 官方文档
    若你需在 UE5 中使用平台服务,除上述问题外,还需关注以下问题:
  • Visual Studio 无法编译 Android Development Target 代码。
  • WidgetInteraction 组件可能存在缺陷,会导致 3D UI 交互出现问题。(群友反馈bug:VR默认场景联机模式下,Menu菜单被射线重复触发。因为联机才出现bug,串流和apk都有可能出现,解决方法为,设置用户索引,或者偷懒使用VR框架模板)
  • 对于播放 Animation Sequence,需要将 SkeletalMeshActor 下的 Visibility Based Anim Tick Option 参数的值修改为 Always Tick Pose and Refresh Bones。
    ④.如果使用OpenXR插件+PicoOpenXR插件打包apk,基本遵循上述条件;
    如果使用OpenXR插件+PicoOpenXR插件打包exe串流,可以Lumen光追,但是代价特别卡,因为头显设备2个眼睛屏幕+PC屏幕,性能开销特别大。
    ⑤.UE5.3及以上版本的MotionController组件弃用了DisplayDeviceModel参数变量,无关紧要不影响,可以自定义在MotionController节点下添加StaticMesh,赋予手柄模型用于显示设备。
    ⑥追踪原点SetTrackingOrigin为 Local floor(StandFloor、FloorLevel) 站姿模式

VR串流显存占用高

如果开发PC串流VR项目,可以SteamVR串流或者OpenXR串流。

项目推荐关闭Lumen,否则性能开销特别大。

HTC VR 设备分辨率

截图记录为SteamVR串流+HTC VR(5K头显和3K头显对比)

VivePro2头显(5K分辨率,单眼2448x2448,双眼4896x2448)https://www.vive.com/cn/product/vive-pro2-full-kit/specs/

VivePro头显(3K分辨率,单眼1440x1600,双眼2880x1600)https://business.vive.com/cn/product/vive-pro/

Pico4UE头显(4k+分辨率,单眼2160x2160,双眼4320x2160)https://www.picoxr.com/cn/products/pico4-ultra-enterprise/specs

分辨率参考 https://www.zhihu.com/tardis/bd/ans/2390237910?source_id=1001

HTC VR SteamVR串流对比

在SteamVR串流时,可以在SteamVR的设置修改串流时的单眼渲染分辨率

3K分辨率100%,单眼分辨率2016x2240

5k分辨率150%,单眼5920x5920 相当于8K一只眼睛,双眼8K x2屏幕,再加上PC显示器,所以项目里4090显存24G爆满了,如图

默认即使不启动VR项目,头显观看SteamVR默认木屋大厅时,4090显存占用11.6G

解决方法

VivePro2官网单眼分辨率显示是2448x2448,SteamVR相当于在高分辨率采样渲染输出3块屏幕,导致VR项目的性能占用特别高。所以关闭lumen,降低渲染SteamVR分辨率,开启DLSS可以有效提高帧数。

开启lumen,单眼分辨率150%,5920x5920,大厅10帧

开启lumen,单眼分辨率100%,4832x4832,大厅22帧

关闭lumen,单眼分辨率100%,4832x4832,大厅45帧

开启lumen,单眼分辨率50%,3416x3416,大厅45帧,

3416x3416 = 3840x3038(参考系:3840x2400 4k) 所以此时50%单眼渲染分辨率3416x3416依旧相当于5K单眼。

现场环境坑

上述SteamVR设置调整好,在办公室时5K头显流畅运行VR,但是在展会现场时,因为周围相邻的展厅音响震耳欲聋,隔壁的射灯,瓷砖地板反射,导致HTC 2.0信号接收器数据不稳定,头显运行时间长导致过热,都会导致5k头显运行VR项目时变卡。

个人猜测最大原因是隔壁音响的震动,导致HTC 2.0信号器一直抖动(展会期间,音响一吵,5k头显就变卡了)

解决方法是把5k头显换成3k头显,抗干扰性好,因为设备分辨率渲染输出压力没有5k头显那么大。

移动端优化工作流【视频时长1小时】

https://www.bilibili.com/video/BV1GC4y1H71i

移动端的法线贴图和热贴图显示不明显,可以删除节约性能,WorldPositionOffset 和AmbientOcclusion和 PixetDepthOffset断开,

修改材质球中的金属值0、镜面反射高光值0、粗糙度0.6~1,从向量计算改为固定值适用于移动端

模型lod处理

实例化静态模型

Landscape的mobile材质 使用全精度

移动端打包设置

PicoXR 打包文档:https://developer-cn.picoxr.com/document/unreal/package-and-install/

缩小游戏压缩包:勾选 创建压缩烘焙包(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 设备中打开后,如果该应用亮灭屏后闪退,有可能是你在 编辑(Edit) > 项目设置(Project Settings) > 插件(Plugins) > AndroidFileServer 的 打包(Packaging)选卡下,取消勾选了 使用 AndroidFileServer(Use AndroidFileServer)。你需勾选该选项后重试。

VREP开源模板的Render默认设置,可做打包apk时的参考:

移动端光照偏灰和PC预览不一致

PC和移动端的光照环境的色差问题,打包apk的画面默认偏灰

1:修改预览设置改为Android Vulkan Mobile,此模式下无法使用地编功能,画面偏灰。

2:添加后处理,把自动曝光改为手动,并修改曝光补偿为10,此时预览Android Vulkan Mobile 和 预览D3D SM6 的对比PC画面、头显画面和apk打包头显画面,

仍有一点色差,apk依旧偏灰一点,不确定如何更进一步优化,有知道的小伙伴欢迎进群讨论。

3:打包apk后,关闭自动曝光的环境光照色差和PC D3D SM6预览 和 PC Android Vulkan Mobile预览近似。

移动端烘焙影子优化

https://forums.unrealengine.com/t/shadows-flickering-in-vr-ue5-4-3/1946752/3

UE5.4里左眼阴影闪烁,除了定向光源属性不能是可移动,还可以通过控制台命令r.Shadow.Virtual.OnePassProjection 0 解决灯光闪烁,

但是它禁用了优化,所以预期会有轻微的帧数下降。
https://forums.unrealengine.com/t/textures-and-ui-dropping-to-super-low-resolution-for-build/260338/2
打包apk时,所有贴图纹理降低成最小的mipmap质量,包括烘焙的阴影贴图

论坛解决方法是渲染设置里关闭TextureStream

贴图设置UE文档 https://dev.epicgames.com/documentation/en-us/unreal-engine/texture-support-and-settings?application_version=4.27

UE5.6纹理流送文档 https://dev.epicgames.com/documentation/zh-cn/unreal-engine/texture-streaming-in-unreal-engine

纹理流送参考 https://zhuanlan.zhihu.com/p/166132161

https://gwb.tencent.com/community/detail/110353

https://baijiahao.baidu.com/s?id=1705093428392181312&wfr=spider&for=pc

慎用贴图选项勾选 "Never Stream" 属性则为永远不流送,同时把 "Compression Settings" 设置为 "UserInterface2D" 后,性能开销非常大,它永远都不会使用其他渐进纹理,即便它在屏幕中只占 200 像素或在屏幕上占用 2000 像素,开销是一样的。

移动端贴图模糊

资料参考: https://juejin.cn/post/7369620466397675570
只有PicoXR文档: https://developer-cn.picoxr.com/document/unreal/enhance-image-quality/
PicoOpenXR打包apk时也能参考优化技巧。

  • 降低边缘锯齿感:开启四倍抗锯齿(4x MSAA)
  • 提升纹理清晰度:对所有纹理开启 Mipmap 与 Trilinear Filtering,并对墙面、地面等可能存在倾斜视角的纹理开启 Anisotropic Filtering。
    细节(Details) 面板的 层次细节(Level of Detail) 选项卡中通过 Mip生成设置(Mip Gen Settings) 自定义 mip-map 链内容的外观

使用三线性过滤( Trilinear Filtering)

使用各向异性过滤(Anisotropic Filtering)

与 Trilinear Filtering 相比,Anisotropic Filtering 的性能开销更高。建议仅为墙面、地面等有需要的纹理开启 Anisotropic Filtering 即可

大空间网络同步优化

企业版一体机用户可以使用Pico运营系统,pico的运营播控系统提供了多个队伍之间的通讯以及显示队友形象的功能

有群友说尝试对接pico播控后接入失败,笔者未使用这方案。

笔者尝试过无PC服务器,直接一体机做内容服务器,FindSession的RPC角色同步方案和PC做房主的内容服务器,

改成了PC WebSocket服务器,只发送接受头显坐标数据,然后一体机内接受队友头显坐标,创建一个NPC模拟队友进行同步移动,

最后改成了无PC服务器,每个一体机设备udp群发自身头显坐标,其他设备接受坐标后创建对应的NPC。

因为笔者的VR项目,各个游客之间没有内容上的游玩互动,只需要显示队友位置,避免游客相互撞到即可。

Pico官方运营播控系统

大空间内容与解决方案对接规则文档网址:
https://lbe.picoxr.com/docs/zhp29n3z/zkc06ddc#d80c475f
根据播控系统开发文档可以得知pico的播控系统使用TCP+心跳验证,5m内同步靠近玩家的形象数据用于避免碰撞。
大空间播控系统运营方案,可以通过飞书向pico 申请阅读文档权限
具体细节参见: PICO VR大空间运营支持系统-【播控系统】接入 (申请阅读权限)

  • 【导出内容动线】内容制作完成以后按照指定格式导出内容动线数据;虚拟内容动线数据导出说明
  • 【内容客户端】入口函数接收启动命令行参数,基于参数实现内容玩法;播控命令行启动参数
  • 【官方播控系统的内容服务器】
    • 按照33ms间隔,收集内容当前所有玩家的进度信息,发送:标准内容同步指令,到指定服务器
    • 接收桥接服务器发送过来的:标准播控指令, 并在客户端实现对应的播控逻辑
  • 收桥接服务器发送过来的**:标准玩家可见性数据指令**,在客户端显示其他内容的近距离玩家;
    内容运营解决方案的播控系统的服务收费标准暂未知晓。
    Pico官网收费:设企业设备管理平台收费标准:试用一年,29元/台/月,299元/台/年;其功能为设备管理同步地图数据。

串流Wifi信道问题记录

Pico一体机如果搭配台式电脑主机使用,可以使用无线Wifi串流,

局域网Wifi5G支持4个客户端(4台主机4台一体机),局域网Wifi2.4G支持2个客户端(2台主机2台一体机)流程运行;

如果客户端过多,同个物理空间内Wifi信道重叠对网速有影响。

群友的经验:4080s无线串联Pico设备,一台华硕八爪鱼的wifi6设备,开启wifi-5G信号只连接这4台主机4台pico,4台一体机都串流运行pico超清,头显串流的画面已经出现延迟拖影。

猜想未验证:

如果2台wifi设备放在房间两侧,通过mesh组网,当4台一体机同时呆在房间一侧,是不是出现4台一体机都自动连上这一侧的wifi设备,就容易导致一边的这台wifi设备出现高负载。

如果2台wifi设备用不同名字不同信道,且各自能翻盖全房间,是不是1台wifi设备只连接2台主机2台pico,就能极大地改善串流延迟。

VR视频清晰度不高的原因【转载地址】

https://xie.infoq.cn/article/675d891772cfd630826ff1d5f

提高视频分辨率,专属视频编码,例如Pico自带的全景视频复制到PC中则无法用PopPlayer播放器直接播放。

打包失败记录随笔

渲染闪退 硬件原因

打包exe时,提示shader材质球渲染相关报错,可能是cpu问题,重启电脑可以正常打包。

可能是cpu缩缸,在bios中关闭xmp自动睿频,或者关闭EXPO,或者关闭gameboost,再进行打包。

因为14900kf缩缸,降频降压使用,验证是否还能正常使用就是通过黑猴的着色器渲染的测试。

内存不足

因为项目资源太大,打包失败提示内存不足,有一台电脑32g内存添加70g虚拟内存后,就可以正常打包。

Win10电脑虚拟内存设置方法

https://www.192ly.com/pc/win10/win10-sz-xn-nc.html

专属文件夹名称限制

Error:The following files are set to be staged, but contain restricted folder names ("Desktop")

UE5项目内不能使用Desktop作为文件夹名字,属于限制关键词,否则打包android失败。

Win10系统打包CPU大小核调度不满

因为需要修改render配置和反复打包apk,win10系统的cpu在大小核调度上有问题,导致编译shader时cpu不能占用100%,

解决方法是在引擎的BaseEngine.ini文件,

将NumUnusedShaderCompilingThreads=3

改为NumUnusedShaderCompilingThreads="你的数量(CPU线程数量)"

我这里是改为NumUnusedShaderCompilingThreads=32 (14900KF处理器拥有32线程‌,基于24核心(8个性能核与16个能效核))

如果上述方法没有提升,

使用另一种方法,对大小核CPU调度有明显提升

在BaseEngine.ini文件,搜索 PercentageUnusedShaderCompilingThreads,把默认50改成5。

或者升级win11系统,提高大小核调度。

Build Run 运行安装报错

如果直接BuildRun后想在真机上查看运行效果,真机最好需要按手柄按键或者戴上头显设备,目的是触发adb激活连接,激活Pico设备才可以正常自动打包、传输、启动apk后显示画面,否则有概率黑屏。

避免黑屏概率问题,推荐流程是先打包成apk,然后手动鼠标双击install .bat文件安装apk,再在一体机中用手柄射线启动apk。

VR模板映射Pico按键无抓握动画

使用PicoOpenXR或者PicoXR插件,在增强输入配置Pico设备的按键映射,VR运行时抓握缺失部分动画,

可能是优先级问题,VRPawn的Begin中的AddMappingContext优先级改为1即可

相关推荐
CreasyChan20 分钟前
Unity Shader 入门指南
unity·c#·游戏引擎·shader
漂视数字孪生世界1 小时前
Unity团结引擎的前世今生
unity·游戏引擎·数字孪生
sunnyday04261 小时前
Spring Boot 项目中使用 Dynamic Datasource 实现多数据源管理
android·spring boot·后端
幽络源小助理2 小时前
下载安装AndroidStudio配置Gradle运行第一个kotlin程序
android·开发语言·kotlin
inBuilder低代码平台3 小时前
浅谈安卓Webview从初级到高级应用
android·java·webview
豌豆学姐3 小时前
Sora2 短剧视频创作中如何保持人物一致性?角色创建接口教程
android·java·aigc·php·音视频·uniapp
白熊小北极3 小时前
Android Jetpack Compose折叠屏感知与适配
android
HelloBan3 小时前
setHintTextColor不生效
android
洞窝技术5 小时前
从0到30+:智能家居配网协议融合的实战与思考
android
QING6186 小时前
SupervisorJob子协程异常处理机制 —— 新手指南
android·kotlin·android jetpack