云游戏?在ACK上进行Unity远程渲染

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 本文介绍了如何在容器中进行unity远程渲染

 背景概要

一直以来,有关云游戏的讨论层出不穷,各个巨头公司也有过很多尝试,像Google的Stadia、微软的Project xCloud、亚马逊的Luna云游戏等。云游戏的核心思想是游戏客户端上云,利用云端的计算能力渲染画面再传输到终端设备上,减轻终端设备压力,实现跨设备平台、轻量级的游戏场景。

各大游戏引擎也在最近几年推出图形渲染流的相关项目,意向解决游戏画面传输问题,比如 Unreal Engine 的 Pixel Streaming,再比如 Unity3d 的 Render Streaming。这类项目的核心都是通过WebRTC(Web Real-Time Communication)实现媒体流的传输。本文旨在借助UnityRenderStreaming 容器化Unity应用,实现画面在云端渲染、然后实时传输至浏览器这样的云游戏场景。

在实践之前,我们先讨论为何要将Unity应用容器化。我们都知道在游戏场景下,图形计算资源的使用时间和玩家游戏时间是同步的,这意味着在理想情况下图形计算应在玩家游戏时提供,离开游戏时回收。容器轻量化的特点使得调度部署都更加灵活,可以满足上述需求,最大程度上增加资源的利用率。

接下来我们来在ACK上进行一个Unity远程渲染的Demo演示

实践演示

1. 使用Unity Editor开发Unity Render Streaming应用

Unity Editor Version: 2021.3.2f1c1 / Mac M1 silicon

新建Project,在Window选项卡中选中Package Manager

 

单击右上角 + 号按钮选择: Add package from git URL

 

输入com.unity.renderstreaming@3.1.0-exp.2,搜索该package,点击Add

 

跳出弹窗,是否使用新的输入方案,单击Yes,项目重启

 

重启后可以看到Unity Render Streaming包已经导入

 

我们直接使用官方Samples,1.19MB的Example 点击Import,Assets表已更新

 

由于是Demo演示,我们不做任何修改,直接Build,选择Target Platform 为 linux,Scenes仅选择WebBrowserInput,单击Build

 

将其命名为mac-linux,得到以下文件

 

除了编译Unity应用以外,我们需要制作对应的Webserver实现浏览器对其的传输访问。这里由于是官方Sample,所以直接下载对应的webserver即可。如图所示,点击Download web app

 

至此,一个能够进行Remote Render Streaming的应用就开发完成。我们得到了一个Unity的可执行文件,以及一个webserver服务应用。有关RenderStreaming更多的实现方式可以参考: https://docs.unity3d.com/Packages/com.unity.renderstreaming@3.1/manual/index.html

2. 容器化Unity应用

在这一步,我们需要容器化unity和其对应的webserver

webserver的容器化和大多web型应用类似,Dockfile如下:

FROM ubuntu:20.04
WORKDIR /run
COPY webserver ./
CMD webserver -w

unity的容器化可以参考文章《ACK上图形应用(GUI Application)容器化最佳实践》,需要注意的是基础镜像的选择,和unity Render Streaming相关依赖包的安装。基础镜像从https://hub.docker.com/r/unityci/editor选择对应的版本,当前例子我选择的是 ubuntu-2021.3.2f1-mac-mono-1.0.1 。为了使例子正常运行,需要额外安装依赖包:vulkan-util 、libc++1 、 libc++abi1 

得到两个镜像后,我们将其部署至ACK集群上。实践环境如下:

  • ACK托管集群,版本为 1.22.3-aliyun.1
  • 节点池操作系统为 Alibaba Cloud Linux 2.1903
  • 实例规格为 ecs.gn6v-c8g1.2xlarge
  • Docker Engine 版本:为 19.3.15

我们将两个容器放在一个pod中,共享网络命名空间,unity demo会与websever 就127.0.0.1:80进行websocket连接,而webserver暴露对应端口,等待浏览器访问,建立该端连接。该pod的yaml如下:

apiVersion: v1
kind: Pod
metadata:
  name: unity-demo
  namespace: default
spec:
  # 由于linux版本的webserver示例在使用web socket时只暴露了127.0.0.1地址,所以在这里pod使用宿主网络,通过EIP访问宿主的方式让浏览器建立ws连接。
  hostNetwork: true
  nodeName: xxx
  containers:
  - image: xxx:xx
    name: unity
    command: ["/run/mac-linux/mac-linux.x86_64"]
    securityContext:
      privileged: true
  - image: xxx:xx
    name: webserver
    ports:
      - containerPort: 80
        protocol: TCP
  restartPolicy: Always

3. 访问服务,并查看效果

在浏览器端直接访问宿主EIP:80,界面如下:

选择VideoPlayer Sample的模式,来看看效果如何:

通过多次访问发现实时显示效果跟网络环境有很大关系,在网络通畅的情况下基本上没有卡顿的情况出现。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
图形学 异构计算
蓝易云 - Unity下如何实现低延迟的全景RTMP|RTSP流渲染
以上就是在Unity中实现低延迟的全景RTMP/RTSP流渲染的基本步骤。具体的实现可能会根据你的具体需求和所使用的库有所不同。
98 0
|
10月前
|
API 图形学
[√]unity渲染一个文本的细节
[√]unity渲染一个文本的细节
80 0
|
编解码 图形学 Android开发
Unity3D平台实现全景实时RTMP|RTSP流渲染
好多开发者的使用场景,需要在Windows特别是Android平台实现Unity3D的全景实时视频渲染,本文以Windows平台为例,简单介绍下具体实现: 如果是RTSP或RTMP流数据,实际上难点,主要在于拉取RTSP或RTMP流,解析解码,然后把解码后的YUV数据,回调到Unity层,Unity创建个Sphere,创建个材质球(Material),并把材质球挂在到Sphere即可。
185 0
|
图形学
【Unity实战系列】如何把你的二次元老婆/老公导入Unity进行二创并且进行二次元渲染?(附模型网站分享)
【Unity实战系列】如何把你的二次元老婆/老公导入Unity进行二创并且进行二次元渲染?(附模型网站分享)
485 0
|
编解码 缓存 图形学
unity中的渲染优化技术
unity中的渲染优化技术
|
数据采集 编解码 数据处理
Unity下如何实现低延迟的全景RTMP|RTSP流渲染
Unity下如何实现低延迟的全景RTMP|RTSP流渲染
173 0
|
定位技术 API 图形学
unity-2D游戏官方案例--带视频案例(1)(层级渲染,物理碰撞,粒子动画,UI等多位基础一体化)
unity-2D游戏官方案例--带视频案例(1)(层级渲染,物理碰撞,粒子动画,UI等多位基础一体化)
171 1
|
负载均衡 安全 vr&ar
【Unity渲染】一文看懂!Unity通用渲染管线URP介绍
Unity 的渲染管线包含内置渲染管线、SRP、URP和HDRP。自从Unity2019.3开始,Unity将轻量级渲染管线修改为了通用渲染管线,这是一种快速、可扩展的渲染管线,支持所有的移动设备,适用于 2D、3D、虚拟现实 (VR) 和增强现实 (AR) 项目。
|
vr&ar 图形学
【Unity3D 灵巧小知识点】 ☀️ | 使用代码控制 Image图片层级渲染 顺序
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、r美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
【Unity3D 灵巧小知识点】 ☀️ | 使用代码控制 Image图片层级渲染 顺序