Simulation

Tips

modoでパーティクルをサーフェースでうず状に動かす表現

modoでパーティクルをサーフェースに沿ってうず状に動かす表現について書いてみたいと思います。

 

スケマティックはこんな感じです。

 

スケマティックの右側は以前書いた「パーティクルをサーフェースに沿って動かす方法」と同じです。
今回はうず状にパーティクルを動かしたかったので、うず状のカーブを作成してSurface Particle GeneratorとReplicatorを使ってメッシュ表面に複製しました。
このカーブをMerge Meshesで1つのメッシュにまとめて、Curve Forceを使ってうず状のフォースを発生させています。

カーブを表示した状態。

パーティクルの軌跡は、プラグインの Particle Tracer X を使用してます。レンダリングはmodo標準の「カーブをレンダリング」を使用し、カーブの質感には「虹色マテリアル」を使用して金属っぽくしてます。

カーブをアニメーションさせても面白い表現が出来そうです。

 

ロゴでアニメーションしたやつ。

 

今回のパーティクルアニメーションはC4DのField Forceのデモ映像がかっこよかったのでまねしてみました。
Curve Forceは影響範囲が重なると相互に影響を受けてしまうため、Field Forceに比べると軌跡が交差してしまうのがちょっと残念です。綺麗な軌跡を描けるように、プロシージャルテクスチャからフォース生成するような機能追加して欲しいですね。

 

参考

CG News

3dsMax用のクロスブラシプラグイン「PolyCloth」

3dsMax用のクロスブラシプラグイン「PolyCloth」がリリースれました。価格は$ 59.00です。

https://www.cgtrader.com/3d-models/scripts-plugins/modelling/polycloth

概要

PolyCloth はPolyDesign が開発したマルチスレッドと C++ の物理ベースの 3dsMax 用クロス ブラシ プラグインです。物理ベースの PolyCloth を使用すると、以下のことが可能になります。

  • パワフルなブラシを使用して、メッシュにしわや折り目を追加します。
  • メッシュを布のように動かし、布の挙動をシミュレートします。
  • シュリンクブラシで布の表面を挟む
  • ブラシを使用して布の表面積を増加させ、しわを追加するために展開します。
  • スムースブラシを使用して布のシワを滑らかにする
  • 数秒でクールな布のディテールを素早く追加
  • アーティストの創造性に応じて、さらに多くのことが可能です。
 動作環境
  • 3dsMax 2016
  • 3dsMax 2017
  • 3dsMax 2018
  • 3dsMax 2019
  • 3dsMax 2020
  • 3dsMax 2021

Tips

modoでランダムにパーティクルを動かす方法

modoでランダムにパーティクルを動かす方法について書いてみます。

 

グリッド

サンプルファイル

 

スケマティックはこんな感じ。

Particle Operatorに「ID」「位置(R/O)」「位置」の3つの特性を追加します。Randomize IDを追加して、パーティクルIDの範囲を「最小値」-0.5「最大値」0.5に設定します。

条件式ノードを追加してパーティクルを3つのグループに分けます。このグループはXYZ軸のいずれかの1方向に移動するためのもので、条件がTrueの場合はパーティクルID値を出力し、Falseの場合は0を出力します。
TrueのときはパーティクルID値ではなくてもよくて適当に値を出力すれば移動し、Falseの場合は0を出力して移動しないという処理にしてます。

演算ノードで「位置(R/O)」と条件式の出力値を足して「位置」に値を戻します。こうすることで毎フレームパーティクルIDの値が「位置」に加算され続けます。

最後に Randomize IDのキーにキーフレームを設定して、一定間隔でパーティクルIDのランダムシードをアニメーションします。パーティクルIDがランダムに変わるため、パーティクルの移動方向もランダムに変わるという仕組みです。

 

電子回路

電子回路のように動くパーティクルです。

サンプルファイル

 

スケマティックはこんな感じ。移動する軸が少ないので単純です。

ユーザーチャンネルにグラディエントチャンネルを追加して、Gradient Scaleノードでパーティクルが移動するタイミングと移動量を制御してます。角度で計算してるものではないので、見た目がそれっぽければOKという作りです。

 

条件式が使えるとパーティクルの制御に幅が出て面白いですね。TheGridというアセンブリも公開されているので、より高度なことがしたい場合は使ってみるといいかもしれません。

 

参考

Tips

modoのパーティクル速度で色を変える方法

パーティクル色の使い方」の応用で、パーティクルの速度でアイテムの色を変える方法について書いてみたいと思います。

 

