Doc:JA/2.6/Manual/Modifiers/Simulate/Ocean
オーシャンシミュレーション
Blender のオーシャンシミュレーション(ocean simulation)ツールはモディファイアの形を取り、変形する海の表面のシミュレーションと生成、そしてシミュレーションデータのレンダリングに使用される関連テクスチャの作成を行います。オープンソースの Houdini Ocean Toolkit から移植されており、沖の波と泡をシミュレートすることを目的としています。
シミュレーション内部
シミュレータ自身にはFFT法を使用し、2Dテクスチャマップに非常によく似たシミュレーション情報の2Dグリッドを内部的に生成しています。シミュレータはディスプレイスメント、ノーマル、波頭をの交差(いわゆる泡)を計算するのに使用される特別なデータの3つのタイプのデータを生成可能です。シミュレーション後、これらのマップは海の表面の形状の3Dディスプレイスに使用され、Ocean Textureを通じてシェーディングすることもできます。内部シミュレーションエンジンは OpenMP によりマルチスレッド化されており、マルチコアの恩恵を受けられます。
Ocean モディファイア
モード: Object mode
パネル: Modifiers context
解説
Ocean モディファイアは Blender 内でシミュレーションを行うのにメインとなる場所です。モディファイアにはシミュレーションデータが格納され、変形した海の表面 Mesh を作成するのに利用します。また、Ocean モディファイアは泡(Foam)マップを視覚化するための頂点カラーチャネルを追加することもできます。
Geometry オプション
- Geometry
- Ocean モディファイアが Mesh のジオメトリに影響を及ぼす方法:
- Generate: シミュレーションデータと正確に一致する、タイル化した Mesh グリッドを生成します。
- Mesh サーフェスを生成した時、現存の Mesh オブジェクトはこのオーシャングリッドに完全にオーバライドされます。UV チャネルも追加され、UV 空間の[0.0,1.0]をシミュレーショングリッドにマップします。
- Displace: 現存の任意のトポロジーの Mesh をディスプレイスします
- Repeat X, Repeat Y
- Mesh サーフェスを生成した時、そのグリッドをX軸とY軸方向にタイル化する回数。これらのタイル化された Mesh 領域の UV は、UV空間の[0,1]より外でも維持されます。
シミュレータのオプション
- Time
- オーシャンサーフェスが評価される時間。アニメーションするオーシャンを作成するには、キーフレームを挿入 (RMB ) し、 この Time 値を動かす必要があります。Time 値が変化するスピードは波のアニメーションのスピードを決めます。
- Resolution
- シミュレーションエンジンにおける品質 VS スピードを主にコントロールするもので、シミュレーションにより生成される内部2Dグリッドの解像度を決めます。内部グリッドはこの Resolution 値の二乗であるため、Resolution値が16の場合、作成されるシミュレーションデータサイズは256×256となります。高い Resolusion値では計算が遅くなりますが、利用可能なディテールが細かくなります。
- 注意: Geometryオプションで 'Generate' を選択した場合、この Resolution 値は内部シミュレーションデータの解像度に相当する、生成 Mesh サーフェスの解像度も決定します。
- Spatial Size
- シミュレーションが行われるオーシャンサーフェス領域の幅(メートル)。また、これは生成される Mesh もしくはディスプレイス領域のサイズ(Blender単位)も決定します。もちろん、Oceanモディファイアの付いたオブジェクトを Object Mode でスケーリングし、シーン内の外見上のサイズを調整することもできます。
- Depth
- シミュレーションする領域の下の、海底までの深さ
Wave オプション
- Choppiness
- 波の頂上の波立ち。Choppinessが0で、オーシャンサーフェスはZ軸方向のみ上下に移動しますが、Choppinessが高い場合、波はX軸とY軸の横方向にも移動し、波の頂上を鋭くします。
- Scale
- 波の振幅の全体的な大きさをコントロールします。0より上もしくは下で、波のおおよその高さもしくは深さになります。単に Ocean オブジェクトのZ軸方向をスケーリングするだけではなく、シミュレーションの全ての面や、X軸とY軸の移動量、付随する泡とノーマルもスケーリングします。
- Alignment
- 風によって生じる波の形状の方向。0で風と波がランダムで方向も均一になります。高い Alignment 値で風がもっと一定の方向に吹くようになり、波も一つの方向に圧縮され、整列して現れるようになります。
- Direction
- Alignment使用時、波が整列する方向を角度で指定します。
- Damping
- Alignment使用時、内部反射する波が弱まる量です。波の動きの指向性を高くする効果があります(波の形状だけではありません)。Damping が0.0で各波は全ての方向でお互いに反射しあい、Damping が1.0でこれらの内部反射する波は消滅し、風の方向に移動する波のみが残ります。
- Smallest Wave
- 生成する波の最小サイズ。動作はローパスフィルタに似ており、高周期の波のディテールが失われます。
- Wind Velocity
- 風のスピード(m/秒)。低い速度だと、小さな表面の波に限定されます。
Sim Data Generation オプション
デフォルトでは、シミュレータはディスプレイスメントデータのみを生成します。最小の作業量で最速のフィードバックが得られるからです。さらに追加でレンダリング用のシミュレーションデータを生成できます。
- Generate Normals
- 追加のノーマルマップデータをシミュレートします。これはノーマルにマップした時、バンプマップとしてオーシャンテクスチャから使用でき、さらにベイキング時にはノーマルマップの連番画像を生成可能です。
- Generate Foam
- 追加の泡(Foam)データをシミュレートします。これは
オーシャンテクスチャをテクスチャリングに(恐らくマスクとして)使用する際に取り出すことができます。また、ベイキング時には連番画像の泡マップの生成が可能になります。
- Coverage
- 泡が波を覆う量を調整します。負の値で泡の量が減少し(頂上部分のみ残り)、正の値で追加されます。
- Foam Data Layer Name
- 頂点データレイヤの名前で、Ocean モディファイアにより、泡マップを頂点カラーとして格納するのに使用されます。これはレンダラ内で泡データにアクセスするのに必要です。
ベイキング
オーシャンデータを毎回シミュレートする代わりに、オーシャンデータをディスクにベイク(Bake)します。シミュレーションがベイクされた時、シミュレータエンジンは完全にスキップされ、モディファイア/テクスチャはすべての情報をベイクされたファイルから取り出します。
ベイキングは以下の理由により有利です。
- データを再計算するより格納したデータを使用する方が早い
- オーシャンデータを外部レンダラでレンダリングできる
- もっと上級の泡マップが可能
データファイル
シミュレーションデータはディスク内に連番の OpenEXR 画像マップとして格納され、それぞれディスプレイスメント用、ノーマル用、泡用(生成された時のみ)になります。ベイクされたファイルからのデータ読み込みでは、ベイク連番画像のフレームの一つがディスクから読み込まれた時、メモリにキャッシュされます。つまり、読み込み済フレームへのアクセスはディスクアクセスのオーバーヘッドがなく、高速だということです。
これらのベイクされたファイルは素の OpenEXR であるため、対応している他のアプリケーションやレンダラで開いたり、レンダリングすることもできます。
泡のベイキング
また、ベイキングでは上級の泡機能が使用できます。その場でシミュレートする場合、オーシャンシミュレータは現在のフレームからのみデータを取り出します。泡マップの場合、これは与えられたフレームの波の頂上の先端を表現します。 現実では、後の泡は波の相互作用により生成され、波の表面のてっぺんに少しの間残ってから消えます。ベイキングでは、前回のフレームからの泡を累積し、表面上に残しておくことで、この挙動を近似することができます。
Baking オプション
- Start, End
- シミュレーションをベイクするフレーム(指定フレーム含む)。ベイクされた範囲外のフレームにアクセスした場合、ベイクの Start と End フレームが繰り返されます。
- Cache Path
- ベイクされた EXR ファイルを格納するフォルダ。連番画像は disp_####.exr、normal_####.exr、foam_####.exr の形式になり、####の部分には4ケタのフレーム番号が入ります。もし Cache Path に指定されたフォルダが存在しない場合は作成されます。
Blender で画像マップをシミュレートとベイクし、3Delightでレンダリング。
来歴
コアのシミュレータは Drew Whitehouse氏により、Houdini Ocean Toolkit用に開発されたものです。これが Hamed Zaghaghi氏により、C に移植され、短編映画の Lighthouse 制作中、ProMotion Studios/Red Cartel の支援により、Blender 2.4シリーズ用のパッチに統合されたものです。
この作業では、Matt Ebb がそのコアシミュレータを Blender 2.5に再統合し、機能の追加、修正、最適化を、'Save the Ocean Sim' プロジェクトの支援を受けて行いました。