CG 日記

Tips

modoで唇リグ

modoの機能紹介ビデオをまねて唇リグを作ってみた。
modo 13.2で追加されたグラディエントチャンネルとCurve Falloffを組み合わせて使うと、単純なノード構成でも柔軟なアニメーションができます。

サンプルファイル(13.2)

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


唇の閉じた位置にカーブがあり、そのカーブを使ってトランスフォームデフォーマの影響範囲を制御してい ます。影響範囲の制御はユーザーチャンネルに追加したグラディエントと、Curve Falloffの「長さに沿ってフォールオフ」を使用します。

Gradient ScaleやGradient Offsetを使うとカーブをアニメーションすることができるので、唇の開き具合や位置の制御に使ってみました。

 

Curve Falloff使った単純なサンプルも公開しておきます。 Curve SweepとCurve Falloffの相性が悪いのかレンダリングするとmodoが落ちます。

サンプルファイル(13.2)

Gradient BlendやGradient Mathを使えば、もっと複雑なアニメーションを作ることができそうですね。

 

参考

Tips

modoの虹色マテリアル

modoの虹色マテリアルについて書いてみます。

modoには光の干渉による虹色(スペクトル)を表現するためのマテリアルが搭載されています。このマテリアルを使用するとCD、真珠、シャボン玉、金属の油膜や焼き色のような質感を手軽に作ることができます。

 

Iridescence Material と ThinFilm Material

modoにはIridescence(虹色)ThinFilm(薄膜)という2種類のマテリアルがあり、どちらも虹色の効果をシミュレートすることができます。
2つのマテリアル違いはパラメータの設定方法が異なるくらいで、「スペキュラ」「反射」に限定すれば、ほぼ同じようなレンダリング結果になります。ThinFilmはフレネル反射が強いようで少し明るく見えます。

マテリアルの特長は以下の通りです。

Iridescence Material

  • 虹色の繰り返し回数を「波長」カーブと「nanometers」で制御
  • 虹色は「ディフューズ」「スペキュラ」「反射」「透過」「ルミナンス」で個別に設定可能

ThinFilm Material

  • 虹色の繰り返し回数を「厚み」で制御
  • 虹色は「スペキュラ」「反射」に限定した動作

基本的には細かく制御できるIridescence Materialがおすすめです。Gradientを使用しても手動でグラデーションを設定することもできますが、光のスペクトルを表現したい場合はIridescence Materialが手軽で便利です。

Iridescence Material にはThinFilm Materialにある「厚み」が無いように見えますが、チャンネルビューポートのnanometersで設定することができます。レイヤーエフェクトの「虹色」は「nanometers」チャンネルに影響してます。「厚さ」による色の変化はArnoldのマニュアルなど他のソフトのサンプルが参考になります。

 

Iridescence Material と ThinFilm Materialは「グループマスク」「レイヤーマスク」が使用出来ないので、マテリアルをマスクする場合はチャンネルごとレイヤーエフェクトを設定する必要があります。

マスクしたい箇所はウェイトマップを使用すると便利です。

 

ThinFilm Material を使用する場合は「屈折率」を1.0に設定するとレンダリングエラー(黒いピクセル)が発生するので、テクスチャを使用する場合は1.0にならないように注意する必要があります。

Iridescence Materialを使用すると金属の質感がリアルになるのでおすすめです。レザー素材にもいいらしいですよ。

 

テンパーカラー

 

油膜

 

亜鉛メッキ

 

ステンレス

 

参考

Tips

modoで鎖帷子のような表現

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

サンプルファイル

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

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

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

 

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

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

 

参考

Tips

modoのGLキャプチャ コマンド

modoのGLキャプチャ コマンドについて書いてみます。

3Dビューポートを記録するGLプレビューは、アニメーション作成には欠かせない機能です。重いシーンではアニメーションをリアルタイムに再生することができないため、GLプレビューを使用して動きやタイミングを確認します。
modoにはビューポートを記録する「GLプレビュー」と「プレイブラスト」機能が搭載されてます。

 

GLプレビュー

アクティブな3Dビューポートを記録する機能です。記録サイズはビューポートの表示領域をそのまま記録します。「GLプレビュー」は動画形式でビューポートを記録し、記録した動画を自動的に再生します。プレビューはTempフォルダに保存されます。

