UDN
Search public documentation:

FluidSurfacesJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > パーティクルとエフェクト > 流体サーフェス > 流体サーフェス完全解説


流体サーフェス完全解説


概要


流体サーフェス (Fluid Surface) とは、頂点の上下移動や、マテリアルに使用可能な法線マップ テクスチャのアニメーション化によって波を可視化する平坦なオブジェクトです。 これらの機能は、流体全体の一部である小型の四角形部分のみに作用します。 これらの四角形は通常メインプレーヤーを中心としてその周りで動き、残りの流体は平坦のままで力の影響を受けません。 デザイナーとしては、これらの四角形をできるだけ大きく薄くテッセレーション (分割) しながら、メモリとパフォーマンスが適切に維持されるように注意を払います。 流体サーフェスは、通常、水をシミュレートするために使用されます。 流体サーフェスには FluidSurfaceActor (流体サーフェス アクタ) と FluidSurfaceActorMovable (移動可能な流体サーフェス アクタ) の 2 種類があります。

シミュレーションとディテールのサブグリッド


前述したように、ディテールが存在するのは FluidSurfaceActor の一部分だけで、残りはだたの平坦なクワッドです。シミュレーションとディテールのサブグリッドは、 FluidSurfaceActor の内部でそれぞれの「ターゲット」が中心となるように動き回り、 TargetSimulationTargetDetail プロパティが空の場合は、プレーヤーを中心として動きます。

bShowSimulationPosition または bShowDetailPosition をオンにすると、シミュレーションまたはディテール サブグリッドが FluidSurfaceActor 内に位置することがわかります。これらはいずれも四角形として表示されます。ターゲットの動きに合わせてその周囲で動くものなので、ゲーム中、または PIE でのテストをお勧めします。
ゲーム中には "set" 実行コマンドを使ってこれらをオンにすることができます (例:

 set fluidsurfacecomponent bShowSimulationPosition 1 
)。

シミュレーション グリッドは頂点アニメーションを使って波やさざ波 (ripple) を可視化するため、サブグリッドのテッセレーション率が高くなり、含まれる頂点数も多いですが、 ディテール グリッドは法線マップ テクスチャ周辺で運動するだけなので、追加の頂点はありません。

シミュレーション グリッドのシミュレーションは CPU 上で個別のスレッドで処理され、ディテール グリッドのシミュレーションは、法線マップ テクスチャのアニメーションとして純粋に GPU 上で処理されます。

有効化と無効化


流体を有効または無効ステートにすることができます。有効ステートでは波やさざ波がシミュレーションされ、流体は所要のメモリとパフォーマンスを消費します。 無効ステートの流体は最初のメモリ量のみ使用し、指定マテリアルによる平坦な静的クワッドのレンダリング以外には、パフォーマンスの追加はありません。

開始時には流体は無効ステートですが、プレーヤーの位置が (シミュレーションまたはディテール グリッドのエッジではなく、最も近い位置にある FluidSurfaceActor のエッジから測定して) DeactivationDistance (無効化発生距離) 内にある間は自動的に有効になり、シミュレーションまたはディテール グリッド内の 1 点に力が適用されます。

これらのサブグリッドの外側に適用される力は単純に無視され、流体は無効ステートの状態のままです。

有効ステートに入った流体は、プレーヤーが DeactivationDistance の外側に移動してから 10 秒後に自動的に無効ステートに変わり、その時点でシミュレーションまたはディテール グリッドへの力の適用は停止し、流体も静止します。

波の生成


流体における波の生成には、手動の FluidSurfaceInfluenceActors? と、自動の物理的相互作用の 2 つの方法があります。 自動相互作用は通常の Touch イベントとして処理されます (これを Kismet 関連付けることもできます)。 アクタが流体面に接触すると、衝撃力が適用されます。 その強度は、ForceImpact (衝撃力) プロパティと、接触するアクタのサイズと速度から得られます。 接触アクタが流体面の周囲を移動するに伴い、異なる (連続的な) 力が適用されます。 このタイプの相互作用では、FluidContinuous (連続的流体) プロパティを使って連続力の強度を決定します。

テスト リップル (TestRipple) の衝撃には (TestRippleFrequency がゼロより大きい場合) FluidImpact プロパティが使用される点に注意してください。 TestRippleFrequency がゼロの場合は ForceContinuous を使用して連続力を適用します。

シミュレーションまたはディテールの四角形の外部位置に適用される力は無視されます。

見栄えをよくするための一般的なヒントとして、衝撃半径が大きいほど、形よく滑らかな波が生成されます。 半径を大きく取ることで力の作用を受けるセルが増え、シミュレーションに安定効果をもたらします。

