Simulation

参考資料

CYMATIC

金属板の上に砂をまいて共振させて作るクラドニ図形っぽくて面白いですね。

Tips

modoでおきあがりこぼし

mdooのダイナミクスでおきあがりこぼしの作り方について書いてみます。ダイナミクスの特長を使った小ネタです。

サンプルファイル

mdooのリジッドボディ ダイナミクス(Bullet Dynamics)は、アイテムのセンターを中心に回転します。この特長を利用してセンターをアイテム底に配置すると、アイテムをおきあがりこぼしのように倒れにくくすることができます。

倒れないドミノも作れます。


特に使い道のあるTipsではありませんが、もしかするとモーショングラフィックで役立つかもしれません。

 

参考

Tips

modoでプロシージャルなドミノ倒し

modoでプロシージャルなドミノ倒しの作り方について書いてみます。

 

ダイナミクスのチュートリアルでよく見かけるドミノ倒しですが、1個ずつドミノを並べるのは面倒です。カーブを使用してドミノを配置すると、カーブを編集するだけで手軽に並べ替えができるようになって便利です。

サンプルファイル

 

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

大まかな流れとしてカーブからパーティクルを発生させます。ドミノにはコリジョンを設定したいので、Dynamic Replicatorを使用してドミノ通しが衝突するように設定しています。

このとき問題になるのが、ドミノをカーブに沿って配置する方法です。modoにはCurve Particle Generatorというカーブに沿ってアイテムを配置する便利なノードがあります。

残念なことにCurve Particle Generatorを元にパーティクルを発生させても、回転した状態でパーティクルを発生させることができません。下の画像のような方法ではカーブに沿わせることができない。

この問題を回避するためにCurves to ArrayとArray Element By Indexを使用します。
ドミノのスケマティックではParticle Generatorを使用してX方向にパーティクルを生成します。Curves to Arrayでカーブの挑戦数を設定して、Array Element By Indexを使って頂点の「位置」と「回転」をParticle Operatorに出力します。

「回転」はそのままParticle Operatorに繋ぐことができますが、「位置」はMatrix Vectorを使ってマトリクスからベクターチャンネルに変換してからParticle Operatorに接続します。

こうすることでカーブに沿ったパーティクルを発生させることができるようになり、手続き的にドミノを配置することができます。

 

Replicatorをフリーズしてダイナミクス適用する方法もありますが、今回はパーティクルを使用する方法を紹介してみました。ちょっと複雑ですが、パーティクルに回転を渡したい場合、Arrayを使うといいようです。
modoには様々なノードがありますが、似た役割のノードでも読み取れる情報に差があるため無駄に複雑に感じることがあります。似た機能のノードは全て同じ情報にアクセスできるように機能を統一して欲しいですね。

 

参考

今回のカーブに沿って回転したパーティクルの発生方法は、Warrenさんが公開していたファイルを参考にしています。
https://community.foundry.com/discuss/post/1214020

Tips

modoのパーティクルオペレータ タイプ

modoのパーティクルオペレータ タイプについて書いてみます。

パーティクルを制御するパーティクルオペレータには「タイプ」というチャンネルがあります。タイプには「適用」「統合」「新規」「トリガー」の4種類があり、タイプによってパーティクルオペレータの適用方法が変わります。

 

まずは比較のためにパーティクルオペレータを使用していない状態のパーティクルシミュレーションです。平面の頂点からパーティクルが発生し続けます。変化がわかりやすいようにパーティクルは発生位置にとどまるようにしました。

 

 

適用

「適用」は毎フレーム値を設定します。

このスケマティックでは「位置 Y」に 2m、「回転 Z」に45°の値を設定してます。

 

 

統合

「統合」は毎フレーム値を加算します。

このスケマティックでは「位置 Y」に 2m、「回転 Z」に45°の値を設定してます。毎フレーム値が加算されるため、パーティクルはY軸方向に移動します。
回転が加算されないのはよくわからないです。「サイズ」「速度」は加算されるので行列チャンネルは非対応なのかな?

 

新規

「 新規」はパーティクル発生時に1度だけ値を設定します。

このスケマティックでは「位置 Y」に 2m、「回転 Z」にTimeノードを使用して毎フレーム異なる値を設定してます。

 