C:\Users\ ユーザー名) \AppData\Local\Temp

「GL録画」「GL画像シーケンス」はディレクトリを指定してファイルを保存する機能です。

 

プレイブラスト

カメラを指定してビューポートを記録する機能です。記録サイズはRenderアイテムのフレームサイズが使用されます。
プレイブラストは記録専用の3Dビューポートを生成するため、ビューポートの「シェーディングスタイル」や「グリッドを表示」を設定するオプションが用意されてます。

これらのGL記録機能は gl.capture コマンドを使用してます。

 

gl.capture コマンド

gl.capture コマンドには12個の引数があるので紹介してみます。「GLプレビュー」や「プレイブラスト」では使用することのできないオプションが用意されてるので、必要に応じて使用すると便利です。

 

record

「GL録画」と同じです。

gl.capture record:true

 

seq

「GL画像シーケンス」と同じです。

gl.capture seq:true

 

filename

ファイルパスと保存するファイル名の指定です。指定がない場合はファイル保存ダイアログが開きます。

gl.capture filename:”C:\Temp\GLPreview.mov”

 

frameS / frameE

記録の開始と終了フレームです。

gl.capture frameS:10 frameE:25

 

autoplay

動画記録の自動再生です。指定がない場合はautoplay:trueとして動作します。

gl.capture autoplay:false

 

preview

「GLプレビュー」と同じです。

gl.capture preview:true

 

scale

記録サイズを25%か50%に縮小して保存します。指定がない場合はscale:fullとして動作します。

gl.capture scale:quart
gl.capture scale:half

 

savealpha

背景をアルファチャンネルとして保存します。指定がない場合はsavealpha:falseとして動作します。

gl.capture seq:true savealpha:true

 

cleanGL

ビューポートコントロールと情報表示(アイコンや情報など)」を表示します。指定がない場合は cleanGL:trueとして動作します。

gl.capture cleanGL:false

 

useMonitor

GL記録のプログレスバーを表示する。指定がない場合は useMonitor:trueとして動作します。

gl.capture useMonitor:false

 

counter

フレームカウントを表示する。指定がない場合は counter:trueとして動作します。

gl.capture counter:false

 

使用例

複数の引数を使用する時の例です。「シーケンス保存+フレーム範囲指定+スケール50%+アルファ保存」

gl.capture seq:true filename:”C:\Temp\GLPreview.tga” frameS:10 frameE:25 scale:half savealpha:true

 

コマンドの引数は並び順で処理されるので、以下のように引数の値だけ省力して記述することもできます。

gl.capture true true “C:\Temp\GLPreview.tga” 10 25 false false half true

 

私の場合AfterEffectsを使用してフレーム単位で確認することが多いのでシーケンスを使用してます。
gl.captureのバグなのかわかりませんが、0フレームの画像として「ビューポートコントロール」が表示された状態のカレントフレームを出力します。繰り返しタイミングを見るとき邪魔なので、手動で削除するためにシーケンスを使ってるという事情もあります。

 

指定したサイズで3Dビューポートを開く

おまけとして、プレイブラストのように指定したサイズでビューポートを開くコマンドを紹介します。

プレイブラストでプレビューを作成する時にアドバンスドビューポートで記録したい時があります。プレイブラストには「ソース設定をコピー」するオプションがあるのですが対応状況が半端なため、見た目が変わってしまうことがあります。
そんなときは記録したいサイズのビューポートを作成して、手動で表示オプションを調整するといいです。

cmds.batch {Temp} {layout.create Camera width:1280 height:720 persistent:false style:palette layout:”BlankCamera Palette”} {view3d.shadingStyle gnzgl} {view3d.presetload AVPGoodQ}{view3d.sameAsActive true}

 

GLの記録とは異なりますが、プレビュービューポートにもアニメーションをレンダリングする機能があります。
プログレッシブレンダラーであるため1フレームのレンダリング時間を指定できるので、画像は粗くてもGLより最終レンダリングに近い画像でアニメーションを確認できて便利でした。

残念なことに11.1でUI変更されたタイミングで「最大時間」が動かなくなってしまい、短時間でレンダリングができなくなってしまいました。便利な機能だったので修正して欲しいです。

 

