滕 斌
【摘要】为了使动画作品更加完美逼真,往往需要更精细的艺术造型创作、更方便的制作软件、更快捷的计算速度和更有效的设备使用,分布式渲染系统提供了一个廉价的视频渲染平台。介绍了分布式渲染技术的研究现状,针对渲染任务的划分与分配等核心技术进行了研究,提出了一种分布式渲染任务划分与分配方法。
【关键词】分布式;渲染;任务划分;任务分配
1 引言
随着科技的不断进步和计算机图形学的飞速发展,对于一些交互式的或实时的图形应用而言,需要渲染大量复杂的场景运算,这是一项计算强度很大的工作,传统的单处理器已经无法胜任。
渲染(Rendering)是一种计算机图形生成技术,首先在计算机内建立所需场景的几何模型,并附上一定的材质、纹理及色彩,再加上光源、根据一定的光照条件,计算并生成具有真实感效果的场景图形。渲染是基于一套完整的程序计算出来的,硬件对它的影响只是一个速度问题,而不会改变渲染的结果,影响结果的是看它是基于什么程序渲染的。
随着数字媒体制作手段的更新和数字电影、HDTV标准的普及所带来的海量数据,数字媒体制作对计算机的总线带宽计算速度等硬件要求越来越高。能带给人们极大视觉冲击力及真实感的3D动画,越来越多的出现在各类媒体作品中。但是,单机渲染和动画生成计算往往非常耗时。虽然计算机的单机性能有了很大的提高,但是在处理复杂的3D图形时仍显力不从心。无论是单处理器的商用机还是双处理器甚至四处理器的工作站在面对渲染处理中的庞大计算量时,其处理能力都是十分有限的,即便是多处理器的工作站使用数小时渲染一帧较复杂场景也是很平常的事情。那么对于一个数分钟或者几小时拥有上万帧的片子,其渲染时间将是十分漫长的。这个问题已经成为CG产业的最大瓶颈。
目前围绕如何提高渲染系统的性能展开了大量的研究工作,解决办法之一就是将渲染任务拆分到系统给定的多个渲染节点,以此实现高性能的并行渲染。首先介绍了渲染技术的发展历程,然后提出一种分布式渲染任务的划分与分配方法。
2 渲染技术的发展历程
在较大规模的动画制作项目过程中,特别是三维动画和电影节目的制作,由于复杂的场景和特效,着色渲染需要大量的时间。渲染速度过慢成为了影视特效和动漫制作的瓶颈。因此,不断提高渲染速度是影视和动漫等创作过程中追求的目标。渲染技术的发展依次经历了如下4个阶段。
2.1 基于CPU的渲染
以4K分辨率进行渲染为例,假设每帧渲染耗费1小时,1分钟动画(60s×24frame/s)需要60天来进行渲染,1部120分钟的影片需要20年的时间来完成渲染工作。在时效性上远不符合影视创作和动漫制作的要求,急需能快速处理图像的处理器GPU(Graphic Processing Unit)来提升渲染速度。
2.2 基于GPU的渲染
GPU自1999年首先由NVIDIA公司提出来后,其发展的速度是CPU更迭速度的3倍多。GPU的运算速度比CPU要快,主要是由于GPU是为图形实时渲染而量身定制的,具有超长流水线和并行计算的优势。
2.3 网络渲染
在网络环境下,由于网络节点的独立CPU和GPU渲染能力十分有限,因此采用网络染可充分发挥网络资源优势、利用渲染节点的计算能力来进一步提升渲染效率。
2.4 分布式渲染平台
分布式渲染环境是基于Client/Server模式的,主要包括三个部分:
(1)终端用户(End-user)。终端用户通过客户端的GUI向系统提出渲染要求,系统根据渲染要求完成相应工作,最后向终端用户显示整个图像。
(2)客户端(Client)。客户端包括GUI和一个图像生成器,GUI接受用户的渲染请求,图像生成器用来显示3D几何数据图像。
(3)服务器端(Server)。服务器端是基于主从模式结构的,它包括三个组件:数据处理组件、图像渲染组件和图像合成组件。数据处理组件首先根据终端用户的渲染要求将原始数据划分成图元组,然后采用任务拆分算法将任务分配给不同的图像渲染组件,每个渲染组件负责渲染分配到的那部分场景数据,渲染完毕,图像合成组件将所有渲染结果合成一副完整的图像,并交给显示器来显示,至此任务就全部完成了。
3 渲染任务的划分和分配
在进行分布式设计时,需要将设计任务进行划分、分配和协调。任务划分是指提供结构化的任务定义方式,遵循自顶向下逐步细化的原则,将任务分解为一个个相对独立且互有关联的子任务,并将分解结果以表的形式存放在数据库中。任务分配是指将分解后的任务分配给设计者,并将分配结果存入数据库的任务分配表中。任务协调则是根据产品设计需要重新调整设计进度和设计任务分配。
在分布式渲染中,我们把一个复杂的渲染对象或者一个大型的渲染任务称为总任务。总任务可以被划分为若干个子任务,由不同的渲染节点完成。子任务即一个简单的渲染对象或一个大型渲染任务的一部分。渲染任务的划分就是将总任务划分为若干子任务,由不同渲染节点完成,渲染任务的分配即将划分好的子任务分配给各渲染节点。
分布式渲染中,主控节点端充当主设计者的角色,对渲染的任务进行整体划分和分配。在分布式设计中,总设计者指一次分布式设计任务的发起者,其拥有的职能有:对任务的总体控制、协调各子设计者的工作,对设计结果进行复合、检测和确认。而视锥就是主控节点端进行渲染任务划分和分配的依据。通过规定每个渲染节点端视锥的位置、方向及大小来分配其所要渲染的内容。在进行渲染任务的划分和分配时,主控节点端不能随心所欲的进行,这里还涉及到一个任务约束的问题。任务约束在分布式设计中指一个设计对象内部存在的各种约束关系,如尺寸、位置、拓扑关系等,将设计任务分解后,这些约束就反应为各个子任务之间的约束。在分布式渲染中,任务约束反映为不同渲染节点间的拼接、重合等关系,任务约束由整体所构造的虚拟现实环境或所需达到的效果所确定,根据所构造的虚拟现实环境或所需达到的效果的不同,任务间的约束也会不同。如:在大屏拼接中,任务约束的一个最明显表现就是视锥间的完美拼接;在CAVE系统中,任务约束除了视锥间的拼接外,还有一个重要的约束关系就是每个视锥的Fovy值为90度。
4 总结
目前协同渲染平台仅支持同构渲染,对任务的划分也仅仅是基于视锥的划分,如何使协同渲染平台支持异构渲染,并支持多种划分依据还有待进一步的研究。随着虚拟现实技术、协同技术的发展和社会的发展,人们对虚拟环境的认识越来越高,分布式渲染技术必然会越来越受到重视,同时,分布式渲染平台作为对分布式渲染技术的支持也必然会越来越得到大家的认同。