On this page |
概要
-
アセットに機能を追加したり変更した時、アセットの既存インスタンスすべてを常にアップグレードさせたくありません。例えば、新しいバージョンが異なる動作をすると仮定すると、完了したショットに突然異なるレンダリングをさせたくありません。または、新しいバージョンのインターフェースが異なれば、以前のシーンファイルでのチャンネル参照が壊れることでしょう。
その解決策は、アセットに バージョン を追加することです。これにより、以前のバージョンのアセットが現在のバージョンのアセットと共存させることができます。
-
デジタルアセットに名前を付ける時、Side Effects、下請け、サードパーティベンダーがいつか同じ名前を使用して干渉を起こしてしまう危険性があります。
アセットの名前に ネームスペース を含めることで、この問題を回避することができます。
ネームスペースとバージョンは、Houdini 12で導入されました。
バージョン
バージョン文字列では、“main name”を変更する必要がなく(つまり、ノードの名前をcopy
、new_copy
、newer_copy
などにする必要がありません)、複数の独立したバージョンのアセットを作成することができます。もしSashaが完全に自分のcopy
アセットのインターフェース/実装を変更したい場合は、アセットの名前をcom.sade::copy::2.0
にすることができます。古いバージョンのインスタンスはそのまま機能し、その古い実装を使いますが、新しいノードを置き換えれば、最新のバージョンになります。
バージョンは数字とピリオド(.
)のみ使うことができます。例えば、myasset::2
、myasset::2.1
、myasset::19.1.3
はOKですが、myasset::2a
やmyasset::alpha
は ダメ です。
同じ名前のアセット定義が複数利用可能な時は、Houdiniは、自動的にユーザインターフェースで最新のバージョンのみを利用可能にします。
Note
アセットのOperator Type Propertiesウィンドウには、 Version フィールドがあります。
このフィールドは代替のバージョン管理システムに対応します。
これはノードタイプ名の::バージョン
の部分とは関係ありません。
ネームスペース
ネームスペース識別子 は、ビルトインHoudiniノードや今後使うかもしれないサードパーティのアセットと名前が被ってしまうことを気にせずアセットに名前を付けることができます。(これはノードの 内部名 にだけ適用されることに注意してください。ユーザインターフェースで表示する人が解読可能なラベルに対しては常に任意の文字列を使うことができます。)
例えば、Sasha’s Unbelievably Natural Discount Animation Emporiumはジオメトリをコピーするサーフェスノードを生成するときは、名前をcom.sundae::copy
にします。これは、ビルトインのcopy
ノードと区分けするためで、Joe’s Geometry Hutでも同様に名前をcom.joesgeohut::copy
にします。
そうしておけば、他のユーザに配布するアセットを作成するのに役に立ちます。また、同じ会社内で別々のアーティストが後にお互いのアセットを使ったときに名前の干渉が起きずに独自のアセットを作成することができます。
固有のネームスペースを使うのに便利な規則は、ウェブサイトのDNSアドレスを逆にすることです。例えば、Ada’s Houdini appreciation websiteのアドレスがhoudini.bacon.org
なら、彼女のアセットのネームスペースはorg.bacon.houdini
を使うと良いです。さらに規則を加えて、例えば、アセットの作成者の名前を追加してorg.bacon.houdini.ada
にしても良いでしょう。
アセット名の一部
アセットの内部名の一般形式は、
[namespace::]node_name[::version]
です。
ネームスペースとバージョンはどちらも任意です。名前にネームスペースとバージョンの両方を使用したり、ネームスペースだけ、またはバージョンだけ、またはどちらとも使用しなくても構いません。
いくつかのスクリプトコマンドでは、ノードカテゴリとノード名の両方が必要になります。(例えばObject/geo
、Sop/copy
、Dop/popsolver
)。ネームスペースを使った場合は、[ネームスペース::]ノードカテゴリ/ノード名[::バージョン]
の書式を使います。例えば、com.sundae::Sop/copy::2.0
となります。
How to
To... | Do this |
---|---|
アセットのネームスペースとバージョンを指定する |
ノードからデジタルアセットを作成する時は、“Create New Digital Asset”ダイアログボックスの Operator Name フィールドに、アセット名の一部としてネームスペースやバージョンを含ませることができます。
|
新しいバージョンのアセットを作成する |
|
ユーザインターフェースで古いバージョンのアセットを優先する |
|
ユーザインターフェースで現在のバージョンに加えて古いバージョンすべてを表示する |
|
スクリプトでノードタイプを参照する
スクリプトでノードタイプを参照する時は、“フルパスの”名前 (例えばcom.sundae::vines::2.0
)を使って特定のノードとバージョンを正確に参照するか、または“曖昧な”参照(例えばvines
)を使ってHoudiniにあなたが必要なノードがどれか推測させます。曖昧な参照は、最新バージョンのアセットを常に使いたい時、または、スクリプトをすべて変更することなく異なるネームスペース内の他のアセットを優先するようにしたい時によく使います。
曖昧な名前が複数のノードを参照できてしまう場合、Houdiniは以下のルールに基づいてノードを選択します。
-
バージョン番号を指定していない場合、Houdiniはバージョン番号が一番高いノードを選択します。ノードの名前の最後に“バージョン”を設定していないノードは、常に一番低いバージョンであるとみなされます。
-
Houdiniはスコープしていないノードよりも現在のスコープに制限したノードの方を選択します。
-
Houdiniはネームスペースのあるノードよりもネームスペースのないノードを選択します。
-
Houdiniは常に
HOUDINI_OPNAMESPACE_HIERARCHY
環境変数に、リストにした名前またはネームスペースを優先します。この変数にネームスペースとノード名をスペース区切りにしたリストを設定して曖昧な名前の解決方法をコントロールします。リストの1番目にあるネームスペースがそれ以降のネームスペースより優先で使われます。例えば、
HOUDINI_OPNAMESPACE_HIERARCHY
には以下のリストを含めます。com.sundae org.bacon.houdini
次に、Houdiniが
vines
、org.bacon.houdini::vines
、com.sundae::vines
という名前のアセットを知っているとします。そして、次のコマンドを実行します。opadd vines
するとHoudiniは、
com.sundae::vines
という名前のアセットを使います。なぜなら、そのネームスペースがHOUDINI_OPNAMESPACE_HIERARCHY
のリストで上位にあるからです。フルパスで名前をリストに追加すれば、それよりも新しいバージョンの名前よりも優先させることができます。例えば、
com.sundae::vines::1.0
をリストに追加すれば、たとえcom.sundae::vines::2.0
が利用できたとしても、曖昧なvines
参照は前者のアセットを使います。HOUDINI_OPNAMESPACE_HIERARCHY
の環境変数のリストの名前には、ワイルドカード(*
と?
)を使うことができます。
Tip
ネームスペースなしのノードを明確に参照するには、::ノード名
を使います。例えば、::copy
。バージョンなしのノードを明確に参照するには、ノード名::
を使います。例えば、copy::
。
いくつかのスクリプトコマンド/メソッドには、ネームスペースの解決とHOUDINI_OPNAMESPACE_HIERARCHY
を明示的に無効にするオプションがあります。例えば、opaddには-e
オプションがあり、正確なオペレータ名が必要になります。同様に、hou.Node.createNode()には、exact_type_name
引数があります。
サブネットスコープ
[ノードカテゴリ/ノード名::]ノード指定
の書式を使うと、指定したアセット名が特定のタイプのサブネットワーク内のみで有効であることを明示することができます。例えば、com.example::mysop
というアセットがあるとすれば、その名前をDop/sopsolver::com.example::mysop
とすることで、そのアセットは、SOP Solver DOP内でのみ有効であると明示することができます。これはユーザがジオメトリオブジェクト(Object/geo
)ネットワーク内にアセットを追加しないように防止することができます。
これは非常に特別なアセットを表示するコンテキストを制限することで、⇥ Tabメニューで表示される情報を軽減するのに役に立ちます。