Adu Blog - USD
type: channel
link: https://aducg.com/tag/USD/
items: USD Assets构建指南
items: MaterialX介绍
items: usd-noodle
items: Houdini Solaris中如何加载USD文件
items: Houdini Solaris USD基础概念（二）
items: Houdini Solaris USD基础概念（一）

USD Assets构建指南
type: item
date: 2024-01-20T03:34:00+08:00
description: 概述本指南的目标是为艺术家和管道提供构建合理且有特色的USD资产的良好起点。它不一定试图提供严格的规范，而是定义一些围绕“最小可行”USD资产构建工具和工作流程的术语和期望。本文件还希望通过提供开始使用USD工作的良好基础来加速对USD资产的一些直觉，而无需预先进行广泛的USD研究或知识。没有什么可以取代体验，但我们希望加速您的体验。许多工作室、艺术家和作品都希望并需要灵活地构建其资产。提供一些艺术家、技术总监、经理、协调员和开发人员在谈论USD资产时可以使用的核心概念非常重要。对于任何USD管道中的任何资产结构，以下概念和描述应该足够常见。Models模型是USD资产。已发布的模型使用零部件或装配体模型类型或基于这些类型的类型。Component组件模型是可发布的资产，将其几何形状保留在有效负载后面；它们通常是独立的（除了从全球图书馆引用的material之外）。Assembly装配模型是引用零部件或其他装配资产的可发布资产。生成自己的组件的程序集应该负载这些组件并确保正确的模型层次结构。组类型仅用于组织程序集和维护模型层次结构。所有已发布的组件和装配模型都应继承自类基元。其中一些术语可能在管道和工作流程中具有现有含义。这可能会让艺术家和开发者的讨论和决策变得困难。然而，在不同的工具和工作室中一致地使用这些术语将加快每个参与者的学习曲线。什么是USD资产？资产，正如我们在行业中经常使用的术语，是一种以USD为单位的模型。资产一词在不同的工作室/环境/工具中通常意味着不同的事物；例如，几何文件、相关文件的压缩包、动画缓存、纹理贴图和shaders通常都称为资产；甚至USD也使用“资产”作为指向外部非USD文件的属性类型。资产的这些非USD部分可以与USD数据一起存储和版本化，尽管情况可能并非总是如此，但在定义或引用USD模型时，它有助于考虑资产的所有部分。模型不仅仅指几何图形，这不仅仅是 USD/Pixar 的惯例。Softimage XSI 有模型，具有类似的概念，即模型包含对资产做出贡献的所有内容。USD的资产结构通常包含两个考虑因素：原始层次结构和组合/文件组织。原始层次结构关于模型层次结构和组合有一些规则，但资产原始层次结构的具体细节是相当开放的。基于组件的类型的祖先必须全部具有基于组或基于组件的类型才能成为正确的模型。诸如material:binding必须以引用基元范围内的基元为目标的关系，否则目标将被清除。关于组织原语的一些其他建议：使用范围来组织基元，以及应避免转换的地方。Xforms 的开销更大，使用 Scopes 可以减少对子 prim 的意外转换。较短的名称可以帮助减少检查原始路径的痛苦，但长度、大小写选择等......取决于个人需求。在 Scope 原语上设置目的更加清晰，因为您不必跟踪各个 gprim 目的。当 Hydra 以USD进行现场工作时，这也更容易消化。Composition和文件组织磁盘上USD资产的具体实施细节通常由工作室现有的基础设施驱动。无论是工作室还是个人，在构建资产时都要考虑以下几点：通常按部门/工作/贡献/内容划分层级有效负载需要外部文件，但除此之外，层分离主要是根据需要组织工作将图层存储为 .usd 的子目录/图层（使用相对路径引用）有助于提高可移植性组件的各个元素层通常被引用或子层在一起。引用有助于保持意见强度的可预测性，因为每个贡献都是 LIVRPS 中的“R”合理的USD资产的最低限度是 asset.usd 和 Payload.usd强烈建议对“asset.usd”使用“.usd”扩展名，以避免在资产层在ascii 和二进制之间切换时必须重新创作参考路径。将其传递到各个层也可能很有用。使用子文件夹组织每个资源，尤其是当存在各个图层引用的其他文件或子图层在一起时。即“model”、“lgt”等...在图层文件夹中，使用文件夹组织USD文件引用的非USD数据会很有帮助即“maps”、“vol”等……结构的版本控制USD资产的结构应该灵活，以适应不同的需求或优先事项。利用基元或文件中的元数据，可以编写系统来了解如何灵活地编辑或贡献资产。引用模型可能不需要了解太多，这更多的是帮助艺术家或工具编辑资产。USD 唯一专门用于帮助版本控制的部分是资产解析器插件。有关编写 AR 插件的其他资源，请参阅更多详细信息。Component组件是USD管道中发布的最基本的资产。一个合理的、基本的组件具有以下特征：模型根 prim 上的组件类型有效负载使几何图形可延迟独立/便携式，不引用外部几何或模型从全球图书馆引用的material是一个常见的例外。从至少一个类 prim 继承，允许将上下文特定的覆盖广播到继承（或“订阅”）同一类的每个资产。根处的变换（“Xformable”）prim，被设置…