modoのグラディエントレイヤーは様々な「入力パラメータ」を使用して色を設定することができます。「パーティクルエージ」「パーティクルID」「パーティクル速度」などパーティクル情報を使用して色を設定することができますが、使用可能なアイテムが「ブロブ」「スプライト」「ボリューム」に限定されています。

このためReplicatorを使用して複製したメッシュアイテムを、グラディエントの「パーティクル速度」を使用して色を変えることができません。

 

Replicatorを「パーティクル速度」に応じて色を変えたい場合は、Particle OperatorとShader Inputsを使用します。

サンプルファイル

スケマティックはこんな感じです。

Particle Operatorに「速度」と「色」の特性を追加し、「速度」を「色R」に接続します。

「速度」はXYZ軸に分かれてるため、速度XYZを加算してどの方向に飛んでも単一の速度になるようにします。このとき速度を絶対値に変換してから加算します。速度はマイナス値が入るようなのでそのまま加算しても意図した通りの結果にならないようです。

次にShader Inputsを追加し「パーティクル色 R」をGradientの「in Val」に接続します。こうすることで、Gradientの「入力パラメータ」に「パーティクル速度」を設定したことになります。後は通常通りGradientの色を設定すれば、パーティクル速度に応じてGradientの色が反映されます。

この方法を使えば速度以外のパーティクル特性を使用して色を設定することができるので、表現力が上がると思います。

 

標準機能として「パーティクル速度」に対応してるスプライトの画像と比較すると、同じように色が変化してるのを確認できます。

 

水しぶきの表現に使えそう。

 

同様の方法で「衝突カウント」を使用すると、コリジョンと衝突した場合に光るような表現もできます。

 

 

modoにパーティクルが搭載された初期の頃はGradientの「パーティクルエイジ」を使用してReplicatorに色を設定することが出来ませんでした。このため「パーティクルエイジ」を「パーティクルID」に接続するテクニックが紹介されてました。

この方法はスケマティックがシンプルでいいのですが、残念ながら速度を入力したときに意図した通りに動作しませんでした。速度が遅くなった場合に色がループしてしまいます。

サンプルファイル

 

パーティクルとReplicatorは併用することが多いと思います。今回紹介したようにShader Inputsを使えばReplicatorに色を設定することはできますが、グラディエントの「パーティクル速度」をそのまま使えた方が便利だと思うので、将来的に対応して欲しいですね。

Tips

modoのパーティクルでアイテム切り替え

modoのパーティクルでアイテムを切り替える方法について書いてみます。

 

衝突でアイテム切り替え

サンプルファイル

 

スケマティックはこんな感じです。Particle Operatorの「アイテム」と「衝突カウント」を使用します。

「アイテム」はReplicatorが複製するアイテムを指定することができるチャンネルです。Replicatorに接続されたアイテムは0~1の通し番号が自動的に割り当てられます。「アイテム」に複製したいアイテムに対応した値を指定することで、自由にアイテムを切り替えることができます。
「衝突カウント」は物理演算でコリジョンと衝突した回数をカウントアップするチャンネルです。

スケマティックでは「衝突カウント」をReplicatorに接続しているアイテムの数、4で割った値を「アイテム」に入力することで、コリジョンと衝突するたびにアイテムが切り替わるようにしています。

 

フォールオフでアイテム切り替え

サンプルファイル

 

スケマティックはこんな感じです。Falloff Probe条件式を使用して、フォールオフ内にあるパーティクルの「アイテム」値を変更します。

Falloff Probeはフォールとパーティクルの位置関係に応じて値を出力するノードです。条件式ノードは値Aと値Bを比較して、条件に合う場合は任意の値を出力することができます。
このサンプルではフォールオフの範囲内にあるパーティクルがある場合は、アイテムに対応した値を出力することでアイテムを切り替えてます。

 

Particle Operatorの「アイテム」を使えばLODのように距離に応じてアイテムを切り替えたり、アイテム切り替えによるアニメーションができるようになります。

modoのパーティクルはアイテムの切り替えやモーフの切り替えができるので自由度が高くていいですね。

CG News

STARDUST 1.6 リリース

AfterEffects用のシミュレーションプラグインSTARDUST 1.6がリリースされました。新機能のボリュームレンダリングと、VDBファイルのインポートは面白そう。

https://superluminal.tv/blog

新しいエキサイティングな機能