参考

https://community.foundry.com/discuss/topic/81912

 

Tips

modoのスタティックメッシュ

modoのスタティックメッシュについて書いてみます。

 

スタティックメッシュとは

スタティックメッシュはメッシュアイテムの種類の1つです。通常のメッシュアイテムと異なりコンポーネント(ポイント/エッジ/ポリゴン)を編集することができない代わりに、CADデータや樹木のような高密度のメッシュデータを開いたときのメモリ使用量を低く抑えることができます。レンダリング可能ですが、デフォーマ等で変形することはできなくなります。

スタティックメッシュは、ZBrushから出力した高密度なメッシュをmodoでリトポする場合に最適です。

 

メモリ使用量を比較

ZBrushのサンプルファイルでおなじみ、サムライスピリッツのアースクェイクをmodoに読み込んでメモリの使用量を比較してみます。ポリゴン数は 6,303,616(三角ポリ)です。

 

modo起動直後

modoを起動した直後のメモリ使用量は「0.45GB」くらい。

 

メッシュ

通常のメッシュとして読み込んだ場合のメモリ使用量は「6.7GB」くらい。

 

スタティックメッシュ

スタティックメッシュとして読み込んだ場合のメモリ使用量は「1.58GB」くらいで、およそ1/4程度になります。

 

スタティックメッシュの使用方法

スタティックメッシュを使用するには、アイテムリスト等で右クリックメニューから「タイプの変更 / Static Mesh」を実行します。

または、objファイル読み込みオプションで「スタティックメッシュとして読み込み」をONにします。

メッシュとスタティックメッシュは相互に変換することができますが、通常のメッシュをスタティックメッシュに変換すると全て3角ポリゴンになるので注意が必要です。

 

リトポ用の高密度なメッシュをmodoに読み込むと、メモリが足りなくなったりビューポートが遅く感じることがあります。そんな時はスタティックメッシュを使用するのがおすすめです。

マニュアルにはレンダリングにもおすすめと書かれてますが、レンダリング時のみ高密度メッシュを使用したいという用途ではレンダープロキシが向いてます。
モデリングが完全にFixしてる場合はディファードメッシュという機能もあるので、用途に応じて使い分けるといいと思います。

 

参考

Tips

Mayaのバッチレンダリングをバッチコマンドで便利にする

Mayaのコマンド ライン レンダラを使用したバッチレンダリングのしかたを紹介したことがありますが、今回はその応用編として、バッチコマンドを使用してMayaのバッチレンダリングを少し使いやすくする方法について書いてみます。

 

MayaはメジャーバージョンやSPごとに細かな不具合が多く発生します。このためコマンド ライン レンダラを使って各Mayaバージョンでレンダリングを実行し、どのバージョンからバグったか調べたりします。
しかし、Mayaは基本的にデザイナーに優しい動作をしないため、Maya標準動作が不便に思うことが多々あります。そこでバッチコマンドを使用して、Mayaのバッチレンダリングを少し使いやすくする方法を紹介したいと思います。

以下は指定したファイルをレンダリングする、基本的なバッチファイルの記述です。これを元に使いやすくしていきます。

“C:\Program Files\Autodesk\Maya2018\bin\Render.exe” -r sw -s 1 -e 120 -of png -log “C:\BatchFolder\Output\Cut001.log” -rd “C:\BatchFolder\Output” “C:\BatchFolder\Cut_001.ma”

 

バッチ実行後にウィンドウを閉じないようにするコマンド

cmd /k

通常コマンドプロンプト ウィンドウは、バッチファイルのコマンドを実行すると自動的にウィンドウが閉じます。バッチファイルの最後にコマンドを追加すると、コマンドプロンプト ウィンドウが閉じなくなります。

基本的になくてもよいですが、バッチの実行結果を確認したい時に使用します。バッチファイルが意図した通り動作するまではコマンドを入れておくとよいです。

“C:\Program Files\Autodesk\Maya2018\bin\Render.exe” -r sw -s 1 -e 120 -of png -log “C:\BatchFolder\Output\Cut001.log” -rd “C:\BatchFolder\Output” “C:\BatchFolder\Cut_001.ma”
cmd /k

 

