Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Inherits (繼承)

這與軟體開發領域中的「繼承 (inheritance)」概念雷同。Prims 可以「繼承」自其他的 prims (無論被繼承方是實體 prim 或是 abstract 抽象類別),並忠實反映出該被繼承目標的所有 hierarchy 與屬性特徵。這表示,只要作為繼承源頭的物件 (base prim) 被修改了,所有繼承自該源頭的子代 prims,皆會在第一時間自動套用並繼承這些聯動的變更。

若在單一圖層 (Layer) 的環境下,Inherits 與 Local Reference 的作用十分相近。然而,在多圖層的 Composition (合成) 結構中,Inherits 展現出了獨特的優勢。普通的 References 在引入 Layer stack 之後通常會直接定型成為封裝體。這表示若 references 被遷移至其他的 Layer stack 時,便會喪失對源生圖層的繼承連帶羈絆關係。而 Inherits 則是維持「即時連線 (live)」狀態,無論在 composition 的過程中歷經多少次巢狀結構,或是目標 prim 被後續的圖層所覆寫,帶有 Inherit 的 prim 都能夠確保回溯 (backtrack) 至最初的源頭本尊 (base) 位置,無視合成層級的隔閡。

⚠️ 警告

注意:Prims 無法繼承自身的「直系先祖 (ancestor)」或「子代 (descendant)」。用作被繼承來源的物件 (bases),必須定義在同一階層的旁系 (siblings) 位置上,或是完全獨立於目標 prim 原生的樹狀階層與架構之外 (例如定義於最頂層 root 位階)。

實戰範例

在此案例中,SomeScopeSomeMesh 以及 SomeTransform 各自被實體定義且帶有專屬的型別。同時,它們也共同繼承了一顆名為 _Base 且狀態為 abstract (抽象類別) 的 class prim。而 _Base 本身底端定義了兩個獨立名為 FooBar 的 Xform 子節點。
_Base 屬於 class 類型,並不會主動參與於常規的 Stage Traversal (場景遍歷) 中,自然也不會顯示於常規的層級樹內。要檢視其結構,必須在 USDView 中開啟顯示 Abstract Prims 功能。

🔰 **_Base 是如何被定義的?**

繼承 _Base 的結果,會使 _Base 旗下的所有子節點 hierarchy,完美轉移並複製至所有繼承它的目標 prim 體系之內。

🖼️ Simple inherits (單純繼承範例)

若日後我們修改了 _Base 源頭,這些變更將立即反應在所有繼承它的所有 prim 系列上,無需對個別的繼承實體進行額外的介入。以下方範例做展示,我們在源頭 /_Base/Bar 路徑之下新增了一個名為 Baz 的 prim 參數節點:

🔰 **歷經更動後的 _base**


📝 延伸閱讀

USD Glossary - Inherits