On this page | |
Since | 12.0 |
色々な炎や煙のルックを表現するためのパラメータの使い方は、Pyroのルックデベロップメントを参照してください。
Smoke Solverには、基本的な煙シミュレーションが用意されているのに対し、Pyro Solverには、炎のシミュレーションと形状制御が追加されています。 ちょうど煙を生成したいのであれば、Smoke Solverの方が単純であり、上級ユーザならSmoke Solverに独自の拡張を構築することができるので便利です。 とはいえ、Pyro Solverの方が柔軟性があります。
シェルフツールによるシミュレーションの作成に関する方法は、Pyroツールの使い方を参照してください。
セットアップ ¶
シェルフツールを使ってPyroエフェクトを作成すると、それらのシェルフツールが、ソース、ソルバ、出力オブジェクトを自動的にセットアップします。
ゼロからPyroネットワークをセットアップしている場合、Smoke Objectノードを使用することで、既に接続されているPyroで必要なデータを持つDOPオブジェクトを作成することができます。 既にDOPオブジェクトを持っている場合、Smoke Configure Objectノードを使用することで、DOPオブジェクトに必要データを追加することができます。
このソルバは、オブジェクト上の色々なフィールドサブデータを利用します。
-
オブジェクトには、煙の密度用の
density
スカラーフィールドを持たせてください。 -
オブジェクトには、各ボクセルのVelocity用の
vel
ベクトルフィールドを持たせてください。 -
オプションで、オブジェクトは、内側浮力計算用の
temperature
スカラーフィールドを持つことができます。
入力 ¶
Object
動作させるSmokeオブジェクト。
Note
Smokeオブジェクトは、複数のコンテナを持つことが可能です。
Pre-solve
各計算ステップに入る前に、この入力に接続されたネットワークブランチを実行します。 標準のPyroセットアップでは、この入力に接続されたノード(Gas Resize Fluid Dynamic)は、ステップ毎に流体コンテナのサイズを自動的に変更します。
Velocity update
この入力に接続されたノードは、シミュレーションネットワークのVelocityフィールドを編集することができます。 例えば、カスタムフォースを“project gas non-divergent”ステップの 前に 適用することができます(以下の“Sourcing (post-solve)”入力も参照)。
Advection
この入力にGas Advectノードを接続することで、そのノードが、このソルバ内のフィールドに基づいて、コンテナに取り付けられたジオメトリデータのポイントを移流させることができます。
Sourcing (post-solve)
この入力の主な使用方法は、この入力に接続されたボリュームをFuel(燃料)ソース、Density(密度)ソース、衝突フィールド、ポンプ等として追加することです。 通常では、これはジオメトリネットワークからボリュームを取り込むVolume Sourceノードによって処理されます。 詳細は、Pyro Sourcingを参照してください。
また、この入力に接続されたノードは、シミュレーションネットワークのVelocityフィールドも編集することができます。 例えば、カスタムフォースを“project gas non-divergent”ステップの 後に 適用することができます。
パラメータ ¶
Simulation ¶
これらのパラメータは、シミュレーションが時間と共にどのように進展するのか制御します。 Temperature(温度)とVelocityのフィールドがシミュレーションを大きく駆動させる方法に関する情報は、Pyroシミュレーションの動作方法をしてください。
Time Scale
このソルバ内部の時間のスケール係数。1
は、標準速度、1
より大きい値は、Pyroシミュレーションを速く動かし、1
より小さい値は、Pyroシミュレーションをゆっくり動かします。
doptime, dopframe,dopsttot, dopttostなどのエクスプレッション関数を使用すれば、グローバル時間とシミュレーション時間を変換することができます。
Note
Time Scale を変えると、シミュレーションのタイムステップだけが影響を受けます。
SOPで計算されたVelocityをシミュレーションに追加することで、Volume Source DOPと衝突する場合は、シミュレーションのタイムステップに合うように入力のVelocityを1 / timescale
でスケールしてください。
Temperature Diffusion
Temperature(温度)フィールドに対するガウスブラー係数。値が高いほど温度が広く広がり、定義された効果の鮮明さがぼやけ、より冷却性が増します。
例えば、2
の値は、Temperatureフィールドを毎秒2半径分ぼかします。
(このパラメータに対する実世界の現象は、シミュレーションの解像度よりも、より細かなスケールで乱流をシミュレーションすることです。これによってフィールドが外に広がります。)
Cooling Rate
Temperature(温度)フィールドがゼロに冷却される速さ。0.9の値は、熱いガスの温度を毎秒90%分(元の値の10%へ)下げます。
Warning
これは、Houdini11以前の Cooling Rate パラメータとは逆の意味です。
Viscosity
Velocityフィールドの“流動性”。値が高いほど近隣のボクセルが同じVelocityを持ち、より流動的な見た目になります。0
の値は、隣接するボクセルが抵抗なしで任意の方向に移動できるようになり、
よりグチャグチャした乱流な見た目になります。
(ソルバ内側では、ボクセルのVelocityが近隣のボクセルのVelocityと異なる時、より高いViscosity(粘度)の値が、抵抗を招きます。現在のところ、これは拡散表現をVelocityフィールドへ適用することで実装されています。)
Buoyancy Lift
環境温度とボクセルの温度間の差分でスケールされた各ボクセルの上昇フォース。つまり、より熱い領域ほど上昇し、より冷たい領域ほど沈みます。この値を上げると、その効果をより速く、そしてより高くします。
Buoyancy Dir
浮力が適用される方向。通常では、これはシミュレーションのUp方向ですが、シミュレーションの見た目を迅速に微調整するために、よく修正することがあります。
Color ¶
このソルバは、Smoke Objectのカラーデータを管理することができます。
これを行なうために、ソルバはCd
とAlpha
の2つのフィールドを扱います。
Cd
フィールドには、可視化用に Diffuse Field として使用可能なカラー値を格納します。
Alpha
フィールドには、空間内の各ポイントのカラーの量を格納します。
Alpha
フィールドは、カラーの混ぜ方を決定する上で重要です。
例えば、白の煙と黒の煙を混ぜると、白コンポーネントのAlpha
値が高ければ、その結果の灰色は明るくなります。
以下の動画は、視覚的な比較をしています: 右側の黄色い煙のソースのAlpha
が高い値になっています。
Dissipation
カラーの量(Alpha
フィールド)を時間と共に減らします。
これは、煙のカラーに直接影響を与えるわけではありませんが、ソースからの新しいカラーを混ぜやすくします。
Blur
指定したサイズの隣接の値を混ぜることで、煙のカラーフィールドをぼかします。
Sharpening
煙のカラーフィールドを鮮明化し、効率的に色々なカラーの混色を抑えます。
Note
Sharpeningパラメータの値を大きくすると、視覚的なノイズを招いてしまいます。 場合によっては、Sharpening Threshold を上げることで、追加されたノイズを軽減することができます。
Dissipation ¶
Dissipation(消散)を有効にすると、煙のカラーの量が時間と共に減って、新しいカラーをソースにしやすくすることができます。
Control Field
有効にすると、Dissipationの量が、このフィールドの内容でスケールされます。
Control Range
Control Fieldのこの値の範囲をマッピングします。
Remap Dissipation Field
ランプの垂直軸は、Dissipationの量で、水平軸は、 Control Range の幅です。 例えば、デフォルトのランプは、温度が低い領域ほどカラーの量を速く減らします。
Blur ¶
Blurは、煙のカラーの混色を促進させます。
Radius
1秒あたりにカラーをぼかす大きさを制御します。
Filter
ブラーカーネルの形状。
Sharpness ¶
Sharpenessは、混色を抑え、カラー間の境界を鮮明に維持することができます。
Radius
Sharpenessは、平均化した(ぼかした)値からカラーの偏差を増幅させます。このパラメータは、ブラーを実行する距離を制御します。
Threshold
Sharpenessは、平均化した(ぼかした)値からカラーの偏差を増幅させます。 その偏差が、ボクセルにおいてこの閾値以内にあれば、なにも鮮明化は実行されません。 この値を上げると、招いてしまう鮮明化ノイズの量を軽減することができます。
Relationships ¶
Houdini 12以前では、Pyroソルバは、ソース、ポンプ、シンク、衝突ジオメトリを流体コンテナと関連付けるためにDOPリレーションシップを使用し、 Merge DOPやApply relationship DOPを使ってリレーションシップを作成していました。 Houdini 12以降で推奨されるメソッドは、SOPネットワークを使用してソース、ポンプ、シンク、衝突ジオメトリを作成して、それらをSource volume DOPを使って取り込むことです。
古いリレーションシップメソッドを使用してソース、シンクなどをセットアップしたい場合は、このタブのパラメータを使うことでリレーションシップを有効にすることができます。 デフォルトでは、リレーションシップがオフになっていて、ソルバはリレーションシップデータを無視します。
両方のメソッド(SOPジオメトリを取り込んで、それをソルバの“sourcing”入力に取り付け、さらにDOPオブジェクトリレーションシップをセットアップします)を使用することができます。 リレーションシップが有効な時、ソルバは、両方のメソッドからソース、シンクなどを結合します。
Enable Relationships
オブジェクトリレーションシップデータを使用して、ソース、ポンプ、シンク、衝突ジオメトリをシミュレーションに追加します(もしあれば取り込まれたデータがsourcing入力に接続されます)。
Sources ¶
Tip
ソースリレーションシップを使用する時、ソースオブジェクトが温度を放出していることを確認してください。これは、オブジェクトの Physical Properties タブでセットアップすることができます。
Enable Source Relationship
DOPオブジェクトをソルバへの“source”リレーションシップと一緒に使用します。
Add Source To
ソースの追加先となるフィールド。デフォルトはdensity
です。これは煙を作成します。炎を作成するには、これをfuel
に変更し、ソースオブジェクトの Temperature Physical Property を設定します。
Source Merge
ソースオブジェクトのボリュームがシミュレーションに追加される方法。 Scaleは、追加の度合いを制御します。
Velocity Merge
ソースオブジェクトのVelocityがコンテナのVelocityフィールドに影響を与える方法。 Scaleは、追加するVelocityの度合いを制御します。
Temperature Merge
ソースオブジェクトのTemperature(温度)物理パラメータがコンテナのTemperature(温度)フィールドに影響を与える方法。 Scaleは、追加する温度の度合いを制御します。
Velocity Type
ソースオブジェクト上のVelocityを測定する方法。ソースジオメトリが時間と共に変形(形状変更)しない場合、“Rigid velocity”を使用してください。 ソースジオメトリが時間と共に変形しても、トロポジーが変わらないなら、“Point velocity”を使用してください。
Rigid Velocity
ソースオブジェクトを変形なしとして扱います。
Point Velocity
ポイント履歴を使用して、ジオメトリの変形を許可します。これは、ソースジオメトリのトポロジーが変わらない場合にのみ動作します。
Volume Velocity
オブジェクトのSDF表現を使用します。ジオメトリの変形を許可し、時間軸でトポロジーが固定されている必要はありませんが、接線Velocityを検出することができません。
Pumps ¶
Enable Pump Relationship
DOPオブジェクトをソルバへの“pump”リレーションシップと一緒に使用します。
Velocity Merge
ソースオブジェクトのVelocityがコンテナのVelocityフィールドに影響を与える方法。 Scaleは、追加するVelocityの度合いを制御します。
Velocity Type
Temperature Merge
オブジェクトのTemperature(温度)特性がコンテナのTemperature(温度)フィールドに影響を与えるかどうか。 “Set interior”を選択すると、オブジェクトの内側に相当するTemperature(温度)フィールドの部分がオブジェクトのTemperature(温度)に設定されます。
Collisions ¶
Enable Collide Relationship
DOPオブジェクトをソルバへの“collision”リレーションシップと一緒に使用します。
Temperature Merge
オブジェクトのTemperature(温度)特性がコンテナのTemperature(温度)フィールドに影響を与えるかどうか。 “Collision interior”を選択すると、オブジェクトの内側に相当するTemperature(温度)フィールドの部分がオブジェクトのTemperature(温度)に設定されます。
Restrict Mask to Bandwidth
通常では、衝突マスクSDFは、元の衝突ジオメトリから特定の距離までのみ計算されます。 ある特別なエフェクトのために、例えば、ある物がオブジェクトに到達する前にその物を反応させる必要があるなら、マスクの全範囲を計算するために、これをオフにします。
Use Point Velocity for Collisions
衝突ジオメトリが時間と共に変形(形状変更)しても、トポロジーが変わらない(例えば、ポイントの数が変わらない)なら、これをオンにします。 トポロジーが時間と共に変わるなら、 Use volume velocity for collisions をオンにします。
Use Volume Velocity for Collisions
衝突ジオメトリが時間と共に変形(形状変更)して、トポロジーが変わる(例えば、ポイントの数が変わる)なら、これをオンにします。
Collide with Non-SDF
流体が、他の流体などのGeometry/SDFを持たないオブジェクトに衝突することを許可します。
Extrapolate into Collisions
Density(密度)とFuel(燃料)フィールドをCollision(衝突)フィールドへコピーします。これにより、煙が、SmokeフィールドとCollisionフィールド間に空気の隙間ができないように“粘着性”を持ちます。 また、これは、煙が、移動する衝突フィールドを通過しないようにします。
Sink ¶
Enable Sink Relationship
DOPオブジェクトをソルバへの“sink”リレーションシップと一緒に使用します。
Advanced ¶
通常では、これらのパラメータを変更する必要はありません。
Use OpenCL
特定のマイクロソルバに対してGPUアクセラレーションを有効にします。 この機能は、どのグラフィックカードやOSでも動作するわけではありません。 Side Effects SoftwareウェブサイトのSupportセクションのSystem Requirements情報をチェックしてください。
最新のグラフィックカードを使用し、最新のドライバにアップデートしてください。 OpenCLの動作を検証するために、テストシミュレーションでは、まずは低解像度シミュレーション(例えば、643グリッド)から始めて、 そして、解像度を上げていってください。 OpenCLによる余分なメモリ転送オーバーヘッドは、高解像度(例えば、2563あたり)にのみ価値があります。
単純なSmoke Solverでは、1番目のフレームソースの後のシミュレーションからGPUを使用します。 GPUが有効になっていないマイクロソルバを追加すると、Houdiniは、エラーを出さずに、GPUが必須のCPUコピーを実行します。
最高速にするには、システムがビデオカード間とのコピーを最小限にする必要があります。サンプルファイルでは、コピーを最小化するための方法をいくつか説明しています。 GPUアクセラレーションを使用した高速シミュレーションをセットアップする方法に関しては、OpenCL smoke example fileを参照してください。
非常に高解像度な単純なSmoke Solverシミュレーションが、OpenCLによって速くなるはずです。とはいえ、デフォルトのPyroエフェクトは、自動的により速くなるようにシミュレーションしません。
-
デフォルトのPyroエフェクトは、速い初期再生をするために、非常に低い解像度になる傾向があるので、GPUアクセラレーションがそのオーバーヘッドを大きく上回るほどに十分なボクセルを持ちません。
-
デフォルトのPyroエフェクトは、GPUに対応していない形状ノードを多く持っています。ほとんどのノードのGPUが有効(例えば、Vortex Confinement)であっても、かなりの数のPyroノードがVOPベースであり、GPUが有効ではありません。
-
キャッシュ化は、DOP内ではデフォルトで有効です。
-
サイズ変更は、デフォルトで有効です。サイズ変更は、フィールド変更を管理するためにCPUを通さなければなりません。また、GPUメモリをフラグメント化することで、メモリ不足エラーになることもあります。
Min Substeps
ソルバを強制的に最小数のサブステップで実行します。通常では、Pyroソルバはサブステップなしで非常に上手く動作します。 煙と通常ではないフォースを持っていれば、より安定させるために、このパラメータを上げたい時があります。 通常では、このパラメータを上げると、シミュレーションが遅くなります。
Max Substeps
ソルバを強制的にこの最大数のサブステップを超えないように実行します。通常では、Pyroソルバはサブステップなしで非常に上手く動作します。 煙と通常ではないフォースを持っていれば、より安定させるために、このパラメータを上げたい時があります。通常では、この値を上げると、シミュレーションが遅くなります。
CFL Condition
Max Substeps が1
より大きい時、ソルバは、このパラメータを使用してサブステップの数を決めます。
その“条件”は、サブステップがオブジェクトをこれより多くのボクセルで相互に貫通することができない事です。
値が高いほど、サブステップは、より多くのボクセルだけ煙を動かすことができ、場合によっては、衝突オブジェクトを通過させてしまいます。
Quantize to Max Substeps
有効にすると、フレームを Max Substeps で割ったサブステップが使用されるので、時間が常に1/ Max Substeps の倍数となります。
例えば、 Max Substeps を4に設定し、 CFL Condition が3サブステップだけ必要であれば、 ソルバはフレームを3つのサブステップ(各サブステップは 1/ Max Substeps の倍数に位置します)に分割します。 このサブステップ長の組み合わせは、0.25, 0.5, 0.25(フレームをそれぞれ0-0.25,0.25-0.75,0.75-1の位置に分割)となります。 フレームをサブステップに分割する時、ソルバは、パーティクルの現行状態(パーティクルのサイズとVelocity)も考慮します。
このオプションは、1/ Max Substeps の増分値でファイルにキャッシュ化された入力ジオメトリを再利用するのに役に立ちます。 例えば、ジオメトリが1フレームあたり4サブステップでディスクにキャッシュ化されていれば、そのジオメトリを補間する必要がないように、シミュレーションのサブステップが常に0.25の倍数となるようにすることができます。
Frames Before Solve
オブジェクトを作成した後に、実際のシミュレーションをこの数のフレームだけ遅らせます。 ソーシングは、それらのフレーム内でも発生します。これは、いくつかのSolveノードが特定の初期条件を満たす前に処理できない時に必要になることがあります。
External Forces ¶
Scaled Forces
各ボクセルでのforcescale
フィールドの値によってスケールするフォースのリスト。デフォルトでは、重力以外のフォースすべてです。
Absolute Forces
すべてのボクセルに均一に適用するフォースのリストで、forcescale
フィールドが無視されます。
Rest Field ¶
Enable Rest
Restフィールドを作成します。このフィールドを使えば、時間軸で流体の位置を追跡することができます。Volumeシェーダ内でノイズやテクスチャを正しくマップするには、これをオンにします。
Dual Rest Fields
メインのrest
フィールドから1つ前のrest2
フィールドを作成し、ポップなしで長いシミュレーションを実行することができるようになります。
Frames Between Solve
Restフィールドをリセットする前のフレーム数。
Frame Offset
Restフィールドがリセットされるフレーム。シミュレーションをPreroll(プリロール)している場合、Preroll(プリロール)の後までRestフィールドの初期化を遅延すると、通常では、良い結果が出ます。
Time Scale
Velocityフィールドに反応して、Restフィールドが移動する速さ。1
の値は、Restフィールドを流体に正確に一致させますが、それによって、Restフィールドを縞模様に素早く汚してしまいます。1
未満の値は、実際の流体よりもゆっくりとRestフィールドを動かして、縞模様を減らします。
Projection ¶
シミュレーションの“project non-divergent”ステップは、Velocityフィールド内のDivergence(発散)成分を削除します。
Projection Method
Project Non-divergenceアルゴリズム。“PCG”は、より正確な境界条件を持っていて、衝突オブジェクト内側の計算を回避します。“Multigrid”は、特に大きいまたは高い解像度コンテナに対して非常に高速です。
Note
PCGは、表面サンプリングされたVelocityフィールドでのみ使用します。 中央サンプリングに設定した場合、別の緩和メソッドが使用されます。 中央サンプリングでは、常にMultigridが使用されます。
Multigrid Iterations
Multigrid Project Non-divergenceメソッドは、不正確な境界の実行をします。この数を上げれば、複数回の実行/投影を行なうことができ、それの精度が良くなります。この値を5
より大きくしないでください。
Advection ¶
Advection Type
フィールドの移流に使用するアルゴリズム。
Single stage
Gas Advect DOPと同等です。各ポイントが、一度Velocityフィールドを辿って、新しいボクセル値を探します。
BFECC and Modified MacCormack
2番目の基本Advection(移流)ステージを実行し、あまり分散しない、より鮮明な流体にします。
Clamp Values
BFECC and Modified MacCormack の移流タイプのエラー訂正は、コンテナの外部へボクセル値を動かすことができ、マイナスの密度といった変わったエフェクトを表現することができます。 このパラメータは、この問題を回避するためのメソッドを選択することができます。デフォルトは、“Revert”です。
None
エラー訂正が値をコンテナ外部へ動かさないように試みません。
Clamp
各ボクセルを可能な限り指定した8個の元の値の範囲に制限します。
Revert
エラー訂正されたボクセルが範囲外なら、それを単一ステージの値に戻します。
Revertは、エラー訂正が分析した箇所のチェック柄の画像の乱れを回避することができます。
Blend
移流フィールドがクランプ制限に到達した時に、非クランプ値とクランプ値間で滑らかなブレンドを適用します。 特に Revert オプションでは、小さな量の Blend (例 0.05 - 0.1)を適用すると、フィールドの滑らかさがなくなりますが、 移流フィールド内のグリッド状の乱れを軽減することができます。
Vel Advection Type
Velocityフィールドの移流に使用するアルゴリズム。リストのより上のタイプほど、フィールドの明白なViscosity(粘度)を少なくしますが、エネルギーが増え、サラサラになります。
Advection Method
パーティクルのトレースを制御します。
Single Step
各ボクセルでVelocityを受け取り、そのタイムステップに対して、その方向で単一ステップを作成します。 これが最も高速で、Velocityフィールドの速度とは無関係ですが、大きなタイムステップに対しては壊れ始めます。
Trace
バックトラックは、そのVelocityが更新される前に単一ボクセルよりも大きく動かさないので、より大きなタイムステップが可能です。
Trace Midpoint
Trace と同様ですが、2次の移流を使用して精度を出すので、シミュレーションが遅いです。
HJWENO
非ラグランジュインテグレータ。これは、理論的には分散フィールドのより正確な移流が可能です。残念ながら、サブステップが大きすぎると、爆発します。
Upwind
高速ですが、精度が良くない非ラグランジュインテグレータ。
Trace RK3
Trace と同様ですが、3次の移流を使用して精度を出すので、シミュレーションが遅いです。
Trace RK4
Trace と同様ですが、4次の移流を使用して精度を出すので、シミュレーションが遅いです。
Advection CFL
パーティクルをトレースする時、これは、パーティクルが一回の反復で移動可能なボクセル数を制御します。値が高いほど、トレースと移流が速くなりますが、エラーが多くなります。
Collisions ¶
Correct Collisions
衝突オブジェクト内の指定したフィールドを0
に設定します。これによって、移動オブジェクトを通り抜けた漏れを回避することができます。
Fields to Correct
Correct Collisions を有効にすると、このリスト内のフィールドは、衝突オブジェクト内で補正が適用されます。
Feedback Scale
他のオブジェクトにフィードバックフォースを適用するスケール係数。これを0
に設定すると、フィードバックを回避します。
Clear ¶
Fields to Clear
Solveステップの後に指定したタイプのフィールドをゼロにします。これは、シミュレーションの完全な状態を保存した.sim
が余計な情報を持たないようにして、.sim
のサイズと保存時間を軽減します。
None
フィールドをクリアしません。
Static
次のタイムステップで不要なフィールドをクリアします。これらのフィールドのいくつかはガイドを持ち、それらのガイドは、大元のフィールドがクリアされているので、ゼロの値を表示し始めます。
Additional
各計算の後にクリアするスペース区切りのフィールドのリスト。
出力 ¶
First Output
この出力のオペレーションは、このノードに接続している入力に依存します。 オブジェクトストリームがこのノードの入力であれば、その出力も入力と同じオブジェクトを含んだオブジェクトストリーム(しかし、取り付けられたこのノードのデータを持ちます)です。
オブジェクトストリームをこのノードに接続しなかった場合、その出力はデータ出力になります。 このデータ出力をApply Data DOPに接続したり、他のデータノードのデータ入力に直接接続することで、 このノードのデータをオブジェクトや他のデータに取り付けることができます。
ローカル変数 ¶
channelname
このDOPノードはData Optionsページの各チャンネルとパラメータに対して、チャンネルと同じ名前のローカル変数を定義します。 例えば、ノードにPositionのチャンネル(positionx、positiony、positionz)とオブジェクト名のパラメータ(objectname)があるとします。
そのノードには、positionx、positiony、positionz、objectnameの名前を持つローカル変数も存在します。これらの変数は、そのパラメータに対する前の値を評価します。
この前の値は、処理されているオブジェクトに追加されたデータの一部として常に保存されています。 これは、本質的には以下のようなdopfieldエクスプレッション関数のショートカットです:
dopfield($DOPNET, $OBJID, dataName, "Options", 0, channelname)
データがまだ存在しないなら、ゼロの値または空っぽの文字列が返されます。
DATACT
この値は、現在のデータが作成されたシミュレーション時間(変数STを参照)です。 このノードが新しいデータを作成せずに既存データを変更していれば、この値は現在のシミュレーション時間と同じにはなりません。
DATACF
この値は、現在のデータが作成されたシミュレーションフレーム(変数SFを参照)です。 このノードが新しいデータを作成せずに既存データを変更していれば、この値は現在のシミュレーションフレームと同じにはなりません。
RELNAME
この値は、データがリレーションシップ(例えば、Constraint Anchor DOPがConstraint DOPの2番目、3番目、4番目の入力に接続されている時)に追加されている時だけ設定されます。
この場合では、この値は、データが追加されているリレーションシップの名前に設定されます。
RELOBJIDS
この値は、データがリレーションシップ(例えば、Constraint Anchor DOPがConstraint DOPの2番目、3番目、4番目の入力に接続されている時)に追加されている時だけ設定されます。
この場合では、この値は、データが追加されているリレーションシップのAffected Objectsすべてに対するオブジェクトIDをスペース区切りにしたリストの文字列に設定されます。
RELOBJNAMES
この値は、データがリレーションシップ(例えば、Constraint Anchor DOPがConstraint DOPの2番目、3番目、4番目の入力に接続されている時)に追加されている時だけ設定されます。
この場合では、この値は、データが追加されているリレーションシップのAffected Objectsすべてに対するオブジェクト名をスペース区切りにしたリストの文字列に設定されます。
RELAFFOBJIDS
この値は、データがリレーションシップ(例えば、Constraint Anchor DOPがConstraint DOPの2番目、3番目、4番目の入力に接続されている時)に追加されている時だけ設定されます。
この場合では、この値は、データが追加されているリレーションシップのAffector Objectsすべてに対するオブジェクトIDをスペース区切りにしたリストの文字列に設定されます。
RELAFFOBJNAMES
この値は、データがリレーションシップ(例えば、Constraint Anchor DOPがConstraint DOPの2番目、3番目、4番目の入力に接続されている時)に追加されている時だけ設定されます。
この場合では、この値は、データが追加されているリレーションシップのAffector Objectsすべてに対するオブジェクト名をスペース区切りにしたリストの文字列に設定されます。
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単位分移動させます。
See also |