通用场景描述(USD)在影视后期制作中的发展和应用

2023-04-11 12:19徐明晔
现代电影技术 2023年3期
关键词:子层皮克斯插件

徐明晔

北京电影学院中国电影高新技术研究院,北京 100088

1 引言

随着影视行业进入数字时代,三维场景等数字资产的处理及复用成为重要研究课题之一。场景描述,是指制作特效电影和游戏的过程中通常会生成、存储和传输大量的3D 文件。制作管线中许多协作环节(建模、着色、动画、灯光、渲染)通常都有自定义的场景描述,适用于制定后期软件的制作需求和工作流程,而其它后期制作软件则无法读取或编辑。

通用场景描述 (Universal Scene Description,USD)[1]为表示场景中各类资源提供了一套统一的描述方式,服务于影视级3D 数据的生成、存储、处理、管理和复用等[2]。USD 可用于创建、表达和修改虚拟世界的一组数据结构和应用编程接口(Application Programming Interface,API),不仅支持几何图形、镜头、照明和材质等虚拟世界的基础知识,也能够表征它们之间的各种关系,包括属性继承和实例化等。同时,USD 也是一个用来合成场景和解析场景中数值的文件格式,可以用于不同后期制作软件之间 (Maya、Houdini等)的文件交换和数据传输,也可以直接用作3D 场景文件。

USD 最早由皮克斯公司研发,2016 年作为一种开源免费项目公开。皮克斯公司最早研究USD 这种格式,是为了确保它可以共享和重用数十万个3D资产用于其电影[3]。该格式允许在实时工作区中重复使用3D 数据集,同时保持原始文件完好无损。USD 作为皮克斯研发的第四代场景描述方式,得到行业广泛认可。USD 的发展历程,最早可以追溯到1995年上映的《玩具总动员》,以每个镜头为单位,均由一个单一的线性程序文件描述。皮克斯研发团队逐渐在其自主研发的动画系统 “木偶”中引入引用、分层、编辑和变化的概念,并从 《虫虫危机》的制作开始得以发展。2004年,皮克斯研发团队在“木偶”系统的基础上,又设计开发出第二代动画系统Presto,解决了 “木偶”遇到的合成和覆盖3D场景描述等功能无法协作使用的问题,提供了统一的第二代场景描述。该描述方法支持从单个网格到整个模型,再到环境或镜头的所有粒度的引用、覆盖、变化和其他操作,以单一文本格式编码,并使用单一合成引擎进行评估。2008—2009年,管线开发团队开始构建TidScene,一个由二进制数据库(Berkeley D B)支持的几何模式,使用轻量级场景作为编写和读取时间采样数据的机制。TidScene的核心元素为OpenGL渲染插件,该插件允许所有管线应用程序直接从TidScene预览渲染,其本地引用特性能够支持分层、场景“隔离”(即只加载场景的一部分)、资产引用和调整。USD 项目于2012年启动,任务是将Presto的组合引擎和低级数据模型与TidScene的惰性访问、时间采样数据模型和轻量级场景结合起来,提供了一个全新的描述方式。

2 USD概要

USD 是一个描述体系,可以是一系列文件格式,也可以是一套工具或插件。USD 提供了丰富的工具集,用于读取、写入、编辑和快速预览3D 几何图形、阴影、灯光、物理和越来越多的图形等[4]。同时,由于USD 的核心场景和组合引擎不受任何特定领域的影响,因此USD 能够扩展至其他领域,以编码和组合各类3D 数据。

USD 将数据组织到基础容器的分层命名空间中。除了子基础容器之外,每个基础容器还可以包含属性和关系,统称为特性。属性具有可随时间变化的类型化值,关系是指向层次结构中其他对象的多目标 “指针”,当引用导致名称空间改变时,USD 负责自动重新映射目标。基础容器及其内容被组织成一个称为层的文件。下列罗列的对象为构成USD 的各级元素。

(1)基础容器。英文为Prims,全称为Primitive,是构成USD 的基本单位。每个基础容器都有一个名称,0个或多个命名属性,以及0 个或多个子级。例如,正方体是个基础容器,灯光是一个基础容器,材质是一个基础容器。基础容器是定义阶段的对象树中的“节点”。

(2)特性。英文全称为Property。特性一般包含属性和关系两种。属性是描述基础容器的类型化值(例如整数、颜色、变换矩阵、数组等),而关系则是在一个基础容器和另一个基础容器之间建立的链接。

(3)元数据。英文全称为Metadata,是一种依附在基础容器、资产,甚至是图层上的额外信息。

(4)层。英文全称为Layer,它是基础容器和资产的存放工具,其中的元素要按照层级结构组织好。通常来说,一个USD 文件 (.usd格式的文件)是一个层,一个层可以表示场景的一个片段,如道具、角色、装备的一部分,灯光设置等;也可以表示用来创建基准的默认值,例如包含镜头序列设置的图层。

