USD是指Pixar皮克斯动画公司制定的通用场景描述(Universal Scene Description,USD) 格式。
本文将从 USD概念、USD体系、USD简易教程、USD在UE中的应用、USD相关资源,这五个方面展开阐述。

USD的诞生是为了解决场景描述通用性的问题,所以,学好USD最重要的两点是:

  • 理解USD构建场景的思路和体系结构
  • 熟练使用USD提供的 API 以及 工具集

一、USD概念

1. 什么是USD?

USD,是指通用场景描述(Universal Scene Description),用于稳健而且可扩展地交换及增强任意3D场景,而这些场景可能包含众多基本资产。USD不仅提供多类工具集,可用于阅读、写作、编辑和快速预览3D几何图形和着色,还提供元素资产(例如模型)或动画的交换,是3D场景在不同创作工具之间相互交换的桥梁。

使用USD,就是为了提供一套针对3D数据的定义、包装、集成、编辑的统一语言。

针对几何相关的内容,USD提供了 UsdGeom 库。其定义了(OpenSubdiv适用的)网格体、变换、曲线、点、nurbs patches、穿插在几何体表面的各种属性、几何相关的扩展和集成、计算边界框等等。

针对着色,USD提供了 UsdShade 库。其定义了可以连接入网络、打包到可复用材质的基本着色节点,基于此特性,用户可以创建公共接口用于修改着色网络中的参数。它为几何体与材料的绑定提供了巨大的灵活性。

USD重新定义了模型(Model)和资产(Asset)的概念。为了更好地描述和管理较大的 Prims(USD中最基本的容器对象),用 Model 来表示某些特定的Prims。叶节点Model被称作Compoent。组成Model的Model被称作Group,而发布后的Group(一种Asset)被称作 AssemblyAsset 在USD中指底层的某个独一无二的外部资产文件,它也可以指代场景中的某个由一串字符标识的物件。同时 “asset” 也是USD中的一个基本类型,对应C++中的SdfAssetPath类。

USD不是一个应用,而是一个体系。它可以文件格式,可以是一系列工具,也可以是集成在其它任何应用中的插件。

2. USD的特点

  • 支持不同文件格式
    对应抽象类SdfFileFormat
    二进制文件(.usdc)
    文本文件(.usda)
    压缩文件(.usdz)

  • 统一的API
    C++
    USD - C++API手册: https://graphics.pixar.com/usd/release/api/index.html
    Python
    USD - PythonAPI指南: https://developer.nvidia.cn/usd/apinotes
    USD - Python调用示例:


  • 丰富的工具集
    usdedit
    此工具将.usd文件转换成临时的.usda文件,并用编辑器打开它。编辑器是可选择的,通过环境变量 EDITOR 指定用哪个编辑器。
    usdcat
    此工具用于查看usd文件,可以将.usd文件输出到stdout或者某个指定文件。也可以用于转换.usdc文件。
    usddiff
    此工具将对比两个usd文件的差异(对比的是usdcat的输出结果)。
    usdview
    这是USD提供的功能最全的工具,它可以打开usd文件并提供了3D交互界面、场景树导航、一系列的诊断工具以及内嵌的Python解释器。
    usdrecord
    此工具是命令行工具,用于生成某个 USD Stage 的图片或者图片序列。图片的生成工作由Hydra完成,等同于 usdview 中预览到的画面。
    usdresolve
    此工具用于解析资产路径(asset path)。
    usdtree
    此工具在终端以Unix风格输出USD Layer的树形结构。
    usdzip
    此工具用于压缩多个usd文件,生成一个.usdz文件。
    usdchecker
    此工具用于验证.usd或者.usdz文件的有效性,确保Hydra能够对其进行有效渲染。
    usdstitch
    此工具可以集成数个usd文件到一个独立的usd文件。此过程与flatten操作不同。
    usdstitchclips
    usddumpcrate
    USD的自定义二进制格式文件(后缀.usdc),被称作USD Crate File,此工具可以提供usdc文件信息,用于底层低级调试。
    sdfdump
    sdffilter

  • 多人同时修改同一资产或场景
    NVIDIA - Omniverse 英伟达官网下载地址
    Nvidia Omniverse Launcher 非常强大,它集成了Omniverse平台提供的各种功能性应用,以及生态链上的各种第三方应用,其中就包括USDView。 在EXCHANGE页面可以进行浏览、下载,在LIBRARY界面可以启动已安装好的应用。


