基于服务器端的三维渲染技术综述
2019-04-12徐婵婵
徐婵婵
(中国传媒大学 计算机与网络空间安全学院,北京 100024)
1 引言
渲染,已经成为了一个商业化的产品。动漫、电影以及游戏产业最重要的一个阶段就是进行高质量的且漫长的三维渲染流程。震撼人心的三维大片需要同样震撼人心的三维效果画面来做硬性支撑。渲染是这些产业不得不开销的奢侈品,其耗资巨大,贵到以秒来计算,贵到与真人实景的传统大片一样烧钱。渲染昂贵是因为离线的三维渲染是一个巨大的工程,即使用专门的图形渲染器,一帧高质量的图像渲染十几小时、甚至几十小时都很有可能,数十甚至数百GT的源文件的渲染工作是不可能靠个人的“超能本”在有效的时间内完成的。渲染服务器集群的建立往往很困难,且不论硬件机器的购买所需,单是一台服务器配备上完备的正版三维渲染软件就是一笔不小的开销。这种渲染服务器集群的有效工作时间常常是很少的,闲置的机器会占用很大的空间,一旦全部工作起来,耗电量却又是惊人。根据计算机硬件发展的摩尔定律,购买的机器在五年之后又需要更新换代以适应新的渲染需求。
如何让低端硬件配置的终端机,如手机、PAD、PC机,以及限制计算能力的应用平台,如网页等,也能实现高端配置的主机才能获得的高质量的渲染效果,一直是研究人员努力的方向。基于本地的渲染方式或基于客户端的渲染方式已远不能满足这种需求,研究人员开始让服务器承担一部分渲染工作,这就是一种基于服务器端的渲染方式。
当前流行的云计算就是一种基于服务器端的计算方式。而云渲染只不过是把三维渲染放到了网络上,服务器端执行的是渲染计算。云渲染的核心思想是:把大量用网络连接的计算资源进行统一管理和调度,构成了一个计算资源池,以此为用户提供按需服务[1]。在云渲染中,专有功能集中装备在云端的渲染器上,而本地只需要装备一个瘦客户端。所谓瘦客户端是指客户端-服务器网络体系中一个基本无需应用程序的计算机终端,它只传递鼠标和键盘的输入信息给服务器,并不会在本地进行过多的数据处理[2]。客户端把要渲染的数据和设置的参数传到云端服务器,云端服务器会完成渲染任务并把渲染结果返回给客户端。鉴于所有的渲染工作全在云端完成,本地既不需要装备大量的图形工作站,也不需要具备高性能的计算功能。随着计算机配备更快运算速度的微处理器、更大容量的内存、更高传输率的网络带宽、功能更加完备的应用软件,服务器端因而能够实现更快速的计算功能并为客户端提供更多更强大的服务。
本文将主要介绍在服务器端进行三维渲染的相关技术,包括系统框架、视频流的压缩和编码等,并对服务器端的三维渲染技术的应用前景即云游戏部分进行了初探。
文章具体安排如下:第二章介绍三维渲染的不同方式,第三章着重介绍基于服务器端的三维渲染方法的系统框架和视频压缩的一些改进技术,云游戏的相关内容将在第四章作简要介绍,最后一章对全文做总结并结合当下的一些问题提出展望。
2 基于服务器端的渲染和基于客户端的渲染
Martin等人[3]根据渲染发生在客户端还是服务器端将三维渲染分为基于客户端的渲染、基于服务器端的渲染和基于混合端的渲染。
基于客户端的渲染方法是服务器端仅向客户端提供三维场景的描述信息,如模型数据、几何纹理等,具体的渲染流程在客户端执行。若让服务器执行所有的算法以及渲染,只把计算的结果或者呈现的图像压缩后传递给客户端则是基于服务器的渲染方法。而基于混合端的渲染方法即是让客户端和服务器端主机同时承担一部分渲染工作量,最终渲染的图像将在客户端合并呈现。我们从渲染发生端、服务器和客户端的通信、客户端的硬件需求、方法的优劣等角度对这三种渲染方式做表1比较。
从表1中可以看出,基于服务器端的渲染方法将渲染的工作放在了服务器端上,仅把计算的最终结果传至客户端呈现。这种方法让客户端脱离了繁重的渲染压力,渲染质量只和服务器有关,因而能够给不同硬件设备的客户端主机提供相同质量的渲染服务,客户端不再需要考虑其软硬件兼容的情况,只需在服务端安装相应的应用程序即可。如果网络通畅,可给不同平台、不同硬件设备的客户端主机提供无差别的、优质的渲染服务。可见,基于服务器端的渲染方法具有很明显的优势,也是当前主流的渲染方式。
3 基于服务器端的渲染方法
3.1 渲染农场(Render Farm)
使用服务器提供渲染服务是从渲染农场开始的。渲染农场最初是为了解决在动画节目中需要花费大量时间用于渲染而提出来的一种分布式集群渲染系统。它利用通信协议将多台计算机连接在一起构成一个计算机集群,以共同分担一个原本需要由超级计算机才能完成的计算工作,因此能大大缩短渲染的时间。
渲染农场在实现中面对的最关键问题是:如何解决计算机集群中的负载均衡。从概念上来看,负载均衡是一种对计算任务的分摊和分配,它将一个计算任务分配给多个操作单元,由这些操作单元来共同执行完成。一些经典的服务器,如Web、FTP甚至是企业中的关键应用的服务器,都是采用这种方法。负载均衡以一种透明且便宜有效的方式拓展网络和服务器带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性[4]。
表1 渲染方法比较
常见的渲染农场的管理软件有Axceleon Enfuzion、PipelineFX Qube、Virtual Vertex Muster、Frantic Film Deadline,这几款管理软件的比较如表2所示。
表2 渲染农场的管理软件比较
另外,Drqueue是一款完全免费的开源的管理软件,直接内置了Python,可以通过Python脚本扩展功能,这对开发的公司来说是一个很大的诱惑,但是其更新缓慢,效率一般。其他的集群渲染管理软件如Alfred、LSF、SPIDER、ROYALRENDER等,在国内应用比较少。
3.2 离线渲染和实时渲染
画面渲染可以分为两种:三维游戏中的实时渲染(Real-time Rendering)和动画电影用到的离线渲染(Offline Rendering)。实时渲染为了保证玩家交互流畅而不得不在画质上做出妥协,而离线渲染为了呈现高真实的画质而不计成本。渲染农场就是一种离线的渲染方法。从诞生之日起,离线渲染就主要是为电影服务的,现在也一直如此。
RenderMan是一款经典的电影级的离线渲染体系,由PIXAR历时8年做出,现已成为电影界渲染的一个规范。所有符合该规范的都可以被称为是RenderMan兼容渲染器,最著名的是PhotorealisticRenderMan、BMRT、Entropy和3Delight。Photorealistic RenderMan(PRman)被称为世界第一渲染器,采用最为原始的扫描线算法,但不支持光线跟踪、全局照明和焦散效果。BMRT是一款免费的渲染器,由LarryGritz(Renderman大师)自己开发,支持光线跟踪和全局照明,效果不亚于PRman,缺点是运行过慢。Entropy是BMRT的收费版本,运行速度方面要明显优于BMRT,且支持各种光线跟踪,渲染效果非常不错,缺点是需要Mayaman和Maxman的配合使用。最普及的是3Delight,渲染速度快且渲染质量高,支持主流的渲染算法如光线跟踪、全局照明、运动模糊等,具有很高的开放性和庞大的用户群体,现已成为了RenderMan电影级别渲染器的主流。
实时渲染原本是为了游戏和提供实时的预览而进行实时渲染的方法,它的本质就是图形数据的实时计算和输出,基本上都基于GPU图形加速。当前许多游戏引擎使用的都是实时的渲染引擎,如著名的CryEngine、UnReal、Outerra等。离线渲染和实时渲染对比如下图1和表3所示。
(a)离线渲染画质
(b)实时渲染画质图1 离线渲染和实时渲染效果比较
离线渲染实时渲染处理器 CPU GPU渲染农场 传统渲染农场 云渲染农场应用 电影 游戏特点 画面质量高,真实感强;渲染时间长 画面质量一般;渲染速度快渲染器 Renderman FurryBall
通过对比可见:离线渲染比实时渲染在细节上更深入,光照的效果更细腻,画质的真实感更强。目前,传统的离线渲染还不能利用基于服务期端的渲染方法提供实时交互,主要原因是:1.离线渲染本身一般进行的是高质量渲染,渲染一帧所需计算量大,花费时间长;2.用户交互的即兴性给服务器端的渲染工作施加了巨大的压力,实时渲染的服务器端的渲染性能并不能在保证提供实时反馈的前提下亦保证画面质量,只能有所取舍。当然,若今后GPU有重大变革的话,这种状况或许会发生改变。
3.3 云渲染
在CES 2009展会上,AMD第一次提出“云渲染”并利用一台高配台式机和一个Yukon笔记本分别作为云渲染的服务器和客户端,演示了一个云渲染应用“AMD Fusion Render Cloud”。云渲染和云计算相似,它是将三维的应用程序放在远程的服务器中渲染,而用户终端通过网络软件或本地的三维程序点击云渲染按钮,访问资源经由高速互联网接入,用户终端发出渲染指令给服务器端,服务器端会根据该渲染指令执行相应的渲染任务,并将渲染出的结果画面通过网络传送至用户终端中并显示。云渲染的效果图见图2。
图2 云渲染服务器效果
云渲染至今仍处于探索初期,其面临的主要困难是:如何处理三维渲染任务对计算硬件的性能以及指令响应时间上提出的苛刻要求。一个云渲染系统每天需要处理成千上万个用户渲染请求,若要同时保证给所有用户提供高清的(如1080p)渲染,后端的服务器系统需要承担巨大的计算压力,这就要求服务器具备惊人的图形计算性能,否则无法满足大量用户同时渲染的请求。另一个关键是云渲染对网络延迟控制严格,如果在客户端运行三维游戏,则该游戏就要对用户指令的响应具备高度敏感性,尤其在类似于CS的激烈对战游戏中,稍有延迟就可能让战事陷入死局。因而延伸出了另一个困难:高清的渲染需要在网络上传递大量的图像数据,要让三维渲染达到画面流畅的效果,画面的帧率就需要达到30fps,如果游戏的分辨率达到1920*1080,一般的传输码率要高于10Mbps,这也给网络负载提出了很高的挑战。
3.4 视频压缩编码
为给客户端提供及时的响应反馈,基于服务器端的渲染需要对延迟作严格控制。服务器端响应客户端消息的流程是:用户发起请求→服务器端接收请求→服务器端渲染图像→服务器端压缩图像→压缩的图像经由网络传输→客户端接收后解压缩→客户端显示图像[5]。在既定的网络传输能力下,如何快速地将渲染的图像压缩传输到客户端是影响整个流水线时间的重要因素。因此,人们提出了很多视频压缩编码的方法以加速服务器端的图像/视频流的压缩速率和压缩比率。
所谓视频编码是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式,其目标是:在尽可能保证视觉效果的前提下减少视频数据率[6]。当前主流的视频压缩编码方法有:帧内压缩和帧间压缩。帧内压缩在压缩一幅图像时仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,属于一种自满足式的压缩方法,一般是采用有损压缩算法,但其压缩比率不高。帧间压缩是一种无损的压缩方法,利用的是相邻帧之间的相关性。由于大多数视频的相邻帧之间的信息变化很少,对这些冗余信息进行压缩,仅仅记录本帧和其相邻帧之间的差值就能得到很大的压缩量。需要说明的是:“相邻帧”指的是编码关系上的相邻而非实际播放顺序上的相邻。
运动补偿是一种描述相邻帧之间差别的方法:目标图像会被分割成若干矩形像素块,每个矩形块中计算一个单独的二维向量并存储,该向量是该矩形块的位置偏转向量,即指示对应块在参考帧中源数据的位置。寻找这些二维运动向量的方法被称为运动估计。
变形是一种运动向量的方法,它主要用于传统的基于运动补偿的视频编码估算器。图像变形的方法是每秒只生成少量的图像,而中间的部分使用图像变形实现。变形主要用于补偿网络延迟,并且在网络宽带允许的情况下,让客户端渲染器拥有比服务器端渲染器更高的帧率。Yoon建立的IBRAC系统就是基于这个方法[7]。应用上,Aliaga等人提出一种方法:利用图像变形来处理摄像机捕获的高密度画面以实现对一个真实场景的漫游;这种方法利用空间图像分层和基于模型的压缩技术实现了在交互状态下对任意道路的漫游和观察。变形主要采用比较相似的图像,以减少不必要信息的存储[8]。然而,该方法不适用于预先不知道要压缩的图像是什么的交互式应用程序。Duan等人提出了一个有关深度图的编码算法[9],但这种方法对于渲染器中的重建过滤器来说会明显放大一些原本很小的错误。
当前在视频流的传输中,最重要的编解码标准有国际电联的H.261、H.263和H.264[6]。使用基于变形的运动估计的改进的x264编码器能够极大的改善输入序列的质量,这种编码器在基于服务器端的渲染中最为常用。相同的高质量的内容能够以低码率传递给用户,这对用户来说是很诱人的。其压缩方法对CPU的开销也很低,只需要对视频编码器做一些相对简单的改动就可以实现。Giesen和Klein提出的方法着重于减轻服务器端的负载,关键想法是:使用附加信息以增加压缩阶段的运动估计流程[10]。所谓的附加信息包括外部的和内部的相机参数,以及每个像素的深度信息。在探索移动用户的云游戏体验上,Shi等人使用三维变形以辅助实时视频方法的编码,运用H.264/AVC编码器,利用三维游戏引擎运行时的图像渲染上下文,如渲染角度、像素深度、相机运动等信息来为云游戏服务,以增强其视频编码的性能[11]。
4 云游戏服务
电子游戏市场在软件和娱乐行业非常重要的。据估计,2019年全球游戏市场规模将达到1500亿[12]鉴于云计算的基础设施遍地开花,云游戏成为一个新的且极具发展前景的游戏种类。未来的游戏市场,将会被盒装游戏、在线销售游戏和云游戏三分天下。
OnLive首先提出了云游戏服务,云游戏服务要求在云端渲染三维游戏场景并把游戏场景以二维视频的方式经由宽带网络传输到游戏玩家的瘦客户端,游戏玩家的控制信息会传至云端上以实现玩家和游戏应用程序的交互。云游戏的游戏程序的运行质量和客户端无关,用户不需要花钱更新硬件以支持最新的游戏;用户可以在不同的平台上运行相同的游戏;用户可以不用考虑硬件开销上尝试更多的游戏。对于开发者来说,使用云游戏可以支持更多的平台,不用考虑软硬件兼容的问题,减少产品开销,增加网络收入。但云游戏需要高质量和低的反应延迟(例如第一人称射击类游戏需要大约100ms[13])。每个游戏的场景都需要经历实时的视频流水线:渲染、编码、传输、解码、展示。要设计出一款既能满足这种严格的反应延迟需求又能达到高质量的视频的云游戏是很难的。
Huang等人展示了一个完整的开放的云游戏系统——Gaming Anywhere[14],其具备很高的延展性、移植性和重构性。该云游戏可以运行在Windows、Linux和OSX系统上,而客户端可以运行在其他的操作平台上,包括iOS和Android。Gaming Anywhere和OnLive、Stream MyGame相比,前者具备良好的反应能力并能提供更好的视频质量,它在减少网络拥堵,减少反应延迟上都具有优势。
5 总结和展望
本文对基于服务器端的三维渲染的相关应用程序和方法进行了探讨,这些方法中,大多是将渲染程序放在服务器端,而服务器端将渲染的结果图像压缩后传至客户端。为了优化服务器端的服务质量,大多数的应用都力图在服务器端实现硬件加速,在获取结果图像时直接从帧缓存中读取数据再压缩传递;在传输过程中,选择传输整体或者部分的图像数据,并使用改进的压缩方法加快图像的压缩速率和压缩比率以减少网络中的数据传输量;在交互过程中,使用不同分辨率的渲染层级提供临时的图像预览和最终的图像展示过程。基于服务器端的渲染方式不再考虑不同客户端的硬件差异,给应用程序的开发和低端移动设备的高质量显示带来了新的可能。基于服务器端渲染的比较热门的应用——云游戏,虽然还处在研究初期,但未来或出现重大的突破,从而给终端机的各种应用带来巨大变革。
随着基于服务器端的渲染技术进一步发展以及云渲染的普及,在未来的客户终端上,瘦客户端或许会成为一种趋势。在未来的某一段时间,计算机硬件的发展或许会进入一段停滞期,专门生产计算机硬件的厂商会有一部分转入网络相关领域,以提供更为流畅的网络带宽服务。
云计算的初衷是为了充分利用闲置的计算资源(不超过5%),但是随着各地云渲染工作站无规划的竞争大肆兴起,计算资源的利用率反而下降,而且云端工作站的维护需要大量的资源消耗,若无雄厚的资金支撑和丰富的业务资源,一般很难坚持下去。所以,寻求新的运营模式也是当下亟待解决的一个问题。