您的位置: 首页> Python> usd schemas

usd schemas

时间:2025-09-06 11:00:02来源:互联网

下面小编就为大家分享一篇usd schemas,具有很好的参考价值,希望对大家有所帮助。

好的,我们继续用《博德之门3》的背景来深入解释这些概念。


IsA Schema 进阶:具体职业 vs. 抽象职业类别

我们之前说 IsA Schema 就像角色的“职业”,这个比喻可以更进一步。IsA Schema 分为 具体 (Concrete)抽象 (Abstract) 两种。

Concrete Schemas (具体模式): 你能真正扮演的职业

这就像《博德之门3》里你可以在创建角色时直接选择的职业:战士 (Fighter)法师 (Wizard)圣武士 (Paladin) 等。

  • 特点: 它们是明确的、可以直接“实例化”(创建)的。你可以直接创建一个“战士”职业的角色。
  • USD 对应: 在 USD 中,像 UsdGeom.Sphere (球体) 或 UsdGeom.Mesh (网格体) 就是具体模式。你可以直接在场景里创建一个球体 (Define a sphere),它就是一个有明确类型的实体。

Abstract Schemas (抽象模式): 职业的“大分类”

这就像游戏里一些职业的“总称”或“类别”,例如 施法者 (Spellcaster) 或者 武人 (Martial)

  • 特点: 你不能创建一个角色,他的职业就叫“施法者”。你必须选择一个具体的施法职业,比如法师、术士或牧师。 “施法者”这个概念本身只是一个“基类”,它定义了旗下所有职业(法师、术士等)都会共享的一些特性,比如它们都需要使用“法术位”。
  • USD 对应: 在 USD 中,UsdGeom.PointBased (基于点的几何体) 就是一个抽象模式。你不能直接在场景里创建一个“PointBased”物体。但它是一个非常有用的基类,像 UsdGeom.Mesh (网格体) 和 UsdGeom.BasisCurves (曲线) 这种具体模式都继承自它,因为它们都拥有“点”这个共同属性。

小结:

  • UsdGeom 家族:就像是定义了游戏世界里所有物理实体的模板库,比如角色的模型 (Mesh)、怪物的形状 (SphereCube)。
  • UsdLux 家族:就像是定义了游戏里所有光源的模板库,比如一个“光亮术”法术产生的光源 (SphereLight),或者月光提灯发出的光 (DiskLight)。

API Schema 进阶:专长、状态和出身

我们之前说 API Schema 像是“专长”,这个比喻也可以扩展。

属性的命名空间 (Namespacing)

API Schema 添加的属性,其命名会带有一个“前缀”,以表明它来自哪个“插件”。

  • USD 例子: UsdPhysics.RigidBodyAPI 添加的速度属性叫 physics:velocity
  • 博德之门3类比: 这就好比你角色面板上的能力列表。你的职业技能(来自 IsA Schema)直接显示为“动作奔涌”、“火焰箭”。而你通过夺心魔蝌蚪获得的能力(来自 API Schema)则会归类在**“灵吸怪异能”**这个分类下,显示为 夺心魔能力:心灵冲击夺心魔能力:灵能反冲。这个“夺心魔能力:”前缀,就和 physics: 扮演着同样的角色,让你一眼就知道这个属性的来源。

单次应用 vs. 多次应用 (Single-Apply vs. Multiple-Apply)

API Schema 的应用方式也不同。

  • Single-Apply (单次应用) : 大多数 API 属于这种,在一个物体上只能应用一次。

    • 博德之门3类比: 这就像大多数专长 (Feat) 。你的角色可以学习“巨武器大师”专长,但你无法学习两次“巨武器大师”来获得双倍加成。它要么有,要么没有。
    • USD 例子: UsdPhysics.RigidBodyAPI 就是单次应用的。一个物体要接受物理引擎的计算,你为它应用一次物理属性就够了,没必要应用多次。
  • Multiple-Apply (多次应用) : 这种 API 可以在同一个物体上,用不同的“实例名”应用多次。

    • 博德之D门3类比: 这个最像角色的**“背景标签 (Tags)”** 或 “出身 (Background)” 。一个角色(Prim)可以同时拥有多个背景标签,比如:

      • 背景:博德安人 (Baldurian)
      • 背景:贵族 (Noble)
      • 背景:竖琴手同盟 (Harpers)
      • 每一个标签都是一个独立的“实例”,它们都属于“背景”这个 API Schema,但又各自独立,为角色在对话或剧情中提供不同的选项和加成。
    • USD 例子: Usd.CollectionAPI 是典型的多次应用 API。你可以在一个 Prim 上创建一个名为 armor 的集合(Collection),再创建一个名为 weapons 的集合,用来分别管理不同的子物体。

最终结合:一个完整的例子

想象一下游戏里的一个木箱子 (/World/Crate)。

  1. IsA Schema: 它的核心身份是一个 UsdGeom.Cube (具体模式)。它 一个立方体。

    Python

    # 定义它的核心身份
    crate = UsdGeom.Cube.Define(stage, "/World/Crate") 
    
  2. API Schema: 我们想让这个箱子能被炸飞,能从高处掉下来摔碎。它现在只是个静态模型,没有物理特性。于是我们给它应用一个 API Schema。

    Python

    # 给它添加物理特性(就像给它注入了物理规则)
    crate_rb_api = UsdPhysics.RigidBodyAPI.Apply(crate.GetPrim())
    
    # 现在可以设置它的物理属性了,比如初始速度
    crate_rb_api.CreateVelocityAttr([0, 0, 10]) # 让它向上飞
    

现在,这个木箱子(Prim)的核心身份(IsA)是一个立方体,但通过“插件”(API),它获得了和游戏物理引擎互动的能力。当你用一个“雷鸣波”法术轰击它时,游戏引擎会查找它的 physics:velocity 等属性,并据此计算它该如何被炸飞。

总结: IsA Schema 提供了骨架和身份,而 API Schema 则为其添加了血肉和灵魂,让复杂的场景和行为得以实现。

本站部分内容转载自互联网,如果有网站内容侵犯了您的权益,可直接联系我们删除,感谢支持!