恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

OpenUSD 教程:检查与编写 Prim 属性(Inspecting and Authoring Properties)

  • 首页
  • 资讯中心
  • /
  • OpenUSD 教程:检查与编写 Prim 属性(Inspecting and Authoring Properties)

相关资讯

51单片机炉温控制:Proteus仿真与PID算法联合调试方法 2026/9/16 20:13:22
TypeScript智能体技能库:可复用、可测试、可组合的能力原子化设计 2026/9/16 20:13:22
Gutenberg Formatting Toolbar API 开发指南:为富文本工具栏添加自定义格式按钮 2026/9/16 20:13:22

最新资讯

PraisonAI Creator Suite 实战指南:用 AI 自动化内容创作的新闻采集、脚本、钩子与简报全流程
NocoBase 字段数据范围(Data Scope)配置指南:关联字段筛选、变量联动与源码原理
AI辅助毕业论文写作:技术原理与实战技巧
Simulink GMSK仿真建模与误码率验证:从调制原理到定点化
瑞数6代VMP逆向实战:从环境改造到Cookie生成全流程解析
自动化 issue 派发:把性能问题分配给责任人

今日推荐

IoT-For-Beginners 智能语音计时器:Wio Terminal 基于 DMAC 与 Flash 的音频采集实战
基于MATLAB的CRI显色指数计算:从SPD光谱到Ra的完整流程
JSP+Servlet+MySQL博客系统源码部署与优化全攻略

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

OpenUSD 教程:检查与编写 Prim 属性(Inspecting and Authoring Properties)

