尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

OpenUSD 与 Houdini 的 USD 覆层(Overlay)工作流:基于官方 Houdini 示例教程的完整解析

OpenUSD 与 Houdini 的 USD 覆层(Overlay)工作流:基于官方 Houdini 示例教程的完整解析 OpenUSD 与 Houdini 的 USD 覆层Overlay工作流基于官方 Houdini 示例教程的完整解析【免费下载链接】OpenUSDUniversal Scene Description项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD本文基于 OpenUSD 仓库中的历史示例教程 tut_houdini_example.rst完整还原“在 Houdini 中修改 USD 场景模型变换、导出 USD Overlay 并合回原场景”的五步工作流并结合当前仓库中 SdfLayer 分层实现、usdGeom 变换操作示例 等源码解释 Overlay 机制背后的分层原理。读完本文你可以掌握 USD 跨 DCC数字内容创作工具协作的核心模式视口定位 Prim → 导入几何 → 修改变换 → 导出覆层 → 合回场景并了解该插件在现行 OpenUSD 版本中的状态与替代方案。历史背景与适用前提首先需要明确该教程的历史定位。原文档开头即声明The Houdini USD plugin was removed from the USD distribution in version 20.05 in favor of native USD support in Houdini Solaris. This documentation remains for historical reference.即Houdini 的 USD 插件自 OpenUSD 20.05 版本起已从发行包中移除被 Houdini 原生的 SolarisLOPs工作流取代。仓库中 third_party/houdini/README.md 也给出了同样的说明The USD Houdini plugins have been deprecated in favor of Houdinis native Solaris suite (also known as LOPs).因此本文所述 SOP/ROP 节点名称USD import SOP、USD Output ROP、USD Layer ROP属于旧版 Houdini USD 插件时代的 API主要适用于维护旧管线或研读历史流程的读者。对于新项目推荐直接使用 Houdini SolarisLOPs的原生 USD 支持。此外需要注意教程中引用的素材文件路径为USD/extras/usd/tutorials/Houdini/对应仓库旧布局下的extras/usd/tutorials/Houdini/含shot.usda、overlay_tutorial.hip、examples.hip等。在当前仓库中该目录已不再随发行包提供——extras/usd/tutorials/CMakeLists.txt 中仅安装了authoringProperties、authoringVariants、convertingLayerFormats、endToEnd、helloWorld、referencingLayers、traversingStage等教程子目录不再包含 Houdini 子目录。下文按原文档的步骤完整展开并在涉及文件处标注其在当前仓库中的实际状态。工作流总览五步完成 USD 覆层原教程的核心目标是在一个 USD 场景中把原点处的一栋“小红房子”/World/sets/house移动到地形最高的山顶上且不破坏原始场景层只以“变换覆层”transform overlay的方式记录修改。整个流程概括为五步查看 USD 场景用usdview打开场景确定需要导入 Houdini 的几何内容导入 USD 几何把要修改的几何以及参考所需的几何导入 HoudiniHoudini 镜头级工作修改导入模型的位置、朝向等本文示例为移动位置导出 USD Overlay把修改结果导出为一个 USD 覆层文件把 Overlay 插回 USD 场景使修改在usdview中生效。这个流程体现了 USD 管线的一个重要设计原则下游工具不直接改写上游资产层而是生成引用reference上游层的覆层层仅记录差异。下文逐步展开。第一步用 usdview 查看 USD 场景并定位 Prim打开 USD 场景的命令为路径以教程假设的源码检出根目录为准$ usdview USD/extras/usd/tutorials/Houdini/shot.usda在usdview中的操作要点在左上角的Prim 浏览器中点击house行选中该 Prim按下f键将其置入视野frame选中后模型显示为黄色这是选中高亮而非其本身颜色原文档对此有专门提示在usdview左上角的Prim Name窗口中读取该 Prim 的完整路径——本例中为/World/sets/house。这个路径是后续导入 Houdini 时“Prim Path”参数的关键输入务必记录。教程设定的任务情境是收到通知要求把这栋房子放到地形上最高的山顶。因此下一步只需把房子而非整个场景导入 Houdini 进行修改。第二步把 USD 几何导入 Houdini在 Houdini 的GeometrySOP上下文中执行拉出drop down一个USD import SOP在“USD File”参数中填写或浏览选择要修改的舞台文件本例为USD/extras/usd/tutorials/Houdini/shot.usda在“Prim Path”参数中填写要修改的 Prim 路径本例为/World/sets/house也可以直接使用该节点的Tree 视图在 USD 舞台中可视化浏览并选择 Prim 路径。本例还需要把“Traversal”遍历参数设置为Gprims。原文档说明上述步骤共同设置了导入 Houdini 的几何遍历条件设置完成后视口中即可看到那栋小红房子。一个值得注意的细节在 USD import SOP 上中键单击查看会发现只有一个原始体primitive即一个packed USD打包的 USD 引用。由于本例只修改该模型的变换而不触碰其内部几何因此可以让它保持 packed 状态最终只导出所谓的transform overlay变换覆层——即仅含变换信息的覆层文件体积最小、冲突面最窄。为了在视口中有直观参照教程要求再导入地形复制一个 USD import SOP把“Prim Path”改为/World/sets/terrain并将新的 SOP 设为templated模板化避免它参与后续计算图、仅作为视觉参考。第三步Houdini 镜头级工作本步骤非常简单使用transform SOP把房子移动到最高山顶的位置。这一步只产生一个新的变换不改动房子内部的任何几何数据这正是后续“仅覆层变换”成为可能的前提。第四步导出 USD Overlay在 Houdini 的OutputsROP上下文中操作拉出一个USD Output ROP在输入端指定用于移动房子的transform SOP 的路径打开“Overlay Existing Geometry”参数在输出文件参数中填写将承载覆层的新 USD 文件路径本例为USD/extras/usd/tutorials/Houdini/OVR_house.usda在“Overlay Reference File”参数中填写被覆层引用的原始 USD 文件路径本例为USD/extras/usd/tutorials/Houdini/shot.usda由于只关心修改变换取消勾选 “Overlay All”勾选 “Overlay Transforms”。最后点击“Render to Disk”执行导出。导出的OVR_house.usda是一个独立的 Sdf 层它通过 reference 指回shot.usda自身只承载房子的变换修改。Overlay 的分层原理源码视角这种“覆层文件”在 OpenUSD 的源码层面对应SdfLayerSimple Data Format Layer。从 pxr/usd/sdf/layer.h 的类注释可以看到SdfLayer提供统一的 API 用于访问与序列化符合 SDF 数据模型的场景内容一个 layer 即场景描述的一个独立文件层。USD 的 Stage 通过组合多个层子层构建复合场景覆层文件被“插入”舞台层栈后解析时按 USD 的复合规则composition arc如 reference、payload、override 等将差异合并到目标 Prim 上而原始层保持只读。就本例而言“Overlay Transforms”之所以是安全且最小化的选择是因为变换在 usdGeom 层面本身由一组可独立编造的变换操作xform op构成。从 pxr/usd/usdGeom/examples_usdGeom.cpp 可以看出UsdGeomXformable::AddTranslateOp()、AddScaleOp()等 API 可以按精度与位置语义分别创建平移、缩放等操作覆层只需在其中新增/覆盖一条 translate 操作即可把房子“搬”上山而无需复制任何点、面数据。第五步把 Overlay 插回 USD 场景最后一步是把覆层接入场景在 Houdini 的Outputs 上下文中拉出一个USD Layer ROP将第一个“Source”参数字段设置为USD/extras/usd/tutorials/Houdini/OVR_house.usda对该 USD Layer ROP 执行“Render to Disk”。按教程的说法如果一切顺利现在用usdview打开原场景时就能看到房子出现在山顶的新位置——而原始shot.usda文件本身并未被 Houdini 的编辑直接改写修改以覆层形式叠加在舞台上。原文档还提到两个参考文件均位于旧版教程目录USD/extras/usd/tutorials/Houdini/当前仓库不再附带overlay_tutorial.hip本教程完成的 Houdini 工程文件examples.hip展示 USD 在 Houdini 中其他用法的示例工程。当前仓库状态与替代方向在把本教程用于现网管线前建议核对以下几点均可在当前仓库中直接验证插件已移除third_party/houdini/README.md 明确说明 USD 的 Houdini 插件已弃用转而采用 Houdini 原生 Solaris 套件LOPs教程文档本身也标注为历史参考docs/tut_houdini_example.rst 开头的 note。示例文件不再随发行包分发extras/usd/tutorials/CMakeLists.txt 安装的教程子目录列表中已无Houdini因此在当前检出中按原文档路径查找shot.usda、overlay_tutorial.hip将不可用若需复现需要自备等价的场景文件一个含/World/sets/house与/World/sets/terrain的舞台即可按同样步骤走通。替代方案在具备 Solaris 的 Houdini 中可以直接用 LOP 网络打开 USD 舞台、修改 Prim 变换并写回 USD 层无需本文所述的旧 SOP/ROP 节点而“用覆层承载差异、不动上游资产层”的核心思想不变这正是 USD 复合场景模型SdfLayer composition带来的通用协作范式可迁移到任意 DCC 工具。小结本教程虽然标注为历史参考但它浓缩了 USD 跨工具协作的经典模式用usdview精确读取目标 Prim 路径如/World/sets/house保证上下游命名一致导入时只取需要的子集Prim Path Traversal Gprims保持 packed 以减小改动面修改尽量收敛为单一维度仅变换对应“Overlay Transforms”而非“Overlay All”结果以 reference 指回原始层的独立覆层文件表达再经 USD Layer 机制插回舞台原始层始终保持只读差异可审查、可回滚。理解这一模式后即使不使用 Houdini同样的“定位 → 局部修改 → 覆层合并”流程也可以在任意与 USD 集成的工具中复刻并直接对照 pxr/usd/sdf/layer.h 与 pxr/usd/usdGeom/examples_usdGeom.cpp 中的实现深入分层与变换操作的细节。【免费下载链接】OpenUSDUniversal Scene Description项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表