二、*USD体系

1. 体系结构

Layer

Prims

Attributes ( has basic types )
Relationships

2. 场景描述文件

示例一 - Kitchen_set

整个Kitchen_set的场景在USDView中打开后,界面如下。

这里可以更直观地了解到USD描述场景的思想,即 分而治之

  1. 厨房被分成西边、北边、餐桌、天花板,四个区域。
  2. 以餐桌区域为例,又被分成了桌子、椅子A、椅子B、桌上物品,四个部分。
  3. 以桌上物品为例,又按照更具体的概念,被分成各个物品,包括勺子,茶杯,装满麦片的碗,蜡笔等等。
  4. 展开装满麦片的碗,其中有包含两个部分,碗和麦片(展开可见,麦片由100多个独立的单个麦片组成)。
  5. 展开碗,里面只有碗的几何描述。此时,对于场景构成的描述已经无法继续展开。


我们来分析一下这个场景对应的usd文件:
打开 Kitchen_set.usd 发现其组织结构和在 USDView 中的“世界树”完全一致。


Kitchen_set (xform / assembly )

Props_grp (xform / group)

North_grp (xform / group)

NorthWall_grp (xform / group)

MeasuringSpoon_1 (具体物件,references指向一个引用的资产,xformOp指定了物件在场景中的位置)
MeasuringSpoon_2

打开 references 指向的 ./assets/MeasuringSpoon/MeasuringSpoon.usd
发现文件引用链是 MeasuringSpoon.usd >> MeasuringSpoon_payload.usd >> MeasuringSpoon.geom.usd
最终指向一个二进制文件用于构建我们的勺子的Mesh


示例二 - Parkinglots



4. 重要名词

  • Assembly
    是一种特殊的模型(Model),它是群组模型,是由其它模型组成的有意义的集合。它包含的模型都是已发布的资产。

  • Asset
    Asset本来就是内容生产管线中的常见的名次,在USD中,Asset可以由一个字符串标识。为了更好地支持资产相关的操作,USD定义一种基本类型就叫 asset,对应C++中的SdfAssetPath类。在 .usda 文件中,用 @ 开头的字符来表示 asset 的值。

  • AssetInfo
    用来描述Asset的结构,包含四个核心字段,分别是 identifier(asset类型,指向一个具体的asset)、name(string类型,asset名称)、payloadAssetDependencies(asset[]类型,用于动态资产依赖分析)、version (string类型,标识asset版本)。

  • Attribute
    Property分为Attribute和RelationShip。Attribute是USD中的基本性质,它可以采用的基本类型参见
    https://graphics.pixar.com/usd/release/api/_usd__page__datatypes.html

  • Class
    Class是Prim的一种。可以通过 UsdPrim::IsAbstract 来判断其是否为抽象。

  • Component
    Component是位于叶子节点的Model。它可以包含Subcomponents,但是不能再包含其它Model。

  • Composition
    Composition是集成多个Layers的过程。它发生在第一次打开UsdStage、加载或卸载Prims,以及Stage中的Layer被编辑时。

  • Group
    Group是一种Model。它是多个Model的集合。通常来说,Group是被集成在Assembly中的。

  • Layer
    Layer是Prim的容器。一般而言,Layer对应物理文件上的一个.usd文件。

  • LayerStack

  • Prim
    USD中的基本容器对象。一个Prim可以包含其它Prim,Prim也可以包含Properties(属性),Prim一般都会拥有Specifier(说明符)来指示它在场景中扮演的角色。相关API参见UsdPrim。

  • Property
    包括 Attribute 和 Relationship 两种。

  • Relatinship
    是Property的一种,是指向多个命名空间的指针。在.usd文件中的关键字是rel。

  • Specifier
    标识符,类似与C++中的class或struct,在.usd文件中用来定义一个Prim。具体的Specifier可以是 “def”、“over” 或 “class”。

  • Subcomponent
    表示Component内部的某个可能比较重要的Prim。和Component不同,它并不是一种Model。

  • SubLayers
    SubLayers是一种组织结构,它是包含多个.usd文件的数组。subLayers中每个.usd文件仍可以继续嵌套更多的subLayers。