ボリュームレンダリング:パーティクルシステムの設定から煙の効果を作成します。他の3 DパッケージからVDBファイルをインポートして素晴らしいシミュレーションを行うと、コンポジション内でAEのカメラを使用して制御とレンダリングを行うことができ、コンポジティングワークフローとの統合が容易かつシームレスになります。

  • ボリュームレンダリング:VDBファイルからロードするか、パーティクルから作成します
  • 更新されたパネルUI:新しいノードのデザインとカラー
  • Physics:Save and Load State-Physicsの初期状態を保存します
  • モデル:Nullを使用して複製、AE Nullを使用して3 Dモデルを複製します
  • Physics:空気密度、アニメート可能な空気密度を追加します
  • マテリアル:Stencil、マテリアルをStencilに設定するオプションが追加されました
  • Physics:Properties Timeサンプル、現在の時間/パーティクル発生時のPhysicsプロパティのサンプル
  • モデル:UVリピートおよびオフセット
  • Stardust Studio:Studio Lights、Studio Cameraにカスタムライトを追加します
  • モデル:Export OBJ、カレントモデルをOBJファイルとしてエクスポートします
  • パーティクル:Limit rotations、パーティクルのランダムな回転を固定値に設定します。例:90度
  • エミッター:ライトサイズ
  • グラフ:反転
  • Physics:ライフのタービュランス
  • 補助:非表示のパーティクルに関する問題が修正されました
Tips

modoでプロシージャルリボンの作り方

modoでプロシージャルリボンの作り方について書いてみます。

リボンのような形状を作る場合は「プロシージャルロープの作り方」と同じようにCurve Sweepを使う方法や、スプラインデフォーマを使う方法が定番だと思います。
今回は違うアプローチとしてパーティクルを使う方法を紹介してみたいと思います。パーティクルを使用しているので、フォースを使用して動きを制御することができます。

サンプルファイル

スケマティックはこんな感じです。

 

  1.  パーティクルエミッターを使用して文字の軌跡を作成します。
    今回はエミッターに直接アニメーションを設定していますが、文字形状のパスを作ってエミッターをパスコンストレイントしてアニメーションする方が動きが綺麗になるかもしれません。
  2. Particles to Array と Create Polygons を使ってパーティクルシミュレーションからカーブを作成します。
  3. カーブを Polygon Extrude を使って押し出し帯状にします。

リボンの小さな揺れはTransform Effector と Texture Falloff を使ってます。リボンが浮き上がる動きは、Linear Force と Turbulence Force を使い、Linear Falloff でタイミングを調節してます。

リボンに縁取りを設定するためプロシージャルUVを使用してみましたが、メッシュが縦長になると展開方向が回転してしまいました。平面投影してるはずなのに、どうして回転するのか謎です。

 

プロシージャルメッシュを直接ソフトボディとして使用することができれば、もっとリアルなリボンの動きを設定できると思います。modo 14.0ではプロシージャルメッシュをソフトボディで使うことができないのが残念です。将来的に対応してくれると嬉しいですね。

 

参考

CG News

Deform Dynamics for 3ds Max

「Deform Dynamics」はマルチプラットフォームのクロスシミュレーションプラグインのようです。現在3ds Maxのプラグインをベータ中らしい。ゲームエンジンでも動くのは早そうでいいですね。
https://deformdynamics.com/
https://docs.deformdynamics.com/

概要

繊維と変形ボディーの未来的なアニメーションツール

Deform は変形可能オブジェクトの魅力的な3 Dアニメーションをリアルタイムで作成するためのツールです。3 DS MAXなどの現在のアニメーションツールは静止シーンには最適ですが、リアルタイムアニメーション用にはまったく設計されていません。

 

特徴

  • 3 DS MAXと同等の(または高い)品質ですが、10~100倍高速です。
  • リアルタイムで、バーチャルリアリティで自然なインタラクションを可能にします。
  • インタラクティブ性は、ほとんどの設計者が新しいオブジェクトの作成時に経験する試行錯誤のループを短縮します。

仕様

物理エンジンはC++とCUDA Cで記述されています。このエンジンはマルチコアCPUとマルチスレッドGPUの並列計算機能を利用して、正確で信頼性の高いアニメーションを生成しながら、優れたパフォーマンスとスケーラビリティを実現します。

  • メッシュコライダ。アニメートされたキャラクタとの正確な衝突。
  • マルチレイヤード。アニメのキャラクターは重ね着ができます。
  • リアルな摩擦。

 

サポートされるプラットフォーム

Deform Animation Tool は、Unity、Blender、Unreal Engine、Maya、AutoDeskをサポートしています。

 

