Baste 发表于 2022-5-30 05:51

Unreal实时云渲染原理与搭建流程

什么是云渲染

            由服务器进行图像渲染,然后通过视频流的方式推送给浏览器,并且用户能够发送指令行为来控制服务器的渲染行为
实时云渲染技术组成

      webrtc,unreal
      这里重点强调一下webrtc
       webrtc本身并不是什么协议,而是谷歌的一套开源库,专门用来做点对点音视频通信,应用层采用的是XMPP协议的      扩展组件libjingle,传输层采用UDP协议,采用ICE/STUN协议进行NAT穿透。协议分层如下:



webrtc协议分层

WebRTC的架构模式
WebRTC本身并不是什么协议,而是谷歌的一套开源库,专门用来做点对点音视频通信,应用层采用的是XMPP协议的扩展组件libjingle,传输层采用UDP协议,采用ICE/STUN协议进行NAT穿透。
1、点对点模式
传统的连接模式一般都是C/S架构(Client/Server架构)的,例如XMPP,A和B之间互相发送数据的流程是:A-->服务端-->B,B-->服务端-->A。
而WebRTC则是P2P模式(peer-to-peer模式)的,即点对点的,也就是说,一旦点与点之间的连接形成,那么它们之间的数据传输是不经过服务端的,而是在两者之间直接发送。如:A-->B,B-->A。这样做的一个很大的好处就是大大的降低了服务端的压力。
2、服务端、信道与信令
那这是否就意味着我们使用WebRTC开发就不需要服务端了呢?这种观点很明显是错误的,严格来说,我们使用WebRTC仅仅是不需要服务端来进行数据中转,服务端还是必不可少的,虽然服务端会比C/S架构下少做很多事,但还是不能没有它。使用WebRTC至少要用服务端做两件事:

[*]像A-->服务端-->B这样的模式来传递一些基本信令来控制P2P连接的连接与断开,还有一些自定义业务的信令,也就是说服务端的主要作用其实就是在两个客户端之间传递信令。信令其实就是一些指令型的数据,而客户端与服务端之间传输信令通道就是信道,我们用websokcet搭建长连接作为信道。
[*]穿越NAT。
什么是NAT?
NAT(Network Address Translation)即网络地址转换,NAT技术的出现,就是为了解决IPV4下IP地址匮乏的问题。比如说,我们有很多设备处于同一个路由器下,这个路由器只有一个公网IP,但是通过NAT技术我们的设备都会被分配到相应的内网IP(192.168.0.1 、192.168.0.2等),这样一个路由器的公网IP就对应了n个内网IP,就通过这种使用少量的公有IP代表较多的私有IP的方式,减缓了可用的IP地址空间的枯竭。
为什么要穿越NAT?
但是这也带来了一系列的问题,例如这里点对点连接下,会导致这样一个问题:如果客户端A想给客户端B发送数据,则数据来到客户端B所在的路由器下,会被NAT阻拦,这样B就无法收到A的数据了。所以需要穿越NAT。
怎么穿越NAT?
两个客户端分别去谷歌的STU Server获取自己对应的公网IP,通过信令的方式经过服务端传递给对方挂在peerConnection上就可以了。
云渲染执行流程

   通过信令服务器来建立渲染端和浏览器点对点的通信,渲染端把3维场景转换为视频推送给浏览器,浏览器通过webrtc 可以发送指令给渲染控制渲染端3维世界场景的程序逻辑

ue4的实时云渲染架构



环境搭建流程

windows环境

首先.启动匹配服务器
          Samples\PixelStreaming\WebServers\Matchmaker\run.bat
然后.启动信令服务器
            Samples\PixelStreaming\WebServers\SignallingWebServer\platform_scripts\cmd\run_local.bat
在然后启动Unreal
            编辑器模式下请配置:


         发布过后的程序在程序后面
            *.exe-AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888
最后.在浏览器里面直接打开localhost
       前后端分离请参考(前后端分离)说明

配置说明

   信令服务器配置
         引擎根路径下 Samples\PixelStreaming\WebServers\SignallingWebServer\config.json
               "UseFrontend": false,
               "UseMatchmaker": false,//是否开启多人一对一观看3d场景
               "UseHTTPS": false,
               "UseAuthentication": false,
               "LogToFile": true,
               "HomepageFile": "/www/player.html",//默认网站路径
               "AdditionalRoutes": {},
               "EnableWebserver": true,
               "MatchmakerAddress": "",
               "MatchmakerPort": "9999",
               "PublicIp": "localhost",//暴露给信令服务器ip地址
               "HttpPort": 80,
               "HttpsPort": 443,
               "StreamerPort": 8888//ue4客服端命令参数连接的端口      ue4启动参数配置
         -AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888
         -ForceRes 此参数启动会引擎动态调整分辨率 请注意使用
            像素送流目前不支持编辑器视口
   匹配服务器配置
            {
"HttpPort": 80,
"UseHTTPS": false,
"MatchmakerPort": 9999,//匹配服务器端口
"LogToFile": true
}前后端分离


       前端集成 Samples\PixelStreaming\WebServers\SignallingWebServer\scripts 下面的代码
         注意修改app.js connect() 函数里面websocket的连接地址,配置为动态设置变量,通过请求匹配服务器signallingserver 来动态获取信令服务的地址
页: [1]
查看完整版本: Unreal实时云渲染原理与搭建流程