三、USD简易教程

创建第一个USD场景

打开 USD/extras/usd/tutorials/helloWorld/helloWorld.py,此Python脚本用于创建并导出一个简单场景,里面包含了一个变换和一个球体。打开python文件后可以看到:

from pxr import Usd, UsdGeom
stage = Usd.Stage.CreateNew('HelloWorld.usda')
xformPrim = UsdGeom.Xform.Define(stage, '/hello')
spherePrim = UsdGeom.Sphere.Define(stage, '/hello/world')
stage.GetRootLayer().Save()

执行Python脚本,执行后会生成 .usda 文件

$ python extras/usd/tutorials/helloWorld/helloWorld.py

UsdView 打开 HelloWorld.usda

$ usdview HelloWorld.usda


.usda 文件可以用 usdcat 打开,也可以用 usdedit 进行编辑。
打开后会看到结构性的文字描述,例如:

#usda 1.0
def Xform "hello"
{def Sphere "world"{}
}

四、USD在UE中的应用

为了避免赘述,这里只放上UE4关于USD的官方文档链接:
https://docs.unrealengine.com/4.26/zh-CN/WorkingWithContent/USDinUE4/


五、USD相关资源

  • USD文件体系 Pixar官方介绍PDF Siggraph 2019 USD Introduction and Overview
  • USD官网 https://graphics.pixar.com/usd/release/index.html
  • USD官网 - 教程 https://graphics.pixar.com/usd/release/tut_usd_tutorials.html
  • USD官网 - API文档 https://graphics.pixar.com/usd/release/api/index.html
  • USD官网 - USD工具集 https://graphics.pixar.com/usd/release/toolset.html
  • USD官网 - FAQ https://graphics.pixar.com/usd/release/usdfaq.html#
  • Github源代码 https://github.com/PixarAnimationStudios/USD
  • NVIDIA Omniverse™(基于USD,可扩展的多 GPU 实时开发平台,用于3D仿真设计)https://developer.nvidia.cn/zh-cn/nvidia-omniverse-platform
  • UE4中的USD插件 https://docs.unrealengine.com/4.26/zh-CN/WorkingWithContent/USDinUE4/