変数 コマンド

set

変数を設定するコマンドです。
変数とは「値」や「文字列」を出し入れできるアイテムボックスみたなもので、「値」や「文字列」に好きな名前をつけてバッチファイル内で使うことができるようになります。

例えばログファイルと画像ファイルを同じ名称にしたいとき、バッチファイル内を2箇所書き換えるのが面倒です。そこでバッチファイル内で変数を定義し「set FileName=Cut001」、置換したい箇所に変数の展開「%FileName%」を記述します。下の例では変数「FileName」を「Cut001」という文字列に置き換えられてバッチが実行されます。

set FileName=Cut001
“C:\Program Files\Autodesk\Maya2018\bin\Render.exe” -r sw -s 1 -e 120 -of png -log “C:\BatchFolder\Output\%FileName%.log” -rd “C:\BatchFolder\Output\%FileName%” “C:\BatchFolder\Cut_001.ma”

レンダリングに使用するシーンファイルなど、書き換える頻度が高いものを変数として使用すると便利です。

set MayaFile=BatTest.ma
set FileName=Cut001
“C:\Program Files\Autodesk\Maya2018\bin\Render.exe” -r sw -s 1 -e 120 -of png -log “C:\BatchFolder\Output\%FileName%.log” -rd “C:\BatchFolder\Output\%FileName%” “C:\BatchFolder\%MayaFile%

 

カレントディレクトリ コマンド

%~dp0

バッチファイルのあるディレクトリを指定するコマンドです。
バッチファイルとMayaファイルを同じディレクトリで管理して使用するとき、画像ファイルの出力先のパスを毎回書き換えるのは面倒です。相対パスで記述しておけばパスを書き換える必要がなくなって便利です。

例えば下の画像のようにバッチファイルとMayaファイルを同じディレクトリに入れて使用するとします。

絶対パスでは「C:\BatchFolder\Cut_001.ma」のような記述になりますが、相対パスでは「%~dp0\Cut_001.ma」で済みます。

set MayaFile=Cut_001.ma
set FileName=Cut001
“C:\Program Files\Autodesk\Maya2018\bin\Render.exe” -r sw -s 1 -e 120 -of png -log “%~dp0\%FileName%\%FileName%.log” -rd “%~dp0\%FileName%” “%~dp0\%MayaFile%”

 

フォルダ作成 コマンド

mkdir

フォルダを作成するコマンドです。
Mayaは画像の出力先のディレクトリがなかった場合、自動的にフォルダを作成してくれます。しかしログ作成「-log」はフォルダを作成してくれません。このためログファイルを出力する場合はあらかじめフォルダを作成する必要があります。

下の例では変数を使用してフォルダを作成してます。

set MayaFile=BatTest.ma
set FileName=Cut001
mkdir %FileName%
“C:\Program Files\Autodesk\Maya2018\bin\Render.exe” -r sw -s 1 -e 120 -of png -log “%~dp0\%FileName%\%FileName%.log” -rd “%~dp0\%FileName%” “%~dp0\%MayaFile%”

 

ファイル削除コマンド

del

ファイルを削除するコマンドです。
ログ作成は「-log」は、レンダリングを繰り返すたびファイルにログを追加し続けます。私の場合は最新のログしか必要ないので、レンダリング前にログファイルを削除します。

set MayaFile=BatTest.ma
set FileName=Cut001
mkdir %FileName%
del %FileName%\%FileName%.log
“C:\Program Files\Autodesk\Maya2018\bin\Render.exe” -r sw -s 1 -e 120 -of png -log “%~dp0\%FileName%\%FileName%.log” -rd “%~dp0\%FileName%” “%~dp0\%MayaFile%”

 

バッチファイルを参照する

call

バッチファイルから別のバッチファイルを呼び出すコマンドです。
例えばMayaのバージョンを変数で管理したいとき以下のように記述します。Mayaのバージョンが多くなると見にくくなると思います。

set Maya2016=C:\Program Files\Autodesk\Maya2016.5\bin
set Maya2017=C:\Program Files\Autodesk\Maya2017\bin
set Maya2018=C:\Program Files\Autodesk\Maya2018.5\bin
set Maya2019=C:\Program Files\Autodesk\Maya2019\bin
set Maya2020=C:\Program Files\Autodesk\Maya2020\bin