MaterialX介绍
type: item
date: 2022-10-24T01:57:00+08:00
description: Houdini终于从19.0版开始支持MaterialX（1.38版）：在：https://www.sidefx.com/docs/houdini/solaris/materialx所以我想写一些关于MaterialX的东西。目前的Houdini虽然支持导入MaterialX，不支持导出。也许它将来会支持出口。否则无法使用。看H19.0.440的更新MaterialX vops 有一个 RMB > Save > MaterialX... 菜单项，用于将着色器网络保存到 .mtlx 文件。您现在可以导出到 MaterialX。此外，大约有 148 个由 MaterialX 准备的标准节点（在官方 MaterialX 中内联或 OSL 中编写）作为 VOP 实现。当我尝试放置它时...... 看起来 MaterialX 中作为标准提供的大多数节点都是用 VOP 实现的，除了 Lama 节点。 可用的节点不多。有吸引力的节点也很少。 但是你要注意什么？ 此 MaterialX 标准曲面的规格在https://autodesk.github.io/standard-surface/中有详细说明。 Karma 的 MaterialX 标准曲面： Arnold 的 aiStandardSurace 参数： 参数完全相同。 换句话说，Karma 和 Arnold 现在可以使用通用的 Uber 着色器。standard_surface此外，AMD 的 GPUOpen 站点 ( https://matlib.gpuopen.com/main/materials/all ) 发布了大量的 MaterialX 文件。什么是 MaterialX？什么是 MaterialX？我认为有些人会成为这样的人。这里有一些我想介绍的网站。MaterialX官网https://www.materialx.org/MaterialX 的概述、规格和API文档都写在这里。我已经在我的网站上发布了规范的日文翻译，所以如果您有兴趣，请访问。除了MaterialX github https://github.com/materialx/MaterialX源代码，您还可以下载使用下面介绍的 MaterialXViewer。Autodesk 的 github https://github.com/autodesk-forks/MaterialX如果您在 Arnold 中寻找 MaterialX，也请查看此处。MaterialX 很难解释，因为您必须多次阅读规范才能理解它，但这里是我发布的翻译介绍的一部分。1.1. 简介许多 CG 制作工作室为每个制作流程使用涉及多个软件工具的工作流程。此外，由于需要在多个设施之间共享和外包大量工作，因此其他部门和工作室需要使用不同的软件包和渲染系统的完全外观开发模型。必须通过。此外，工作室渲染管道过去使用由经验丰富的程序员开发并由技术总监修改的整体着色器。纹理和着色器之间的预硬化连接和硬编码纹理颜色校正选项现在可用于通过图像处理树和混合运算符将输入纹理图像和程序纹理生成器转换为各种着色器。灵活的基于节点图的着色器网络，可连接和构建任意输入。至少需要四种不同的相关数据关系来指定 CG 对象的完整“外观”：根据图像处理网络是如何使用源、运算符、连接和参数构建的，输出空间可变数据流的数量会有所不同。 不同的贴图类型取决于与纹理文件名或 ID 关联的几何特定信息。 根据空间可变数据流、统一值和 BxDF 着色器输入之间的关系，您可以定义不同数量的材质。 根据材质与特定几何图形的关联方式，您创建的外观数量会有所不同。 据我们所知，没有通用的开放标准来传输上述所有数据关系。每个应用程序都有自己的文件格式来存储这些信息，但这些格式是私有的、专有的，并且没有充分指定和实施以完全打开和重现应用程序。不是... 因此，要指定由着色器网络构造的 CG 对象的“外观”，可以将这种外观（或外观的子组件）从一个软件包传递到另一个软件包或在安装之间传递。我们需要一个定义明确的标准，独立于平台。1.2. 提案我们提出了一个新的 Material Content Schema、MaterialX 和一个基于 XML 的文件，用于读取和写入该 MaterialX 内容。MaterialX 模式定义了一些主要元素类型和一些互补的子元素类型。主要元素类型有：定义数据处理图的标准节点集 使用 BxDF 着色器和自定义处理运算符扩展标准节点集。 定义绑定到特定统一参数值和空间变化输入数据流的着色器实例。 定义可以从节点图中引用的几何属性。 定义附加到几何体的材料和属性的特定组合。MTLX 文件是表示 MaterialX 文档的标准 XML 文件。此处使用的 XML 元素和属性对应于 Ma…

