チュートリアル / 3ds Max:プラグイン活用で表現の幅を拡げよう!
第15回:tyFlow 破壊オブジェクトから炎上させよう!(前編)

  • 3ds Max
  • アニメーション
  • エフェクト
  • コラム
  • チュートリアル
  • 学生・初心者
  • 映画・T
タイトルバナー

こんにちは!

株式会社DEFT、代表取締役の子安と申します。

今回はtyFlowで木材を破壊し、破壊したオブジェクトから炎上をさせる仕組みを紹介します!

これらはtyFlow間でデータを受け渡す仕組みを作成しており、シミュレーションの内部でグループを作成して、キャッシュ化せずに別のtyFlowに受け渡しながらシミュレーションを設定する方法となります。

動画のようなシミュレーションを各工程で管理して進めて参ります。
※オブジェクトの色が変遷している箇所が、tyFlowの各工程になっております。

このシミュレーション動画は下記の行程で進めております。

Step01 木の壁を作成
Step02 球体のアニメーションを取り込む(キャラなどが壁を突破するなどに置き換え可能な為)
Step03 木の壁をtyFlow化し、破壊シミュレーションをセットアップする
Step04 木のマテリアルをtyFlow内でランダムに割り当てる
Step05 レンダリングを行う
Step06 破壊した木から出火させる
Step07 シミュレーショングループを作成し、シーン内の別のtyFlowに受け渡す
Step08 砕けた木の一部から発火する
Step09 火がトルネードし、空に舞い上がる
Step10 火と同じような挙動で塵が舞い上がるtyFlowをセットアップ
Step11 塵のモデリングを行い、⑩のtyFlowを塵に差し替える
Step12 レンダリングを行う

以上となります。

今回は行程も多い為、下記の内容の前後編に分けて説明を行います。

前編
Step01〜Step05
後編
Step06〜Step12

使用ツールバージョンは下記の通りとなります。

3ds Max 2027.2 Update
V-Ray7 update 3 hotfix 1 DR2
tyFlow PRO v2.100(FREEでも可能)
※画面キャプチャ時はv2.010となりますが、影響は御座いません

それでは早速木の破壊シミュレーションセットアップを進めて行きましょう!

Step01 木の壁を作成する

システムユニットスケールをCentimetersに設定

まずシステムユニットスケールをCentimetersに設定します。

Display Unit ScaleをCentimetersに設定

Display Unit ScaleをCentimetersに設定します。

シーンにBoxを配置

シーンにBoxを配置します。

Boxのサイズを2X4規格に設定

Boxのサイズは建築で一般的な木材のサイズである、2X4規格(木材の規格)にしました。
厚さ3.8cm、幅8.9cmとなります。
長さは230cmとしました。

Boxを中心から少し右側に移動

Boxを複製して並べて壁にする為、中心から少し右側にBoxを移動します。

大体で構わないのですが、私のコピー元のBoxポジションは下記となります。
X: 78.028cm
Y: 1.33cm
Z: 0.0cm

Clone OptionでCopyとNumber of Copiesを設定

Boxを選択し、Shiftキーを押しながらマニピュレーターのXを左クリックしたまま-X方向に移動します。
重なりがなくなった辺りで左クリックを解除するとClone Optionが出現します。

① 「Copy」を選びます

② Number of Copiesを12にします

13本のBoxが並んだ状態

Boxの複製が完了し、13本のBoxが並びました。

Edit PolyのAttach Listをクリック

複製元のBox001を選択します。

①Modifier ListからEdit Polyを選択して追加します

②Attach Listをクリックします

Attach Listで複製したBoxを選択

Attach Listが表示されます

①複製したBoxを全て選択します

②Attachボタンをクリックします

ひとつになったオブジェクトをWood_Wallにリネーム

①Box001を選択した状態でひとつのオブジェクトになります

②オブジェクト名を「Wood_Wall」に変更します

レイヤーエクスプローラーでWood_Wallレイヤーを追加

レイヤーエクスプローラーを開き、レイヤーを追加します。
レイヤー名もWood_Wallとします。

Step02 球体のアニメーションを取り込む

シーンに予め作成されていたアニメーションファイルをマージします。

今回はシンプルな球のアニメーションとなりますが、木の壁を突き破るオブジェクトを「走るキャラクター」などに置き換えることも可能となります。

動画のような球体のアニメーションを取り込み、壊したいオブジェクトに位置合わせをしていきます。

球体をAttack_Ballにリネーム

球体をAttack_Ballにリネームします。
レイヤーエクスプローラーを開き、レイヤーを追加します。
レイヤー名もAttack_Ballとします。

