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+端口号,此时可以看到流送画面