set MayaVersion=2019
set MayaFile=BatTest.ma
set FileName=Cut001

call set MayaVersionPath=%%Maya%MayaVersion%%%
mkdir %FileName%
del %FileName%\%FileName%.log
%MayaVersionPath%\Render.exe”-r sw -s 1 -e 120 -of png -log “%~dp0\%FileName%\%FileName%.log” -rd “%~dp0\%FileName%” “%~dp0\%MayaFile%”

Mayaのパスだけ別のバッチファイル「MayaPath.bat」に記述し、このバッチファイルを他のバッチファイルから参照することができます。

set Maya2016=C:\Program Files\Autodesk\Maya2016.5\bin
set Maya2017=C:\Program Files\Autodesk\Maya2017\bin
set Maya2018=C:\Program Files\Autodesk\Maya2018.5\bin
set Maya2019=C:\Program Files\Autodesk\Maya2019\bin
set Maya2020=C:\Program Files\Autodesk\Maya2020\bin

「call」を使用して他のバッチファイルを指定します。

call C:\BatchFolder\MayaPath.bat

set MayaVersion=2019
set MayaFile=BatTest.ma
set FileName=Cut001

call set MayaVersionPath=%%Maya%MayaVersion%%%
mkdir %FileName%
del %FileName%\%FileName%.log
“%MayaVersionPath%\Render.exe”-r sw -s 1 -e 120 -of png -log “%~dp0\%FileName%\%FileName%.log” -rd “%~dp0\%FileName%” “%~dp0\%MayaFile%”

Mayaのパスを分けるのはバッチファイルが長くなるのを避けることができることの他に、将来的にMayaのバージョンが増えた場合に、ファイルの書き換えが1ファイルの編集だけで済むというメリットもあります。考え方としては3Dソフトのリファレンス機能と同じです。

バッチファイル完成!これでバッチファイルの使い勝手がよくなりました。バッチコマンドを使いこなせば、フォルダ内の全てのMayaファイルを全てレンダリングするようなこともできます。

 

個人的にはバッチファイルやCUIは苦手なので使いたくないのですが、Mayaはスクリプトやらコマンドプロンプトやら色々知ってること前提のソフトなので、GUIベースのソフトで育った人には辛い。

Tips

modoでメッシュを押しつぶす表現

modoでメッシュを使用して、別のメッシュを押しつぶす表現について書いてみます。

サンプルファイル

 

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

プロシージャルモデリング機能のSurface Constraintを使用してメッシュを押しつぶしてます。

Surface Constraintをポリゴン数の多いアイテムに使用すると計算が遅くなりそうなので、単純な形状のメッシュを使用してメッシュ変形できるようにWrapデフォーマを使用しました。Wrapデフォーマはスケマティックを使用してメッシュを入れ替えると反応しなくなり、modoの再起動が必要になる気がするので注意が必要です。

最後に、押しつぶしたあと柔らかいメッシュが揺れるニュアンスが欲しかったのでSoft Lagを追加してます。

スケマティック下の方はSurface Constraintの軸を反転する処理です。Surface Constraintは元々がモデリング用ということもあり、コンストレイントする軸が「XYZ」と「反転」の組み合わせで使うようになってます。
モデリングでは問題ありませんが、アニメーション用途で使おうとするとアイテムの位置関係でオプションを切り替える必要があって少し手間が掛かりそうです。アイテムの位置が45°の範囲でXYZ軸の切り替えと自動的に反転するリグを組もうと思いましたが、少し面倒そうでした。

 

Surface Constraintを使うとソフトボディのシミュレーションよりも手軽に変形を確認できるのが便利です。

modoのアセットに含まれてるチキンを変形してみた。

 

参考

Tips

modoでサーフェースに沿ってアイテムを動かす方法

modoでサーフェース(メッシュ)に沿ってアイテムを動かす方法について書いてみます。

サンプルファイル

modoでサーフェースに沿ってアイテムを動かすときは「交差サーフェース」を使用します。作成手順は以下の通り。