技术探究 通用场景描述(Universial Scene Description, USD)相关推荐

  1. 机器人开发--Universal Scene Description(USD)

    机器人开发--Universal Scene Description(USD) 1 介绍 1.1 概述 1.2 标准使用的文件格式 2 支持平台 3 元宇宙标准 参考 1 介绍 1.1 概述 通用场景 ...

  2. 计算机视觉:场景识别(Scene Recognition)

    计算机视觉:场景识别(Scene Recognition) 场景识别 图像分类 特征提取 词袋模型 集成学习分类器 算法设计 结果分析 总结与展望 总结 展望 完整程序请移步至此链接下载 场景识别 在 ...

  3. AI5天训练-视觉生产技术探究和应用

    视觉生产技术探究和应用 概念理解 定义 通过一个或一系列视觉过程,产出新的视觉表达,是人或机器能够感知的图像视频,而不是标签或特征. 分类 生成:从0到1 拓展:从1到N 摘要:从N到1 升维:从An ...

  4. 详解5G:关键能力、关键技术、应用场景、网络架构、经济影响

    详解5G:关键能力.关键技术.应用场景.网络架构.经济影响 未来,5G将渗透到未来社会的各个领域,以用户为中心构建全方位的信息生态系统. 5G,第五代移动电话行动通信标准,也称第五代移动通信技术,也是 ...

  5. 大数据平台架构技术选型与场景运用

    内容来源:2017年5月6日,大眼科技CTO张逸在"魅族技术开放日第八期--数据洞察"进行<大数据平台架构技术选型与场景运用>演讲分享.视频地址:https://mp. ...

  6. 阿里妈妈技术:多场景下的星型CTR预估模型STAR

    阿里妈妈技术:多场景下的星型CTR预估模型STAR 1.背景 问题定义 2.建模方案(STAR) 2.1.STAR Topology Fully-Connected Network 2.2.Parti ...

  7. 回环检测算法综述之场景描述

    在视觉SLAM问题中,位姿的估计往往是一个递推的过程,即由上一帧位姿解算当前帧位姿,因此其中的误差便这样一帧一帧的传递下去,也就是我们所说的累积误差.一个消除误差有效的办法是进行回环检测.回环检测判断 ...

  8. 从技术全景到场景实战,透析「窄带高清」的演进突破

    随着5G时代的到来,互联网短视频.电影电视剧.电商直播.游戏直播.视频会议等音视频业务呈井喷式发展. 作为通用云端转码平台,阿里云视频云的窄带高清需要处理海量.不同质量的视频.对于中高质量的视频,现有 ...

  9. 通用场景语音合成数据集推荐

    语音合成,通常又称文语转换(Text To Speech,TTS),是一种可以将任意输入文本转换成相应语音的技术,是人机语音交互中不可或缺的模块之一. 传统语音合成 传统的语音合成系统通常包含前端和后 ...

最新文章

  1. 代码重构之三种取代类型码(类、子类、状态对象或策略对象)的方式辨析
  2. 全球及中国再生橡胶产业发展动态及十四五运营状况分析报告2021版
  3. 视频翻录_将DVD解密并复制到硬盘驱动器而无需翻录
  4. leetcode222. 完全二叉树的节点个数(两种做法)
  5. 新西兰计算机专业研究生一年,【新西兰计算机专业研究生】 - 教外新西兰留学网...
  6. 三星Note10 Pro电池曝光:容量高达4500mAh
  7. but was actually of type [com.sun.proxy.$Proxy13]
  8. (二)文档请求不同源之window.postMessage跨域
  9. Windows Server 2008下IIS 7配置ASP+ACCESS环境
  10. 短信api接口免费试用
  11. 线性时间选择算法-《数据结构》(结合例题讲解)
  12. EPSG是什么?WKT是什么?SRID是什么?EPSG、WKT、SRID概念
  13. 用药安全,从娃娃抓起
  14. 管家婆财贸双全使用说明(五)数据备份和恢复
  15. PI控制器从连续域到z域到差分方程
  16. windows script host 无法找到脚本文件 estm.vbs
  17. 基于智能矿山电力监控系统的设计与应用方法
  18. html5视频video不全屏播放
  19. 我被39岁阿姨包全天讲代码
  20. 智子社区顾问白硕:区块链宜从金融“主战场”周边做起

热门文章

  1. 说说throw和throws关键字的区别?
  2. ESP32连接校园网,第一次接触网络通信,写一篇博客记录一下学习笔记。
  3. msp430 abs函数 c语言,实现一个简单的msp430软件
  4. MIMO-OFDM无线通信技术及MATLAB实现(4)OFDM概述
  5. 心形图片php,jQuery心形图片签到墙代码
  6. 为什么要基于模型设计?
  7. https 是什么意思?
  8. vcfab算法示例_用示例解释贪婪算法
  9. 静电放电防护设计规范和指南
  10. java 获取年鱼儿_泼墨,造一匹快马,追回十年前姑娘