Unity Render Streaming,3D模型流式云渲染的解决方案

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端边云协同渲染提供了一个解决方案,有值得研究的价值。

  • 5
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XR风云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值