
Houdini FLIP流体シミュレーションを上達させるための10のコツ
Houdiniは流体シミュレーションを行う際に非常に強力なツール群を提供しています。しかし特に放送制作では、流体を現実的に見せるのは常に課題になります。
この記事では、FuseFX(ヒューズエフエックス)のアーティストKevin Pinga氏による、より高速で柔軟なFLIP(流体シミュレーションソルバー)流体シミュレーションのテクニックを探索します。当社のレンダーファームの運用知見も取り入れており、複雑な流体シーケンスをスケール時にどのように処理するかについても記載しています。
Houdiniシミュレーションとレンダリングをクラウドにオフロードしたいスタジオの方は、当社の「2026年度Houdiniレンダーファーム比較」をご参照ください。主要プロバイダーのエンジン対応、HDA互換性、価格について掲載しています。
FLIP(流体シミュレーションソルバー)シミュレーションはHoudiniのシミュレーションツールキットの一面です。Houdiniと専門的なキャラクターFX(エフェックス)ツールの広範な比較については、当社の「Ziva VFXとHoudiniシミュレーション比較」をご覧ください。筋肉、組織、ソフトボディワークフローのトレードオフについて記載しています。
POP Sourceを使い、FLIP Sourceではなくソース流体を作成します

POP Sourceでの流体ソーシングは、使い慣れたエミッション、アクティベーション、速度属性を提供します
FLIPの流体をソーシングする標準的な方法はFLIP Source(ソースノード)を使用することです。これはVDBを作成し、DOP内のVolume Sourceノードで読み込まれます。このアプローチは大きな曖昧な形状からソーシングする場合は適切に機能しますが、シミュレーション段階に到達する前にかなりリソース集約的で時間がかかる可能性があります。
代わりに、VDBへの変換なしで、通常のポリゴンベースのSOPジオメトリを直接使用すべきです。このソースはPOP SourceノードによってFLIPソルバー自体のソーシング入力に接続でき、標準的なパーティクルシミュレーション用のソースをインポートするのと同じ方法で動作します。
このメソッドはより直感的です。なぜなら、通常のパーティクルを使った作業経験から、POP Sourceノードの制御に慣れているからです。パーティクルを簡単に制御・監視でき、FLIPオブジェクトのパーティクル分離から独立して管理できます。
FLIP流体でPOP(パーティクル)ノードを使用します

FLIPシミュレーションに詳細な流体モーションとノイズを追加するためのPOP Force(フォースノード)の例
FLIPは本質的には、その間に体積移流のステップを持つ一連のPOP(パーティクル)ノードです。しかし基本自体がパーティクルであるため、DOP内のすべてのPOP(パーティクル)ノードをFLIP流体に対して使用できます。これが前のステップでPOP Sourceノードを使用してソーシングできた理由です。
**POP Force(フォースノード)**はパーティクル操作時の興味深いモーションを作成するための標準的なツールです。これはFLIP流体にも使用できます。小量のノイズを導入するために使用すると、より魅力的な流体を作成できます。低周波ノイズはパーティクル数やパーティクル分離を増やすことなく詳細を作成することもできます。(ノイズを追加しすぎると不現実なシミュレーションになる可能性があるため注意してください。)
FLIPシミュレーションで有用なもう1つのPOP(パーティクル)ノードは**POP Speed Limit(速度制限)**です。POP Dragノードと組み合わせると、制御が不可能になる可能性がある高速パーティクルを制御するのに最適です。
Bounds qLを使用してFLIP制限を設定します

Bounds qLのパラメータを参照することで、シミュレーション制限を設定できます
Bounds qL(バウンズキューエル)ノードは多くのシンプルな機能を備えた非常に有用なツールです。これはqLibという大規模なオープンソースHoudiniツールセットの一部です。ほとんどのスタジオではqLibはデフォルトでインストールされています。個人用制作環境にインストールされていない場合は、GitHubの指示に従って自分でインストールできます。
Kevin Pinga氏は、Bounds qLを主にFLIPおよびPyroシミュレーションのボリューム制限の設定に使用していることを共有しています。これは標準的なBoundノードから一段階上で、アニメーション入力に基づいてバウンドを作成するオプションが含まれています。
最も有用な機能は出力のValues(値)チェックボックスです。これはバウンディングボックスのサイズと中心の値をアンロックします。これらの値は、FLIPソルバーのVolume Limitsタブまたはバウンディングボックスが必要な他のオペレーションのパラメータにコピーできます。集中化されたバウンディングボックス情報を保有することでユーザーエラーを回避でき、より手続き的なセットアップを作成するのに役立ちます。
FLIPソルバーで有用な属性を有効にします