単純な球体のアニメーションとなりますが、データを配布させて頂きます。

※Attack_Ballにリネーム済みとなります。

Step02のアニメーションの取り込みは短い行程となりますが、こちらの行程にて他のアニメーションデータを取り込む事で様々なシチュエーションの表現が可能となります。

Step03 木の壁をtyFlow化し、破壊シミュレーションをセットアップする

作成パネルからtyFlowをシーンに配置

作成パネルに移動します。

①Standard Primitivesの中からtyFlowをクリックします

②シーン内にtyFlowを配置します

修正パネルのOpen EditorでtyFlow Editorを開く

作成したtyFlowを選択します。

①修正パネルのタブをクリックします

②Open Editorのボタンをクリックします

③tyFlow Editorが開きます

tyFlowをtyFlow_Collapseにリネーム

tyFlowをtyFlow_Collapseにリネームします。
レイヤーエクスプローラーを開き、レイヤーを追加します。
レイヤー名はtyFlowとします。

Birth ObjectsオペレーターにWood_Wallを登録

tyFlow Editorを開きます。

①オペレーター群からBirth Objectsオペレーターを選択します

②ウィンドウにドラッグ&ドロップをしてBirth Objectsオペレーターが配置されます

※同時にEvent_001が作成されます

③右のパネルのObjectsリストのPickボタンをクリックします

④Wood_Wallをレイヤーパネル、又はビューポート上で直接ピックしリストに登録します

レイヤーエクスプローラーでWood_Wallを非表示にした状態

レイヤーエクスプローラーを開きます。

①Wood_Wallを非表示にします

②tyFlowに置き換わったWood_Wallのみ表示されます

③置き換わったWood_WallはtyFlowのこちらの色(青)で表示されているのが分かります

動画の通り、tyFlowのEvent001にElement Fractureオペレーターを追加します。

Element Fractureはオブジェクトの要素を切り分ける事が出来ます。
動画の内容としては、Element Fractureオペレーターの下にSpinオペレーターを入れる事で、Wood_Wallの要素(Step01でAttachした13本の木材)が切り分けられた事を視覚的に説明しております。

Spinオペレーターを残したまま Element Fractureオペレーターを無効にすると、Wood_Wall全体がSpinしている事が分かります。

このようにElement Fractureオペレーターは、オブジェクトの内部に持っている要素(Element)を分割する事が出来る為、1つのオブジェクトで様々なアプローチが可能となります。

tyFlowに取り込む前に要素(Element)を確認するには、Edit Polyから要素(Element)編集に切り替えて要素(Element)選択をする事で、どのように分割出来るか確認する事が出来ます。

Edit Polyでの要素(Element)選択

続いての項目は、動画説明の方が分かりやすいので一度動画をご覧下さいませ。

動画内の手順と解説は以下の通りとなります。

①Multi FractureオペレーターをEvent001のElement Fractureオペレーターの下に追加する
 木材を個々の木材に分けた状態を作った上で、1本ずつ別れた木材にMulti Fractureオペレーターを適用する事で、自然な分割を表現する事ができます

②Time Testオペレーターを追加する(時間はデフォルト設定の10フレーム、±3フレーム)
 つまり、7フレームからEvent002に継承されます

③Physx Shapeオペレーターを、空いているスペースにドラッグ&ドロップする

④自動でEvent002が作成されEvent002にPhysx Shapeオペレーターが配置される
 Time Testオペレーターから継承する準備が出来ます

⑤Event001のTime TestオペレーターからEvent002に接続する

⑥タイムスライダを動かすとTime Testオペレーターで指定した10フレーム(±3フレーム)から落下が始まる

※7フレームから物理オブジェクトに切り替わる為、落下します

⑦Multi FractureオペレーターのFracture voronoi項目、Zの値を1.0から0.1に変更する

※木材が割れたような断面表現の為

注意点としてはオブジェクトを作成した際に、フロントビューなどで作成した場合はオブジェクトのローカル軸が変わってしまいます。

3ds Maxの基本としてトップビューで作成することで、ワールド軸とローカル軸の向きが一致する為、X,Y,Zに依存するパラメーターを調整する場合は調整が容易になってきます。

Physx Shapeオペレーターの下にPhysx Bindオペレーターを追加

①のPhysx BindオペレーターをEvent002のPhysx Shapeオペレーターの下の②の場所に追加します。
Physx BindオペレーターはPhysxパーティクル間をBind(結ぶ)する事が出来ます。

Physx Bindオペレーターを追加することで、分断された瞬間から個々のパーティクルオブジェクトが四方に飛散(または崩壊)させる訳ではなく、オブジェクトをある程度繋ぎながら飛散(または崩壊)させる事が出来ます。