制御用のアイテム、次にサーフェースを参照するアイテムの順番で選択して、「交差サーフェース」ボタンをクリックします。するとサーフェースに沿って移動するロケータが作成されます。
通常はこのロケータにアイテムをペアレントすれば、サーフェースに沿ってアイテムが移動して見えます。

しかし、リグで使用するコントローラそのものをサーフェースにコンストレイントしたい場合があります(Mayaのジオメトリ コンストレイントのように)。そんなときはスケマティックを使用して、Intersectノードの「位置出力」を、コンストレイントしたいアイテムの「ワールド位置」に接続します。すると直接操作するアイテムをサーフェースにコンストレイントすることができます。

スケマティックではConeの「ワールド位置」がIntersectに接続され、Intersectで起算した結果がConeの「ワールド位置」に接続されており処理がループしています。一般的にこのような循環したノード接続をおこなうと、無限ループ(エラー)が発生して計算することができませんが、modoでは1ノードであれば計算をループさせて使用することができます。

Tips

modoでPlexusっぽいライン表現

modoでAfterEffectsのプラグイン「Plexus」っぽいライン表現について書いてみます。

サンプルファイル

 

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

基本的にはパーティクルシミュレーションをParticles to Array使って配列を作成し、Create Polygonsでラインを生成してます。Create Polygonsは配列から一筆書きでラインを生成することしかできないので、Offset Arrayで少し配列をずらしたデータを作り、Merge Arraysを使用して1つの配列に統合します。Merge Arraysを繰り返すことで1つの頂点から複数のラインを生成してます。

パーティクルが一定の距離離れたらラインを消すためにSelect Edges by Lengthを使用します。

パーティクルをレンダリングするために、Replicatorを使用してキューブを複製してます。このときキューブはParticle Look At Modifierを使用して常にカメラを注視するように設定してます。

 

それっぽくレンダリングするとこんな感じ。ロゴの頂点番号を工夫すると、もう少し面白いテキストアニメーションにできそう。フォールオフSelect By Volumeを使って、ラインを生成する範囲を制御してみるのも面白いかも知れません。

 

参考

Tips

modoで線をアニメーションする表現

modoで線をアニメーションする表現について書いてみます。
ArrayとCreate Polygonsを使用すると簡単に線がアニメーションするような表現が可能です。

■ サンプルファイル

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

ロゴのメッシュデータをParticles to Arrayで配列にし、Offset Arrayを使用して配列データをオフセットアニメーションします。この配列を使用してCreate Polygonsで「ライン」を生成してます。

線が全てつながった状態だとアニメーションしてる感じがしないので、Select Randomを使ってラインをランダムに削除します。
Create Polygonsはロゴのメッシュ全体を一筆書きのようにラインを生成するため、長いラインが発生します。この長いラインを削除したかったので、Select Edges by Lengthを使用しました。

ロゴの形状を崩すところは Jitter を使用してます。

 

参考

Tips

modoのソフトボディ

modoのソフトボディのパラメータの動作をまとめてみた。ソフトボディは布やゴムボールのようなシミュレーションに使用することができます。

 

ソフトボディ

modoのソフトボディ(Bullet Physics)はメッシュの頂点間に仮想のバネを作成してシミュレーションします。

仮想のバネ

例えばV字のメッシュがあるとします。

ソフトボディを適用すると「屈曲剛性」「構造」「シアー」はそれぞれ、下の画像の色分けした部分にバネを作成します。

仮想のバネを使用する計算方法であるため、メッシュの細かさによってソフトボディの印象が変わります。厚く固い布はメッシュを荒く、柔らかい布はメッシュを細かく分割する必要があります。

平面を「細分割」した回数でソフトボディの印象が変わる例です。メッシュが細かくなるにつれ、柔らかい布のように動いて見えるようになります。

「構造」に高い値を設定していますが、メッシュが細かくなるにつれて頂点間のバネの数が多くなり、メッシュ全体が伸びた計算結果になります。

「屈曲剛性」「構造」「シアー」は相互に影響しており、大まかな動作として「屈曲剛性」「構造」「シアー」に小さな値を設定するとメッシュが伸びるようになり、大きな値を設定すると元のメッシュ形状が維持されます。
ソフトボディは同じパラメータ設定でもメッシュの細かさによって変わるため、パラメータの値あくまで参考程度のものです。実際に使用するメッシュに応じて設定を詰める必要があります。

 