usd-noodle
type: item
date: 2021-05-21T01:25:00+08:00
description: usd-noodleusd-noodle是个开源的以节点方式显示USD文件依赖关系的小工具。项目地址：https://github.com/chris-gardner/usd-noodleusd-noodle可以通过命令行独立运行，也可以在其它DCC中运行，还可以集成在DCC中使用（作者提供了Houdini的完整插件！）安装方法Git到本地在houdini内部运行可直接在Houdini中执行以下命令：import sys sys.path.append('/path/to/somewhere/usd-noodle') import usd_noodle usd_noodle.main()为了方便使用可以制作为Shelf上的快捷方式：作为Houdini插件使用将hoodle.json移动到houdini的packages中，并且编辑hoodle.json"NOODLE": "/path/to/usd-noodle"启动方法New Pane Tab Type -> USD -> USD-Noodle启动面板在Lop物体节点上右键LOP Actions -> Noodle Stage将此段加载到Noodle中显示。Noodle以图形化节点方式显示USD文档结构，更易于快速了解文档结构及引用关系。下期将尝试使用nxt_graphs_usd来查看和管理USD文档。NXT相比要强大得多，而且借助nxt_graphs_usd可以完成对USD文档的编辑，另外NXT目前已经有了blender及maya的插件版本，并且还支持nuke及houdni等DCC。