发布时间:2026/9/16 20:13:22
OpenUSD 教程:检查与编写 Prim 属性(Inspecting and Authoring Properties) OpenUSD 教程检查与编写 Prim 属性Inspecting and Authoring Properties【免费下载链接】OpenUSDUniversal Scene Description项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD本篇指南基于 OpenUSD 官方教程 tut_inspect_and_author_props.rst带你使用 Python API 完成对场景中 Prim 的几何属性检查—读取—修改—着色—保存的完整闭环。读完后你将掌握如何用UsdPrim枚举一个 Prim 的全部属性名如何用Usd.Attribute读取回退fallback值并写入新值如何用UsdGeom一级 Schema API 编写displayColor以及如何将修改导回 USD 层文件。起始层HelloWorld.usda本练习的起点是 Hello World 教程中创建的场景文件位于 HelloWorld.usda。其内容为#usda 1.0 def Xform hello { def Sphere world { } }可以看到/hello是一个 Xform其子 Prim/hello/world是一个 Sphere且没有显式编写任何几何属性——这正是理解回退值概念的绝佳起点。教程中对应的可运行脚本是 authorProperties.py每一步操作都可在 Python 交互环境中对照执行。第一步打开 Stage 并获取 Primfrom pxr import Usd, Vt stage Usd.Stage.Open(HelloWorld.usda) xform stage.GetPrimAtPath(/hello) sphere stage.GetPrimAtPath(/hello/world)Usd.Stage.Open按路径打开 USD 文件并解析出整个 StageGetPrimAtPath通过绝对路径SdfPath拿到具体的UsdPrim句柄后续所有属性操作都基于这两个对象展开。第二步枚举 Prim 上的属性名 xform.GetPropertyNames() [proxyPrim, purpose, visibility, xformOpOrder] sphere.GetPropertyNames() [doubleSided, extent, orientation, primvars:displayColor, primvars:displayOpacity, proxyPrim, purpose, radius, visibility, xformOpOrder]注意两个列表的区别Sphere 比 Xform 多出doubleSided、extent、orientation、primvars:displayColor、primvars:displayOpacity、radius等几何属性。这些属性在文件中并未被显式编写它们是 Schema 声明的默认存在的属性——GetPropertyNames返回的是该 Schema 类型可用的全部属性名包含未在层中 author 的。从源码结构看这一行为实现在 prim.cppUsdPrim::GetPropertyNames调用内部的_GetPropertyNames对 Xformable 等类型会把primDef.GetPropertyNames()来自 Sdf 层定义与 Schema 内建属性合并。教程特别提示了一个 API 使用技巧API TipGetPropertyNames适合按名称获取单个属性若需要遍历一个 Prim 的全部属性更便捷的是UsdPrim::GetProperties、UsdPrim::GetAttributes或UsdPrim::GetRelationships——它们直接返回UsdProperty、UsdAttribute、UsdRelationship对象可无需再按名字查找就直接操作。这三个方法的实现在 prim.cpp 中内部统一走_GetPropertyNames_MakeProperties构建对象列表。第三步读取 extent 属性理解回退值 extentAttr sphere.GetAttribute(extent) extentAttr.Get() Vt.Vec3fArray(2, (Gf.Vec3f(-1.0, -1.0, -1.0), Gf.Vec3f(1.0, 1.0, 1.0)))这个 2×3 数组是球体轴对齐、对象空间包围盒extent的两个端点。由于起始层从未编写过extent这里返回的是该属性的回退值fallback valueUSD 规定当场景描述中没有关于某属性值的任何意见opinion时属性使用其类型默认的回退值。对 Sphere 而言radius的回退值是 1.0因此(-1,-1,-1) ~ (1,1,1)的 extent 与之自洽。从源码结构看这类几何包围盒的回退值并非硬编码在 API 里而是由插件按 Prim 类型注册的ComputeExtent函数计算得出——boundableComputeExtent.cpp 中的_FunctionRegistry维护类型 → 计算函数的注册表UsdGeomBoundable::ComputeExtentFromPlugins据此按time参数动态求值。另外两点值得记住不带时间参数调用Usd.Attribute.Get()返回 Default 时间的值。属性还可以拥有按时间采样的值——例如为UsdGeom.Mesh的points属性提供时间样本即可创建动画形变网格官方文档tut_end_to_end教程演示了该管线的雏形。属性名的字典序GetPropertyNames的结果默认按字典序排列。第四步修改半径并手动同步 extent radiusAttr sphere.GetAttribute(radius) radiusAttr.Set(2) True extentAttr.Set(extentAttr.Get() * 2) True关键要点几何包围盒不会随radius修改而自动重算必须手动把 extent 也更新为新尺寸的 2 倍。Set()与Get()同理只传值不传时间即在 Default 时间编写。此时导出根层内容#usda 1.0 def Xform hello { def Sphere world { float3[] extent [(-2, -2, -2), (2, 2, 2)] double radius 2 } }注意 extent 的类型是float3[]两个Gf.Vec3fdouble radius 2被按 double 类型落盘——类型信息由属性的 Schema 声明决定。第五步用 Schema API 编写 displayColor直接写原始属性名primvars:displayColor很繁琐OpenUSD 提供一级 Schema API 来隐藏这种细节 from pxr import UsdGeom sphereSchema UsdGeom.Sphere(sphere) color sphereSchema.GetDisplayColorAttr() color.Set([(0,0,1)]) TrueUsdGeom.Sphere包装器暴露了GetDisplayColorAttr()等具名访问器客户端代码无需知道其底层原始名是primvars:displayColor。修改后的场景描述为#usda 1.0 def Xform hello { def Sphere world { float3[] extent [(-2, -2, -2), (2, 2, 2)] color3f[] primvars:displayColor [(0, 0, 1)] double radius 2 } }注意primvars:displayColor落盘类型为color3f[]——即三元组向量。这是因为该属性既可表示整个 Prim 的统一颜色也可表示逐元素如每个 mesh 面的颜色因此统一以数组形式承载。该属性在各几何类型上的声明可在 generatedSchema.usda 中检索到例如 Imageable API 下的color3f[] primvars:displayColor定义。第六步保存修改 stage.GetRootLayer().Save()Save()把内存中的根层写回磁盘文件。在 usdview 中打开该文件相机自动框选几何体由于半径从 1 变为 2球体比 Hello World 教程中更大可在 Attribute browser 中检查属性值加以确认。进一步阅读UsdProperty访问属性及其公共 metadata 的编写与查询基类UsdAttribute在UsdProperty基础上细化提供对带类型、按时间采样的属性数据的专用 APIUsdRelationship在UsdProperty基础上细化提供对其他 Prim/属性的目标target解析支持沿关系链稳健解析属性默认按字典序排列可用UsdPrim::SetPropertyOrder显式指定顺序。以上三个类族UsdProperty/UsdAttribute/UsdRelationship的 C 实现集中在 pxr/usd/usd 目录下是理解 USD 属性编写体系最直接的入口。小结本教程展示了 USD 属性操作的标准工作流Stage.Open→GetPrimAtPath→GetPropertyNames/GetProperties枚举 →GetAttributeGet()读值注意回退值语义→Set()写值注意 extent 需手动维护→ 用UsdGeomSchema API 编写着色属性 →GetRootLayer().Save()持久化。配套的可执行脚本 authorProperties.py 内置了各步骤的断言校验如属性名列表、extent 回退值适合作为回归验证或二次开发的起点。【免费下载链接】OpenUSDUniversal Scene Description项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号