Physx Bind modeをDistance (tether)に切り替え

Physx Bind modeをDistance (tether)に切り替えます。

Distance (tether)はPhysxパーティクル同士がBindポイント間の一定の距離を維持しようとします。距離の伸縮性は無いので、今回の木材の破壊などには適しているかと思います。

Proximity BindのDistanceとMax Bindsの設定

Proximity Bind項目のDistanceを150cmにして、Max Bindsを10にします。

Display項目のShow Bindingsにチェック

Display項目のShow Bindingsにチェックを入れます。

Max Binds 3と10のBind表示の比較

画像左 Max Binds = 3
画像右 Max Binds = 10
Show Bindingsのチェックを入れるとパーティクルオブジェクト同士を繋げているBindの線が視覚化されています。
数値を10に変更すると、繋ぎ合わせている本数(Bindの数)が多いのが分かります。

現在のセットアップの状態はこのような状態となります。
10フレーム(±3フレーム)で物理オブジェクトになり倒壊しておりますが、隣り合う木材も繋ぎあったまま倒れているのが分かるかと思います。

次はAttack_BallがWood_Wallを通過するタイミングで倒壊させていきます。

Attack_Ballが壁を通過する51フレーム

①Attack_Ballが壁を通過するタイミングを確認します

②51フレームで通過しています
Time Testオペレーターに51フレームを指定するのもありではありますが、今回はあえてPhysx Shapeオペレーターでタイミングを管理します。

Physx ShapeオペレーターのTimingをFrameに切り替え

Physx Shapeオペレーターを選択し、TimingのモードをFrameに切り替えます。

FrameのRangeを51に変更

FrameのRangeを51に変更します。

51フレームのタイミングで物理シミュレーションがスタートしました。

次にAttack_BallでWood_Wallを破壊していく仕組みを作成していきます。

動画の通り、Attack_BallでWood_Wallを破壊する事が出来ました。

動画のプロセスは以下の通りです。
①Surface TestオペレーターをEvent002に追加します

②Surface TestオペレーターのObjectsリストにAttack_Ballを登録します

③Physx Shapeオペレーターを空いているスペースに配置しつつEvent003を作成します

④Surface TestオペレーターからEvent003に接続します

⑤Event003のDisplayオペレーターのカラーを赤に変更します

※あくまで確認用の為、必須ではありません

⑥Surface TestオペレーターのDistance Test項目にある、Absolute distanceのValueを30cmに変更します

⑦Event003にCollisionオペレーターを追加します

⑧CollisionオペレーターのObjectsリストにAttack_Ballを登録します

⑨CollisionオペレーターのCollision radiusのRadiusを30cmに変更します

⑩Event003にPhysx Bindオペレーターを追加します

⑪Physx BindオペレーターのModeをDistance (tether)に変更します

⑫Physx BindオペレーターのProximity Bind項目を以下の設定にします

 Distance : 150cm
 Max binds : 10

⑬Time Configurationを開き、End Timeを250フレームに変更します

以上でAttack_BallがWood_Wallに衝突して破壊するフローが出来ました。

更に細かく粉砕するセットアップを行って行きます。

動画のような手順で破壊された木材が更に細かく砕ける仕組みが出来ました。

動画のプロセスは以下の通りとなります。

①Time TestオペレーターをEvent003に追加します

②Time TestオペレーターのTest ValueのValueを10.0から2.0にします

③Multi Fractureオペレーターを空いているスペースに配置します

④Event004のDisplayオペレーターのカラーを白に変更します

※あくまで確認用の為、必須ではありません

⑤Event003 Time TestオペレーターのTest Valueを2.0から5.0に変更します

※タイムスライダーを動かしたところ、Event004に変わるのが早かった為となります

⑥Event004 Multi FractureオペレーターのFracture voronoi項目、Zの値を1.0から0.3に変更する

※木材が割れたような断面表現の為に変更しました

ひとまずこれにてベースは完了です。

倒壊後、木材がプルプル震えている箇所などは下記の設定で止める事が出来ます。

Event002にTime Testオペレーターを追加

緑色の木材(Event002)の揺れが大きいので、Event002にTime Testオペレーターを追加します。

PhysX化されたパーティクルオブジェクトは別のイベントで制御した方が遥かに管理しやすいかと思います。

Time TestオペレーターのTest Valueの設定

Event002に追加したTime TestオペレーターのTest Value項目はこちらの数値に設定します。

Value : 120
Variation :10

PhysX SwitchオペレーターでEvent005を作成し接続

①PhysX Switchオペレーターを空いているスペース(Event002の隣など)にドラッグ&ドロップします