作成


汎用ブラウザで、"Actor Classes" (アクタ クラス) タブにある FluidSurfaceActor を選択します。ビューポートでワールドの任意の位置を右クリックし、"Add FluidSurfaceActor Here" (ここに FluidSurfaceActor を追加) 選択します。 ウィジットを使用して適切なサイズおよび位置に調整し、F4 を押します (または、アクタをダブルクリックするか、右クリックして "FluidSurfaceActor Properties" (FluidSurfaceActor のプロパティ) を選択します)。

FluidSurfaceActors には、Fluid、FluidDebug、FluidDetail および FluidSurfaceComponent (流体サーフェス コンポーネント) の 4 つのプロパティ カテゴリーがあります。 プロパティ設定を確認する際は、流体には 2 つのアニメーション方法 (頂点の上下移動、法線マップ テクスチャのアニメーション) がある点に留意してください。 通常は前者を「シミュレーション」、後者を「ディテール」と呼びます。シミュレーションは CPU で (別のスレッドで) 処理され、ディテールは GPU で処理されます。

プロパティ: FluidSurfaceComponent (流体サーフェス コンポーネント)

このカテゴリーには流体マテリアル プロパティが含まれます。流体を完全に機能させるために設定するプロパティはこれだけです。

FluidMaterial
流体のレンダリングに使用するマテリアル。 これには、周囲の乱流に関するスクロール ディストーション マップに加えて、ディテール テクスチャにアクセスするための特別な FluidNormal (流体法線) ノードを含めることができます。 マテリアルの bUsedWithFluidSurfaces チェックボックスを有効に設定する必要があります。

プロパティ: Fluid (流体)

これらのプロパティではシミュレーション (頂点アニメーション) と流体全体を制御します。

DeactivationDistance
プレーヤーから最短位置にある流体エッジまでの距離がこの値を越えると、流体は無効ステートに入り、ただの平坦なクワッドとしてのレンダリングを開始します。
EnableDetail
法線マップの ディテール テクスチャのアニメーションを有効または無効にします。
EnableSimulation
シミュレーション (頂点アニメーション) を有効または無効にします。
FluidDamping
流体シミュレーションにおける波の振幅抑制の度合い (0.0-30.0)。
FluidHeightScale
波の高さスケール - 値が大きくなるほどシミュレーションで高い頂点の波が生成されます。
FluidTravelSpeed
シミュレーションでの波の移動速度係数 (0.0-1.0)。波の速度を下げるのに使用できます。
FluidUpdateRate
1 秒あたりの更新回数で、シミュレーションの更新の割合を表します。この値を上げると波が広がる速度も上昇しますが、パフォーマンスは低下します。
ForceContinuous
連続的な相互作用の (突発的な衝撃と異なる) 力係数。
ForceImpact
瞬間的な相互作用の力係数。
GPUTessellationFactor
GPU による流体グリッドのテッセレーション率 (GPU テッセレーションの完全サポートを提供するプラットフォームで使用します。現在は Xbox360 のみ)。
GridSpacing
シミュレーション グリッドセルのサイズ (ワールド空間の単位を使用)。
GridSpacingLowRes
流体は無効ステートに入ると、自動的に低解像度のグリッドをレンダリングします。流体が半透明の場合、頂点をフォギング (噴霧式に散らせる) ために適切な値が必要です。この値が低すぎると、GridSpacingLowRes は押さえ付けられます (結果として頂点数が 65000 以上になります)。
LightingContrast
この値を増やすと、流体頂点の法線の曲率を誇張して、ライティングにコントラストを追加します。
SimulationQuadsX
シミュレーション グリッド内の (X 軸に沿った) 頂点クワッドの数。
SimulationQuadsY
シミュレーション グリッド内の (Y 軸に沿った) 頂点クワッドの数。
TargetDetail
ディテール テクスチャの中心となるターゲット アクタ。設定されていない場合、ディテール テクスチャはプレーヤーを中心として動きます。
TargetSimulation
シミュレーション グリッドの中心となるターゲット アクタ。設定されていない場合、シミュレーション グリッドはプレーヤーを中心として動きます。

プロパティ: FluidDetail (流体のディテール)

これらのプロパティは、ディテールの法線マップ テクスチャにのみ作用します。

