原创性声明
本文为作者原创,在个人Blog首次发布,如需转载请注明引用出处。(yanzhang.cg@gmail.com 或 https://graphicyan.github.io/)
从云游戏到混合渲染
云游戏(Cloud Game)
原理
特点
混合渲染(Hybrid Rendering)
原理
特点
云游戏
把算力放在云端,看似简单,想要在端侧、云侧通信并实时处理逻辑、用户输入、渲染、捕获、编码、打包、传输、解码、显示,仍然由诸多难点和不确定性。
Framework for Cloud Gaming
延迟
技术分类
平台技术
- 系统集成:组建云游戏(计算)的基础平台。
- 服务质量分析(QoS):主要集中在两种指标,能量开销(电池) 和 网络指标(延迟)。
- 体验质量分析(QoE):用户的主观评分,本质上乏味且贵,大多数尝试分析QoS和QoE的关系来反推QoE。
平台优化
- 云服务器基建:多数据中心、服务节点、客户端的资源分配问题;如P2P覆盖及多层云等分布式架构。
- 通信:如多层编码和图形压缩等数据压缩方法;自适应传输根据网络动态适时更改编码比特率、帧率、分辨率等参数。
实现示例
平台部署
WebRTC
一个成熟的实时通信架构,应该具备音视频传输、多平台支持、插件管理等功能。
WebRTC实现了上面所有的功能,是做网络实时通信的最优解。
目前UE的云游戏、淘宝直播、以及ZOOM等都用这套方案。
使用WebRTC实现云推流
- 云端引擎的像素流送模块首先将建立到信令和Web服务器的链接。
- 客户端会连接到信令服务器,服务器将对客户端提供一个HTML页面,其中包含播放器控件和以JavaScript编写的控制代码。
- 用户开始流送时,信令服务器将进行交涉,在客户端浏览器和云端引擎之间建立直接连接。客户端和云端引擎须了解相互的IP地址,此连接方能工作。如两者在同一网络中运行,通常它们可看到各自的IP地址。然而在两个端点之间运行的网络地址转换(NAT)服务可能对任意一方的外部可见IP地址进行修改。解决此问题的方法通常是是用STUN或TURN服务器,告知每个组件其自身的外部可见IP地址。
- 客户端和云侧引擎之间的连接建立后,像素流送模块便会直接开始将媒体流送到浏览器。来自客户端的输入由播放器页面的JavaScript环境直接发送回云端引擎中。
- 即使媒体流送已经开始播放,信令和Web服务器仍会维持其与浏览器和云端引擎的连接,以便在必要时将用户从流送中移除,并处理浏览器造成的连接断开。
混合渲染
基于差异的协同渲染
Delta Encoding
I-Frame Rendering
云光线追踪
分布式动态光照探针
开个脑洞
NV’s Hybrid Pipeline
参考文献
[2020][VR]Cloud-to-end Rendering and Storage Management for Virtual Reality in Experimental Education
[2022][IXR]Distributed Hybrid Rendering for Metaverse Experiences
[2022][PG Poster]Cloud-Assisted Hybrid Rendering for Thin-Client Games and VR Applications
[2022]A Full Dive into Realizing the Edge-enabled Metaverse
[2008][ICIP]Low Delay Streaming of Computer Graphics
[2009]Geelix_LiveGames_Remote_Playing_of_Video_Games
[2015][MobiSys]Kahawai
[2016]Mobile Cloud Computing Research
[2020][MICRO]A Benchmarking Framework for Interactive 3D Applications in the Cloud
[2020][MTA]A Hybrid Remote Rendering Method for Mobile
GitHub - EpicGames/PixelStreamingInfrastructure: The official Pixel Streaming servers and frontend.
Build software better, together
Unreal Pixel Streaming in Azure - Azure Gaming
WebRTC和WebSocket有什么关系和区别? - 知乎