Houdini Solaris中如何加载USD文件
type: item
date: 2020-08-03T01:14:00+08:00
description: USD/SolarisUSD是一个用于处理由Pixar创建的场景图的库，Pixar是一种文件格式，供多个人同时使用。与以前的文件格式的主要区别在于 ，可以通过将多个USD文件组合到一个“过程”（称为“过程场景图”）中来构造一个场景图。Solaris可以在程序上将此USD文件与USD文件组合并处理SOP以构建单个场景图。另一个功能是此Solaris（Stage网络）上的节点位于内存或文件中，并且这些节点中的每个都是USD文件，被视为一个层。节点处理= USD处理=程序场景图构建这就是Solaris的世界，Solaris的世界就是USD的世界。这是Solaris和USD的粗略概述。从Pixar官方下载USD文件Pixar官方提供了些USD资产及场景供学习和参考Pixar官方USD资产下载链接http://graphics.pixar.com/usd/downloads.html打开Solaris下载完成后，启动Houdini18并将预设布局切换至Solaris。面板介绍改变窗口布局后，将会多出两个面板，这是专门供Solaris也就是USD所使用的。第一个是“Scene Graph Tree场景图树”，它显示当前所选节点的USD场景图（所谓的阶段）。该Solaris表示“ USD 过程场景图”，其中一个节点被视为USD文件=图层。连接节点后，将按程序合成该节点。当前选中的节点或显示标志处于打开状态的阶段是“到目前为止组成节点的结果”。另一个是“Scene Graph Details场景图详细信息”。该面板使您可以专注于所选Prim的属性和其他信息。在Houdini / SOLARIS中打开下载的USD文件使用LoadLayer首先，使用“ LoadLayer”节点打开USD文件。这里为何不是 LoadUSD？因为在USD中，USD文件又被称为图层，在之前我的博客上也有过介绍。LoadLayer的作用是“将指定的USD作为图层加载”。用合成操作符节点打开除了LoadLayer之外，Houdini的Solaris还有多种节用于读取USD图层。现在我使用各种合成操作符节点来加载它。如果您在此节点中读取，则可以使用成分操作符功能加载USD文件。如果以这种方式读取，则正在加载的usda文件中的ClassPrim将被隐藏并且无法被覆盖。但是，如果使用LoadLayer加载该图层，然后将该节点连接到Reference节点，则使用参考对子图层进行图层加载，然后在这样的场景中使用\</sdfPath ...>Reference Primer将被加载为。在这种情况下，将不封装该层，并且还将加载指定层中的另一个Prim，以便可以像继承过程中那样覆盖参考源的Prim。用Sublayer打开首先，使用Sublayer节点打开它。使用Sublayer打开时与使用LoadLayer打开时的参数是基本相同的。场景图路径与执行LoadLayer时相同。与loadlayer的区别在于，USD文件可以与具有此单个节点的子层组合。USD 与此子层组合的优点是，可以使用“静音层”和“启用”来打开/关闭USD的效果。这样，你可以在切换USD的图层效果时轻松检查Sublayer节点的效果，以便打开/关闭2D软件的图层。使用此节点进行读取的好处是可以在读取时像PhotoShop图层一样打开和关闭该节点。用Reference打开接下来，尝试使用“Reference”节点进行加载。Reference节点还具有将MultiInput的输入结果转换为Reference的功能。通过将引用类型设置为引用文件，您可以使用此节点来“按引用读取USD文件”。查看SceneGraphPath，可以看到原始名称为绿色。与LoadLayer的最大不同在于，顶级节点名称不同。使用LoadLayer加载时，将按原样加载USD文件中写入的基本结构。但不同之处在于Reference以Destination Primitive指定的原始名称。$OS是节点名称，因此Prim在节点名称reference1下读取。可以尝试右键单击Reference节点，然后打开“ LOP Actions”>“Inspect Active Layer”。会打开当前节点的编辑状态。与Reference节点的读取差异使用reference1节点加载和使用LoadLayer加载并引用它之后连接节点之间存在很大差异。区别在于是否封装。在使用参考节点加载时，如果您查看USDA，则在参考前面添加此类文件路径规范，由指定路径的USDA的DefaultPrim或SdfPath指定Prim将通过引用加载。使用StageManager打开最后来说StageManager节点。在教程视频中，有许多使用此StageManager的示例，但是上述三个与此Stag…

Houdini Solaris USD基础概念（二）
type: item
date: 2020-01-05T03:36:00+08:00
description: Primitive Type Primitive类型Primitive类型种类较多，如几何体一般包括 mesh，以及一个父级 Xform，灯光一般包括 Light以及一个父级 Xform，材质包括 Shader以及父级的 Material，用于方便用组去管理，还会创建 Scope类型出来。相机一般是 Camera。另外还包括 BasisCurves等类型。parent primitives 父级类型在houdini LOP中，parent primitives分为 Scope，Xform和 None。Scope:范围，在USD中是primitives的一种类型，它类似于组的概念，但是它本身不支持变换，主要用来组织层级关系，比如 /models/..., /materials/..., /collections,Xform:Xform在USD中是中是 primitives的一种类型，它类似于组的概念，可支持变换属性。Kind种类在USD中是指“模型”的种类。这个概念在USD中较为难理解。具有几何体形状的每个基本体应具有“种类”。此“模型”含义在USD中并不是图形学意义上的模型，而是一个抽象概念，用于将场景图划分为更容易管理的部分，是对场景图的注释。Kind包括以下几种： Kind种类 Draw mode USD中定义 Icon Assembly程序集 有 重要的组模型，通常是已经发布的资产或者引用的资产 Component组件 有 模型层级结构的“叶”项，这种层次不能再包含其它模型（Group或Assembly或其它Component） Group组 有 一组其它模型（Assembly或Component或Group），模型层级结构的分支项 Subcomponent子组件 无 模型的子模型 None无 无 无定义 场景图树中的模型层次结构可能如下图所示：要维护模型层次结构，场景中应该具有以下内容：处理其下（从其降序）的几何体都应该具有一个起始，包括根 prim，例如 /Models。仅 group/assembly应包含其他模型类型。Component类型不能包含 groups, assemblies或 models。