トリガー

「トリガー」はトリガーチャンネルがTrueになったフレームで値を設定します。

このスケマティックでは「位置 Y」に 2m、「回転 Z」にに45°の値を設定してます。
トリガーチャンネルにキーフレームを設定したチャンネルを接続して、1秒間隔でTrueを設定してます。

 

 

オペレーターの接続順

Particle SimulationのOperatorは接続された順番で計算します。

例えば画像のようにSource Emitter、Particle Operatorの順番で接続した場合、Source Emitterが先に計算されるため、平面の頂点位置にパーティクルが発生し、次のフレームでParticle Operatorの「位置」と「回転」が計算されるため一瞬だけ平面上にパーティクルが発生してるのがわかります。

Particle Operatorの順番は重要で「新規」を使用する場合は、エミッターよりも先にParticle Operatorを接続していないとパーティクル特性が動かないように見えます。

 

パーティクルオペレータ タイプの「新規」を使用すると、螺旋のように少しずつ角度の違うパーティクルを発生させることができて便利です。

サンプルファイル

CG News

DeepFX Studio

去年からベータ版が公開されていたードベースのシミュレーションソフト「DeepFX Studio」が正式リリースされました。

DeepFX StudioはLightwaveの流体シミュレーションプラグインにDeep FXRisingを元にしたスタンドアロンの物理アニメーションツールです。流体、粒状、破砕、Bullet Physics、マルチフィジックスの手続き型シミュレーションを作成できます。OpenVDBとAlembicがサポートされています。

https://www.deepfxworld.com/deep_fx_studio.php

価格

  • インディー $ 650 (収益10万ドル未満)
  • プロフェッショナル $ 950 (制限なし)

 

なぜDeep FX Studioなのか?

誰もが使いこなせるツール。アートに集中したいアーティストや、パワフルなプロシージャルワークフローを必要とするテクニカルアーティストのために、直感的に使えるように一から構築されています。

優しい学習曲線

学ぶのも覚えるのも簡単です。Deep Fx Studioはあなたの邪魔にならず、あなたの目標を達成するのに役立ちます。厳密なレジメンはありませんが、問題は複数の方法で解決することができます。

 

プロシージャル

プロシージャルコンテンツの作成は可能ですが、Deep FX Studioで生産性を高めるためには必須ではありません。しかし、あなたのスタイルに合っていれば、プロシージャルエンジンは無限の可能性への扉を開きます。プロシージャルエンジンは余計なものではなく、基礎の一部なのです。

 

流体シミュレーション

当社独自の技術を使用して最先端の流体シミュレーションを作成します。結果は視覚的にも楽しいものになることが保証されています。

 

Bullet Physicsの統合

業界標準の物理エンジンであるBulletを使用して、ムービー品質の物理シミュレーションを作成します。

LuxCoreRenderとの統合

LuxCoreRenderは最先端のアルゴリズムに基づいた物理ベースのアンバイアスレンダリングエンジンです。あなたの想像力をかきたてるような、心を揺さぶるフォトリアリスティックなイメージを生成します。

 

OpenVDBのサポート

OpenVDBは業界標準を変えるもう一つのゲームです。この強力なボリュームツールキットは様々なことに使用できます。

破壊

オブジェクトを簡単に破壊し、破壊的な混乱を作成するためにシミュレーションにそれらを供給します。

 

他にもたくさんの機能があります!

これは氷山の一角に過ぎません。Deep FX Studioには、多くの課題に取り組むためのツールが用意されています。

Tips

Syflex for modoのパラメータ

Syflex for modo のよく使うパラメータの覚え書きです。他のソフトでもだいたい同じように動くと思います。

 

Syflexとは

SyflexはModo、Maya、3ds Max、LightWave、Cinema 4D、Softimageなど様々なプラットフォームにリリースされてるクロスシミュレータプラグインです。2001年に公開された映画ファイナルファンタジーで使用されたクロスシミュレータの技術が元になった製品です。

ソフトは古い時代の作りのままなので少し使い勝手はよくない所もありますが、高速で比較的安定したシミュレーションを行うことができます。

 

メリット
  • シミュレーションの計算速度が速い。
  • シミュレーション結果が比較的安定している。震えが発生しにくい。
  • modo内でシミュレーションできる。