(5)合成操作符。英文全称为Composition Arcs,是USD 提供的一套用于方便实现场景组装的操作符。USD 中有六种合成操作符,分别为子层(Sublayers)、引 用 (References)、负 载 (Payloads)、变体 (Variants)、继承 (Inherits)和特化(Specialises)。子层是最常见的一种,它类似于Photoshop中的图层,USD 中的子层可以定义USD层的堆栈,堆栈按强度顺序排列,子层可以互相覆盖,在具有相同属性的两个子层合并时,只有最强的子层才能显现属性;引用则用于将新项目添加到场景中;负载就像可以延迟加载的引用,可以在场景中选择部分项目加载到内存中;变体用于在接种的项目之间进行切换,在相同的物体有不同版本时可以在其中进行选择;继承类似于面向对象的编程语言中的类,在规定成同一类的事物中,可以从事物的基元中继承;特化的工作方式类似于继承。六种合成操作符的强度顺序由强到弱依次为子层(Sublayers)、继承 (Inherits)、变体 (Variants)、引用(References)、负载 (Payloads)、特化 (Specialises),这个顺序由缩写LIVRPS给出。

(6)舞台。英文全称为Stage,是把所有层从根层向下合成的结果。通常一个舞台就对应于场景中用于遍历查询的一个物件,这个舞台给出了基础容器和特性在命名空间中的位置信息以及相关属性的数值等完整的数据信息。

(7)模式。英文全称为Schema,其含义是一组属性的集合,这些属性赋予了基础容器含义。目前USD 支持的模式有几何模式、立体模式、阴影模式、照明模式、骨骼动画模式等,随着未来USD 的发展也会支持更多的模式。

3 USD特性与优势

3.1 USD的特性

USD 支持多种文件格式,具有统一的API和丰富的工具集,支持多人修改同一资产或场景。USD常见的文件格式有四种:二进制文件 (.usdc 格式)、文本文件(.usda格式)、压缩文件 (.usdz格式)和插件文件格式。

(1)二进制文件。拓展名为usdc的文件,也被称为crate文件,是一种经过精确压缩和内存映射的快速访问文件格式,也可以使用扩展名usd进行存储。usdc文件拥有高效的编码和无损压缩,打开的时候只读入基础容器和特性的层级关系;属性和时间采样可以用命令来控制。

(2)文本文件。拓展名为usda的文件,其设计原则是为了可读性,使开发者直接读懂3D 文件的内部结构。usda文件是一种无损格式,任何usd文件都可以转换成usda文件,便于在不进行渲染的情况下理解usd文件中的内容及进行调试,usda文件和usd文件一样可以打开和进行渲染,也可以像crate文件一样以usd扩展名进行存储。

(3)压缩文件。拓展名为usdz的文件,是由皮克斯公司和苹果公司联合开发的一种数据格式,它相当于一种压缩形式的打包文件,包括了USD 文件和所需贴图、纹理等各种资产,多数情况下用于视觉特效的制作中。

(4)插件文件。除了以上文件外,usd也支持Alembic文件,在USD 预览程序usdview 中可以直接读取和引用,其他公司也可以自行研发文件解析插件,以扩展应用USD 并添加对其文件格式的支持。

3.2 USD的优势

USD 首要特性就是高速性,即可以快速加载和回放大数据集。实现高质量数字艺术的最重要因素之一,就是能够快速且频繁地迭代设计资产和动画,以期在实现3D 美术编辑场景的同时,尽可能提升呈现令人满意的视觉反馈的速度,以及在多个应用程序之间迁移新数据或恢复崩溃会话的速度。USD通过探索算法的改进,更好地利用现代多核系统和GPU 以及图像压缩技术,最大限度地减少访问远程存储数据的延迟,实现了通过最小化延迟来最大化美术迭代。

其次,USD 支持非破坏性编辑。非破坏性编辑指的是在整个流水线中的参与人员,可以通过自己的层来独立完成工作,而不会破坏上游或下游参与人员的创作。USD 最基本的构图弧线,即子层操作符,通过允许美工人员在自己的层中工作,使不同部门或同一部门内的多个美工人员同时在同一资产或场景上工作,所有这些都将在USD 文件中明确指定的强度顺序中进行组合和解决。当建模的美工人员更改较弱层中定义的几何拓扑时,此功能虽不能自动调整较强层中的阴影数据,但它可以使每个美工人员独立工作,而无需删除或编辑任何其他美工人员的工作,并有助于提供更改的清晰审计跟踪,有助于解决诸如更改拓扑之类的问题。

