云渲染

157 阅读6分钟

Unreal5云渲染

说点废话,三维场景或者叫可视化或者叫数字孪生等等,其实就是三维的一个东西,游戏在很早很早之前就已经使用了,现在像建筑设计、汽车、机械等等也都开始使用了。毕竟从二维到三维这个进步的方向是不会错的,虽然很多都没真正落地。

当然不一定所有项目都要使用云渲染,例如你的项目本身就是CS架构的,就是电脑端的一个应用程序,只要电脑配置可以,那么就完全不需要云渲染了。

一般情况下,可能你的项目是BS架构的;为什么现在都做BS架构,其实简单来说就是方便,不需要热更新,容易分享,给别人一个连接就可以。

BS架构才会用到云渲染,当然也不一定所有的BS架构都需要云渲染,比如你的项目很小,模型面数也很小,打包之后不超过50M100M的,那你通过Unreal也好或者Unity打包个WebGL嵌入到前端就可以了,现在的网速加载个50M的东西应该还是可以的,而且以后会更快;也许以后网速快到1g都很快能加载完的话,浏览器也能带动超多面数的三维场景,那么云渲染似乎又没了用武之地了。

回归正题:

目前用云渲染的场景:智慧城市、智慧社区/园区、智慧楼宇、智慧工厂等等;反正就是各种智慧的东西,说真的,这吹牛的能力确实一般,词汇也真的是匮乏,搞来搞去全是智慧什么什么。

这里主要讲UE和像素流服务,前端相关内容就不多说了。

前置条件:

使用Windows10/11操作系统

要做云渲染,那你必须要有一个配置极高的电脑,最重要的是要有一个超级显卡,越牛越好越贵越好,推荐NVIDIA系列显卡。云渲染吗,就跟多年前的远程桌面是的;网页性能不行,就让服务器来渲染,然后给你推送像素流就行了。

一般情况下,推荐使用Chrome、Firefox。

一、像素流推送准备工作

1.安装vscode,选择扩展,搜索Vetur插件,安装一下。vscode中查看Terminal,切换到控制台Command Prompt,切换到命令行,node --version,查看一下装没装过node,没有的话,进入下一步,安装node环境。

2.安装node,重新看看js环境,node --version,还有npm --version,这个包管理器。

3.安装vue,这是一个目前主流的前端开发环境,大部分公司应该都是在用这个,查看你的电脑上有没有vue的环境,vue --version。安装vue直接在vscode控制台中输入npm install -g @vue/cli回车即可。

4.安装echarts图表插件,在vscode终端中输入npm install echarts --save回车即可。

5.新建ue项目,开启像素流送插件Pixel Streaming,打包win64版本。

二、配对器

1.虚幻的早期版本中,配对器和信令服务是放在ue打包的目录中的,后来放到github上了。可能是因为技术不成熟的问题,很多版本或多或少都有点小问题,期间github也换了,最新的地址如下:

像素流服务器下载地址

2.配对器中比较重要的是Matchmaker文件夹下的config.json

{
  "HttpPort": 90,
  "UseHTTPS": false,
  "MatchmakerPort": 9999,
  "LogToFile": true,
  "EnableWebserver": true
}

HttpPort是端口号,通过IP+端口号可以访问像素流;

MatchmakerPort是关联信令服务的,信令服务对应参数与其一致即可。

3.这里需要注意一点,官方默认的配对器进行跳转的时候,默认是跳转到信令服务的PublicIp的,这时就需要注意了,如果是公网环境,那么默认获取的是公网地址,但你自己的电脑并不是云服务器,所以无法使用,即其他电脑并不能访问像素流,本机可以访问。所以你需要修改matchmaker.js,让其跳转到本机的IPv4地址,这样就没问题了。

修改matchmaker.js,在defaultConfig之后添加以下代码:

const os = require("os");
var ifaces = os.networkInterfaces();
var ip = "";
for (var dev in ifaces) {
  ifaces[dev].forEach(function (details) {
    if (details.family === "IPv4" && !details.internal) {
      ip = details.address;
      return;
    }
  });
}
console.log("ip", ip);

