球幕动画电影渲染管理系统设计研究
2023-05-29宋宇莹
韩 叙 席 萌 宋宇莹
北京天文馆,北京100044
1 引言
随着沉浸式影像技术的高速发展,球幕电影作为其主要呈现形态之一[1],因其逼真的沉浸视听体验受到大众欢迎。近年来,全国各地天文馆、科技馆、大型娱乐设施中的球幕影院数量快速增长[2],对球幕电影的需求量也日益增加。如何高效完成球幕动画电影制作工作成为影像工作者面临的课题。
传统动画电影制作针对后期处理的解决方案是渲染农场技术,也叫集群渲染、分布式并行集群计算系统[3][4],它利用现成的CPU、以太网和操作系统来构建“超级计算机”,从而使普通的商业计算机硬件设备达到或接近超级计算机的计算能力。渲染农场由许多运行渲染软件的计算节点组成,系统通过对整体资源进行合理分配和优化,在渲染管理软件的统一调配下协调工作,以并行的方式完成所分配的渲染任务,从而实现高效快速的大规模渲染,缩短电影制作的时间[5]。
随着三维动画和影视制作的应用越来越广泛,国内外有多个商用的渲染农场软件涌现出来,国外的如PipelineFX 公 司 的Qube、Axceleon 公 司 开 发 的En-Fuzion、Frantic Film 公司开发的Deadline 以及Pixar 公司开发的RenderMan 等[6],国内如瑞云公司开发的RenderBus、炫我科技公司开发的炫我、赞奇公司开发的渲云等。这些集群渲染管理软件种类繁多,但功能主要针对三维动画软件中渲染的并行计算问题。相较于普通动画电影,球幕动画电影分辨率高,工作流程复杂,在后期制作中除了传统的渲染特效外,处理步骤更加复杂,耗时耗力,如果不能将这些步骤使用集群自动化并行完成,制作效率将大大降低。目前,现有渲染农场软件不能覆盖球幕动画电影的所有流程,且国内的动画球幕电影制作量较少,促使形成工业化规模制作的原动力不足,进而造成硬件资源的浪费。
本文设计了一套渲染管理系统,可以覆盖球幕动画电影后期全流程,并通过集群并行化计算,用以解决现有的渲染农场技术在面对球幕动画电影时制作效率不高的问题。
2 球幕动画电影制作工作流程
有别于普通的动画电影,球幕电影需要制作通用格式是正圆形鱼眼图像,具体制作主要流程可以概括为以下三个步骤[7],如图1所示。
图1 球幕动画电影制作工作流程
2.1 全景鱼眼图像的渲染与拼接
想要制作适用于球幕电影的鱼眼图像,可选两种方案。第一个方案是使用三维动画软件的插件模拟鱼眼摄像机并直接渲染出图,但该方案存在两个问题:其一,单独的鱼眼镜头对画面进行扭曲,视角很难超过180°,一般在160°~170°左右,无法达到所有电影场景的需求;其二,由于渲染的画面中包含复杂的多边形及光线效果,如果直接输出分辨率不小于4K×4K 的鱼眼图像,对渲染节点的性能要求极高。所以该方案适用于较为简单的场景,否则渲染失败率较高。第二个制作方案是在三维动画软件中,使用多个摄像机通道,将输出图像拼接成鱼眼图像,这个方案是目前球幕动画电影通用的制作方式[8]。该方式虽然制作步骤多,但是不受视角约束,多个摄像机通道的图像渲染成功率高。
在三维动画软件的动画场景中,实际使用时通过摆放5个正交的视角为90°的摄像机来实现可视角度覆盖全球幕区域,每个摄像机渲染出一个通道图像,分别对应前、后、左、右及顶部通道。将输出的多个通道图像通过鱼眼变形算法拼接融合成360°×180°的正圆形鱼眼图像。对球幕动画电影而言,该步骤是整个制作过程中的核心,在制作过程中需要执行大量的鱼眼合成,示意图可见图1上半部分。
2.2 全景特效及后期合成
通过上一步得到全景鱼眼图像,后期制作人员可以利用后期处理软件完成大部分特效、转场、校色、剪辑等操作。有些效果,如粒子发射等,可以在上一步骤的三维软件内添加,通过渲染拼接后得到,从而保证粒子在三维空间内的透视关系。另一些特效,如发光、渐变等,如果在第一步制作中添加可能会产生可见的拼接缝隙,所以一般在此步骤通过图层叠加上去。由于全景图像存在鱼眼变形,一些后期效果,如添加字幕等,需要先制作平面图像,再重新投影转换为鱼眼图像,最后将多层鱼眼图像叠加在一起完成最终效果。
2.3 多投影通道的图像切分、视频编码
与普通商业影院直接使用影片拷贝不同,球幕动画电影分辨率大,目前没有适合播放的投影机,所以在球幕影院播放一般采用多个投影机同步组成。每个节目片源都需要根据剧场投影和播放设备的参数转换成剧场制式片源,这涉及到切图、编码、转码等一系列操作。比如,北京天文馆宇宙剧场利用16 台投影机输出,需要将圆形鱼眼图像序列帧的球幕片源(分辨率4K~8K 不等),按照投影机位置参数进行几何变形,切分成16份分辨率为2K×1K图像,再将每份序列帧图像分别编码成剧场指定的视频播放格式。最后,每一份视频文件拷贝到对应的播放设备中,同步放映即为观众最终观赏到的球幕动画电影。该步骤示意图可见图1下半部分右侧多通道视频。
3 渲染管理系统总体架构
为了满足上述球幕动画电影制作流程的集成化,并通过集群并行化计算提高制作效率,参考目前已有集群渲染系统的技术架构[9],本渲染制作系统总体架构由三部分组成,分别为管理节点、计算节点以及存储节点。
系统的整体框架设计如图2所示。
图2 渲染管理系统整体框架
3.1 管理节点
管理节点是渲染管理系统的核心。它包括与用户的交互、调度和管理作业以及分发作业任务到计算节点三部分功能,同时也要负责计算节点的管理和容错。
由于动画球幕制作过程中所需的主流软件,包括渲染软件(Maya、3ds Max)以及鱼眼变形软件、图像切分等软件及其插件大部分都只依赖于Windows系统,所以计算节点需要使用Windows 系统来运行相应的应用程序。因此,管理节点中选用Windows HPC Server集群调度管理系统。
Microsoft Windows HPC,是微软的高性能计算解决方案,提供了完整的集群环境,包括操作系统、作业调度、消息传递接口、集群管理和监控组件[10]。它可以为现有的集群设备部署系统,管理集群内不同型号的硬件设备,调度资源池中的作业,也可以通过使用PowerShell 命令或者WCF 的接口,在原有的基础上进行二次开发[11],扩展渲染管理软件的相关功能[12]。Windows HPC Server 只需要在Windows Server 系统上安装HPC 包即可使用,方便集群的搭建、配置与部署。
管理节点还包括以下模块:
(1)用户界面:为渲染管理系统提供用户交互界面。系统采用B/S 模式,用户通过浏览器即可完成操作。根据用户所拥有的权限,生成相应的网页界面,协助完成用户对作业的提交、查看、修改以及对计算节点的监控。
(2)身份验证:记录每个用户的权限。包括对其所示用户界面、所能使用的应用功能,以及相应的存储空间。维护存储节点数据库中的用户信息表以及权限策略表。
(3) 作业管理:对现有作业管理,包括对作业及其任务的查看、取消、继续、重渲、复制等操作,维护存储节点数据库中的作业状态表。
(4) 集群管理:对集群中的计算节点进行管理,包括集群软硬件状态的查看及操作,维护存储节点数据库中的节点状态表。
(5) 作业生成:根据用户的设置,验证参数的合法性,生成作业及其任务的属性,创建作业XML 文档,提交到集群上运行。
3.2 计算节点
计算节点是渲染管理系统的计算核心。每一个计算节点从管理节点接受任务,根据任务信息生成任务脚本,启动对应的程序完成,并将任务的执行结果返回给管理节点。集群中包含CPU 计算节点和GPU计算节点,分别针对不同的作业任务。
计算节点包含以下模块:
(1)作业处理:对管理节点分配来的作业属性和任务号进行分析,生成任务脚本,启动相应的应用程序执行,并将执行结果反馈给管理节点;
(2)作业优化:针对球幕动画电影制作,对正在运行中的作业任务进行检查和优化。
3.3 存储节点
存储节点包含数据库节点以及数据存储节点,负责整个渲染管理系统的数据交互、场景共享以及文件存储。数据库节点存储制作系统中的数据信息,包括用户信息表、权限策略表、作业状态表、节点状态表等。数据存储节点存放制作球幕动画电影的数据,包括应用程序、场景、模型中间文件以及序列帧、视频等。
本项目中存储节点使用分布式存储方案,支持集群并行化访问存储,读写速度快,具备良好的存储性能[13]。
4 渲染管理系统关键点设计与实现
相较于传统的动画电影,球幕电影的制作流程更为复杂,所需软件调度更为繁琐。如何提高系统整体效率、简化工作流程,成为制作球幕动画电影的难点。本文梳理其中关键技术,抽象化工作流程,对任务的资源和粒度分配进行设计并部署实现。
4.1 集成工作流作业设计
作业是渲染管理系统中的一个基本单位[14]。用户可以针对作业进行提交、调度、执行以及控制等机制。每一个作业都由任务组成,一个作业可以包含一个或者多个任务,每个任务可以直接运行应用。
为了满足球幕动画电影的集成化制作流程需求,本系统以图像帧作为基本单位,在作业中设计如下三种任务。
(1)工作流任务:工作流任务包括但不局限于上述球幕动画电影制作过程中所述的基本制作流程。常用的工作流任务还包括缺帧检查、序列帧色彩校验、序列帧修复等,也可以自定义工作流任务。该制作系统中将每一个工作流任务模块化,用户根据业务需求,按照顺序添加并设置即可。工作流任务可以设置依赖关系,当前任务执行完毕后才可以继续执行下一个,直至全部完成。计算节点将根据每个工作流任务,调用相应的应用模块执行。每个作业中至少包含一个工作流任务。
(2)序列帧任务:帧是视频中最小单位的单幅图像画面,序列帧是一组顺序的帧图像文件。由于每个制作步骤都会处理不同数量的序列帧,所以根据用户设置,每个工作流任务会分解为一个或者多个序列帧任务执行。
(3)通道任务:球幕动画电影的制作过程中需要频繁的拼接或者拆分鱼眼图像,或者会频繁地出现多通道图像,以及将一幅高分辨率图像拆分成多个子图像,因此系统根据序列帧以及需要执行步骤的通道数,生成相应的通道任务。每个序列帧任务中包含一个或者多个通道任务,通道任务是整个制作平台系统的最小任务。
工作流任务通过依赖关系保证了球幕动画电影制作步骤的连贯性,实现了集成化的制作流程。再将每一个工作流任务拆分成序列帧及通道任务,以方便分发给集群的计算节点并行计算。通过定义不同的工作流任务,可以根据需要向作业中自由添加,可以是已有的,也可以是自定义的,满足用户在使用上的灵活性。
作业与任务的定义由管理节点中作业生成模块完成。在Windows HPC Server 中支持通过XML 模板导入作业。根据作业模板规范,在制作系统中设计Job类,包含作业属性、任务属性以及工作流任务之间的依赖关系。Job 类将在应用程序中被实例化,最终由作业提交模块生成XML 文件发送给Windows HPC Server执行。
每次提交的每个作业包含多个任务,可以自定义每个任务执行的应用,并且保证任务之间的依赖关系。每个任务通过命令行执行对应的应用程序。在实际应用中,提交作业包含的常用工作流任务是:通过三维动画软件Maya 实现渲染,通过Python 程序执行鱼眼合成,通过后期制作软件After Effects 后期编辑输出,使用Sky-Skan Slicer 完成剧场对应通道的切图,最后通过FFmpeg 软件进行视频编码。每一步任务都在前一步作业完成确认后继续进行。用户提交作业时,可以包含其中的一个任务或者多个任务,形成工作流的整合,提高作业配置的灵活度,减少作业的提交次数。
4.2 计算资源分配设计
一部球幕动画电影通常20~30 分钟,包含4 万~5万图像序列帧。其中,每帧图像的画面内容不同,所包含的多边形数量、粒子分布、光照复杂度等也大不相同,每帧图像消耗的计算资源也大不相同。计算节点的种类也有不同,有GPU 节点、CPU 节点等,同种类不同型号的机器也会带来不同的性能差异。因此需要通过预渲染方式控制任务的调度与分解,保证集群的执行效率。
将提交作业按照场景内的每个镜头分组。一般来说,一个镜头内的图像内容具备相似性,相应消耗的计算资源差别较小。将计算节点按照性能相似性分组成资源池,保证每组执行相同作业时所花费时长相近。将待提交的作业与对应待分配的计算资源确定后,可以从每组任务中挑选部分图像序列帧进行预渲染,记录渲染时间,计算资源占用率等数据。通过这些数据可以在计算资源费分配以及渲染范围上进行设置,以获得更高的计算效率。
在Windows HPC 中有三种计算资源分配方式[15],如表1所示。
表1 Windows HPC支持的资源分配方式
根据预渲染的资源占用率不同,尤其是CPU 和内存设备的使用率,给每个任务分配不同的计算节点资源分配方式。目前的CPU 计算节点,由于计算性能的不断提升以及每个计算节点包含多个CPU 内核可以进行并行计算,现在的渲染一般不会耗尽单一计算节点的全部计算资源。可以根据内存占用情况进行资源分配,提高计算资源的使用效率。
对于CPU 计算节点,后期软件及图像处理任务一般使用Core 模式,根据预渲染的CPU 和内存使用率进行分解,确定使用的CPU 核心数;对于渲染文件一般使用Socket 模式可以获得较高的计算效率[16],根据预渲染结果,如果渲染场景特别耗费计算资源,可以通过通道任务将渲染图像拆分,进而获得更高的执行效率。对于GPU 计算节点,则一般使用Node 模式进行资源分配,通过显卡加速获得计算效率的提升。
4.3 任务粒度控制设计
在渲染管理系统中,一般每个任务都是以单个序列帧作为最小的任务粒度,但在实际执行中,如果一个进程每次执行只生成一帧图像,即该任务下起始帧序号等于终结帧序号,这样会造成计算性能的浪费,降低整体的制作效率。
如表2 所示,在同一个CPU 计算节点上,执行不同的应用程序与应用场景,左侧两列为后期制作软件After Effects 应用,完成后期制作生成图像,右侧两列为三维动画软件Maya应用,通过三维场景渲染图像。每个应用中场景2 相较场景1 运算更为复杂。由表2可见,每个任务粒度,即起始帧—终结帧范围越大,单帧图像生成的时间呈下降趋势,最后趋近于一个常数。因为每次生成图像,每个进程都需要启动应用程序、加载场景设置,最后计算生成图像,单个任务扩大渲染范围,可以在统一应用和场景下生成图像,避免重复启动、加载的时间,有效缩短计算时长。但是并不是单任务的渲染范围越大越好,在实际使用中,随着单个任务的完成序列帧设置变多,每帧的生成时间会出现不稳定、平均生成时间变慢的情况。如图中第四列所示,任务范围50和100的平均生成时间长于任务范围30。
表2 相同计算资源不同任务范围下每帧图像平均生成时间
因此,在实际应用中,可以在预渲染中得到单帧渲染的时长。如果生成时间较短,如每帧时间不超过1分钟,可以将任务的起始帧—终结帧范围设置到50或者100;如果生成时间较长,则可以将渲染范围设置缩小,如10或者20。
通过预渲染,可以有效控制任务的资源分配方式以及渲染执行范围,让渲染集群高效完成图像的处理工作,合理利用集群,均衡承担作业任务,缩短球幕电影的制作时间。
4.4 渲染管理系统部署与实现
渲染管理系统已实现并部署于北京天文馆渲染中心。根据实际集群环境,本系统包括1台管理节点服务器、184 台计算节点服务器(其中4 个GPU 计算节点)以及1 台数据库服务器、1 套存储服务器设备,系统界面如图3所示。
图3 北京天文馆渲染管理系统界面
管理节点安装Windows Server 2016 系统,ASP.NET 作为编程工具,在IIS 7.0 上部署网站服务,安装HPC 集群管理器工具;计算节点端使用Windows Server 2016,安装HPC Pack 包,配置与管理节点集群服务联通,使用PowerShell、Python 脚本开发,便于修改和二次开发。存储服务器使用分布式存储节点,一方面在集群并行计算时,保障存储读写的抗压能力,另一方面通过多副本冗余,保证存储内容的稳定性与容错性。
用户通过浏览器访问进入系统。提交作业中,用户可以根据已有作业模板完成,包括自定义作业、Maya作业、3ds Max作业、Fisheye作业、After Effects作业、Fusion 作业、视频编码作业、球幕编码作业以及可定制的工作流作业等,用户只需填写相关路径参数即可完成作业的提交工作;管理作业中,系统可以实时显示每个作业的状态,包括作业基本信息、已完成个数、正在运行个数、失败个数等,用户也可以查看每个作业下的任务明细,并根据实际情况取消、复制、重渲作业任务。
5 结语
本文针对现有渲染农场的现状,设计了一种面向球幕动画电影的渲染管理系统。通过该系统对渲染作业及任务的设计,可以覆盖球幕动画电影后期制作全流程,并将所有步骤通过集群并行化处理,根据预渲染反馈控制计算资源的分配以及任务粒度的大小,保证集群整体的制作能力。该系统易于实现且方便推广,目前已应用于北京天文馆渲染中心集群设备,参与完成多部球幕动画电影的后期制作工作,使用效果良好。该渲染管理系统的设计与实现,扩展了集群系统的使用范围,简化了用户的人工操作,提高了球幕动画电影的制作效率,为球幕动画电影的后期制作提供了一个新的解决方案,对于其他制作球幕动画电影的科技场馆及动画公司具有一定的理论意义和应用价值。
随着球幕动画电影制作向着高质量、规模化、协作化发展,构建基于云计算的渲染管理平台将成为行业发展趋势。云渲染可以更好地整合计算资源,为用户提供更加高效的应用服务体验。本技术可以在云渲染框架下重构并提供相应的云服务,如遇特殊场景无法到岗的情况,员工仍可通过本系统提供的云渲染服务在线完成球幕电影的制作工作。但应用云渲染技术进行球幕动画电影渲染管理的系统仍存在一些待改进的问题:一是球幕动画电影制作过程中涉及到的工程文件数据量大,单一文件占据较大存储空间,受限于用户的网络带宽,且存在拷贝错误的风险,在上传、下载步骤中通常会浪费大量时间;二是云渲染也在系统整体安全性及球幕电影内容的版权方面提出了更高要求,需要提供相应的技术保障。❖