找回密码
 立即注册
查看: 296|回复: 0

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

[复制链接]
发表于 2022-5-30 05:51 | 显示全部楼层 |阅读模式
什么是云渲染

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

      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 来动态获取信令服务的地址

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 06:36 , Processed in 0.089526 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表