DetailDamping
FluidDamping と同じですが、ディテール テクスチャが作用の対象です。
DetailHeightScale
FluidHeightScale と同じですが、ディテール テクスチャが作用の対象です。
この値を増やすと、FluidNormal はより大きな「コントラスト」を示します。
DetailResolution
ディテール テクスチャの解像度。テクスチャは四角形です。
DetailSize
流体内部のディテール グリッドのサイズ、ワールド空間単位で指定します。ディテール グリッドは四角形です。
DetailTransfer
ディテール テクスチャに適用 (伝達) される力の変調係数。FluidSurfaceActor でシミュレーションとディテールの両方の機能を使用する場合のみ有用です。
DetailTravelSpeed
FluidTravelSpeed と同じですが、ディテール テクスチャが作用の対象です。
DetailUpdateRate
FluidUpdateRate と同じですが、ディテール テクスチャが作用の対象です。

プロパティ: FluidDebug (流体のデバッグ)

これらのプロパティは、FluidSurfaceActor の設定および調整中に使用することができます。FINAL_RELEASE (ファイナル リリース) ビルドでは機能しません。

bPause
これをオンにすると、シミュレーションをその場で停止します。
bShowDetailNormals
画面上にディテール テクスチャを示すオーバーレイを描きます。
bShowDetailPosition
流体内に、ディテール グリッドの位置を四角形で示します。
bShowFluidDetail
ディテール テクスチャは平坦に表示されますが、背景で動き続けます。
bShowFluidSimulation
シミュレーションは平坦なジオメトリとして表示されますが、背景で動き続けます。
bShowSimulationNormals
シミュレーションのグリッドラインと一緒に法線を可視化します
bShowSimulationPosition
流体内に、シミュレーション グリッドの位置を四角形で示します。
bTestRipple
テストリップル (テスト用のさざ波) のオン/オフを切り替えます。
bTestRippleCenterOnDetail
ディテール グリッド上でテスト リップルを中央に合わせるかどうかを指定します。
NormalLength
可視化状態にあるシミュレーションの法線の長さ。
TestRippleFrequency
テスト リップルの波寄せの間隔。0 に設定すると連続動作になります。
TestRippleRadius
ワールド空間単位によるテスト リップルの半径。
TestRippleSpeed
テスト リップルの角速度。

ヒントとベストプラクティス


当社からのアドバイスとしては、頂点アニメーションは大きなサーフェスのみに使用し、法線マップのアニメーションは水たまりのような小さなサーフェスにのみ使用することをお勧めします。 機能を同時に使用すると調整に手間取ることがあり、それでは利得なしでメモリとパフォーマンスを無駄にするだけです。

FluidSurfaceActor は任意の大きさに設定できますが、シミュレーションまたはディテール サブグリッドの使用は多量のメモリを要し、パフォーマンスにも影響します。 ポイントは、滑らかさをあまり損なわないようにしながら、GridSpacing をできるだけ大きくすることです。 高い数値 (50 など) から始めて、満足する品質が得られるまで徐々に小さくしていきます。 次に SimulationQuadsX と SimulationQuadsY を使って、必要な大きさのアクティブな四角形が得られるまでシミュレーション グリッドのサイズを調整します。 さらに、グリッドの大きさが 300x300 になると多量のメモリを消費する点にも注意してください。

エディタで、"Test Rippple" (テストリップル) をオンにして流体プロパティを調整し、Realtime Udate (リアルタイム更新) を使用します。テスト リップルにより流体がアクティブになり、設定の効果を評価確認することができます。 メモリとパフォーマンス コストを抑えるために、アニメーションの質を損なわない程度に維持しながら設定値を可能な範囲で低く設定するようにしてください。

波の移動速度は、解像度 (GridSpacing/SimulationQuadsX/SimulationQuadsX または DetailSize/DetailResolution)、FluidUpdateRate/DetailUpdateRate (更新の割合) および FluidTravelSpeed/DetailTravelSpeed (移動速度) 設定の影響を受けます。 適度に滑らかな波になるように解像度を設定してから、FluidTravelSpeed/DetailTravelSpeed で波の速度を調整します。 更新間隔は 30 前後を維持するようにします (これより低くなるとアニメーションがぎこちなくなり、高くするとパフォーマンスコストが上がります)。

流体に適用する力の半径は、いずれもあまり小さくしないでください。半径が大きいほど波が滑らかになります。

コンソール コマンド


  • togglefluids - すべての流体シミュレーションのオン/オフを切り替え、シミュレーションで使用されていたメモリをほぼすべて解放します。これは、メモリ使用やパフォーマンス上の影響を比較する場合に使用できます。
  • stat fluids メモリおよびパフォーマンスの統計を表示します。プラットフォームによって統計データが非常に異なる点に注意してください。