QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

龙游神州:揭秘云 VR 大空间背后的技术魔法

刘志伟;孙金波;Arthur

  • 2024-02-29
    北京
  • 本文字数:2834 字

    阅读完需:约 9 分钟

龙游神州:揭秘云VR大空间背后的技术魔法

龙游神州,一场将古老庙会与现代科技完美融合的云 VR 体验,近期成为北京地坛新春庙会的网红打卡项目。这场由央博数字文化艺术博物馆和火山引擎云游戏团队联手打造的沉浸式体验,究竟是如何通过技术魔法实现的呢?让我们一起来揭开这层神秘的面纱。

系统架构



本项目的技术架构主要由服务端包含云渲染、智能调度、运营监控、媒体服务等能力构建,并在多路并发、超低延时、体验优化、运营监控等大空间技术难点层面做了优化和提升;客户端硬件采用 Pico 4E,无线方案采用企业级 AC + AP,运营方案由 Pico 企业服务提供支持。

核心优化

WiFi 场景 24 路并发实现


24 路并发取决于客户端侧 WiFi 的规划以及 AC 和 AP 的深度优化


通过 AC 将 AP 组合理规划,保证网络连接的稳定性,同时,每个 AP 组均衡分配终端,以保证负载的均衡做到 24 路并发,同时配合 AP 固件优化,做到端到端更低的延迟




端到端低延迟



端到端延迟优化是通过服务端云流化引擎的 RTC 部分实现的。


云 VR 使用了火山引擎智能拥塞控制算法 VICC(Volcano Intelligent Congesttion Control)VICC 是一种自适应的拥塞控制算法,旨在解决全球不同网络环境下,不同音视频应用对带宽利用率和延时的差异化要求。它结合了传统拥塞控制算法(如 GCC 和 BBR)的优点,并且能够根据不不同的网络条件、业务偏好和码率特征进行自适应调整,包括自适应拥塞响应速度、自适应带宽探测幅度、自适应丢包检测策路、自适应抗抖动能力和自适应 Padding。通过这些自适应调整,VICC 算法能够提升各种复杂弱网下的带宽利用率,同时在满足不同延时的条件下,尽量提升带宽的稳定性,为用户提供更好的音视频体验。


VICC 优点如下:


  1. 多种基础网络状态参数展示

评估当前网络状态的重要指标之一是网络状态统计参数,而准确的基础网络状态参数是提高带宽估计准确性和带宽利用率的关键基石。VICC 算法提供了多种基础网络状态参数,部分基础网络状态态统计参数如下:



  1. 自适应拥塞控制

VICC 算法结合了传统拥塞控制算法的优点,并且能够根据不下同的网络条件、业务偏好和码率特征进行自适应调整,包括自适应拥塞响应速度、自适应抗干扰能力、自适应丢包检测、自适应带宽探测幅度、自适应拥塞排空等。


  1. 抗抖动能力强

拥塞响应越灵敏,意味着在网络抖动场景下容易误判,导致算法抗干扰能力下降。VICC 使用蚁穴算法来对抗网络抖动和乱序,通过接收码率和发送码率来度量网络透过率,并结合观察延迟参数变化趋势及关联性,提升自适应抗干扰能力。



帧率优化



帧率优化的实现依赖的是云 VR 引擎中的架构设计和代码实现。


云 VR 引擎,火山引擎自主研发,包含设备模拟(头盔及手柄模拟)、操控模拟、音频采集、图像采集、编码框架、传输框架等功能,架构设计如下


下面两幅图展示了市面上的主流实现及火山引擎的实现对比,可以看到,后者的单帧占用时间更少,帧率更高,关键在于以下几点:

  • 更高的 CPU 利用率,通过对各 API 实现的摸索,通过不同函数处理逻辑的合理分配来达成这点,提高了单位时间内引擎的循环次数

  • 更高的 GPU 利用率,通过渲染函数内部非阻塞处理,使 GPU 指令始终处于填满指令队列状态来实现这点,通过 insight 类软件可以确认这点

  • 多线程无缝协同,CPU 多线程协同每 1 毫秒的增加意味着帧率的损失,尤其在 VR 高帧率场景下,1 毫秒在 1 帧的处理时间的占比比普通应用更大,而各 API 实现的调用时机由 SteamVR 的 vrserver 决定,所以要降低单帧占用时间,则需要降低输出帧延迟,这里我们通过将阻塞处理分配到其他线程,实现了更快的获取帧状态的改变消息,在收到之后立即编码

  • 更高的 vsync 精准度,自研 vsync,拆离渲染、采集,使两者可以 Overlap,使 GPU 在渲染和采集之间无缝衔接,达到每帧总体时间的减少




渲染画质提升


渲染画质提升通过客户端集成火山引擎自研超分算法实现。


重新设计实现基于视口的投影技术,将平面投影转换成球面投影,降低镜目边缘的图像畸变,实现均匀像素密度。同时通过端侧的姿态预测智能算法,在网络时延出现波动时,有效降低黑边现象的出现频率。同时为了提升清晰度,客户端渲染上屏前,使用自研的图像超分算法在将 3K 超分至 4K,提升画质色彩深度,且算法是利用 OpenCL 在 GPU 侧实现,对单帧耗时影响较小。



投影优化


投影优化处理在云 VR 引擎及云流化引擎内部处理,包含渲染分辨率的提升及投影变换两部分


常见投影为 CMP,CMP 的像素密度特点为内密外疏,而这就会造成图像中部细节丢失,而边缘细节完整,这与人眼的视觉特点相背,为解决此问题,采集后若做 EAC 处理,使像素密度更加平均,可以增加图像中部细节的完整性,在云 VR 引擎初始化时,首先提高渲染分辨率,在采集完成后再对渲染后的图像做投影变换,具体原理可参考 https://blog.google/products/google-ar-vr/bringing-pixels-front-and-center-vr-video/