有用なFLIP属性を有効化する:Houdiniでは多くの場合、解決策はいくつかのチェックボックスだけです
FLIPシミュレーションで有効にすべきFLIPソルバー上の3つの主要なパラメータがあります。それは**ID、age(エイジ)、vorticity(渦度)**です。これらはFLIP Solverの「Behavior(動作)」タブと「Vorticity(渦度)」タブにあります。
ほとんどのアーティストはID属性とその強力さについてすでに理解しています。追加の属性をキャッシュする場合、データサイズは小さなヒットを被る可能性があります。しかし常にその情報を利用可能にしておくことは良い方法です。
シミュレーションの外観を時系列で制御することができます。これはage属性をAge Particles(パーティクルエイジング)チェックボックス経由で有効にすることで実現します。(これはlife属性もエクスポートします。)これは特に、ソースが常にエミットしている場合に有用です。
vorticity(渦度)属性はホワイトウォーターのような二次シミュレーションをソーシングするのに便利で、シェーディング操作には最適です。
シミュレーション後の調整で失敗したシミュレーションを救済します

ポイントクラウドの密度に基づいてパーティクルサイズを調整するシンプルなVEX wrangle
FLIPシミュレーション出力を最終結果として大きく依存する傾向があります。これは理想的なワークフロー中に、時間的制約により、問題を修正するために再シミュレーションする余裕はありません。このような場合、FLIPパーティクル自体でシミュレーション後の調整を実行することでシミュレーションを救済できます。
また、ID属性を追加して、Retime(リタイム)ノードを使用してシミュレーションをリタイムできるようにすべきです。
Pinga氏は、中程度解像度のシミュレーション実行時に別の一般的な問題に遭遇することを指摘しています。液滴のサイズはシミュレーションの高密度領域では良好ですが、より疎な領域では大きすぎます。このような場合、pcfind関数を使用したシンプルなwrangleは疎な領域をマークし、pscale値を低下させるのに役立ちます。
wrangleで使用されるコードスニペットは以下の通りです。
int pc[] = pcfind(0,'P',@P,chf('max_dist'),chi('max_pts'));
@pscale *= float(len(pc))/ch('max_pts');
xyzdistを使用して高解像度衝突サーフェスを処理します

xyzdist()およびprimuv()を使用してパーティクルを衝突サーフェスに向かって押します
これはもう1つのシミュレーション後の調整です。primuv()と一緒に、**xyzdist()**は衝突精緻化のための最も有用な関数です。
VEXまたはVOP(フローティングパンツ)のコンテキストでは、**xyzdist()**はサーフェスの最も近い補間されたポイントまでの距離を計算します。primuv()と組み合わせると、オブジェクトのパラメトリックUVから任意の属性を抽出できます。
上記の例では、高解像度衝突サーフェスの位置を抽出し、パーティクルをサーフェスに向かって押すために使用します。場合によっては、特にショットで衝突サーフェスが透視(たとえば、透明なグラスに液体を注ぐ)する場合は、メッシュされたサーフェス自体で直接実行することもできます。距離を本当に小さい値にクランプすると、計算を高速化するのに役立ちます。
wrangleで使用されるコードスニペットは以下の通りです。
//変数の初期化
int p_prim;
vector p_puv;
//最も近いポイントまでの距離とパラメトリック位置を取得
float dist = xyzdist(1,@P,p_prim,p_puv);
vector P2= primuv(1,"P",p_prim,p_puv);
//マップされた距離の影響を受ける点のPをミックス
@P = fit(dist,chf("min_dist"),chf("max_dist"),P2,@P);
本運用では、より実践的な使用方法があります。シミュレーション中により低解像度の衝突体を使用し、シミュレーション後wrangleでこの関数を実行して、流体が高解像度衝突体と相互作用しているように見えるようにします。このアプローチは重大なシミュレーション時間を節約しながら、視覚的な忠実度を維持します。
IDで問題のあるパーティクルを削除します

ID属性経由で問題のあるパーティクルを正しく削除するシンプルな方法
これは、シミュレーションが98パーセント完成状態に近い場合のシンプルながら効果的なトリックですが、残りの2パーセントのパーティクルは機能していません。前のステップで言及したID属性を保存した場合、それを使用して問題のあるパーティクルを削除できます。IDなしでは、フレームごとにポイント数が変わるため、削除のための正しいパーティクルをマークできません。
これをトラブルシューティングするには、ポイント選択モードに進み、テンキーの[9]を押してください。これにより、グループ選択ペインが表示されます。IDで選択するには、ギアアイコンをクリックして属性 > idを選択してください。これで、ビューポートで削除したいパーティクルを簡単に選択し、**[削除]**を押すことができます。Blastノードが自動的に生成され、ポイント番号ではなくポイントIDを参照します。
リシーディングを使用して疎な領域を強化します

サーフェスオーバーサンプリングを上げて、シミュレーションの疎な領域を満たします
本運用では、最終的なレンダリングがパーティクルが不足しているため正確に見えない問題に時々遭遇します。これは中程度解像度のFLIPシミュレーションを使用しているためです。
このような場合、パーティクル分離を変更する代わりに、リシーディングパラメータを上げるべきです。デフォルトではリシーディングがすでに有効になっていますが、Surface Oversampling(サーフェスオーバーサンプリング)パラメータを上げることにより、パーティクルを分散してパーティクル数を疎な領域で増やすことができます。このような方法で、シミュレーションの一般的な外観を保持しながら、メッシュされた流体が不正に見えるのを避けるのに十分なパーティクルを保有できます。
元のFLIPシミュレーションを異なる要素として直接レンダリングします