※Event005が自動で作成されます

②Event002のTime Testオペレーターから、新しく出来たEvent005に接続します

Event004にも同じセットアップを適用

Event004にも同じセットアップをすると、破片を止める事が出来ます。

Event002とEvent004のシミュレーションをストップさせるフローで組み上げた動画となります。

Step04 木のマテリアルをtyFlow内でランダムに割り当てる

続いて木のマテリアルをランダムに割り当てるのですが、手続きとしては至ってシンプルです。

Step03で作成したEvent001のElement Fractureオペレーターによって、木材は1本ずつバラバラになっております。

セットアップする前にV-Ray Renderに切り替えておきます。

Element Fractureの下にMaterial IDとMeshオペレーターを追加

①Element Fractureオペレーターの下にMaterial IDオペレーターを追加します

②レンダリング出来るように、Meshオペレーターも追加しておきます

Multi/Sub-Objectで13種類のマテリアルを作成

Wood_Wallの木材は13本あります。
Material EditorでMulti/Sub-Objectを作成します。

①Set Numberボタンをクリックします
 Set Number of Materialsパネルが表示されますので、Number of Materialsの数値を13にします

②Materialスロットに13種類のマテリアル(今回はVRay Mtl)を作成します

③右のスクロールバーを下げるとID1~ID13まで確認することが出来ます

④tyFlowを選択している状態で「Assign to Material Selection」をクリックします

これで13個のマテリアルがランダムでアサインされました。

ランダムに作成した木のテクスチャ

このようにランダムな木のテクスチャを作成して、各々13個のマテリアルに読み込みます

読み込みが完了したMaterial Editor

各々読み込みが完了したMaterial Editorとなります。

Bump項目にV-RayEdgeTexを設定

他、マテリアルにはBump項目にV-RayEdgeTexを入れておきます。

これでStep04は以上となります。

Step05 レンダリングを行う

前半の締めとしてレンダリングをしてみましょう!

各EventへのMeshオペレーターの追加

各々のEventにMeshオペレーターを追加しておきます。
こちらのオペレーターがある事でtyFlowをレンダリングすることが出来ます。

作成パネルからVRay PhysicalCameraを選択

①作成パネル
②Cameras
③ドロップダウンリスト
④VRay
⑤VRay PhysicalCamera
こちらの手順を選択してシーンに配置します。

VRay Physical Cameraのパラメータ設定

設定はこのような設定にしてみました。

Still Cam設定にて進めております。

※Still Camはシャッタースピードなど一般的に理解しやすいパラメータの為、こちらを選択しました。

画角やISO、絞り、シャッタースピードなどは任意で良いかと思います。

※特に露出を確定するものはHDRIやライティング状況によって異なる為、各々の設定で進めてください。

第6回の記事などを参考にして頂ければ幸いです。
https://area.autodesk.jp/column/tutorial/3ds-max-plugin/06-real-world-cameras-3ds-max-vray/

他、特筆すべき点としましては、Motion Blurをオンにしております。

作成パネルからVRayLightを選択

作成パネル > Lights > VRayLightを選択します。

VRay LightのTypeをDomeに設定

シーンに配置したVRay Lightの設定をします。

①TypeをDomeに変更します

②Multiplierを15.0に変更します
 ※HDRIマップの内容により調整が必要となります

③MapにVRayBitmapを適用し、HDRIマップを読み込みます

※お薦めとしましては、Material EditorにてVRayBitmapを作成後、マップを読み込んだ状態でMaterial Editorから③にドラッグ&ドロップ⇁インスタンスにするとMaterial Editor上で編集可能となります。

下記画像参照

Material EditorからVRayBitmapをドラッグ&ドロップ
V-Rayのレンダリング設定

V-Rayをこのように設定しました。

VRay Physical Cameraの設定でMotion blurをオンにしたので、V-Rayのレンダリング設定は特に必要ありません。

※通常のPhysical Cameraはレンダリング設定側でも必要となります。

それではレンダリングしてみましょう!

木が割れたような雰囲気が表現出来ておりますね!

今回のデータを用意しておりますので、ご興味がありましたら下記からダウンロードをして確認してみてください!

今回の3ds Maxデータとなります。

※HDRIは同梱しておりません。
 木のテクスチャは簡易となりますが入っております。

使用バージョンはこちらとなります。
3ds Max 2027.2 Update
V-Ray7 update 3 hotfix 1 DR2
tyFlow PRO v2.100(FREEでも可能)

次回の内容は今回の後編となります!

製品購入に関するお問い合わせ
オートデスク メディア&エンターテインメント 製品のご購入に関してご連絡を希望される場合は、こちらからお問い合わせください。