Physics
Blender Tutorial
はじめに
Blender では、引力・斥力・磁力・風力といった場の設定や、液体やガスの流れなど、様々な物理現象をシミュレーションすることができます。これらのパラメータは、一般に PropertyEditor の Physics タブを使って設定します。
Force Field
Force Fieldは、3D空間内に「力の場」を定義するもので、Collision、Cloth、SoftBody、RigidBody、Particleなど、様々な要素に影響を与えます。
ForceFieldの定義
オブジェクトモードで、以下のいずれかの方法で設定します。
Add([SHIFT]+[A])> ForceField > タイプ選択 オブジェクトを選択 > PropertyEditor > Physics > ForceField > タイプ選択
- Type:フォースフィールドの種類を変更
- Force:原点から一定の斥力・引力を発生させます
- Wind:3D空間に風をおこします
- Vortex:渦を発生させます
- Magnet:磁化されたものに対する磁力を発生させます
- Shape:フォースフィールドの作用する方向の定義
- Point:原点から全方向に影響を与えます
- Line:ローカルのXY平面に影響を与えます
- Plane:ローカルのZ軸方向に影響を与えます
- Strength:力の強さ
- Flow:影響に対する抗力を設定
具体的な利用法は、この後の解説で紹介します。
Rigid Body
Rigid Body(剛体)とは、外力によって変形しない物体のことを指します。ここでは、立方体の「自由落下」を事例として紹介します。
基本設定
- 落下する立方体(剛体)の設定
- 立方体をシーンの上の方へ移動させます。
角から落ちるように、適当に回転させておくとよいでしょう。 - 立方体を選択した状態で以下のようにします。
PropertyEditor > Physics タブ > Ridged Body > Type:Active
Active:剛体として物理的な環境(重力)の影響を受けます。
- 立方体をシーンの上の方へ移動させます。
- 床(剛体)の設定
- 立方体よりも下に、平面または平板を床として表示。
- 床をを選択した状態で以下のようにします。
PropertyEditor > Physics タブ > Ridged Body > Type:Passive
Passive:物理的な環境(重力)の影響を受けず、その場に固定されます。
- アニメーションさせてみてください [SPACE]
立方体が落下して、床に当たって止まる状況がシミュレーションされます
- 同様に複数の物体を配置して Ridged Body に設定すると、物体間の衝突がシミュレーションできます。
各種設定
- Bounciness:跳ね返り係数
- この値を大きくすると衝突時の跳ね返りが大きくなります。
- 衝突する両方の物体とも値を持つ必要があります。例えば、上記の例では、落ちる立方体と床の両方の係数が大きくないといけません。
- Collisions > Shape:衝突判定の形状
- デフォルトは Convex Hull(凸包)で、形状の凸部分でラップした形を衝突面として利用します。要するにざっくりしたシミュレーションになります。
- 形状の凹凸に忠実に判定するには、Mesh にして下さい。
- Friction:摩擦
- 表面の滑りにくさを設定することができます。
- 表面の滑りにくさを設定することができます。
Soft Body
SoftBody は RidgedBody とは対照的に、柔らかい物体の振る舞いをシミュレーションするためのものです。ここでは球体が床に落ちる事例を紹介します。
設定事例
- Sheare(球)とPlane(床) を上下に位置するように置きます
- 球を選択して
PropertyEditor > Physics > Soft Body を選択 Goal : OFF(チェックをはずす) Edges : ON > Bending:値を大きくします(大きいほど弾力が上がります)
- 床を選択して
PropertyEditor > Physics > Collision を選択
- アニメーションさせてみてください [SPACE]
床が障害物となって球が柔らかく潰れる様子が再現できるはずです
Cloth
Cloth(布)は、旗やシーツのような布状のものの振る舞いをシミュレーションします。ここでは、風になびく旗を事例として紹介します。
設定事例
- 旗が固定されるポールをつくります。
- 円柱を細長くして立てます。
- 旗をつくります。
- オブジェクトモードで平面を追加して縦横比を旗のそれにして下さい。
- これを移動してポールの上の方に隣接させて下さい。
- 旗の平面をエディットモードで細分化します。
Header > Edge > Subdivide > Subdivide パネルで細分化
- 布のように見せる前提なので、スムーズシェーディングを設定します。
オブジェクトモードで、右クリック > Shade Smooth
- 旗の端を固定するための準備をします。
- ポールに接する部分(旗の端)を頂点グループに設定します。
エディットモードで、旗の端を Box 選択 PropertyEditor > ObjectData Property > Vertex Groups パネル > [+] Weight 1.0 の状態で [Assign] をクリック グループの名称は適当につけてください。
- ちなみに設定できたかどうかは、Weight Paint モードにするとわかります。
設定された部分が赤く表示されるはずです。
- ポールに接する部分(旗の端)を頂点グループに設定します。
- 旗に Cloth の設定を行います。
- 旗のオブジェクトを選択して、Cloth - Cotton を適用します。
PropertyEditor > Physics タブ > Cloth > Type:Cotton
- 旗の端が動かないようピン留めします。
PropertyEditor > Physics タブ > Cloth > Shape > Pin Groupで 旗の端に設定した頂点グループ名を指定
- 旗のオブジェクトを選択して、Cloth - Cotton を適用します。
- アニメーションさせてみてください [SPACE]
旗が重力にしたがってぶら下がる様子が確認できると思います。
- 最後にシーンに「風」を設定します。
- シーンに風の ForceField を追加します。
Header > Add > ForceField > Wind 旗のポール側から風があたるように位置を調整します。
- デフォルトでは風が弱いので、強くします。
PropertyEditor > Physics タブ > ForceFields で Settings > Strength > 2000 ぐらいまで上げてみて下さい。
- シーンに風の ForceField を追加します。
- アニメーションさせてみてください [SPACE]
旗が風になびく様子が確認できると思います。
Fluid
流体シミュレーションでは、液体とガスの流れをシミュレーションすることができます。この機能を利用するには、シミューレーション領域(一般にメッシュオブジェクト)としての Domain と 液体またはガス流体としての Flow の2つを設定する必要があります。
作業フロー
- シミュレーション領域を定義する Domain オブジェクトを作成
- 流体を放出する Flow オブジェクトを設定
- エフェクタオブジェクトをセットアップして、流体がシーン内のオブジェクトと相互作用するようにします。
- Domain オブジェクトにマテリアルを割り当て
- Blendファイルを保存
- シミュレーション用にキャッシュをベイク
Domain の設定
この作業の初動では、Domain の中が見えるように、3D Viewport の表示は、ワイヤーフレームにして下さい。
- 直方体をシーンに追加して、以下のように Domain にします。
PropertyEditor > Physics > Fluid > Type:Domain
注)他の形状のメッシュもドメイン オブジェクトとして使用できますが、流体シミュレータは形状のバウンディング ボックスをドメイン境界として使用します。つまり、ドメインの実際の形状は直方体のままです。
- この時、直方体の下に見える小さな立方体は、ボクセルのサイズを可視化したものです。僕セルサイズは以下の設定で変更可能です。
PropertyEditor > Physics > Fluid > Settings > Resolution Divisions:値
- Domain のタイプを Liquid / Gas から選択します。
PropertyEditor > Physics > Fluid > Settings > Domain Type:Liquid
- 重力は、デフォルトで -9.8m/s2 が設定されています。
- Liquid を選択した場合は、Liquidパネル内の Mesh にチェックが必要
これをしないと、レンダリングしても何も表示されません。
- Bake(書き出し保存)に関する設定は Cashパネルで行います。
- キャッシュファイルの場所を設定をします。
キャッシュファイルは、デフォルトでは tmpフォルダに作成されます
放置するとゴミが溜まるので、場所は明示的に決めましょう。 - Frame Start と End でシミュレーションの時間範囲を決めます。
- Type
- Replay:プレビュー時に自動でシミュレーションとベイクを行う
- Modular:要素ごとにベイクします
- All:すべてをベイクします(パネルに Bake All ボタンが表示されます)
- キャッシュファイルの場所を設定をします。
Flow の設定
- 任意のメッシュをシーンに追加して、以下のように Flow にします。
PropertyEditor > Physics > Fluid > Type:Flow
- Flow Type を Liquid / Smoke / Fire などから選択します。
PropertyEditor > Physics > Fluid > Settings > Flow Type:Liquid
- Flow Behavior(フローの挙動)を選択します。
- Inflow:蛇口のように液体が流出し続けます。
- Geometry:オブジェクトの形に収まったの液体が流出する状態になります。
- Initial Velocity にチェックを入れると、上や横に吹き出すシミュレーションが可能になります。X, Y ,Z の値が各向きの初速度になります。
Effector の設定
流体が衝突する障害物(流れが制限される形状)を設定します。
- 任意のメッシュをシーンに追加して、以下のように Effector にします。
PropertyEditor > Physics > Fluid > Type:Effector
シミュレーション
- Domainオブジェクトを選択して、Physics タブ、Fluid > Cash で
Type:Replay を明示的に選択してください。
> Flowオブジェクトが時点で、Flow として振る舞います。
- アニメーションさせて確認してください( [ SPACE ] )
流体の動きが確認できると思います。
付記:Quick Effect について
最新の Blender では、このシミュレーションが、Quick Effect で簡単に設定できるようになりました。
- シーンに球体を配置してください。
- Header > Object > Quick Effects > Quick Liquid
直方体のドメインが自動生成されます。
- アニメーションさせてみてください [SPACE]
球体の水のかたまりが落下する様子が確認できると思います。
- ドメインの設定を確認してみましょう。
- 直方体を選択して、Physics タブを開いてみてください。
PropertyEditor > Physics タブ
以下のようになっていると思います。Fluid Type:Domain Domain Type:Liquid
- 直方体を選択して、Physics タブを開いてみてください。
- 流体の設定をを確認してみます。
- 球体を選択して、Physics タブを開いてみてください。 以下のようになっていると思います。
Fluid Type:Flow Flow Type:Liquid
Particles
Particle とは、メッシュオブジェクトから無数(デフォルトでは数千個程度)のアイテムを放射するシステムです。
設定事例
- はじめに特定のメッシュに Particle を適用します。
Particle の発生源としたいオブジェクトを選択 PropertyEditor > Particles > [+] をクリック
- 基本的なセッティングは・・
- Emitter / Hair の Emitter を選択(デフォルト)
- Emittionパネルの Number で 放出される粒子の数を設定
- EmittionパネルのLifetime で 粒子の生存時間(フレーム数)を設定
- Velocityパネルの各値で 粒子が面から飛び出すスピードを調整
- この時点で、アニメーションを再生してみてください。
[SPACE] または、タイムラインウインドウの再生( [ ▷ ] )
デフォルトで、下の方へパーティクルが落下する様子が確認できるはずです。
- Emitter となるオブジェクトそのものは描く必要がないので、
- Render パネルの Show Emitter のチェックを外します。
- Viewpoet パネルの Show Emitter のチェックを外します。
- 次に、どんな Particle としてレンダリングさせるかを設定します。
- はじめに 3D Viewport 内に、粒子の代理としたいオブジェクト(例えば 球など)を視野外に置きます。光るマテリアルなどを設定しておきます。
- Renderパネルの Render As で Object を選択します。
注)従来は Halo で光る粒子が表示されていましたが、今は出ないようです。 - Renderパネルの Object で対象となる オブジェクトを選択します。
- 以上で、粒子が実際の色や光をともなってレンダリングされます。