OpenUSD usdUI AccessibilityAPI 指南:用 label / description / priority 三元组为场景构建无障碍信息

发布时间:2026/9/17 19:50:31

OpenUSD usdUI AccessibilityAPI 指南:用 label / description / priority 三元组为场景构建无障碍信息 OpenUSD usdUI AccessibilityAPI 指南用 label / description / priority 三元组为场景构建无障碍信息【免费下载链接】OpenUSDUniversal Scene Description项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD导读UsdUIAccessibilityAPI即AccessibilityAPI是 OpenUSDusdUI库中负责在 Prim 上描述无障碍Accessibility信息的 API Schema。它并不自带无障碍运行时而是以标准的标签label、描述description、优先级priority三元组形式为语音控制、屏幕阅读器等辅助工具assistive tooling提供提取与呈现所需的场景信息。读完本文你将掌握该 Schema 的 USDA 编写语法、多实例multiple apply用法、C / Python 读写 API以及官方推荐的落地最佳实践。一、AccessibilityAPI 是什么在 OpenUSD 的usdUI领域pxr/usd/usdUI中AccessibilityAPI用于在 Prim 上记录可被特定运行时无障碍框架读取的信息供语音控制voice controls、屏幕阅读器screen readers等辅助工具使用。需要特别强调的是OpenUSD 本身不提供无障碍运行时它只负责把无障碍运行时需要的原料——即描述性信息——以标准格式组织并存储下来交由兼容的运行时去提取与呈现。这一点在 Schema 文档docs/user_guides/schemas/usdUI/AccessibilityAPI.md与源码注释pxr/usd/usdUI/accessibilityAPI.h中均有明确说明。AccessibilityAPI继承自UsdAPISchemaBase属于MultipleApplyAPI多实例应用型 API Schema即同一 Prim 上可以同时存在多个命名空间实例见 pxr/usd/usdUI/accessibilityAPI.h 中的schemaKind UsdSchemaKind::MultipleApplyAPI。二、核心三元组label / description / priority无障碍信息由三个属性组成一个标准三元组属性统一使用accessibility作为属性命名空间前缀属性USD 类型默认值说明labelstring无对 Prim 的简短、精炼标签descriptionstring无对 Prim 的扩展描述提供更多细节prioritytokenstandard给无障碍运行时的优先级提示可选值low、standard、high2.1 label标签用途用一句话简明扼要地描述该 Prim。不建议随时间变化time vary除非该 Prim 的简明描述发生了实质性改变。官方对长度没有硬性建议但推荐保持简洁见 pxr/usd/usdUI/accessibilityAPI.h。2.2 description描述用途提供更详尽的扩展描述。约束如果某个实例名instance name下没有编写label则不应以description代替label使用description是可选属性部分无障碍系统可能只读取label。允许随时间变化对于支持时间采样time sampled信息的运行时可以通过不同时间点描述角色的不同动作例如角色正在奔跑角色正在跳跃。2.3 priority优先级用途向无障碍运行时提示该实例的 label / description 相对于其他实例的优先级。允许的 token 值low、standard、high见 pxr/usd/usdUI/schema.usda 中的allowedTokens。回退值fallback valuestandard。该属性是可选的且仅是一个提示运行时可以忽略它例如当运行时认为有其他更优先的需求时可以不采纳该优先级。priority 不允许随时间变化may not be time varying。属性定义细节可在生成的 C 头文件中找到GetLabelAttr()/CreateLabelAttr()、GetDescriptionAttr()/CreateDescriptionAttr()、GetPriorityAttr()/CreatePriorityAttr()见 pxr/usd/usdUI/accessibilityAPI.h。三、USDA 编写示例以下代码块来自官方文档演示如何在MeshPrim 上挂载一个default实例的 AccessibilityAPIdef Mesh Cube ( prepend apiSchemas [AccessibilityAPI:default] ) { string accessibility:default:label Luxo, Jr string accessibility:default:description The lamp has round base with two sections above it that may be adjusted. It has a conical head with a lightbulb inside. It likes to chase inflatable balls. token accessibility:default:priority standard }可以看到apiSchemas中写入AccessibilityAPI:default表示应用一个名为default的实例属性命名遵循accessibility:实例名:属性名的规则即accessibility:default:label、accessibility:default:description、accessibility:default:priority。四、多实例Multiple Apply与命名空间三元组由于AccessibilityAPI是 multiple apply schema同一个 Prim 可以携带多个命名空间三元组实例名用来表达该三元组的使用目的。例如你可能希望对 Prim 的尺寸颜色等不同方面分别给出不同的无障碍信息。pxr/usd/usdUI/userDoc/overview.md 中给出了同时使用default与size两个实例的完整示例def Mesh Cube ( prepend apiSchemas [AccessibilityAPI:default, AccessibilityAPI:size] ) { string accessibility:default:label Regular cube string accessibility:default:description A plain featureless cube token accessibility:default:priority standard string accessibility:size:label Regular sized cube string accessibility:size:description A 4-meter featureless cube token accessibility:size:priority low }实例名的解析规则从源码实现看pxr/usd/usdUI/accessibilityAPI.cppIsAccessibilityAPIPath()负责识别某条属性路径是否属于 AccessibilityAPI路径必须是属性路径IsPropertyPath对属性名按标识符分词后最后一个 token 不能是 Schema 的基名属性label / description / priority 之一当分词结果 2 且第一个 token 等于accessibility时属性名中accessibility:之后的字符串即被视为实例名。也就是说accessibility:foo:label会被解析为实例名foo这正对应测试中namedAPI Apply(prim, TfToken(foo))后创建的accessibility:foo:label等属性见 pxr/usd/usdUI/testenv/testUsdUIAccessibilityAPI.cpp。五、官方推荐的最佳实践官方文档总结了三条针对该 Schema 的使用规范docs/user_guides/schemas/usdUI/AccessibilityAPI.md1. 关键信息使用default命名空间大多数无障碍运行时只支持单个无障碍描述。因此任何关键信息都应写在名为default的实例中以保证被绝大多数运行时读取。2. 使用时间采样信息时务必编写默认值如果使用时间采样的无障碍信息必须同时编写一个默认值default value。这是为了兼容那些目前不支持时间采样信息的无障碍运行时——它们会退回到读取默认值。3. 在 layer 的默认 Prim 与根级 Prim 上提供无障碍信息建议在 layer 的默认 Primdefault prim及所有根级root levelPrim 上提供场景的无障碍信息。这样做有两个好处无障碍系统可以据此向用户提供简洁的整场景描述能够兼容两类运行时不支持层级信息的运行时以及用户关闭了层级粒度显示的运行时。当然层级中其他 Prim 上依然可以继续提供无障碍信息。关于继承的特别说明在默认 Prim 和根级 Prim 上编写场景无障碍描述只是一个推荐约定。除此之外无障碍信息不会通过 Prim 层级隐式继承not implicitly inherited through a prim hierarchy。是否以及如何向上/向下传递信息应当交由无障碍运行时自行决定如何向用户呈现。六、C API 使用UsdUIAccessibilityAPI的 C 接口围绕获取 / 创建属性展开。核心静态方法与成员方法如下见 pxr/usd/usdUI/accessibilityAPI.hAPI作用Get(stage, path)/Get(prim, name)获取指定路径或 Prim 上的 Schema 实例GetAll(prim)返回 Prim 上所有命名实例Apply(prim, name)以指定实例名应用 SchemaApplyDefaultAPI(prim)以default实例名应用 SchemaCreateDefaultAPI(prim)以default实例名构造 Schema 对象CanApply(prim, name, whyNot)检查 Schema 能否应用到该 PrimGetLabelAttr()/CreateLabelAttr()获取 / 创建 label 属性GetDescriptionAttr()/CreateDescriptionAttr()获取 / 创建 description 属性GetPriorityAttr()/CreatePriorityAttr()获取 / 创建 priority 属性Apply的实现是把AccessibilityAPI:name追加到 Prim 的apiSchemaslistOp 元数据中见 pxr/usd/usdUI/accessibilityAPI.h。ApplyDefaultAPI则是在此基础上固定使用defaulttoken 作为实例名见 pxr/usd/usdUI/accessibilityAPI.cpp。#include pxr/usd/usd/stage.h #include pxr/usd/usdUI/accessibilityAPI.h auto stage UsdStage::CreateInMemory(); auto prim stage-DefinePrim(SdfPath(/Root)); // 应用 default 实例并写入三元组 auto api UsdUIAccessibilityAPI::ApplyDefaultAPI(prim); api.CreateLabelAttr(VtValue(The root prim)); api.CreateDescriptionAttr(VtValue(The greatest prim of all time)); api.CreatePriorityAttr(VtValue(UsdUITokens-high));七、Python API 使用usdUI通过 pxr/usd/usdUI/wrapAccessibilityAPI.cpp 导出 Python 绑定模块名为UsdUI.AccessibilityAPI。可用的 Python 方法与 C 一一对应from pxr import Usd, UsdUI stage Usd.Stage.CreateInMemory() prim stage.DefinePrim(/Root) # 应用 default 实例 api UsdUI.AccessibilityAPI.ApplyDefaultAPI(prim) api.CreateLabelAttr(The root prim) api.CreateDescriptionAttr(The greatest prim of all time) api.CreatePriorityAttr(UsdUI.Tokens.high) # 应用具名实例 named UsdUI.AccessibilityAPI.Apply(prim, size) named.CreateLabelAttr(Regular sized cube) # 枚举 Prim 上所有实例 for inst in UsdUI.AccessibilityAPI.GetAll(prim): print(inst.GetName(), inst.GetLabelAttr().Get())其中UsdUI.Tokens提供了accessibility、accessibility:__INSTANCE_NAME__:label/:description/:priority模板 token、low/standard/high等预声明 token见 pxr/usd/usdUI/tokens.h。八、源码级佐证Schema 定义与测试Schema 定义AccessibilityAPI的权威定义位于 pxr/usd/usdUI/schema.usdaclass AccessibilityAPI ( inherits /APISchemaBase ... customData { token apiSchemaType multipleApply token propertyNamespacePrefix accessibility ... } ) { string label ( ... ) string description ( ... ) token priority standard ( allowedTokens [low, standard, high] ) }从定义可见apiSchemaType multipleApply决定了它是多实例 APIpropertyNamespacePrefix accessibility决定了属性的命名空间前缀而priority的allowedTokens与默认值standard决定了合法取值。生成的头文件pxr/usd/usdUI/accessibilityAPI.h和实现pxr/usd/usdUI/accessibilityAPI.cpp均由schema.usda通过代码生成器产出该文档头部也标注了 GENERATED BY genSchemaDocs。测试验证仓库自带的测试 pxr/usd/usdUI/testenv/testUsdUIAccessibilityAPI.cpp 验证了以下关键行为ApplyDefaultAPI(prim)创建出的属性名精确为accessibility:default:label、accessibility:default:description、accessibility:default:priorityApply(prim, TfToken(foo))创建出的属性名为accessibility:foo:label等写入的值可以被Get完整读回且类型正确std::string与TfToken。这为多实例命名 三元组属性的行为提供了直接的可执行验证。九、适用场景与边界适用场景为 3D 场景中的角色、道具、灯光等 Prim 编写屏幕阅读器可读的说明为语音控制提供可朗读/可识别的对象标签为不支持层级信息的辅助系统提供根级整场景描述利用description的时间采样能力描述角色随时间变化的动作。边界与注意AccessibilityAPI只负责信息的存储与组织不提供无障碍运行时也不负责信息呈现无障碍信息不会沿 Prim 层级隐式继承层级继承策略由运行时决定priority仅是提示运行时可以忽略description不能脱离label单独承担描述职责时间采样信息必须搭配默认值编写以兼容不支持时间采样的运行时。相关资源Schema 用户文档docs/user_guides/schemas/usdUI/AccessibilityAPI.mdSchema 权威定义代码生成源pxr/usd/usdUI/schema.usdaC 头文件pxr/usd/usdUI/accessibilityAPI.hC 实现pxr/usd/usdUI/accessibilityAPI.cppPython 绑定pxr/usd/usdUI/wrapAccessibilityAPI.cppToken 定义pxr/usd/usdUI/tokens.h测试用例pxr/usd/usdUI/testenv/testUsdUIAccessibilityAPI.cppusdUI 总览pxr/usd/usdUI/userDoc/overview.md【免费下载链接】OpenUSDUniversal Scene Description项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/17 19:50:31