元のFLIPシミュレーションをホワイトウォーターとして直接レンダリング
ホワイトウォーターを作成する伝統的な方法は、FLIP流体をシミュレートし、その上でWhitewater(ホワイトウォーター)ソルバーを実行することです。しかし第二段階は常に必要ではありません。特に、スプラッシュと水流(例えば、壊れた消火栓または温浴中の水中)のような高速移動流体の場合です。さらに、パーティクルをメッシング時に正しく見えるようにするのは非常に厳しい場合があります。
しかし、FLIPシミュレーション自体を用い、ホワイトウォーターシェーダーで直接レンダリングすることができます。パーティクル自体をレンダリングするか、またはそれらをVDBにラスタライズし、ボリュームとしてレンダリング結果をレンダリングすることができます。
シミュレーションとキャッシュを最適化します

File Cache(ファイルキャッシュ)ノードの「Delay Load Geometry(遅延読み込みジオメトリ)」チェックボックスを使用して高解像度シミュレーション作業を高速化します
高解像度FLIPシミュレーション処理の課題の1つは、生成される大量のデータに対処することです。一般的な実践は、シミュレーションの一部をキャッシングする前に不要な属性をすべて削除することです。
メモリフットプリントを低減するために実行できることの別の方法は、カメラのフラスタム外のパーティクルをカリングすることです。さらに、レンダリング準備ができているジオメトリを保有する場合、キャッシュアウトして、「Delay Load Geometry(遅延読み込みジオメトリ)」チェックボックスを有効化することは良い方法です。MantraがIFDファイルにジオメトリを埋め込む代わりに、ディスク上のファイルに参照します。これにより読み込み時間が削減され、IFD生成時間とファイルサイズが大幅に低減します。
分散インフラ全体でFLIPシミュレーションのレンダリング時には、これらのキャッシング戦略が重要です。当社はFLIPアニメーションを数週間レンダリングするスタジオと一緒に作業してきました。適切なキャッシュ最適化は通常、転送時間と総レンダリング時間を30~40パーセント削減します。
Super Renders FarmはクラウドベースのHoudiniレンダーファームです。当社のソフトウェアはHoudiniと統合し、シンプルなプラグインでファームに接続できます。
FAQ
Houdini FLIPシミュレーションをクラウドレンダーファーム上でレンダリングできますか?
はい、できます。FLIPシミュレーションはジオメトリキャッシュまたはVDBシーケンスとしてエクスポートされます。すべてのキャッシュファイル、テクスチャ、参照ジオメトリがレンダーファームからアクセス可能であることを確認する必要があります。レンダーファーム上のHoudiniは、通常、レンダリング中にシミュレーション自体を実行するのではなく、事前に計算されたシミュレーションデータを読み込みます。
ファームレンダリング前にFLIPシミュレーションをどの形式でキャッシュすべきですか?
VDB(OpenVDB)シーケンスはレンダーファーム配信に最適です。圧縮がよく、ネットワークアクセス全体で高速に読み込みます。あるいは、変形シェーディングでトポロジーを保存する必要がある場合は、Alembic(.abc)シーケンスとしてエクスポートしてください。
典型的なFLIPキャッシュはどのくらいのディスク容量を使用しますか?
これは広く異なります。10秒の高解像度FLIPシミュレーションは、パーティクル数とキャッシュ周波数によっては10~50GBになりやすいです。必ずファームに送信する前に予想キャッシュサイズを計算してください。多くのファームはデータ転送とストレージに基づいて料金を請求します。
キャッシュされてレンダリングされたFLIPシミュレーションは異なるマシン上で同じに実行されますか?
はい、キャッシュされたら、シミュレーションは固定されます。キャッシュされたジオメトリのレンダリングはハードウェアに関わらず同じ結果を生成します。重要な部分は、すべてのテクスチャパスと外部参照がファームからアクセス可能であることを確認することです。
レンダーファームマシンにHoudiniをインストールする必要がありますか?
レンダリングのみの場合、いいえ。Mantraを使用している場合は、Houdini ApprenticeまたはHoudini Engineだけが必要です。V-Rayまたはその他のサードパーティエンジンでレンダリングしている場合は、Houdiniはまったく不要です。ジオメトリとテクスチャファイルのみが必要です。
シミュレーションが外部衝突オブジェクトまたはアニメーション変形ジオメトリを参照している場合はどうなりますか?
シミュレーション中にすべての衝突をキャッシュに焼き込みます。ファームは事前シミュレーション結果をレンダリングします。本当に動的なセットアップ(レンダリング中のライブ変形)の場合、より高い周波数キャッシュを焼き込むか、手続き的なアプローチを使用する必要があります。
関連記事
外部リソース
最終更新: 2026-03-18


