Tips

Tips

modoでカメラの視野角を計算する方法

modoでカメラの視野角を計算することができたのでメモしときます。

modoのカメラではプロパティで「視野」を確認することはできますが、「視野」チャンネルをスケマティックに追加することができません。Expressionノードを使用すると「視野」を計算することができます。

 

一般的にカメラの視野角は以下の計算式で求めるそうです。

視野角=2*atan(イメージセンサー幅/(2*焦点距離))

 

これをmodoのExpressionで計算します。Expressionノードには入力Aに「焦点長」、入力Bに「フィルム幅」を接続します。atanを使うとラジアンになるらしいので、最後に角度に変換します。

2*atan(B/(2*A))*180/3.141592

modoの視野チャンネルと同じ値が計算できています。

 

カメラの視野角が計算できるとカメラから見える範囲にだけ処理を行うことができるので、ビューポートが重い場合に効果的です。例えばカメラの見える範囲だけReplicatorを表示することができます。下の画像では視野に合わせて自動的にReplicatorの表示が切り替わってます。

サンプルファイル

ファーには「視錐台カリング」という同様の機能がありますが、Replicatorにはありません。そんな時に視野角を使ってリグを組みます。フォールオフを使用してるので、プロシージャルモデリングと組み合わせても便利かもしれません。

Tips

modoでEmberGenのシミュレーションデータをレンダリング

modoでEmberGenのシミュレーションをレンダリングしてみました。

EmberGenはGPUベースのリアルタイムのボリューム流体シミュレーションソフトです。JangaFXのサイトにはEmberGenで作成されたシミュレーションデータがいくつか公開されています。今回はガソリン爆発のサンプルをmodoでレンダリングしてみた。
https://jangafx.com/software/embergen/download/free-vdb-animations/

 

EmberGenのシミュレーションは90°回転した状態で読み込まれるのでVDBアイテムを回転して位置を調節してます。
VDBファイルを読み込む場合は0フレーム目のファイルを選択します。途中のフレームのファイルを選択して読み込むと、選択したフレームからシミュレーションが再生されます。

 

VDBをレンダリングする場合は、Volumeの「ボクセルソース」にVDBを接続します。

 

質感はGradientを使用してルミナンスを設定しました。Gradientにはmodo 10.2からFluid関連の入力が追加され、Fuel、Fuel、Temperatureを細かく制御できるようになっています。

 

最初にデフォルト設定でレンダリングしたとき、ボクセルグリッドの四角形状やフリッカーが目立ってました。VDBの「ボクセルフィルタ」を設定したら少し軽減された気がします。

フィルターなし。

フィルターあり。

ボクセルフィルターの比較、上がフィルターなし。フィルターを使用するとボリュームの密度が変わってしまいますが、フィルターを使用すると細かなノイズのようなボクセルが軽減されるように見えます。

 

同じデータをArnoldでレンダリングしたもの。Arnoldはフィジカルベースのボリュームシェーダーを搭載しているので、少ないパラメータで見栄えのよい煙や炎の質感を作ることができて便利です。レンダリングも速い気がします。

 

modoとArnoldのレンダリングを比較、上がArnoldのレンダリング。

modoはボクセルグリッドが目立ちます。Arnoldのボリュームシェーダーにはボクセルの補間オプションがあって、煙の表面を滑らかにすることができるのですが、残念ながらmodoには補間のパラメータがありません。

また、modoのボリュームは透明に近いボクセルを省略してレンダリングしてるような印象を受けます。画像右ではフレームを間違えてるのかと思うほど薄いボリュームがレンダリングされていません。VDBのGL表示は薄い部分も確認できるので、ボリュームレンダリングを高速化のための工夫なのかもしれません。

 

EmberGenのシミュレーション結果をmodoで使用することはできますが、レンダリングの品質についてはEmberGenの設定を含めて確認する必要がありそうです。
EmberGenはOctaneRenderと提携を発表してるので、Octaneでどのように活用されるのか気になりますね。

 

参考

Tips

modoでアニメ風の顔をモデリングする方法