制限事項

  • 現在、GPUを使用したシミュレーションでは、CUDA対応のNVIDIAグラフィックスカードのみがサポートされています。
  • 衝突システムには、高性能なシミュレーションを提供するために、2つの基本的な制限があります。
    • 自己衝突は現在、球-球交差テストを使用して検出されています。これにより、布地が衝突したときに不自然な動作が発生することがありますが、高忠実度の衣服をシミュレートしたときにはほとんど目立ちません。
    • 衝突は時間的に離散的です。これは、非常に速い速度では、一部の衝突が失敗する可能性があることを意味します。にもかかわらず、衝突はぴったりした衣服を着た高速で移動するキャラクタをシミュレートするのに十分な強度を備えています。
  • 弾性材料の動的挙動を近似して性能を最大化しました。このようにして作成されたアニメーションは、CAD、視覚効果、ビデオゲームなどのインタラクティブなグラフィックスアプリケーションに、視覚的に妥当なものであり、完全に適しています。

 

技術背景

ライブラリの背景にある技術的な背景について学ぶには、以下を読むことをお勧めします。

Vivace: a Practical Gauss-Seidel Method for Stable Soft Body Dynamics

Tips

modoのリジッドボディで壁が崩壊する表現

modoのリジッドボディダイナミクスで崩壊する表現をテストしてみたのでファイルを公開しておきます。単純なファイルであまり綺麗なデータではありませんが、何かの参考になればと思います。

 

壁が壊れる表現

球体で壁が崩れるサンプルです。複雑なデータではないのでシミュレーション速度は早め。ボリュームのレンダリングが遅いのでレンダリングするのはお勧めしません。

サンプルファイル

 

煙のない画像。

 

スケマティックはこんな感じです。

壁のオブジェクトは形状メニューの「メッシュシャッター」の均一を使用して分割してます。分割したアイテムは「複合ダイナミクス」を使用して、まとめてダイナミクスを設定してます。

Collision Emitterを使用してリジッドボディの衝突を使用してパーティクルを発生させ、そのパーティクルを利用して壁の大小の破片と、煙用のボリュームとスプライト用のパーティクルを発生させています。

今回は破片から煙用のパーティクルを発生させているため、衝突した頂点付近からパーティクルが発生していますが、本来はSurface Particle Generator等を使用して面からパーティクルを発生させた方が自然に見えると思います。Surface Particle Generatorは動作が重くなるので今回は使いませんでした。

煙のパーティクルの制御は他の記事に書いてるので、そちらを参考にしてください。

 

地面が崩れる表現

地面が崩れるサンプルです。シミュレーション結果をキャッシュするとファイルサイズが1GBくらいになりますが、大規模なデータではないので、テストシーンとしては軽い方だと思います。

サンプルファイル

スケマティックはこんな感じです。基本的には上の壁が壊れるシーンと同じです。

地面が崩れるタイミングの調整にはウェイクオンの「衝突フォース」を使用しています。パーティクルに質量を設定して、パーティクルと衝突したアイテムからリジッドボディが動き出します。衝突は近くのアイテムに伝播してしまうので、細かく制御するのに向かない場合があるかも知れません。

 

modoのダイナミクスはシミュレーション速度や精度に難点があるため、ビルが崩壊するような大規模シミュレーションをじっくり見せるために使用するのは大変そうですが、アクションシーケンスの短いカットで使用するには十分使えると思います。

 

参考

Tips

modoで鎖帷子のような表現

modoのUV Transformを使って、鎖帷子(チェーンメール)のような表現をテストしてみた。

サンプルファイル

作り方は単純です。ソフトボディを使って布のようなシミュレーションを行います。

シミュレーションしたメッシュをUV Transformのターゲットメッシュに設定してチェーンメッシュを変形します。
UV TransformはUVを使ってメッシュを変形する機能です。メッシュ表面にメッシュを沿わせるモデリングやアニメーションで便利に使えます。

チェーンはループして見えるように配置した輪を、Arrayを使って複製してます。

 

UV Transformを使うと鎖帷子のように、そのままシミュレーションするのが難しい複雑なメッシュをアニメーションさせることができて便利です。

UV Transformはポリゴン数の少ないメッシュではそれほど遅くないのですが、Arrayと組み合わせると驚くほど遅くなります。また、UV Transformはターゲットの形状によって、計算不能ということなのかメッシュが変な方向に伸びてしまうことがあるようです。

 

参考

参考資料

Particle Universe

Cinema 4D、X-Particles、Houdiniで行ったシミュレーションをまとめだそうです。レンダリングはRedshift。
レンダリングが綺麗。