ソフトボディのパラメータ

各パラメータの変化を比べてみました。

屈曲剛性

メッシュの形状を保とうとする力です。100%のように高い値を設定するとメッシュ表面がデコボコになることがある。

 

構造

メッシュのエッジに設定されるバネです。重力のようなフォースによってオブジェクトが変形したとき、元の形状に戻ろうとする力が発生します。

 

シアー

ポリゴンの対角線上に設定されるバネです。値が大きいと布のようなシワが発生します。

 

自己衝突

自身のメッシュとコリジョンジョン判定します。メッシュ通しがめり込まなくなりますが、計算に時間がかかるようになります。

自己衝突のはチャンネルビューポートの「reSoftSelfMargin」で設定します。

 

圧力

風船のようにメッシュを内側から押す力です。メッシュが閉じた形状のときに動作します。メッシュが細かいほど効果が出やすい。

 

ボリューム維持

風船をつぶしたときのように体積を維持するパラメータらしいです。値を変えると変化はありますが、比較して明かな違いがでるような設定にできませんでした。

 

ドラッグ

メッシュの動きを抑えます。

 

質量

ソフトボディを適用したオブジェクトの重さは「質量」で設定します。フォースを使用して薄い布のように動かすには、「密度」に小さい値を設定するとよいです。フォースの強さにもよるので、密度の値は参考程度。

 

modoのソフトボディはBullet Physicsというオープンソースの物理演算エンジンライブラリを使用してます。Maya、Houdini、CINEMA 4D、LightWave 3Dなど多くのソフトで使用されています。ソフトウェアによってはライブラリに手が加えられ、シミュレーションの安定性が違ったりするようです。

Tips

Mayaソフトウェアで頂点カラーをレンダリングする方法

Maya Softwareで頂点カラーをレンダリングする方法について書いてみます。

Maya単体では頂点カラーをレンダリングすることはできませんが、Maya Bonus Toolsに入ってるCv Color Shaderを使用すると、Maya Softwareで頂点カラーをレンダリングすることができます。
https://apps.autodesk.com/MAYA/en/Detail/Index?id=8115150172702393827&os=Win64&appLang=en

 

使用方法

1.メッシュに頂点カラーをペイントする。

 

2.Maya Bonus Toolsをインストールしてプラグインをロードする。

 

3.シェーダーのカラーアトリビュートのマップボタンをクリックしてCv Color Shaderを設定する。

 

4.レンダリングする。

 

頂点カラーがレンダリングできると、MASH Colorを使ってメッシュにランダムに色を設定することができるようになります。

 

トゥーン系のレンダリングでは、ArnoldのようなPBRでGI前提のレンダラーはレンダリングコストが高いように思います。GIが必要なければMaya Softwareのようなレガシーなレンダラーの方が速くて向いてる気がします。

Tips

modoで交差したオブジェクトの境界をやわらかくする方法

LightWaveで交差したオブジェクトの境界をやわらかくする方法についてツイートしてるのを見かけたのでまねしてみた。何となくそれっぽく動いた。

サンプルファイル

 

Raycastノードの「ヒットした距離」をリレーションシップで調整して透明にしてます。

ソフトパーティクルのように使おうと思ったら、Replicatorで複製されたメッシュ通しで透明になってしまった。パーティクルで使用するには、もう少し工夫する必要がありそう。

 

参考

Tips

modoのカーブフォールオフでメッシュ変形

modo13.2のベータフォーラムで、Warren Lさんがカーブフォールオフを使用した面白いテクニックを公開してたので紹介します。
https://community.foundry.com/discuss/topic/149545/fun-with-curve-falloff

カーブフォールオフを使用するとリプリケーターで複製したカーブを使ってメッシュを変形できるようになります。パーティクルと組み合わせると、色々面白い表現に使えそうですね。

 

動画をまねてみた。

■ サンプルファイル

modo 13.2ではSoftLagとパーティクルキャッシュとの相性が悪いため、シミュレーション再生ボタンを使用した時しか意図した動作になりませんでした。上の画像はシミュレーション再生した状態をキャプチャーしてます。早めにパーティクルキャッシュ修正して欲しい。