苹果、英伟达携手成立联盟,制定 OpenUSD 标准,对此你有哪些期待?
最近几天,关于本专栏的主角发生了一件大新闻:Pixar、Adobe、Apple、Autodesk 和 NVIDIA 宣布成立 OpenUSD 联盟,共同促进 USD 的开发、迭代与推广。新增的 Open 一词无疑着重强调了通用场景描述的开放性,而诸多 3D 领域巨头的加入将确保 OpenUSD 能在各个专业软件间获得“通关文书”,向真正的 3D HTML 又迈进了一大步。
在之前的文章中,我们介绍了为什么我们需要 USD, USD 的基本工作原理:
XSuperZone:USD科普 | NVIDIA Omniverse USD 格式是如何工作的?本文将在前文基础上,继续探讨:OpenUSD 由哪些元素构成的?它们的关系如何?
1、Prim
在正式介绍 Prim 之前,我们先来界定一个概念。Prim 在计算机图形学的话语体系下通常默认指的是 Primitive,译作“图元”,即点、线、三角形等基本的形状,这些元素是构成更复杂 3D 模型的基础。但 OpenUSD 体系下的 Prim 则不应该这么理解,它指代的是一种抽象的基本元素,而非具体的形状。
我认为,将其译作为“节点”或许是比较合适的。“节点”暗示了 Prim 能够组成树形结构:可以包含若干节点的描述数据的同时,也能够包含若干子节点。在后一种情况下,就可以层层嵌套,构建出场景的层次结构(Hierarchy)。需要强调的是,Prim 可以表示任何类型的数据而不仅是几何图形,光源、材质、甚至抽象的 “Xform” 都可以作为一个 Prim 的类型。(注:Xfrom 表示一个可以被移动、旋转和缩放的对象。)
比如说,我们可以抽象出一个小车节点(Xform),这个抽象小车包含了车身节点(Mesh)和4个轮子节点(Mesh),车身节点里面可以再包括两个车灯节点(SphereLight)。不难看出,OpenUSD 的 3D 场景中各个元素的存在都是在层次化结构中的,这使得复杂场景的管理更加高效。
2、Property
Property 是 Prim 的组成部分。与 Prim 的情况一样,OpenUSD 体系中 Property 一词也应该重新理解。一般来说,Property 和 Attribute 都可译为“属性”,在实际所指上也并不作严格区分。但 OpenUSD 中 Property 和 Attribute 的界限却十分清晰,Property 是一个包含了 Attribute 和 Relationship 的合集概念。
2.1 Attribute
Attribute 在这里不做翻译,理解为该 Prim 与自身有关的值。比如我们需要表现一个 Prim 的形状,就可以定义它的 points 为一系列3D坐标;需要表现一个 Prim 的外观,就可以定义它的 color 为指定的rgb。由此,我们可以通过 Attribute 表达一个 Prim 的基本特征。
另外,OpenUSD 中 Attribute 的值是也可以随时间变化的,这使得动画成为可能。例如,你可以为一个角色 Prim 的位置指定多个时间样本,表示角色在不同的时间点处于不同的位置。然后,当你播放动画时,角色会在指定的时间样本出现在相应的位置。
2.2 Relationship
Relationship 可以翻译成“关系”,理解为该 Prim 与其他 Prim 相关的值。你可以通过设置 Relationship 的值来让一个 Prim 指向另一个 Prim,来建立二者间的关系,关系分为不同种的类型,例如父子关系、引用关系和实例关系等。
可以说,层层交织的关系正是让 OpenUSD 的一些关键特征能够实现的底层。例如,通过建立引用关系而非复制粘贴 Prim 来重用和共享数据,能够使得复杂场景的管理更加结构化;建立父子关系来将对象进行组合,接受整体的操作和修改。
值得一提的是,OpenUSD 的关系是通过命名空间路径来组织。以常见的父子关系为例,一个名称为 'A' 的父 Prim 下有一个子 Prim ‘B’,那么子 Prim 的路径会被定义为 '/A/B';同理,你需要引用另一个 Prim 时,也只能指定它的路径。这里可以有更多关于这种组织形式优劣的讨论,但囿于篇幅只能之后展开。
3、Metadata
Metadata 是 Prim 的另一个组成部分。Metadata 可以译作元数据,是一种用于存储额外信息的数据,你可以为 Prim 加入元数据的描述以更精确地控制 Prim 的行为。例如,你可以定义"active"的值,用于控制Prim是否激活;也可以定义 "hidden" 的值,用于控制 Prim 是否隐藏。
除此之外,你还可以定义自己的 Metadata 以满足特定的需求。这使得 OpenUSD 能更好地兼容不同的系统和工具,更高效地嵌入已有的工作流。
下期预告
至此,构成 OpenUSD 的基本元素、以及它们之间的关系已经介绍完毕。理论层面的讲解十分抽象与枯燥,在之后我们会以一个实操案例的形式再次加深对这些概念的理解。