| On this page |
|
| Since | 19.0 |
概要
Cacheノードは、計算に時間がかかる入力をメモリにキャッシュ化して、それ以降は、再クックせずにそのメモリキャッシュを出力するようにすることができます。
しかし、そのCacheノードだとキャッシュが無効になった場合に入力を再キャッシュ化するタイミングを手動で決める必要があります。
Cache Ifノードでは、1つ以上の条件のテストに基づいて、キャッシュが無効で再生成する必要があるタイミングを 自動で 決めることができる場合に非常に役立ちます。 例えば、ファイルパスを含んだ上流パラメータの値が変更されたら、そのキャッシュは再生成されるべきです。
このノードは、色々なタイプの条件をテストすることができます。例:
-
上流のネットワーク内でノードが追加されたり、削除されたり、編集された場合。
-
上流のネットワーク内のどこかのノードのジオメトリが変更された場合。
-
上流のノードのどれかのパラメータが変更された場合。
-
任意のエクスプレッションがTrueを返した場合、または、エクスプレッションの結果が変わった場合。これには簡易的なHScriptエクスプレッションやフルスクリプトで書けるPythonエクスプレッションを使用することができます。例えば、アセット管理システムのWeb APIを照会してアセットのバージョン番号が変更されたかどうかをチェックするPythonエクスプレッションを記述することができます。
Tip
このノードは、 メモリ(RAM)キャッシュ を使用します。ディスクにキャッシュを出したいのであれば、File Cacheノードを使用してください。
入力をクックするのかキャッシュ化されたファイルを読み込むのか切り替え可能なFile Cacheノードとは違って、このノードは一度入力をクックすると、 常に メモリキャッシュを出力します。 必要に応じてこのノードがキャッシュを再生成するかどうかは、あなたがセットアップした条件に依存します(または、手動で Recache ボタンをクリックします)。
How to
-
計算に時間がかかるジオメトリネットワークの部分の下にCache Ifノードを追加/挿入します。
-
Recache をクリックすると、そのノードの入力がクックされてキャッシュ化されます。
-
キャッシュを再生成する必要があるかどうかを判断する条件をテストするパラメータを設定します。
条件
ここで説明しているパラメータに関する詳細は、以下のフルパラメータのヘルプを参照してください。
Note
1番目の入力には、キャッシュ化したい入力ジオメトリを接続します。 マルチ入力コネクタにノードをいくつか接続すると、そのどれかのノードの出力が変わった場合に、このノードが1番目の入力を再クックして再キャッシュ化することができます。
上流ネットワーク内でノードが追加、削除、編集されたかどうかチェックする
-
Check for Upstream Network Changes を有効にしてください。
ネットワーク内の他のノードの出力が変更されたかどうかチェックする
このノードは、他のノードの出力ジオメトリをフルクックすることなく、そのノードの出力が変更されたかどうかをチェックすることができます。 このノードは、Houdiniが利用しているのと同じ“データID”メタデータを使用して、ノードが入力を再クックすべきかどうかを効率的に決めています(例えば、Houdiniのどこかの箇所でアトリビュート値が追加されたり、削除されたり、変更されると、そのアトリビュートの“データID”が変更されるので、他の部分のコードはそのアトリビュートに変更があったことを伝えることができます)。
-
チェックしたいノードをこのノードのマルチ入力コネクタに接続します。
-
このノードのパラメータエディタ内にある Test Inputs タブをクリックします。
-
接続した入力に呼応したマルチパラメータのインスタンスを作成します。
例えば、1個のノードをマルチ入力コネクタに接続したら、Test Inputsマルチパラメータのインスタンス(“Test Input 1”)を1個作成して、その入力のテスト方法を制御してください。 2個のノードをマルチ入力コネクタに接続したら、マルチパラメータのインスタンスを2個作成し、“Test Input 1”では1個目のノードを、“Test Input 2”では2個目のノードを制御してください(左から右の接続順)。
-
チェックボックスを使用して、他のノードの出力から調べる内容をこのノードに伝えます。
各インスタンスは1個のノードしかチェックできませんが、このノードでは複数のパラメータをチェックすることができます。
以下の組み合わせをチェックすることができます:
-
特定のPoint/Vertex/Primitive/Detailアトリビュートの内容/サイズ/有無の変更があったかどうか。
Attribute Data IDs サブセクションを開きます。 チェックしたいアトリビュートのレベル(Point,Vertex,Primitive,Detail)の隣にあるチェックボックスを有効にします。 チェックしたいアトリビュート名をスペース区切りのリストで入力します。
-
特定のPoint/Vertex/Primitive/Edgeグループの内容/サイズ/有無の変更があったかどうか。
Group Data IDs サブセクションを開きます。 チェックしたいアトリビュートのレベル(Point,Vertex,Primitive,Edge)の隣にあるチェックボックスを有効にします。 チェックしたいグループ名をスペース区切りのリストで入力します。
-
ジオメトリのプリミティブ数またはトポロジーの変更があったかどうか。
Geometry Metadata サブセクションを開きます。 1つ以上のテスト方法の隣にあるチェックボックスを有効にします。 Check primitives ID と Check topology が最も役立つ方法です。 詳細は、以下のGeometry Metadataのパラメータのドキュメントを参照してください。
アトリビュート/グループのテキストフィールドの右側にあるドロップダウンメニューボタンを使用すれば、既知のアトリビュート/グループ名のリストから選択することができます。
Tip
各インスタンスの上部にある Check Test Input チェックボックスを使用すれば、一時的にそのチェックを有効/無効にすることができます。
上流ノードのパラメータが変更されたかどうかチェックする
-
このノードのパラメータエディタ内の Parameters タブをクリックします。
-
チェックしたいノード毎に新しくマルチパラメータのインスタンスを作成します。 Number of Patterns を設定するか、または、プラスとマイナスのボタンを使用して、マルチパラメータのインスタンスの数を設定します。
-
インスタンスオプションを編集して、このノードにチェックさせたいパラメータを指定します。
-
Node Path に上流ノードのパスを設定します。Cache Ifは、そのノードでパラメータが変更されていないかどうかチェックします。このテキストフィールドの右側にある
選択ボタンをクリックすると、ツリーからインタラクティブにノードを選択することができます。
-
Parameter Names には、パラメータの内部名またはパターンをスペースで区切ったリストを設定します。デフォルトは
*です。これは、ノード上の どれか のパラメータの値が変更されたかどうかをチェックすることを意味します。Spareパラメータを追加/削除しても通常では(このノードが監視しているSpareパラメータをユーザが削除しない限りは)再キャッシュは発動されません。
-
Tip
各インスタンスの隣りにあるチェックボックスを使用すれば、一時的にそのチェックを有効/無効にすることができます。
“Group”パラメータに合致したコンポーネントが変更されたかどうかチェックする
Group フィールドはSOPsではおなじみのもので、一般的にはその内部パラメータ名はgroupになっています。
このフィールドでは、このノードの適用先となるグループ名や個々のコンポーネントをユーザが指定することができます。
特別なタイプのパラメータチェックで、パラメータの実際の内容が変更されていない場合であろうとも、Groupフィールドをチェックしてグループのメンバーが変更されたかどうかを確認することができます。
Note
このノードのマルチ入力コネクタに接続されているノードのグループの変更しかチェックができません。
-
Parameters タブで、上記の上流ノードのパラメータが変更されたかどうかチェックするの手順に従って、ノード/パラメータのチェックをセットアップします。
-
Group Names には、チェックしたいGroupフィールドの内部パラメータ名をスペースで区切ったリストを設定します。ここに指定するパラメータ名は、必ず上記の Parameter Names フィールドで指定/マッチしたパラメータに含まれている必要があります。
-
Group Type には、 Group Names で指定されたグループが検索されるレベル(Points, Primitives)を設定します。
-
On Test Input には、このノードのマルチ入力コネクタに接続されているチェックしたいノードが接続されているワイヤーの番号(左から右の接続順)を設定します。
-
ユーザが介入しなくても時間の経過と共にグループのメンバーが変わる場合(例えば、境界ボックス内のすべてのポイントを計算したグループの場合。これはポイントがアニメーションするとグループのメンバーが変わります)、 Check Groups を On Every Cook に設定してください。
エクスプレッションの結果が変更されたかどうかチェックする
-
このノードのパラメータエディタ内の Expressions タブをクリックします。
-
チェックしたいエクスプレッション毎に新しくマルチパラメータのインスタンスを作成します。 Number of Expressions を設定するか、または、プラスとマイナスのボタンを使用して、マルチパラメータのインスタンスの数を設定します。
-
インスタンスパラメータを編集して、各テストエクスプレッションをセットアップします。
-
エクスプレッションが ゼロ以外の値 を返した時にこのノードがキャッシュを再生成するようにしたいのであれば、 Cache When を Expression is True に設定します。エクスプレッションが返す値が 変化 した時にこのノードがキャッシュを再生成するようにしたいのであれば、 Cache When を Expression Changes に設定します。
-
Cache When を Expression Changes に設定した場合、 Expression Type にはそのエクスプレッションが返す値のタイプ( Number または String )を設定します。
-
Expression フィールドにエクスプレッションを入力します。
複数行エディタでエクスプレッションを編集したいのであれば、パラメータを右クリックして Expression ▸ Edit Expression を選択します。
このパラメータのエクスプレッション言語をPythonに設定したいのであれば、パラメータを右クリックして Expression ▸ Change Language to Python を選択します。
-
上流のCache Ifノードがキャッシュを再生成したかどうかチェックする
-
以下のCache Countセクションのドキュメントを参照してください。
Tipsとメモ
-
このノードは、1番目の入力が時間依存かどうかを無視します。これを利用すれば、このノードをネットワークの上部に配置して Check for Upstream Network Changes チェックボックスを有効にすることで、そのネットワークの部分から時間依存を除去することができます。
-
パラメータが変更されたら再キャッシュ化する機能はデジタルアセットで非常に役立ちます。デジタルアセット内で内部ネットワークをキャッシュ化し、ユーザが親アセット上の重要パラメータを変更した時にそのキャッシュを再生成させることができます。
入力
Geometry to Cache
キャッシュ化したいネットワークの部分をこの入力に接続します。
Test Inputs
このマルチ入力は、ネットワーク内の上流ノードから出力を受け取り、それらのノードのどれかの出力に変更があると、このノードにキャッシュを再生成させます。上記の条件を参照してください。
パラメータ
Check for Upstream Network Changes
上流ネットワーク内でノードが追加、削除、編集される度にキャッシュを再生成します。
Re-Cache
クリックすると、このノードが強制的に入力ジオメトリを再クックして再キャッシュ化します。
Cache Count
以下のパラメータでは、このノードが再キャッシュ化した回数を記録したDetail(グローバル)アトリビュートを使用することができます。 これらのパラメータでは、Test Inputsマルチ入力コネクタを介して複数のCache Ifノードを一連でセットアップすることができるので、 例えば、あるCache Ifノードが再キャッシュ化すると(Detailアトリビュート値が変わると)、その下流のCache Ifノードも(そのDetailアトリビュート値が変更されたことを知った時に)再キャッシュ化するようになります。
Output Attribute
このノードが再キャッシュ化した時、以下の Attribute Name で指定されたDetailアトリビュートの値を上げます( Attribute Name を指定して、これを無効にした場合、そのアトリビュートがたとえ入力に存在していたとしても、そのアトリビュートは出力には書き出されなくなります)。
Check Attribute
Attribute Name で指定されたDetailアトリビュートが入力に存在していて、その値が変わった場合に、このノードは再キャッシュ化します。
Attribute Name
この名前のDetailアトリビュートに再キャッシュ化の回数を設定/取得します(この文字列が空っぽでない、且つ、 Output Attribute がオフの場合、そのDetailアトリビュートがたとえ入力に存在していたとしても、そのDetailアトリビュートは入力から 削除 されます。これを回避したいのであれば、ここを空っぽの文字列に設定してください)。
Test Inputs
以下のパラメータでは、このSOPのTest Inputsマルチ入力の各入力でチェックされるメタデータを管理します。 指定したメタデータのどれかに変更があれば、このノードは再キャッシュ化します。
Test Inputsに対してチェック可能なメタデータには、アトリビュートのデータID、ジオメトリ上のグループ、ジオメトリのDetail IDとトポロジーID、入力ジオメトリの変更回数があります。
Check Test Input
このマルチパラメータインスタンスを有効または無効にします。
Attribute Data IDs
Point Attributes
入力内の指定した名前のPointアトリビュートのどれかが変更されると再キャッシュ化されます。
Vertex Attributes
入力内の指定した名前のVertexアトリビュートのどれかが変更されると再キャッシュ化されます。
Primitive Attributes
入力内の指定した名前のPrimitiveアトリビュートのどれかが変更されると再キャッシュ化されます。
Detail Attributes
入力内の指定した名前のDetailアトリビュートのどれかが変更されると再キャッシュ化されます。
Group Data IDs
以下のパラメータを使用すると、テストジオメトリ上のグループを指定することができます。 これらのグループのデータIDが変わる度に再キャッシュ化が発動されます。
Point Groups
入力内の指定した名前のポイントグループのどれかの内容が変更されると再キャッシュ化されます。
Vertex Groups
入力内の指定した名前の頂点グループのどれかの内容が変更されると再キャッシュ化されます。
Primitive Groups
入力内の指定した名前のプリミティブグループのどれかの内容が変更されると再キャッシュ化されます。
Edge Groups
入力内の指定した名前のエッジグループのどれかの内容が変更されると再キャッシュ化されます。
Geometry Metadata
Check Detail ID
入力ジオメトリの“Detail ID”が変わると再キャッシュ化されます。 つまり、ジオメトリの“起源”(ネットワーク内でそのジオメトリストリームを開始したノード)が変わった時です。 例えば、Switchノードで2つの異なるブランチを切り替えた時がそうです。 入力の どんな変更も キャッチしたいのであれば、これと(以下の) Check Change Count を併用すると良いでしょう。
Check Primitives ID
プリミティブ上のメタデータ(これには、メタボールのウェイト、チューブのテーパ、ボリュームやパックプリミティブのトランスフォーム、ボリュームボクセルデータの変更、パックプリミティブデータの変更、NURBSの基底の変更があります)が変更されると再キャッシュ化されます。
Check Topology
入力ジオメトリのトポロジー(番号、ポイント数、プリミティブの接続性)が変わると再キャッシュ化されます。
Check Change Count
入力ジオメトリの“変更回数”(一般的にはHoudiniはジオメトリが修正される度にこの変更回数を更新します)のメタデータが変わると再キャッシュ化されます。 一部のノードは既存のジオメトリを“変更”するのではなくて代わりに新しくジオメトリオブジェクトを作成するので、入力の どんな変更も キャッチしたいのであれば、これと Check Detail ID の両方を有効にすると役に立ちます。
Parameters
Number of Patterns
チェックしたいパターン毎のマルチパラメータ(各インスタンスは、パターンを使用して一度に複数のノードをチェックすることができます)。 パターンの数を設定するか、または、プラスとマイナスのボタンを使用して、マルチパラメータのインスタンスの数を設定します。
Node Path
ノードパスまたはパターンをスペースで区切ったリスト。
Cache Ifは、これらのノード上のパラメータの変更をチェックします。
テキストフィールドの右側にある選択ボタンをクリックすると、ツリーからインタラクティブにノードを選択することができます。
Parameter Names
パラメータの内部名またはパターンをスペースで区切ったリスト。
デフォルトは*です。これは、ノード上の どれか のパラメータの値が変更されたかどうかをチェックすることを意味します。Spareパラメータを追加/削除しても再キャッシュは 発動されません 。
(マルチパラメータインスタンス内のパラメータにマッチさせたいのであれば、そのマルチパラメータフォルダ名とその中に含まれているパラメータ名の両方を指定してください。)
Expand Multiparms
Parameter Names 内の名前がマルチパラメータフォルダにマッチすると、そのフォルダ内のすべてのマルチパラメータインスタンスパラメータを自動的にチェックします。
Group Names
グループのメンバーが変更されているかどうかをチェックする“group”パラメータをスペースで区切ったリスト。
(このようなタイプのパラメータはSOPsではおなじみのもので、一般的にはその内部パラメータ名はgroupになっています。ここでは、このノードの適用先となるグループ名や個々のコンポーネントをユーザが指定することができます。)
グループの内容が変わると、このノードはそのジオメトリを再キャッシュ化します。
Check Groups
グループのメンバーが変更されたかどうかをチェックするタイミング。 これが On Upstream Change (デフォルト)の場合、このノードは、上流のジオメトリが手動で編集された時にのみグループが変わっていないかチェックします。 これが On Every Cook の場合、このノードは、ジオメトリがクックされる度に(つまり、ジオメトリを表示またはレンダリングする必要がある度に)グループが変わっていないかチェックします。 ユーザが介入しなくても時間の経過と共にグループのメンバーが変わる場合(例えば、境界ボックス内のすべてのポイントを計算したグループの場合。これはポイントがアニメーションするとグループのメンバーが変わります)、 ここを On Every Cook に設定してください。
Group Type
Group Names で指定されたグループが検索されるレベル(Points, Primitives)を設定します。
On Test Input
このノードのマルチ入力コネクタに接続されている Group Names で指定されたグループをチェックしたいノードが接続されているワイヤーの番号(左から右の接続順)。
Expressions
Number of Expressions
エクスプレッションの数を設定するか、または、プラスとマイナスのボタンを使用して、チェックするエクスプレッションの数を設定します。
Cache When
エクスプレッションが ゼロ以外の値 を返した時にこのノードがキャッシュを再生成するようにしたいのであれば、ここには Expression is True に設定します。 エクスプレッションが返す値が 変化 した時にこのノードがキャッシュを再生成するようにしたいのであれば、ここには Expression Changes に設定します。
Expression Type
Cache When を Expression Changes に設定した場合、ここにはそのエクスプレッションが返す値のタイプ( Number または String )を設定します。
Expression
テストするエクスプレッション。 複数行エディタでエクスプレッションを編集したいのであれば、パラメータを右クリックして Expression ▸ Edit Expression を選択します。 このパラメータのエクスプレッション言語をPythonに設定したいのであれば、パラメータを右クリックして Expression ▸ Change Language to Python を選択します。
| See also |