デメリット
  • サブフレームの計算ができない。速い動きでり抜けが発生しやすい。
  • ホストアプリケーションとの統合が弱い。例えばモーフなどデフォーマリストの前の変形を考慮しない。
  • シミュレーションキャッシュをファイル保存する必要があるのがやや面倒。
  • 恐らくMarvelous Designerの方がシミュレーション安定してそう(使ったことない)。

 

デフォーマリストはsyClothでシミュレーション後のメッシュをスケルトンやモーフ変形できるけど、スケルトン変形した後にsyClothでシミュレーションすることができません。

 

Softimageでは標準機能のクロスシミュレーションとしてSyflexを搭載していました。完全に同じものではありませんが、シミュレーションの注意点などSoftimageのマニュアルも参考になると思います。

http://docs.autodesk.com/SI/2015/JPN/#!/url=./files/GUID-1A8166A7-7768-42FC-8A6A-D4CC9913F845.htm

 

仮想のバネ

Syflexはmodoのソフトボディと同じくstretch、shear、bendの3つの仮想のバネを使用して計算します。

 

パラメータの設定が同じでもメッシュの細かさによってクロスの伸縮が若干変わります。今回テストに使用したのは正方形1メートル、Subdivision 6のメッシュです。

 

 

Syflexのパラメータ

 

syCloth

クロスシミュレーションに必須のノードです。

mass

クロス オブジェクトの質量です。単位はグラム。

•綿(シャツ) 100
•フリース(パーカー) 250
• デニムジーンズ) 500

 

stiff

バネの硬さです。3つのバネ、stretch、shear、bend全体の硬さを設定します。
一般的な値の範囲は0.1〜10。20、30など10以上の値の場合は変かが少なくなる。

 

damp

バネのダンピング係数です。クロスの振動を抑えることができます。
一般的な値の範囲は0.00001〜0.1。0.1以上の値を設定すると計算が遅くなります。0.5以上は変化が少ない。stretch、shear、bendの値に応じて設定を変える必要があります。

 

stretch

ポリゴンメッシュのエッジに沿ったバネです。 stiffの値を基準にしたバネの強さです。
1.0=100%=stiffという感じらしい。

 

shear

ポリゴンメッシュの対角線状のバネです。stiffの値を基準にバネの強さを設定します。
stretch、shear、bendの順番で値を小さく設定するといいらしく、bendとのバランスが重要なようだ。

 

bend

頂点を 1 つおきにつないだバネです。stiffの値を基準にバネの強さを設定します。

 

 

syDamping

移動速度を低下させるダンピング フォースです。空気抵抗や水中での動きっぽくなる。

damp

 

syNail

クロスをウェイトマップで固定するフォースです。トランスフォームにオブジェクトやロケーターに接続することで固定箇所を移動できるようになります。
同様のフォースにsyPinがありますが、syNailはアイテムへの「位置コンストレイント」で、syPinは変形するメッシュに固定する「ジオメトリコンストレイント」という違いがあります。

dist

固定する頂点の距離です。0は完全に固定、0以外にすると仮想のバネが作られて吊された状態になります。

 

stiff

固定する頂点のバネの硬さです。distが0以上の場合に動作します。
stiffの値を上げても頂点を完全に固定することができないので、頂点を完全に固定したい場合はdist 0に設定したNailフォースをもう一つ追加するといいです。

 

damp

バネのダンピング係数です。振動を抑えます。

 

map

Nailの影響をウェイトマップで指定します。

画像左はリニアフォールオフを使ってウェイトを設定したもので、画像右はリニアフォールオフのイーズアウトを使用してウェイトに偏りを持たせた設定です。

 

syCollideMesh

メッシュと衝突させるフォースです。

friction

摩擦係数です。一般的な値の範囲は0~1。

 

damp

接触している頂点の移動を減速させます。

 

sticky

濡れた布がひっつくような設定になります。

 

envelopeExt

衝突オブジェクトからの距離を指定します。単位はメートル。

 

envelopeInt

