
USD起初和maya文件、3dmax文件、或其他格式的数据文件没有什么本质的区别,但它的不同之处在于它存储场景信息的方式,这里的场景熟悉maya的同事可能很快就能get到,
Universal Scene Description(通用场景描述)
简单的说就是不将所有内容单一、臃肿的存储于特定的软件场景文件中,而是描述如何从一堆较小的文件中组合场景,将模型、材质、动画、灯光、特效、渲染等分开描述且是第一个公开可任意组合的描述文件
高效、通用、扩展
为什么用USD
率先提出了组合弧ARC的概念,任意组合、提取、编辑数据并在称为Stage的舞台上以极高的性能运行
通用
市面上各种软件有着各种各样的格式,MA\MAX\Hip\Uasset等等;然后就是各种各种独特的数据格式,Alembic\VDB\HeightField\MTL\MDL格式等等。
说到这里可能大家会疑惑,这个USD,支持MTL的同时又支持MDL,那渲染的时候该渲染哪套材质呢?包括其他兼容的那么多格式,不会有冲突的情况出现吗?他的Universal又是体现在何处的呢?
所以USD还带来了另一个特性,那就是“并集”。举个例子:一个obj文件携带着他的mtl材质进入软件去渲染,如果不做额外修改的情况下,它只能呈现它所携带材质的内容;而USD因为其并集的特性,可以很方便的修改内容的材质信息,这样的功能在三维软件中被称为**“变体variant”**。
“对一个USD内容塞如此多的变体,不会让内容变得很臃肿与冗余吗?”
很多同事可能在过往的软件使用过程中可能通过.FBX以及.blender的格式文件使用过这样的功能,在设置完变体之后,资产的大小会成倍增长,而USD所带来的共享数据能力,也是它高效的开始。
高效
我们来看看在之前的变体问题上,USD是如何处理。我们先来看看USD是如何引用资产的,USD的主要扩展格式分为两种 .usda.usdc
其中.usda代表着场景数据,也就是Scene,里面包含着全部的场景描述信息,并且像之前描述fbx和maya格式时一样,它也是由ASCII编码的,便于直接读取、直接编辑以及版本控制。
而usdc的c则代表Compressed,是压缩过的二进制Binary文件,比ASCII文件更小,加载速度更快,适合频繁读写与承载实际资产。
所以USD的工作流就自然而然的变成了这样:usdc存储文件,usda执行索引
我们看看皮克斯提供的官方演示中的文件资产目录
场景usd文件里长这样
第一行是定义描述格式,然后定义Prim层级名字与坐标轴,然后是用Xform来控制这个层级与设置为可在其中装配的类型;然后是定义一个资产组,再然后是引用路径与引用过来后的位置坐标;不难想象的是,在此处修改他的translate能够达到位移的效果,或者再新增一些旋转或缩放的描述也是一样会生效的。
我们再看看被应用的资产usd文件内是这样的
结构差不多是类似的,因为这里是对资产使用的usdc的定义,usdc文件只负责存储单独信息,这些定义可以随意修改而不影响资产本身
usdc被压缩过的十六进制文件
用定义场景的usd去引用定义资产的usd,这个usd再去引用被压缩过的usdc
用Houdini载入看看其中包含的信息量
而且我们可以看到中间那个小熊的标志,就是Houdini使用USD的方法,他的名字也很特殊,叫asset reference 资产引用。这和我们平常使用的格式不同,USD是通过字面意义上的引用的方式进入软件,在不编辑原始数据的情况下,不会将对应的数据载入内存,达到了更高效的管理;而这样的资产管理方式也带来了更多同步,USD允许多个Artists在相同的资产和场景上进行协作:比如在模型完成后,动画、特效、灯光、LAYOUT可以同步编辑,并且你可以在你的本地随时屏蔽他人操作的内容,这不会干扰Artists自身的工作环境。
一个USD可以编辑另一个USD,这是独一份的,而编辑的方式也分为很多种
- Composition
- Sublayer
- Inherit
- Variant
- Reference
- Payload
- Specialize 这些编辑方式虽多,但对其行为和优先级有严格的定义,不会造成任何歧义,这也意味着USD中保存东西在逻辑上并不是保存一个结果,而是一个过程。
扩展
最后是USD的扩展能力
Alembic格式便是以插件的形态存在于USD中,包括可能大家不太熟悉的VDB格式、Heightfiled格式也是同样的方式存储其中,USD的prim层级上可以负载任意的属性,哪怕你想传一本网络小说上去都行。
简而言之,当影响力足够时,它就直接成了 USD 的一部分。
皮克斯的技术力不必多说,“没有皮克斯,就没有3D动画。”这是一句毫不夸张的话,经由其开发人员十余年结合工业流程开发的USD带来如此高效、强大的能力,为何大家还不速速学习起来了,这个东西对于个人CG用户来说出来也有两年了,似乎看到的较少啊。确实,USD作为信息描述格式,甚至可以说是流程格式,非常强大为啥还没有被广泛使用呢?俗话说得好“但是,古尔丹,代价是什么呢?”
同时,也带来了空前的学习成本与工作管线修改成本,其中或新定义、又或重新定义的概念大概有这么多。
整体来说上手成本是很高的,而是市面上主流的软件中对USD流程支持较为完善的仅只有Houdini在使用上没有太多坑,其他软件也还在一步步推进。
比如自从UE5开始腹泻式更新的EPIC公司,终于又在它最新的5.3更新路线图上看到了USD的身影。
我也注意到,在我们Style3D studio和Ateliar软件上,也有所支持USD格式,这对于所畅想遥远未来的元宇宙概念或许不是最终形态,但想必也是必经的一步,并且USD描述文件的思路也是极其值得借鉴的。