modoを使用してアニメやフィギュアのようなキャラクターの顔をモデリングする方法を紹介したいと思います。大まかに顔の形状を作る手順をキャプチャしてみました。
ビデオは一発録り等倍再生(わずかにスローにしてる)で、操作にはマウスを使用してます。10分程度で顔の大まかな形状を作ることができるので、興味があればぜひチャレンジしてみてください。

 

1. 背景画像を読み込む

モデリングのアタリにする顔のラフ画像を読み込みます。Windowsエクスプローラーからビューポートに画像をドラッグアンドドロップして、「透明度」「輝度」を見やすく調節します。

 

2. 面を貼る

顔のモデリングはボックスや球から作り始めたり様々な方法があります。私の場合は円から作ります。

  1. 円柱ツールを使って、口と目の位置に16頂点の円を作成します。
  2. トポロジペンを使って円のエッジを引き延ばすようにして顔のトポロジーを作ります。
  3. 最後にスカルプト移動ツールのスムーズを使用してメッシュをなめらかにします。

トポロジペンを使うと頂点が離れていたり、余計な頂点ができてしまうことがあります。最後にメッシュクリーンアップを実行して、メッシュを綺麗にするとよいです。

ビデオではポリゴンが少なすぎました。目のあいだ、鼻の部分を縦に分割するの忘れたのでエッジループを追加したほうがよいです。
サブディビジョンサーフェースは少ないポリゴンで滑らかな曲面を作成できるのがメリットですが、ポリゴンが少なすぎると形状が作りにくくなるため適度に分割するのが望ましいです。

 

3.顔の奥行きを作る

基本的にスカルプト移動ツールを使用して顔の起伏を整えます。頂点編集はエレメント移動ツールでもできるのですが、スカルプトツールはShiftキーを押したときにスムーズツールに切り替わるのが便利です。

  1. エッジ拡張で顔に厚みを持たせ、サブディビジョンをONにします。
  2. 目と口の円を押し出して凹ませ、エッジウェイトツールで輪郭を強調します(好みの問題)。
  3. スカルプト移動ツールを使用して顔の形状を整えます。角張った所はスムーズで滑らかにします。

これで顔の大まかな形が出来上がりました。顔のような複雑な形状は少ないポリゴン数で全体の形を整えて、後からメッシュを分割して細部を作り込むとよいと思います。

 

4. 完成

メッシュを細かくしたり、イメージの形になるまで頂点を編集してキャラクターの顔を作り上げます。

 

まつげは目の周辺のポリゴンをコピーして形を整えて厚みを付けて作りました。髪はプラグインのPolyStrips From Curvesを使って大まかな形状を配置したものを、細かく調節して形にしました (プラグインを使ってますが、一発で欲しい形状にはならないため手動で調節する必要があります)。

バナナの房のような髪は頭のポリゴンをコピーしたり手動で地道に作るのが定番ですが、modo13.1以降であればCurve Sweepを使うとPolyStrips From Curvesに近いことが出来るので便利かもしれません。

 

ざっくりとした紹介ですが、モデリングの参考になったら嬉しいです。

Tips

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

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

 

壁が壊れる表現

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

サンプルファイル

 

煙のない画像。

 

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

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

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

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

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

 

地面が崩れる表現

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

サンプルファイル

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

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

 

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

 

参考

Tips

modoのプロシージャル頂点マップ

Foundryのフォーラムで面白いスレッドを見かけたので紹介します。

「Vertexmaps In The Mix」はmodo 14で追加されたプロシージャル頂点マップ活用法を共有しようというスレッドで、アニメーションからレンダリングまで幅広い活用方法が紹介されてます。
https://community.foundry.com/discuss/topic/151806/vertexmaps-in-the-mix?mode=Post&postID=1196476#1196476

スレッドでは様々なサンプルファイルが公開されてます。ファイルが公開されてないものから面白そうな物をまねしてみました。サンプルファイルを公開しておくので参考にどうぞ。

 

徐々に消えるウェイト

現状はウェイトマップを徐々に消えるような機能がありません。そこでパーティクルを使用して、メッシュとパーティクルが離れるにつれてウェイトが消えるようにするハック技です。

サンプルファイル

パーティクルの距離とウェイトの強さはテクスチャリプリケーターを使用しています。Constantはレイヤーを反転、または値を-100%に設定しないとウェイトが意図したように反映されないようです。理由は不明。