微信小程序+SSM马拉松报名系统:并发扣减与防重实战

简介:一份基于微信小程序的马拉松运动会报名系统毕业论文,面向计算机相关专业毕业生、需要完成SSM框架与小程序结合项目的开发者。文档围绕马拉松赛事报名场景,针对传统报名方式信息收集不准确、管理复杂等问题,设计了包含个人中心…

2026/9/17 19:50:31

Realsync数据库同步运维实战:日志解析、断点续传与调优

简介:DSG Realsync管理维护手册是一份面向数据库管理员和运维人员的实操型技术文档,聚焦迪思杰Realsync在不同数据库之间实现实时数据同步的部署、配置与维护,尤其适合初次接触或正在评估该复制工具的团队。资源为单份DOC文档,共4…

2026/9/17 19:45:31

Potpie CLI 完全参考:上下文图命令体系的用法与源码级剖析

Potpie CLI 完全参考:上下文图命令体系的用法与源码级剖析 【免费下载链接】potpie Context Graph for AI Native SDLC 项目地址: https://gitcode.com/GitHub_Trending/po/potpie Potpie 是一个 CLI-first 的上下文图工具,其命令行既是人类的操作界面,也是 Agent 的调用…

2026/9/17 20:45:36

UML建模链路实战:从用例图到数据库设计的完整指南

简介:一份适用于UML课程设计与软件工程实践的停车场管理系统分析与设计文档,面向软件工程、计算机相关专业学生,以及需要完成课程设计或毕业设计的初学者。内容围绕系统分析展开,首先给出功能性需求与非功能性需求分析&#xff0c…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码