其他功能


QoS 实时运营监控


云 VR 大空间项目是一个线下项目,顾客的实时体验监控是运营人员比较关心的一个问题,客户端复用信令通道,以及数据包压缩技术,可以做到客户端不增加任何 QPS 情况下,实时上行传输设备帧率、码率、时延、丢包、电量等信息,使运营监控端可以实现毫秒级监控,做到追踪单个视频帧在各传输阶段的时延。

硬件方案


便捷易用的大空间能力


在以上火山引擎云游戏提供的 VR 实时云渲染技术方案之外,PICO Business 提供的大空间功能也是不可或缺的一环。


PICO Business 包括了企业级硬件、企业级 OS、企业级软件平台和企业级服务等内容,为企业用户提供全面成熟的 XR 解决方案与最佳实践,帮助用户提升业务效率,降低部署的成本和门槛,解决业务中面临的技术挑战,创造全新价值。借助 PICO Business,开发者可以快速实现面向文旅、培训、医疗、营销、线下娱乐等场景的的一体化解决方案。



大空间是 PICO Business 的一个重要产品。大空间功能是通过 SLAM 建图实现,即利用某台设备运行视觉 SLAM 定位对空间进行扫描,设备通过相机拍摄照片,并从照片中提取特征(如桌子的边缘)并记录特征的 3 维坐标(此 3 维坐标所在坐标系即为地图坐标系),此类信息最终都存储在地图中。设备开机后会对空间内提取特征,算法会将新提取的特征与地图内的进行匹配,当匹配成功后,利用 pnp 算法(该算法利用地图内特征的像素坐标、该特征的 3 维坐标、特征在当前设备上的像素坐标)可以计算出设备在地图坐标系下的位姿,即实现了使用地图坐标系。该方案仅需要头戴设备就可以完成,不依赖外部基站,部署简单易用,成本低。另外地图数据可以同步至其他设备,多台 VR 共享同一份 SLAM 地图,即共享同一地图坐标系,达到大空间多设备共享协作的目的,整合方案非常便捷。


技术细节参考 https://business.picoxr.com/cn/doc/Enterprise-Settings-LBE-v1.3#4ab364ef

总结和展望


火山引擎始终坚持在音视频与 AI 领域不断创新。未来火山引擎云游戏将持续深耕技术研发,依托高性能算力和低延迟传输方案,为各类互动场景提供有力支持,让更多用户畅享云技术带来的流畅高清影音体验。未来,随着 OpenXR 标准的逐步落地,云 XR 将是下一个技术目标,会有更多的性能优化及功能的扩展。

2024-02-29 14:287091
用户头像
鲁冬雪 GMI Cloud China Marketing Manager

发布了 362 篇内容, 共 272.1 次阅读, 收获喜欢 297 次。

关注

评论

发布
暂无评论
发现更多内容

【MindSpore有奖活动】资讯内容宝藏多,编译安装试一波!

Geek_6cdeb6

Jenkins 如何与 Kubernetes 集群的 Tekton Pipeline 交互?

张晓辉

Kubernetes 云原生 jenkins Tekton CI/CD

Java线程状态与状态间的切换

wzh

Java 线程 JVM 操作系统 并发

采访华为服务器OS首席架构师熊伟:开源背后的故事(采访提纲)

xcbeyond

采访提纲 6月日更

网络抓包实战04——深入浅出连接建立

青春不可负,生活不可欺

信息安全与网络安全的关系

网络安全学海

程序员 网络安全 安全 信息安全 渗透测试

[译] R8 优化:方法的 Outlining 优化

Antway

6月日更

Linux之mv命令

入门小站

Linux

指挥中心情指勤一体化解决方案,河北公安情指勤一体化建设

Java内存模型

wzh

Java JVM happens-before 并发 Java内存模型

详解 SQL 中的单表查询

悟空聊架构

sql 6月日更 单表查询 T-SQL

Kubernetes手记(20)- HeapSter监控

雪雷

k8s 6月日更

用VSCode刷LeetCode

IT蜗壳-Tango

6月日更

网络抓包实战05——深入浅出连接关闭

青春不可负,生活不可欺

5分钟速读之Rust权威指南(二十八)RefCell<T>

wzx

rust

网络抓包实战06——灵异事件的始作俑者:Reset数据包

青春不可负,生活不可欺

“布”道AI的正确打开方式

脑极体

模块7作业

Geek_2e7dd7

架构训练营

值得收藏的15个JavaScript语句

devpoint

JavaScript array 6月日更

知乎上线1小时,5w浏览量被下架的JVM全解笔记,内容太强大

Java架构师迁哥

你会选做通才还是专才?

石云升

职场经验 6月日更

微信小程序开发(一)

空城机

微信小程序 大前端 6月日更

Java8 的时间库(2):Date 与 LocalDate 或 LocalDateTime 互相转换

看山

Java 6月日更

在线URLEncode编码,URLDecode解码工具

入门小站

工具

一文带你了解什么是HTTP协议

网络安全学海

网络安全 安全 信息安全 HTTP 渗透测试

网络攻防学习笔记 Day53

穿过生命散发芬芳

网络攻防 6月日更

定点数与浮点数表示

若尘

浮点数 计算机组成原理 6月日更

【21-16】PowerShell循环

耳东@Erdong

PowerShell 6月日更

Redis入门五:主从复制

打工人!

redis 主从复制 6月日更

协同过滤推荐算法(十六)

Databri_AI

推荐算法

只把华为“桑田岛时间”看做一档对话节目?格局小了!

脑极体

龙游神州:揭秘云VR大空间背后的技术魔法_音视频(前端)_InfoQ精选文章