4.如果不修改配对器的matchmaker.js,也可以修改信令服务,因为配对器默认是跳转到信令服务对应的ip+端口号。SignallingWebServer\platform_scripts\cmd中的Start_Common.ps1

修改如下可以在局域网中使用

 //$global:PublicIP = Invoke-WebRequest -Uri "https://api.ipify.org" -UseBasicParsing
 //if ($global:PublicIP -eq $null -Or $global:PublicIP.length -eq 0) {
 // $global:PublicIP = "127.0.0.1"
 //} else {
 //   $global:PublicIP = ($global:PublicIP).Content
 //}
 $global:cirruscmd = ""
 $global:PublicIP = "本机的IPV4"

三、信令服务

1.信令服务器就像一个桥梁,把前端和UE连接起来。

信令配置\WebServers\SignallingWebServer\config.json

config.json默认是这样的

{
  "UseFrontend": false,
  "UseMatchmaker": false,
  "UseHTTPS": false,
  "LogToFile": true,
  "LogVerbose": true,
  "HomepageFile": "player.html",
  "AdditionalRoutes": {},
  "EnableWebserver": true,
  "MatchmakerAddress": "",
  "MatchmakerPort": 9999,
  "PublicIp": "localhost",
  "HttpPort": 80,
  "HttpsPort": 443,
  "StreamerPort": 8888,
  "SFUPort": 8889,
  "MaxPlayerCount": -1
}

UseMatchmaker:是否使用配对器;

MatchmakerPort:使用配对器时,需要和配对器参数一致;

PublicIp:IP地址,信令服务跑起来之后,一定要关注该参数是否正确;

HttpPort:端口号,可以直接通过这个端口号访问像素流,使用配对器时,也会跳转到这个信令的端口号;

StreamerPort:与UE程序相关,连接对应的UE,必须和UE的启动参数一致;

MaxPlayerCount:最大用户数量。

四、启动配对器和信令服务

1.启动配对器,Matchmaker文件夹下,双击run.bat,启动服务,等窗口内出现提示;自己看看是否与配置文件相符。启动成功后不要关闭窗口,关闭窗口就表示关闭了该服务。

为了方便可以使用批处理,注意路径即可。这里通过PowerShell启动信令服务。

@echo off
echo "Restart"

taskkill /im DigitalTwins.exe -F

echo "killed"

echo "prepare to restart the software"

echo "wait 2s"

CHOICE /T 5 /C ync /CS /D y /n 

echo "Restart software"

start Windows\DigitalTwins.exe -PixelStreamingIP=localhost -PixelStreamingPort=8888 -AudioMixer -RenderOffScreen
Powershell.exe -executionpolicy remotesigned -File SignallingWebServer\platform_scripts\cmd\Start_SignallingServer.ps1
Pause

五、启动UE实例

你也可以使用批处理,@echo off

start WindowsNoEditor/Demo.exe -ResX=1920 -ResY=1080 -PixelStreamingIP=localhost -PixelStreamingPort=8888 -log -RenderOffScreen

PixelStreamingIP参数需要与信令中的StreamerPort一致图片

-ResX=1920 -ResY=1080为启动参数中UE程序的分辨率,在5.3版本中像素流服务提供了相应的接口,可以自适应客户端的分辨率。

六、公网方案

1.确保本地能正常运行。

2.公网服务器端口开放

 tcp:3478、90、80、8888

udp:1-65535

3.公网部署配对器和信令服务只修改几个端口号即可;

4.因为GPU的云服务比较贵,所以可以将配对器和信令服务部署在云服务器上,本地跑UE启动实例。UE启动参数PixelStreamingIP为公网服务器ip即可;

5.启动前端,连接PixelStreamingIP+端口号,此时可以看到流送画面

七、UE像素流无法访问的原因及解决办法

云渲染无法访问原因及解决办法