另外,USD 具备通用性。由于USD 是一个开源的项目,可以在不同的软件之间交互使用。USD提供了丰富的通用语言,用于定义、打包、组装和编辑3D 数据,方便使用多个数字内容创建应用程序。像许多其他交换包一样,USD 提供了一个低级数据模型,在“文件格式级别”规定了数据如何编码和组织,加上一组 (可扩展的)高级模式,为网格或转换等提供有意义的API和组织。在此基础上,可以创建具有几何图形、材质、灯光和其他属性的资产定义。

4 USD在影视后期制作中的应用

USD 的出现,规范了后期制作的流程,使得不同团队、使用不同操作软件的工作人员都可以在同一体系下交流协作,大大提升了影视后期制作的效率。皮克斯在2019年上映的动画电影《玩具总动员4》中,构建了一个拥有超1万亿个多边形的世界,实现这样庞大的三维场景,依赖于不断进步的图形渲染和数据管理,也是皮克斯在USD 应用层面的一次成功。值得一提的是USD 的变体操作符功能,为 《玩具总动员4》中的每种资产创建了多个变体,如图1所示,借助USD 的变体功能,实现了以多种形状、着色和纹理进行资产的差异化创建,以形成资产的多版本变体,并能以指定版本进行资产调用。自此,皮克斯将USD 纳入具有悠久历史的跨部门协作标准流程,演变成了符合当代制作要求的新型资产流程工具。

图1 借助USD变体功能生成差异化资产

同时,因其开源特性,不同团队在使用它时,可以根据需求在其基础上扩展新功能。如图2所示,Animal Logic工作室在2021年上映的动画电影《比得兔2:逃跑计划》中,就使用了USD 的灯光渲染工作流程。USD 在灯光工具组的工作中发挥了非常重要的作用,Animal Logic工作室开发了名为Grip的USD 原生库,是基于节点基础的程序化场景修改工具,还有另外一个Filament QT-based应用,让艺术家可以与USD 场景、Grip 引擎、产品、渲染器和流程工具等进行交互。这些功能都大大提升了电影的制作效率。

图2 动画电影 《比得兔2:逃跑计划》中USD灯光渲染制作界面

鉴于USD 的非破坏性编辑和通用性等优点,越来越多电影制作部门开始使用USD,改善原制作流程中3D 数据协作困难的状况,拥有USD 逻辑的USD 工作流程也应运而生。如图3 所示,USD 工作流程最大的特点就是解决了原流程中多方协作和文件读取困难导致的重复返工问题。在USD 工作流程中,Layout、动画、特效、灯光等每一个部门,都可以使用USD 文件相互交流,允许各部门仅保留自己工作需要的图层参考,而隐藏掉和自己完全无关的图层。同一个部门的不同工作者也可以通过建立子图层,在不更改别人工作结果的情况下,给出自己的编辑和修改,这使得整个流程更加便捷高效。

图3 USD工作流程示意图

除了流程上的简化,USD 以其独特的封装方式,为影视后期制作带来了新技术优势。如图4所示,以Maya的相同场景内容为例,通过对比以普通场景保存和通过USD 方式保存的两种文件,不难发现,USD 存储的场景在存储时间和打开时间上均优于普通方式,文件大小也减少了许多。

图4 普通场景与USD场景对比示意图

Maya支持的USD文件包括.usd、.usdc、.usda以及部分.usdz多种格式文件。在导出方面,Maya 2023支持ASCII(.usda文件)和二进制格式(.usd或.usdc文件)两种方式导出USD 文件,在导出时选择合适的导出模式即可。随着USD 的发展和被行业广泛认可,越来越多后期制作软件开始兼容USD。Render Man 发布了适用于USD 插件USD Hydra的图像处理插件hdPrman以支持USD的使用;Houdini 18及其用于外观开发的Solaris工具集也是完全基于USD 搭建的;Maya 2023.3已支持USD 的最新版本USD v0.20.0。相信随着技术的革新和应用的推广,未来,USD 将在后期制作中发挥重要作用。

5 结语

USD 的研发和应用,从一定程度上规范了影视制作中的后期制作流程,为不同部门从业者和不同软件使用者之间,搭建了交流协作的桥梁,提升了后期制作效率,也为视效技术的发展提供了通用数据处理方案,推动影视行业3D 资产标准化管理。未来,随着数字电影技术的不断发展,数字资产的生成、存储、处理、管理和复用将更加便捷和规范。

猜你喜欢
子层皮克斯插件
皮克斯的动画帝国
自编插件完善App Inventor与乐高机器人通信
拿开以后
复合材料厚层合板力学性能等效方法研究
基于jQUerY的自定义插件开发
MapWindowGIS插件机制及应用
我们只有120只了!
分离载荷近距协议的数据链路层仿真研究
用品牌力量打动受众
基于Revit MEP的插件制作探讨