Houdini Solaris USD基础概念（一）
type: item
date: 2020-01-05T01:38:00+08:00
description: 基本概念Primitives (prims)prims是USD的基本“单位”，在谈论USD时，"Primitive"通常缩写为"prim"。类似于在HTML中的 "element" 。prim有一个名称，0个或多个命名属性，以及0点或多个子级，例如，多边形网络是个prim，灯光是一个prim，材质是一个prim。"xform"prim存储适用于其子prim的transform。Prims是定义阶段的对象树中的“节点”。Properties特性, attributes属性, relationships关系"Property" 是可以附加到prim类型的两种命名数据的通用名称：Attributes属性:属性是描述prim的类型化值（例如整数，颜色，变换矩阵，数组等）（例如，float size = 1.0定义Cube Prim的统一大小）。这是最为常见的property。Relationships关系：关系是在一个prim和另一个prim之间建立的链接（例如，指定对mesh prim的shader要使用的材质，或指定collection中的primitives）。Metadata 元素据属性本身可以附加有命名值，这可以修改它们的工作方式，例如，如果为mesh指定颜色primvar ，则可添加interpolation元数据，该元数据指定渲染器应如何在这些点的颜色之间混合。元素据还用于附加“附加”数据，这些数据可能特定于DCC，或者对于调试或构建用户界面很有用。例如，不同属性的文档存储在元素据中。Layers层一个.usd文件是一个层（.usdz文件，一个文件可以在一个存档文件中包含多个层）。一个层可以表示场景的一个片段，例如，道具，角色，装备的一部分，灯光设置等。它还可以表示用来创建基准的默认值，例如包含镜头序列设置的图层，您可以在代表该序列中每个镜头的文件中reference这些设置。在Houdini中，各种节点创建新的内存层以覆盖现在数据。您可以使用Layer Break LOP手动创建一个新层，一个典型的LOP网络将涉及许多层。其中一些层是从磁盘导入的，某些层是由节点在内存中创建的，最后由这些层组成。（network editor中的可选可视化工具向您显示了网络中哪些节点在不同的层上工作。）Composition arcs 合成操作符从一层到另一层的引用。例如，场景图层可能会reference进包含道具，灯光等图层。这些图层可能reference自己的子层，这些子层可能会reference子子层，依此类推。将各层复合在一起，合并每层中的prims。较高层中的属性将覆盖下面的属性。例如，场景文件可以reference灯光层，但是灯光部门可能已经从 "base defaults", "finished lighting", 和"in-progress lighting"的三个子层组成了该层本身。其他部门不需要知道灯光层是如何组成的，他们只需要reference顶级的lighting层既可。在Houdini中，可以使用Reference LOP ，使用LOP网络中的节点将参考添加到要在内存中构建的层。你可以使用 Sublayer LOP将现有子层（.usd文件）加载到当前阶段的层堆栈中。Stage舞台当加载USD文件和系统组成的所有层结合在一起来计算prims的最后场景图，该结果被称为Stage。请注意，stage只是结果的名称。“stage文件”和“layer文件”之间没有区别，如果将.usd文件加载为"top-level"文件，它将创建一个新的stage。在另一种情况下，你可以将同一文件作为不同stage的图层引用。在Houdini中，位于网络项部的LOP节点创建一个stage，随后的每一个LOP会按程序修改该阶段的内容，从而创建一个新阶段。因此，对于任何LOP节点，您都可以使用hou.LopNode.stage()获取该节点输出的stage对象。您可以usda通过右键单击LOP节点选择LOP Actions ▸ Inspect Flattened Stage来查看节点以语法形式显示的stage输出。组成每个USD文件都包含完整的“场景”。USD文件可以将其它USD文件的内容导入为图层。USD库包括用于将多层合成、叠加到顶层文件创建的整个场景(stage)中的软件。组成包括合并各层之间的以下差异：New prims.（新prims）。Prim ordering.（Prim排序）。Whether a prim is active or inactive.（prim是活动还是不活动）。Variants.（变化）。New properties (attributes and relationships).（新特性（属性和关系））。A…