On this page |
このノードを使えば、シミュレーションオブジェクトを外部ファイルに保存、ロードすることができます。 また、Automaticモードを使えば、外部ファイルが存在しない時にはファイル保存、存在する時にはファイルのロードをすることができます。 このノードには2つの目的があります。 1つ目は、シミュレーションまたはシミュレーション内のいくつかのオブジェクトがHoudiniセッション内で持続するように、それらのキャッシュを用意することです。 2つ目は、同じHipファイル内で両方のシミュレーションを実行することなく、あるシミュレーションの出力を、別のシミュレーションに読み込めるようにすることです。
このノードを使用する時は、オブジェクトとそのCreatorノード間の関係性を理解するのが重要です。 DOPシミュレーション内のすべてのオブジェクトとデータは、それを作成したDOPノードの記録を保持します。 こうすることで、フレームからフレームへ各オブジェクトが常にDOP Networkを通じて同じパスに追従します。 ファイルからオブジェクトを読み込む時には、もはや元のCreatorノードが存在していないかもしれません。 Creatorノードは、そのオーナーのDOP Networkを基準にしたパスとして保存されます。
ファイルを読み込む時、そのパスに一致するDOPノードが検索され、そのDOPノードがそのオブジェクトまたはデータのCreatorノードとして設定されます。 一致するノードが見つからなかった場合、File DOPがオブジェクトのCreatorノードとして設定されます。 データは、Creatorノードなしのままになります。なぜなら、データは、オブジェクトのようにDOP Networkを通じて流れないからです。 そのため、データにCreatorノードがなくても問題になりません。 また、File DOPには、読み込まれたオブジェクトのCreatorパスに対して一致したDOPノードが見つかったかどうかに関係なく、 読み込まれたオブジェクトすべての所有権を取得するオプションもあります。 これは、File DOPが、同じ名前なのに実際には同じ物ではないDOPノードを持った他のネットワークからオブジェクトを読み込む場合に役に立ちます。
オブジェクトをファイルに保存する時、それらのオブジェクトは、タイムステップの最後で保存されます。 ファイルを読み込む時、それらのオブジェクトは、タイムステップの最初に読み込まれるので、シーン内の他のオブジェクトに対して影響を与えるオブジェクトとして作用させることができます。 しかし、それらのオブジェクトは、DOP Networkまたは任意のソルバによる修正から保護されます。 つまり、タイムステップの最後でのそれらのオブジェクトの状態が、オブジェクトを読み込んだ時のタイムステップの最初での状態とまったく同じになります。
また、File DOPとシミュレーションキャッシュとの違いを理解することも重要です。 キャシュは、DOP Networkによって自動的に作成されて、全体的に保持されます。 キャッシュは、常にシミュレーション全体の状態を保存します。 それに対して、File DOPを使えば、一部のシミュレーションだけを保存することができます。 キャッシュは、DOP Networkが変わった時に自動的に削除されて再作成されます。 DOP Network内にFile DOPを使えば、そのキャッシュの操作にまったく影響しません。
File DOPはFile SOPに似ています。File DOPはデータをシミュレーションに注入しますが、他のDOPがそれらの事を行なう事を止めません。 実際の挙動は、ネットワークのセットアップの仕方に依存します。File DOPがチェーンの最後のDOPであれば、File DOPは、その上流のDOPが行なった事に加えて、.simファイルの内容を読み込みます。 File DOPで読み込まれたオブジェクトは、それらのオブジェクトを読み込んだ時のフレームでは計算されません。 つまり、このセットアップで読み込まれたオブジェクトは、それらのオブジェクトのソルバを実行しません。 一方で、その上流のDOPが.simファイルにはないオブジェクトをいくつか作成している場合、.simファイルにないそれらのオブジェクトは、それらのオブジェクトのソルバに送られます。
一連の.simファイルを単に読み込みたいためだけにDOP Networkを持つなら、File DOPをネットワーク内で唯一のDOPにしてください。
Note
File DOPをフレーム100まで実行する時、1から99のフレームも読み込まなければなりません。その理由は、File DOPがネットワーク内で唯一のノードでないことがあるからです。 フレーム毎に.simファイルを修正する他のDOPノードが存在する可能性があり、次のフレームでのシミュレーションの内容に影響することがあります。
いつも1個の.simファイルを読み込むためだけにレンダーファームを使用している場合、その1個の.simファイルに常にアクセスできるようにFile DOPパラメータを設定することができます。 各フレーム1から99では、File DOPは同じ.simファイルを再読み込みします。このオペレーションは、ファイルの内容がメモリ内の内容と同一な時に一番速いです。 もっとパフォーマンスを良くするために、フレーム100まで処理しないようにDOP Networkをセットアップすることもできます。
パラメータ ¶
Activation
このパラメータがゼロの時、このノードは、ファイルの保存も読み込みもしません。 このノードは1回しか処理されないので、オブジェクト固有のローカル変数は、このノードで使用することができません。
Operation Mode
このノードのオペレーションモードを意味します。
Automatic
このモードでは、File DOPは指定した名前に一致するファイルを検索します。ファイルが見つかれば、Readモードとして動作します。見つからなければ、Writeモードとして動作します。
Note
このモードは、ネットワークで起きた変更にまったく注意を払いません。
Recook Simulation ボタンをクリックしても、このモードでのFile DOPは、既存ファイルを上書きしません。 このネットワーク内のオブジェクトを強制的に再クックして、更新されたファイルを書き出すには、ディスク上の既存ファイルを削除しなければなりません。
Operation Mode を Write Files に変更してからシミュレーションを再生することでも、再クックすることができます。
Read Files
このモードでは、File DOPは指定した名前のファイルを検索し、そのファイルを読み込みます。 ファイルが見つかった場合、このノードの入力であるノードは、まったく処理されません。
一致したファイルが見つからなかった場合、このノードは無視されます。その入力ノードは、File DOPがなかったこととして処理されます。
Write Files
このモードでは、File DOPは各タイムステップの最後に、指定したファイルを書き出します。 既存ファイルは置換されます。キャッシュからシミュレーションデータを閲覧している時は、ファイルは書き換えられません。 ファイルは、新しいタイムステップの最後にだけ書き出されます。
No Operation
このモードでは、File DOPは何もしません。単に入力オブジェクトを出力に通すだけです。
File
オブジェクトの保存先または読み込み先となるファイルの名前。 通常では、これにはシミュレーション時間またはシミュレーションフレーム番号を使ったエクスプレッションを指定します。
Create Intermediate Directories
必要に応じて出力ファイル用の中間親ディレクトリを作成します。
Take Ownership of Loaded Objects
このパラメータをオンにすれば、File DOPを、指定したファイルから読み込まれたオブジェクトすべてのCreatorノードとして設定されます。 このオプションは、File DOPを使用して、別のDOP Networkで作成したファイルからオブジェクトを読み込む時に、 現行ネットワーク内のノードがソースネットワーク内のノードと同じ名前を持っている場合に役に立ちます。
Match By Name
読み込まれたオブジェクトは、通常では、同じオブジェクトIDを持つシーン内のオブジェクトを置換します。 これにより、File DOPが前のフレームでオブジェクトを作成した時に置換するオブジェクトを知ることができます。 これが原因で起こる問題は、シミュレーションファイルが時間と共に新しいオブジェクトを作成すると、 読み込まれたsimのオブジェクトIDが、現行ネットワークで作成されたオブジェクトIDと重複してしまうおそれがあることです。
その代わりに、そのオブジェクトをオブジェクトの名前で一致させることができます。 これには、.simファイル内のオブジェクトすべてが固有の名前である必要がありますが、 お互いのシミュレーションの干渉を気にすることなく、シミュレーションのレイヤー化が可能です。 Match By Name がオンなら、.simファイルに保存されたリレーションシップがLiveオブジェクトを上書きしないように、それらのリレーションシップが無視されます。
Match Prefix
Match By Name がオンなら、この接頭辞が読み込まれたオブジェクトの名前の頭に付けられ、現行sim内で一致する名前を決めます。 これを使えば、読み込まれたオブジェクトがLiveオブジェクトを置換しないように、読み込まれたオブジェクト対してネームスペースを作成することができます。
Compress .sim Files
キャッシュ用にディスクに書き出された.simファイルを圧縮するか決めます。 圧縮することで、ディスクキャッシュのサイズを大幅に小さくすることができますが、キャッシュ化する時間も大幅に増えます。 キャッシュの読み込みまたは書き出しが遅いようであれば、未圧縮の.simファイルの使用を試みてください(特に流体シミュレーション)。
入力 ¶
First
このDOPがWriteモードの時、この入力に接続されたオブジェクトがファイルに保存されます。 このDOPがReadモードの時、この入力に接続されたオブジェクトは、指定したファイルが見つからない限り処理されません。
出力 ¶
First
Readモードの時、ファイルから読み込まれたオブジェクトを出力します。 Writeモードの時、入力のオブジェクトがこの出力に渡されます。
ローカル変数 ¶
ST
ノードが評価されるシミュレーション時間です。
この値は、変数Tで表現される現在のHoudiniの時間と同じではなく、DOP Networkの Offset Time と Scale Time のパラメータの設定に依存しています。
STは、シミュレーションの開始時間がゼロになるようになっています。
つまり、シミュレーションの最初のタイムステップをテストする時は、$T == 0
や$FF == 1
を使うのではなくて、$ST == 0
のようなテストを使うのがベストです。
SF
ノードが評価されるシミュレーションフレーム(正確には、シミュレーションタイムステップ番号)。
この値は、変数Fで表現される現在のHoudiniのフレーム番号と同じではなく、DOP Networkパラメータの設定に依存しています。 代わりに、この値は、シミュレーション時間(ST)をシミュレーションタイムステップサイズ(TIMESTEP)で割算した値と同じです。
TIMESTEP
シミュレーションタイムステップのサイズ。 この値は、1秒あたりのユニットで表現した値をスケールするのに役に立ちますが、タイムステップ毎に適用されます。
SFPS
TIMESTEPの逆数。 シミュレーション時間の1秒あたりのタイムステップ数です。
SNOBJ
シミュレーション内のオブジェクトの数。 Empty Object DOPなどのオブジェクトを作成するノードでは、SNOBJは、オブジェクトが評価される度に値が増えます。
固有のオブジェクト名を確保する良い方法は、object_$SNOBJ
のようなエクスプレッションを使うことです。
NOBJ
このタイムステップ間で現行ノードで評価されるオブジェクトの数。 この値は、多くのノードがシミュレーション内のオブジェクトすべてを処理しないので、SNOBJとは異なります。
NOBJは、ノードが各オブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJ
ノードで処理される特定のオブジェクトのインデックス。 この値は、指定したタイムステップで常にゼロからNOBJ-1まで実行されます。 この値は、OBJIDやOBJNAMEなどのシミュレーション内の現行オブジェクトを識別せず、現在の処理順でのオブジェクトの順番を識別します。
この値は、オブジェクト毎に乱数を生成するのに役に立ちます。他には、処理別にオブジェクトを2,3のグループに分けるのに役に立ちます。 この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら-1を返します。
OBJID
処理されているオブジェクトの固有ID。 すべてのオブジェクトは、すべての時間のシミュレーション内のオブジェクトすべてで固有な整数値が割り当てられています。たとえオブジェクトが削除されても、そのIDは決して再利用されません。 オブジェクトIDは、オブジェクト毎に別々の処理をさせたい場面(例えば、オブジェクト毎に固有の乱数を生成したい)で非常に役に立ちます。
この値は、dopfieldエクスプレッション関数を使って、オブジェクトの情報を検索するのにベストな方法です。
OBJIDは、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら-1を返します。
ALLOBJIDS
この文字列には、現行ノードで処理されているオブジェクトすべての固有のオブジェクトIDをスペース区切りにしたリストが含まれています。
ALLOBJNAMES
この文字列には、現行ノードで処理されているオブジェクトすべての名前をスペース区切りにしたリストが含まれています。
OBJCT
現行オブジェクトが作成された時のシミュレーション時間(変数STを参照)。
そのため、オブジェクトが現在のタイムステップで作成されたかどうかチェックするには、$ST == $OBJCT
のエクスプレッションが常に使われます。
この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJCF
現行オブジェクトが作成された時のシミュレーションフレーム(変数SFを参照)。
この値は、OBJCT変数にdopsttoframeエクスプレッションを使ったものと等価です。この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJNAME
処理されているオブジェクトの名前を含んだ文字列値。
オブジェクト名は、シミュレーション内で固有であることが保証されていません。 しかし、オブジェクト名が固有になるように注意して名前を付けていれば、オブジェクトの識別は、オブジェクトIDよりも、オブジェクト名を指定するほうが簡単です。
オブジェクト名は、同じ名前を持つオブジェクトの数を仮想グループとして扱うこともできます。
“myobject”という名前のオブジェクトが20個あれば、DOPのActivationフィールドにstrcmp($OBJNAME, "myobject") == 0
を指定すると、DOPがその20個のオブジェクトのみを操作します。
この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら空っぽの文字列を返します。
DOPNET
現在のDOP Networkのフルパスを含んだ文字列値。 この値は、ノードを含むDOP Networkのパスを知りたりDOPサブネットのデジタルアセットで非常に役に立ちます。
Note
ほとんどのダイナミクスノードには、そのノードのパラメータと同じ名前のローカル変数があります。 例えば、Position DOPでは、以下のエクスプレッションを記述することができます:
$tx + 0.1
これはオブジェクトをタイムステップ毎にX軸方向に0.1単位分移動させます。
Examples ¶
CacheToDisk Example for File dynamics node
このサンプルでは、File DOPを使って、シミュレーションをディスクにキャッシュ化して、それを読み戻す方法を説明しています。