衝突判定の反応エリア距離です。単位はメートル。envelopeIntの範囲に頂点が入るとenvelopeExtの距離だけ押し戻します。
マニュアルには高速移動時には値を小さくした方がよいと書かれてますが、envelopeIntの値が小さいと速い移動でCollisionがすり抜けてしまうようです。逆に値が大きすぎてシミュレーション開始時に衝突オブジェクトと重なった状態だと計算が不安定になります。

 

sySelfCollision

クロス自身の衝突です。計算に時間がかかるのと震えが止まらない。

 

syVolume

体積維持するフォースです。風船のような閉じたオブジェクトで機能します。

pressure

オブジェクト内の圧力です。パラメータの単位はわからないですが100で元の形状を維持するように見えます。

 

volume

volume単体で値を上げても効果がなくpressureと併用して使います。
volume 3、pressure 100にするとサイズが3倍なってるように見えます。

 

damp

オブジェクトの移動速度が遅くなります。

 

 

syPinの使用方法

Syflexはフォースの設定方法が少し複雑です。毎回Pin追加に失敗するので画面キャプチャしました。

  • 頂点選択(アイテムを選択してると追加に失敗する) + syClothモディファイヤ選択 + メニューからAdd Pin

 

 

Syflexは専用プラグインなので当然ですがmodo標準のソフトボディよりクロス表現に適してます。セルフコリジョンの計算はそれなりに時間が掛かり、クロスが折り重なる場合はdampの値を10以上に設定しても頂点の震えを抑えるのが難しいことがあるようです。

syWindも試そうかと思いましたが単純なメッシュでも布が極端に柔らかくなる現象に遭遇てしまい、安定して動かすのがちょっと困難なのであきらめました。サンプルファイルだとちゃんと動いてるのですが、新規シーンに適用しようとするとクロスが暴れてしまいます。たまに上手く動くんですけどね。

Tips

modoのダイナミックリプリケーターと変形したメッシュのコリジョン設定

modoのダイナミックリプリケーターと、デフォーマ使用して変形したメッシュとのコリジョン設定について書いてみます。

 

 

modoにはダイナミックリプリケーターと言う、リプリケーターを使用して複製したアイテムをリジッドボディダイナミクスとして使用する機能があります。ダイナミックリプリケーターとコリジョン設定する場合、通常は「キネマティック」または「スタティック」リジッドボディを適用します。

 

しかし、スケルトン変形などデフォーマ使用して変形したメッシュに「キネマティック」や「スタティック」を適用しても、デフォーマのアニメーションが無視されてしまいます。

 

コリジョンメッシュに「ソフトボディ」を適用すると、デフォーマでアニメーションしたメッシュとコリジョン判定するすることができます。

■サンプルファイル

 

コリジョン用のアイテムに「ソフトボディ」を適用すると重力の影響を受けてメッシュが落下してしまうので、メッシュが元の位置を維持する用に「ゴールマップ」にウェイトマップを指定し、「ゴールを一致」を100%に設定してメッシュが落下しないように設定します。

 

 

ソフトボディを適用したメッシュと、デフォーマで変形したメッシュのコリジョン判定する場合も同様に「ソフトボディ」を使用します。

■サンプルファイル

 

ソフトボディとソフトボディのコリジョン設定はとてもシビアです。ソフトボディの「マージン」が短いとメッシュのすり抜けが発生します。また、solverアイテムの「演算頻度」が低いと、素早い動きでメッシュが交差してしまい、頂点が震えたり爆発したりします。正直あまり実用的ではありません。

 

 

ソフトボディを使用したコリジョンは少しハックな使い方です。ソフトボディを使用してるので「跳ね返り」を設定できないなど制限があるので、他のソフトと同じようにキネマティックやスタティック状態のメッシュでデフォーマに対応して欲しいですね。

 

参考

参考資料

Houdini 18.5 Sneak Peek

ゲームエンジンプラグイン、PDG、SOP、パイロ、FLIP流体、レンダリングなど、機能範囲全体にわたる拡張機能と新機能を備えたHoudini 18.5の新機能。

Tips

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

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

 

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

 

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

カーブを表示した状態。

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

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

 

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

 

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

 

参考

https://twitter.com/GSG3D/status/1246071202772406272?s=20

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というアセンブリも公開されているので、より高度なことがしたい場合は使ってみるといいかもしれません。

 

参考