14.0ではウェイトをブラーする機能が搭載されてないため、全体的にウェイトが荒い印象になってしまいます。現在はTracerXにウェイトマップをブラーする機能があります。

 

メッシュのパートによるアニメーション

メッシュのパート(連結されたメッシュ)単位でウェイトを設定してアニメーションする方法です。

サンプルファイル

Falloff Operatorのポイントパートを使用して、Boxごとに0~100%のウェイトを適用します。ウェイト位置のアニメーションはmodo 13.2で追加されたグラディエントノードを使用して、Falloff OperatorのグラデーションをGradient Offsetを使用してアニメーションしてます。

 

プッシュデフォーマを使ったバージョン。上の内容と同じです。

サンプルファイル

Falloff Operatorが思いのほか便利だと気がつきました。最初のサンプルではトランスフォームデフォーマを使用しましたが、モーフマップを使用しておなじような表現を作ることもできます。

Falloff Operatorはジオメトリ情報を元にウェイト値を生成できるので、「ポリゴン面積」「ポリゴン平面率」などを使用した標準機能では作れない質感を作れる気がします。

 

 

以下は自分でテストしたものです。

 

広がるウェイト

選択した頂点からウェイトが広がる基本的な使用法です。

サンプルファイル

ソフトボディには「ゴールマップ」という、シミュレーションをおこなわない部分をウェイトで指定する機能があるのですが、残念ながらウェイトのアニメーションには対応してないようです。


クロスシミュレーションする範囲が広がったり、逆にクロスシミュレーションからシミュレーション前の形状に変化させるアニメーションを作りたいときもあるので、将来的にウェイトのアニメーションに対応してくれると嬉しい。

 

波紋

パーティクルでメッシュを変形する使用方法です。基本的には以前紹介したカーブフォールオフでメッシュ変形する方法と同じです。

サンプルファイル

「徐々に消えるウェイト」のようにテクスチャリプリケーターを使用しても同じことができますが、変形する時間を制御するのは、カーブを使用した方が扱いやすいと思います。

 

足跡

雪に足跡が残るような表現です。メッシュが細かいので重い。

サンプルファイル

足跡用のメッシュをアニメーションさせて、Select By Volume を使って足跡メッシュ内に含まれるポリゴンにウェイトを設定してます。

 

エッジウェイトのアニメーション

何に使えばいいのかわからないけど、とりあえずアニメーションしてみた。

サンプルファイル

 

ウェイトマップはデフォーマの変形以外にも、ウェイトマップテクスチャと組み合わせてレンダリングに使用できるのも便利です。UV展開しなくても頂点ペイント感覚でモデルに質感設定することができます。

ウェイトのブラーのようにまだ足りない機能もありますが、プロシージャルでウェイトを設定できるのはアニメーションで大いに役立ちそうです。

 

参考

Tips

3dsMax 2021でPython2を使用する方法

3dsMax 2021ではデフォルトのPythonバージョンが3になりました。しかし、2020以前のバージョンで作成されたPython2のスクリプトを使用したい場合があります。

3dsMax 2021は起動オプション -pythonver 2 を指定するとPython2バージョンのMaxとして使用することができます。ショートカットに起動オプションを追加すると便利だと思います。

 

Pythonの起動バージョンは「Max.log」から確認することができます。

C:\Users\ (ユーザー名) \AppData\Local\Autodesk\3dsMax\2021 - 64bit\JPN\Network

 

参考

http://help.autodesk.com/view/MAXDEV/2021/ENU/?guid=__developer_python_3_support_html

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を使用すると金属の質感がリアルになるのでおすすめです。レザー素材にもいいらしいですよ。

 

テンパーカラー

 

油膜

 

亜鉛メッキ

 

ステンレス

 

追記

modo 14.1からIridescenceなどカスタムマテリアルをグループマスクすることが出来るようになりました。

 

 

参考

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 コマンドのオプションですが、modo 15.1でプレイブラストにオプヨンが追加されて簡単に利用できるようになりました。

 

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ビューポートを開く

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

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

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を使って、ラインを生成する範囲を制御してみるのも面白いかも知れません。

 

参考