Unity Render Streaming是Unity开源的一个高质量、高复杂的3D模型在云端渲染,手机端侧、浏览器显示的解决方案。此解决方案的流技术利用了WebRTC,开发人员甚至可以使用WebRTC包创建自己独特的解决方案。
WebRTC的安装使用我们在此前的博客中说过了,大家可以看我之前的博客查看怎样安装。
好,现在我们开始搭建一个Unity Render Streaming来看看demo的运行。
一、Unity Render Streaming安装部署以及案例的运行
1、首先创建一个工程,在Package Manager 的Advanced中首选勾选上Show preview packages,否则你查询不到Unity Render Streaming。
2、安装Unity Render Streaming,我们安装最新版本3.0.1-preview.1。
3、安装完成之后,我们导入Examples,还是在Unity Render Streaming的安装界面,在右下角点击Import into Project,就可以把Example导入Assets中了。我们就可以跑案例了。
4、接下来我们都知道webrtc client之间需要有个signal server,才能进行连接通信。Unity Render Streaming自己提供了一个web app的服务,能够作为signal server。首先我们可以在github上下载代码。地址: https://github.com/Unity-Technologies/UnityRenderStreaming
5、下载完成之后,运行webapp需要安装npm与nodejs,请自行安装。我们进入WebApp目录,我们点击run.bat进行运行。Webserver默认的监听端口为80,如果你想修改端口,可以打开package.json,修改"start": "node ./build/index.js", 为"start": "node ./build/index.js --port 9000 -w"。点击run.bat就可以运行了。
运行结果如下:
6、webapp运行之后,我们可以继续运行Unity Render Streaming的例子了。点击WebBrowserInput场景,点击Render Streaming组件,修改Signaling URL: ws://127.0.0.1:9000,并运行之。
7、我们在浏览器中输入在webapp设置的IP 与端口,比如127.0.0.1:9000。
8、点击VideoPlayer Sample,然后运行就可以查看到Unity中渲染的场景了。
当前已经完成了Unity Render Streaming案例的运行,大家就可以行动起来,搭建自己的3D远程渲染服务了。
二、Unity Render Streaming android版本支持
由于Unity Render Streaming还不支持在Android手机版本,会在3.1版本支持,如果大家不着急可以等待官方发布3.1版本支持Android手机。但是,我是比较着急的,就自己尝试修改了Unity Render Streaming代码,来支持android手机上的运行。
1、重新创建一个项目,然后我们找到上个项目中的Unity Render Streaming包的缓存找到,一般都是在项目工程目录的Libray/PackageCache中,我们com.unity.renderstreaming@3.0.1-preview目录拷贝到新的工程的Pakcage目录中。
2、进入com.unity.renderstreaming@3.0.1-preview目录,我们修改package.json文件,把依赖的com.unity.webrtc版本提高到2.4.0-exp.1版本,支持android的版本。
3、修改兼容性代码,首先修改Runtime\Scripts\RenderStreamingInternal.cs文件的第350行,修改函数SendOfferCoroutine,这主要修改的是设置只接收流的方式改变,之前使用RTCOfferOptions option = new RTCOfferOptions { offerToReceiveAudio = true, offerToReceiveVideo = true };来进行设置,新的webrtc版本不支持这种设置方式,修改为
RTCRtpTransceiver transceiver = pc.AddTransceiver(TrackKind.Video);
transceiver.Direction = RTCRtpTransceiverDirection.RecvOnly;
修改第447行RTCAnswerOptions改为RTCOfferAnswerOptions。
其他的地方都是修改RTCAnswerOptions改为RTCOfferAnswerOptions。
4、我们知道webrtc只支持ARM64。所以需要进行配置,Build Settings->Android->Player Settings->Player->Other Settings,找到Scripting Backend,把Mono更改为IL2CPP, 把ARM64勾选上。然后在编译到android手机上,就可以正常运行了。当然在配置之前,先Switch Platform一下,否则你无法配置。
最后
一个高质量、高复杂、无法在各种端侧渲染的3D模型,我们可以使用Unity Render Streaming在云端渲染,端侧呈现的解决方案。为以后VR/AR端边云协同渲染提供了一个解决方案,有值得研究的价值。