Tips

CG 日記

modoで自転車のチェーンを作る

前回のコンストレイントの補正オプションの実用的な使用方法として、自転車のチェーンや戦車の履帯に使えそうなリグの作り方について書いてみます。

modoは複数のアイテムにいちどにコンストレイントを適用できるので、補正オプションと組み合わせると効率的にリグを組むことができて便利です。

チェーンリグ作成手順の解説です。

  1. チェーン用のアイテムとカーブアイテムを用意します。 上の画像では説明を簡略化するためチェーンの赤と青の部分を1アイテムにしてますが、分けた方がよいです。
  2. 「カーブでインスタンス」を使用して、チェーンアイテムをカーブ上に複製します。デフォルトではアイテムの位置にかたよりがあるので、「長さ優先」をONにして均等にします。
  3. 複製したアイテムを全て選択した後に、ようnアイテムを選択しまにして移動がループするようす。modoのコンストレイントのルールとして、最後に選択したアイテムがターゲットになります。
  4. Ctrl キーを押しながらパスコンストレイントを適用します。
    このときコンストレイントの「補正オプション」をONにしておきます。
  5. シーンアイテム(カチンコ)の + ボタンをクリックして、シーン内のパスコンストレイント モディファイヤを全て選択します。
  6. プロパティで「パスパーセンテージ」を編集するとアイテムがパスに沿って移動します。チェーンがループするように「繰り返し」をONに設定します。このままでもアニメーションに使用できますが、毎回モディファイヤを全選択するのは面倒です。そこで全ての「パスパーセンテージ」を1つのチャンネルで操作するためのリグを組みます。
  7. 「パスパーセンテージ」をスケマティックビューにドラッグアンドドロップします。
  8. チェーンを全選択して、Ctrl+G を押して「グループ ロケータ」にまとめます。
  9. グループ ロケータに「ユーザーチャンネル」を追加します。
    「ユーザー名称」には適当にチャンネル名を設定します。ここでは「offset」にしました。チャンネルのタイプは「パーセンテージ」にします。ユーザーチャンネルはユーザーが自由に追加することができるチャンネルです。チャンネルを追加しただけでは意味のあるパラメータではありませんが、他のノードとリンクすることで複数のノードをまとめて制御することができるようになります。Mayaのカスタムアトリビュートと同じような機能ですね。ユーザーチャンネルはどのアイテムにでも自由に追加することができますが、ある程度アイテムと関連性があるほうがよいためグループ ロケータに追加しました。
  10. 「offset」をスケマティックビューにドラッグアンドドロップします。
  11. パスコンストレイント モディファイヤを全選択した後に、プロパティで「パスパーセンテージ」のラベルをクリックしてチャンネルを選択します。スケマティックの「パスパーセンテージ」チェンネルをShiftドラッグします。すると全てのチャンネルから線を引っ張ることができます。
  12. グループ ロケータの「offset」にリンクします。

これで「offset」を1つ編集するだけで、全てのチェーンの位置を制御することができるようになりました。ですがこれだけでは設定が不十分です。

このチェーンアイテムは上下が対称の形状をしているので気がつきにくいですが、カーブの上下でアイテムがフリップしています。一般的にパスコンストレイントのような機能はアイテムの方向を一定に保つことが難しいようです。フリップを回避するために「アップベクトル」を設定します。

アップベクトル設定手順の解説です。

  1. ロケータを追加し「ワールド位置」をスケマティックビューにドラッグアンドドロップします。このロケータがアップベクトル制御用のアイテムになります。
  2. パスコンストレイント モディファイヤを全選択した後にチャンネル ビューポート タブを右クリックして「ビューポート設定 → 結合表示」をONにし、「up」チャンネルをスケマティックビューにドラッグアンドドロップします。「結合表示」は同じタイプのノードが複数選択されたときに、チャンネルをまとめて表示するオプションです。選択中の全ノードの「up」チャンネルを選択するために「結合表示」を使用しています。
  3. 「up」チャンネルをShiftドラッグして、ロケータの「ワールド位置」にリンクします。
  4. フリップしているアイテムのパス コンストレイント モディファイヤを選択して、「ロール」を180°に設定します。
    上の画像ではフリップしているモディファイヤを特定するため、フリップの始点と終点のアイテムを選択してモディファイヤの番号を確認しています。アイテムツリーで F キーを押すこと、選択しているアイテムにリストをスクロールできるので便利です。

これでアニメーションしてもフリップの発生しないチェーンリグの完成です。標準機能だけで手軽にリグが作れるのが便利ですね。

ちなみに静止画用途ならプロシージャルモデリングの「Curve Clone」を使うのが手軽でお勧めです。少し重いですが、カーブの編集や複製する数をいつでも調節できて便利です。
本当は「Curve Clone」でアニメーション用のリグを作れればいいのですが、modo 11.2ではアップベクトルを設定できないのでフリップを回避する手段がないように思います。もっと軽くてフリップしにくい動作してくれたらもっと便利なんですけどね。そのあたりは今後のバージョンアップに期待したいですね。

他の手段としてパスジェネレータで生成した頂点にリプリケータを使う方法も考えましたが、パスに沿わせる部分が上手く行かなかったのであきらめました。

カーブにスプラインデフォーマを適用すると、こんな↓感じの履帯リグも作れるかもしれません。

この戦車のリグを作った Richard Hurrey 氏はPixarで活躍されてるキャラクターモデラー&リガーの方ですが、Foundryからトレーニングビデオをリリースしているmodoのヘビーユーザーでもあります。
この戦車のデータは公開されているので必見です。履帯を複雑な変形に対応するため、履板1つ1つに異なるアップベクトルが設定されてます。他にも細かな制御ができて凄いです。modoはどの程度のリグを構築できるか興味ある方にも参考になるのではないでしょうか。

今回は王道的な方法でチェーンを作ってみました。次はせっかくなのでスプラインデフォーマを使用した昔ながらのチェーンの作り方を書いてみたいと思います。

CG 日記

modoでアニメ風の眼球制御

Twitterでアニメ系キャラで使用する平たい眼球について話題になっていました。方向コンストレイントを使用して眼球を制御したいときは、トランスフォームデフォーマを使用する方法もあるのでご紹介します。
手順は簡単です。球にトランスフォームデフォーマを適用してスケールします。次ぎに球に方向コンストレイントを適用します。

3Dソフトは同じような表現でも複数のアプローチがあります。正解は状況によって変わるので、色々試して好みの方法方を使うのがいいと思います。

 

参考

ちなみに、この眼球の変形はトランスフォーム計算で発生するシアーを利用したものです。シアーについて正確な説明はできないので、詳細を知りたい方は他のサイトを検索してみてください(^^;
ざっくりと説明すると、親子関係にある親アイテムを不均等にスケールした場合、子のアイテムを回転すると斜めにゆがむことをシアーと言います(均等にスケールされている場合はシアーは発生しません)。上の例では回転トランスフォームの順番を変更することで、親子関係を設定せずにシアー変形させています。

シアーは3DCGのトランスフォーム計算で一般的に発生する現象なので、親子関係を設定してスケールと回転できるソフトであれば、どのソフトで同じような目の表現ができます。
この目のような場合は上手く機能しているケースですが、シアーはキャラクターリグのような場合は問題になることが多いので注意が必要です。シアーが問題になるケースとして手にオブジェクトを持たせた状態で、手をスケールした場合はシアーが発生しがちかもしれません。

この現象をはじめて経験したのがLWで、しばらくのあいだLWのバグか何かだと思ってました。

CG 日記

modoのコンストレイント補正オプション

modoの補正オプションについて書いてみます。
補正オプションはコンストレイントを適用するときに、アイテムの見た目の位置や角度を維持してくれる機能です。リギングでコンストレイントを使用するときに知ってると便利です。

補正オプションはセットアップ タブの上のUIメニューに配置されていて、ボタンをONにすると関連するボタンアイコンが切り替わります。

 

補正オプション OFF

コンストレイント先のトランスフォーム(位置、回転、スケール)にそろいます。

 

補正オプション ON

現在のトランスフォームの見た目を維持した状態でコンストレイントすることができます。

動作としてはコンストレイントノードのオフセットに値を入れることで見た目を維持しています。


modo使い始めたときは補正オプション知らなくて不便だーと思ってましたが、補正オプションに気がついてからはコンストレイントが便利に使えてます。初心者トラップな気がするのでデフォルトONにして欲しいですね。
次回は補正オプションを使ってチェーンやキャタピラのようなリグの作り方を書いてみます。

CG 日記

modoのセットアップモード

今回はセットアップモードについて書いてみます。セットアップモードはメッシュ変形(デフォーマ)に欠かせない特殊なシーン状態です。
セットアップモードの概念自体は珍しいものではなく、3Dソフトには何かしら同じような仕組みがあります。他の3Dソフトでは機能が分かれてたりしますが、modoはセットアップモードとしてまとめられてるのが便利です。

 

セットアップモードとは?

セットアップモードはデフォーマやIK計算の基準となるアイテムの「初期位置」を格納する特殊なシーン状態です。

3Dソフトではスケルトン(ボーン)を配置して、スケルトンを移動や回転させることでポリゴンメッシュを変形してアニメーションするのが一般的です。例えばスケルトンを90°回転してメッシュを変形したとき、どの位置からスケルトンが回転したのか基準となる情報が必要になります。この「どの位置?」を格納しているのがセットアップモードです。

セットアップ ボタンを押すとビューポートに黄色の枠が表示されセットアップモードに切り替わります。セットアップモードではデフォーマに関連したアイテムが初期位置に移動します。デフォーマによるメッシュの変形は全て無効になりますが、コンストレイントやIKなどのチャンネルモディファイヤは動作します。

 

セットアップモードのメリット

セットアップモードで便利なのがスケルトンの位置調整です。キャラクターリグを作成してポーズをつけてみたものの、動かしてみたら間接の位置に違和感があることがあります。セットアップ段階ではこの調整が頻繁に発生しますが、modoはセットアップボタンでアニメーションとセットアップモードを行き来しながらスケルトン位置を調整できるので便利です。

3ds MaxだとBipedの「フィギュア モード」や CATの「設定/アニメーションモード切替」と、 スキンモディファイヤの「常に変形」と同じ感じです。LWだと「ボーン編集モード」、MayaのHumanIKだとReference用のスケルトンを「スキンされたジョイントの移動」する感じかな?

 

セットアップモードのアイテム位置

セットアップモードに切り替えたときアイテムの位置や角度が変わります。これはチャンネルに複数の値を格納する仕組みを利用しています。チャンネルに「セットアップ/静止値」を設定すると、セットアップモードで値が切り替わります。

少し複雑そうですが General Influence の「エフェクタ」に接続されているアイテムは、トランスフォーム(移動、回転、スケール)を編集すると自動的に「セットアップ/静止値」が設定されます。この仕様によりデフォーマを使う場合は「セットアップ/静止値」を意識することなくセットアップモードを使用することができます。
バインドしたスケルトン、トランスフォームデフォーマ、スプラインデフォーマ等のロケータはこの仕組みで初期位置が設定されます。

自作のリグを作成する場合は「セットアップ/静止値」の仕組みを理解しておくと便利です。「セットアップ/静止値」は全てのチャンネルに設定できるので、セットアップモードでチャンネルモディファイヤを無効にしたり、「セットアップ/静止値」が設定されているトランスフォームにリグを構築することができるようになります。

セットアップモードの仕組みがわかると、デフォーマを多用するキャラクターリグも構築しやすくなるのではないでしょうか。

CG 日記

modoのトランスフォームアイテム

引き続きチャンネルの基本について書いてみます。
modoの設計思想にはレイヤーという概念が深く根づいています。メッシュレイヤー、シェーダーツリー、アクションレイヤー。今回紹介するトランスフォームアイテムもレイヤーとして動作します。

 

トランスフォームアイテムとは?

トランスフォームアイテムとは「移動」「回転」「スケール」チャンネルのことです。アニメーションやリギングで欠かせないチャンネルですが、modoはこのトランスフォームアイテムを好きな数だけレイヤーのように追加することができます。これはリギングする上でとても便利な仕組みです。
3ds Maxだと「リスト コントローラ」が同じような機能だった気がします。

 

トランスフォームアイテムのメリット

トランスフォームを加算(オフセット)のように使用できます。具体的な例としてはコンストレイントやエクスプレッションで計算された値と、ユーザー操作のトランスフォームを組み合わせることができます。これはリギングでとても便利な機能です。

例えば以下の画像では位置トランスフォームを追加し、 Channel Noise を使用してランダムな動きを加えていますが、アイテムの移動は通常通り移動ツールで操作することができます。

アイテムをロケータにペアレントしても同じ事ができますが、トランスフォームアイテムを使用することでアイテムリストの階層構造が深くならずに済みます。
また modoは ロケータの表示数が多いとビューポートのパフォーマンスが低下するため、ロケータを使用しなくていい場合はトランスフォームアイテムかグループロケータを使用するのがお勧めです。(11.0 からは「アイテム表示 キャッシュ」がおこなわれロケータのアニメーション再生が高速化されているらしい)

 

トランスフォームアイテムの追加方法

チャンネルビューポートで「位置の追加」「回転の追加」「スケールの追加」をクリックするとトランスフォームが追加されます。太字で表示されるのがプライマリのトランスフォームで、トランスフォームツールで動かすために使用されます。

これら複数のトランスフォームアイテムはリストの下から上へ順番に計算されます。詳細は「modoのマトリクス計算順」参照のこと。

modoはアイテム追加時はトランスフォームアイテムがありません。トランスフォームツールで編集したとき自動で追加されます。これは何千ものアイテムが存在するシーンで余計なチャンネルデータを扱わずに済むための仕様で、ファイルのサイズや処理時間を大幅に節約できるようです。この仕様が気にくわない場合は初期設定で変更するこができます。

  • ファイルメニュー / システム / 初期設定 / デフォルト / メッシュアイテム / アイテムトランスフォームの自動作成

 

トランスフォームアイテムの種類

トランスフォームアイテムは「移動」「回転」「スケール」の他にもいくつか種類があります。ピボットを移動や回転したときに追加される「ピボット位置補正」「ピボット回転補正」、XYZの一軸だけスケールした状態で「同位置でペアレント」した場合に追加される「シアー」の全6種類です。

「transform.add」コマンドを使うと好きなトランスフォームアイテムを追加できます。

 

トランスフォームの結合

右クリックメニューの「結合」を使用して、複数のトランスフォームの値を1つのトランスフォームにまとめることができます。

 

トランスフォーム ゼロ

トランスフォームアイテムの仕組みを使用した機能が「ゼロ」です。プロパティのトランスフォームに「ゼロ」というプルダウンがありますが、実はこれはトランスフォームアイテムを追加して「結合」までを自動で処理してくれる便利機能です。

「ゼロ」は LightWave の機能だと「中心点回転記録」と同じです。Mayaだと回転に「トランスフォームのフリーズ」をすると「ジョイント方向」に値が入るようなやつだと思います。たぶん。

例えばキャラクターリグを作る場合、TスタンスやAスタンスでスケルトンを作成して初期姿勢にすると思います。このとき移動や回転に値が入ってると、初期姿勢に戻したい場合はアイテム毎に異なる値を入力しないと初期姿勢に戻すことができません。
ゼロはトランスフォームアイテムに値を格納することで、プライマリのトランスフォーム値を全て 0 にすることができます。

初期姿勢のトランスフォームを全て 0 にしておくと、「リセット」の「全て」をクリックするだけでアイテムを初期姿勢に戻すことができるので便利です。

回転したスケルトンがジンバルロックしている場合も「ゼロ」を実行することで、ジンバルロックしていない状態を初期姿勢にすることができます。FKで操作するアイテムは、スケルトンの位置調節が終わってポーズやアニメーション作成をはじめる前に「ゼロ」を実行しておくと色々便利です。

modoはスケマティックが使いやすく、トランスフォーム関連もリグが組みやすいのがいいですね。

CG 日記

modoのアクションレイヤー

前回に引き続きチャンネルについて書いてみたいと思います。

modoのチャンネルは複数の値を格納することができます。SDKのページを見ると「アクションレイヤー」という仕組みのようです。このアクションレイヤーを使用している代表的な機能が「アクション」「レンダーパス」「セットアップモード」です。
3dsMaxでは「ステートセット」、Mayaでは「アニメーションレイヤ」「レンダーレイヤ」に該当する仕組みです。modo 11.2 では格納された値をブレンドするノンリニアアニメーションエディタのような機能が提供されていないため、シンプルなレイヤーのON/OFFスイッチとしてのみ利用可能です。

「アクション」「レンダーパス」「セットアップモード」と専用に名前がついていると「アクション」はアニメーション専用のように感じるかもしれませんが、仕組みとしては使用するチャンネルは制限されていません。
例えばアクションやセットアップモードでマテリアルの色を変更したり、レンダーパスでアニメーションを切り替えるようなこともできます。セットアップモードでアイテムの表示を切り替えるような使い方は、リギングで便利に使えると思います。

 

アクションレイヤーの階層構造

modoには「アクション」「パス」「セットアップモード」の他にも、いくつかアクションレイヤーが存在します。以下の図はレイヤーの階層構造です。この図はUIから見た動作をまとめたもので、実際の動作とは異なる可能性があります。
マニュアルでは「セットアップアクションステート」「セットアップレベル」「シーンレベル」など断片的に用語や図が出てきますが、残念ながら全体をまとめた解説がありません。

全てのチャンネルのベースとして「初期状態」が存在していて、その上に初期値から変更された値を格納する「Setup」レイヤー、デフォルトでキーを格納する「Scene」レイヤー、一番上にアクション / レンダーパスを格納するレイヤーという構造になっています。アクション / レンダーパスは数を自由に増やすことができます。
チャンネルのレイヤー情報はチャンネルビューポートの「ソース」から確認することができます。


レイヤーの動作は Action / Render Pass レイヤーの値を編集すると、下にある Scene、Setup 、初期状態の値を上書きします。レイヤーで値を変更しないチャンネルは下のレイヤーの値が使用されます。
Scene でキーが作成されているチャンネルを、Action で編集したときは Scene のキーが Action に追加されます。

特殊なレイヤーとして「Edit」があります。「Edit」はテンポラリのようなレイヤーで、ユーザーが編集した値を一時的に格納します。タイムラインの移動、レイヤーの切り替え、キーの作成、「適用」ボタンを押したときなど編集が確定したタイミングで本来のレイヤーに値を反映します。ソースが Edit のときは「破棄」ボタンで編集をキャンセルすることができます。この動作はmodoのダイレクトモデリングツールがアクティブのときは編集や設定の変更をくりかえしテストできるのと同じ仕組みだと思います。

 

アクションレイヤーの種類

各レイヤーについ少し詳しく解説してみたいと思います。

初期状態

アイテムの初期状態です。チャンネルの○アイコンが灰色の状態です。
メッシュ、カメラ、ライト、マテリアルなどアイテムを新規に作成したとき、全てのチャンネルは 初期状態 に置かれます。

 

Setup

パラメータを初期値から変更した場合に値を格納するレイヤーです。

 

セットアップモード

セットアップモードはリギング用の特殊な空間です。セットアップタブのセットアップボタンを押すとビューポートに黄色の枠が表示されセットアップモードに切り替わります。

セットアップモードは他のレイヤーと異なりチャンネルにキーを作成してアニメーションすることはできませんが、チャンネルに「セットアップ/静止値」を設定することができます。
「セットアップ/静止値」はmodoの標準機能だとバインドしたスケルトン、トランスフォームデフォーマ、スプラインデフォーマなどメッシュを変形するために使用するアイテムの初期位置を格納するために使用されています。

「セットアップ/静止値」はセットアップモードでチャンネル右クリックメニューにある「セットアップ/静止値を設定」から設定することができます。「セットアップ/静止値」を設定したチャンネルはセットアップモードのとき○アイコンがライトグレーで表示され、セットアップモード OFF のときはパス同様にライトグリーンのアイコンが表示されます。チャンネルを編集した場合はソースが Scene になります。

 

Scene

デフォルトでキーを格納するレイヤーです。アクター や レンダーパス を使用していいない場合は Scene に値が格納されます。「セットアップ/静止値」が設定されているチャンネルを編集したときも  Scene が使用されます。

 

Action / Render Pass

アクター や レンダーパス で使用されるレイヤーです。パスやアクションに追加されているチャンネルの○アイコンはライトグリーンが表示されます。
アクター や レンダーパス は「グループ」として機能が提供されています。グループの順番や、グループ内のアクター / レンダーパスの順番はグループビューポートのリストで変更することができます。

 

アクションレイヤーの仕組みはこんな感じです。こんなチャンネルの仕組みが modo 601の時点で完成していたなんて驚きですね。

どうしてチャンネルの話を書いてるかと言うと、この仕組みが理解できていないとデフォーマを使用したリグを構築できなからです。特に「セットアップ/静止値」は重要です。
よくある失敗として「セットアップ/静止値」が設定されているチャンネルを、別のチャンネルとリンクするという操作があります。「セットアップ/静止値」をリンクで上書きしてしまうため、セットアップモードでもアイテムの位置が変わってしまいます。
そんなときはリンクするアイテムの位置に「セットアップ/静止値」を設定することで問題を解決する事ができます。チャンネルのリンクだけでなくコンストレイントを使用した場合も同じなので、覚えておくとリギングがはかどるかと思います。

 

参考資料

https://help.thefoundry.co.uk/modo/content/help/pages/rendering/render_passes.html
https://help.thefoundry.co.uk/modo/content/help/pages/animation/channels.html
https://community.foundry.com/discuss/topic/80813/what-exactly-does-apply-to-setup-do?mode=Post&postID=757873
http://modo.sdk.thefoundry.co.uk/wiki/File_Formats#ACTN

CG 日記

modoのチャンネル

チャンネルについて基本的なことを書いてみます。チャンネルはアニメーションやリグを作る場合はもちろんですが、静止画用途でも知ってると便利なことが多いです。

チャンネルとは?

チャンネルとはマニュアルによると「簡単に言えばアイテムのアニメーション可能なアトリビュートのことです」と書かれています。チャンネルビューポートに表示される項目は全てチャンネルなのですが、パラメータ(アトリビュート)の右に○アイコンがついてるものはキーを設定してアニメーション可能なチャンネルです。○アイコンは色でチャンネルの状態をあらわしています。

初期状態

チャンネルは初期値のとき、背景色と同じ灰色で表示されています。

変更状態

値を変更した場合はライトグレーになります。
WEBでプロパティの画像が公開されていた場合や昔のシーンファイルを開いたとき、どのパラメータを変更したのかアイコンを見れば一発でわかるデザインになっています。凄く便利でお気に入りの機能です。

アニメーション

チャンネルは○アイコンをクリックすることでキーを作成することができ、パラメータの値をタイムラインに沿ってアニメーションさせることができます。カレントフレームにキーがある場合は赤色になります。カレント以外のフレームでは緑色になります。

ちなみにキー作成のショートカットはトランスフォームツール起動中、またはチャンネル選択状態で S キーです。チャンネル選択してCtrl+C、Ctrl+Vでキーフレームをコピーペーストすることができて便利です。
作成したキーを全て削除したい場合や初期値に戻したい場合は、パラメータラベル右クリックして「全て除去」を実行します。「キーの除去」はカレントフレームのキーを削除し、キーが1個だけの状態のときは値を残したままキーを削除します。

ドリブン

他のチャンネルから入力されている場合は青色のギア アイコンになります。チャンネルの入力と出力には矢印が表示されます。

アクション/ パス

アクション、レンダーパス機能によってチャンネルに複数の値が格納されているとき、パラメータが初期値から変更がない場合はライトグリーンのアイコンになります。値を編集した場合はライトグレーになります。アニメーションの緑色と少しまぎらわしいですね。

modoで使用頻度の高いチャンネルは以上です。次の記事では1つのチャンネルに複数の値を格納するしくみ「アクション/ パス」について書いてみたいと思います。

CG 日記

modoのアイテムインデックススタイル

modoではアイテムを複製した場合など、アイテム名が同じ場合に自動的に (2) のような連番を追加してくれます。この連番のフォーマットは「初期設定 / デフォルト / アプリケーション 」の「アイテムインデックススタイル」から変更することができます。

この連番表記は他のソフトとFBX形式でデータやり取りする場合に問題になる事があります。
modoと3dsMax間では問題にならないのですが、Mayaはアイテム名に半角スペースなど使用出来ない文字があるためFBXインポート時に自動的に「FBXASCxxx」という文字列に置き換えます。
modo デフォルト設定の場合は、半角スペース と()が「FBXASC032」「FBXASC040」「FBXASC041」のように置き換えられるため、Mayaに読み込んだときにアイテム名が酷いことになります。

Maya のリネーム機能「修正 / 名前を検索して置換」を使用してリネームすることもできますし、フリーのmelもあるようですが、modo側で「アイテムインデックススタイル」を「_2」のようなスタイルに設定しておくと便利です。

CG 日記

modoでUVをEPS形式保存する方法

modoにはテクスチャ作成用の機能として「UVをEPSに書き出す」機能があります。
カメラから見た状態で「ビューから投影」でUV展開することで、ワイヤーフレームレンダリングのようなEPSデータを作る事ができます。デザイン作業でワイヤーフレームが欲しいときに知っておくと、ちょっと便利に使えます。


CG 日記

VDBデータからメッシュを生成する方法


modo 901からOpenVDBファイルを読み込んでレンダリングできるVDBVoxelノードが追加されました。
OpenVDBファイルは煙のようなボリュームデータを保存出来るオープンソースのファイルフォーマットです。元はHoudiniでシミュレーションしたボリュームを他のソフトやレンダラーで使うために作られたフォーマットだった気がします。

VDBVoxelは上の画像左側のようにボリュームをレンダリングすることも出来ますが、画像右側のようにボリュームデータからポリゴンメッシュを生成することができます。ボリュームからメッシュ生成する機能自体はOpenVDBライブラリが提供している物だと思いますが、このVDBVoxelはパーティクルからもメッシュを生成することができるので便利です。

modoにはパーティクルをレンダリングする機能としてBlobノードがありますが、VDBVoxelを使うことでメッシュを粗めに生成してレンダリングを早くしたり、モデリングツールで編集できるようにすることができます。モコモコデフォルメされた雲や木のようなモデルを作るのにも役立つと思います。
Blobと違ってボクセルフィルターでメッシュを滑らかにすることができるのもいい感じです。

パーティクルをBlobでレンダリングした画像。複数のParticle SimulationをまとめるのはParticle Modifierを使います。

パーティクルをVDBVoxelでメッシュ化してレンダリングした画像。

CG 日記

リプリケータをリプリケータで複製

modoにはポイントやポリゴンにオブジェクトを複製して配置するリプリケータという機能があります。リプリケータで配置したオブジェクトは、さらにリプリケータで配置することができます。

ただしビューポートでは正しく表示されないので注意が必要です。
同様にデフォーマでアニメーションさせたオブジェクトをリプリケータで複製した場合に、タイムオフセットがビューポートで確認できないという仕様があります。リプリケータを使ってみた場合は、とりあえずレンダリングしてみるといいです。

将来的にはビューポートで確認できるようにして欲しいですね。

CG 日記

modoのマトリクス計算順

modoのアイテムは幾つかのマトリクス チャンネルを持っています。
3D座標計算の知識があれば理解出来るのかも知れませんが、マニュアルには特に説明がないためよく理解出来てませんでした。
各マトリクスチャンネルについてmodoの開発者のMattさんがコメントしていたのでメモっておきます。
マトリクスの計算順はチャンネルモディファイヤの接続や、値を取り出す場合に知っておきたい情報です。

http://community.foundry.com/discuss/post/1099604

  1. トランスフォームチャンネルは、各トランスフォーム アイテムのトランスフォーム行列に格納される。
  2. トランスフォーム行列はボトムアップから乗算され、ローカル行列に書き込まれる。
  3. ローカル行列に親行列のワールド行列が乗算され、アイテムのワールド行列に書き込まれる。
  4. ワールド行列は、ワールド位置、ワールド回転、ワールドスケール行列に分解される。
CG 日記

ACS2のパフォーマンスを上げる方法


アドバンスドビューポートでACSのパフォーマンスが上がるのに気がつきました。環境は modo 10.2v3 サブディビジョンはOFFです。
はじめデフォルト表示だと6FPS程度ですが、アドバンスド表示に切り替えてしばらくアイテムを動かすと何かをキャッシュしてリグのレスポンスが20FPSまで上がる気がります。
modo 11.1でリグの操作が早くなったと思いましたが、10.2でも早くなったので以前からの仕様のようです。PC環境に依存した問題かもしれませんが、アニメーションを作成する場合はとりあえず表示をデフォルト→アドバンス→デフォルトと切り替えてから作業開始するといいかもしれません。

CG 日記

modoの角度測定ノードで360°測定する方法

modoにはリギングに必要な多くのノードが搭載されています。
ノードの応用例として「条件式」ノードを使用した角度の測定について書いてみたいと思います。
modoでFBIKで制御されたスケルトン角度でモーフを制御する方法」では、Measure Angle ノードを使用してIK制御されたスケルトンの角度を測定しました。

Measure Angle ノードの問題点

Measure Angle ノードの問題点として、3個のオブジェクトの座標を使用して角度を測定するため 0~180°の範囲の角度出力に限定されていることです。ヒジやヒザをIKで制御する場合は、間接の曲がる角度が0~180°の範囲であるため概ね問題になることはありません。
ですが肩や股関節のようにIKの始点となるオブジェクトは360°回転するため、Measure Angle ノード単体では0~360°の範囲を測定できません。

Measure Angle ノードで0~360°の範囲を測定する方法

360°回転するオブジェクトの角度を測定する場合は、条件式ノード と Measure Angle ノードで組み合わせて使用します。

スケマティックの解説です。
Measure Angle ノードはオブジェクトの位置関係で測定する方向が変わってしまうのが問題です。現在どの方向にオブジェクトがいるか判定できれば、0~360°の範囲で角度を測定することができます。
このスケマティックでは緑色と黄色のロケータを2個配置して、Measure Distance ノードを使用してスケルトンがどちらのロケータに近いかで方向を判定しています。

Measure Distance の「距離出力」を 条件式ノードに接続して、操作を「AはBより大きい」に設定しました。
条件式ノードは入力されたチャンネルの値を比較して、接続されたチャンネルの値をそのまま出力したり、任意の値を出力することができるノードです。処理の分岐に使用したりできる便利なノードです。

条件式ノードでは「Trueの場合」を「出力 True 値」に変更し、「True の値」を「1.0」に設定します。
同様に「False の場合」を「出力 False 値」に変更し、「False の値」を「-1.0」に設定します。
この値を Measure Angle の「角度出力」の値と掛けることで、-180°~180°の範囲の角度を測定することができます。

-180°~180° の値でも問題ないのですが、0~360°の範囲のほうがわかりやすい場合は、
最後に180を足すことで値を180オフセットしています。

以上で0~360°の範囲で角度を測定することができました。
modo 901からQuaternion モディファイヤが追加されているので、Quaternionを理解していればもっと便利な方法があるかもしれません。Quaternion覚えたら何か記事を書いてみたいと思います。

CG 日記

modoでワールド回転からローカル角度を計算する方法

IKのようにチャンネルモディファイヤによって制御されているアイテムから、リギングのためローカル座標を取得したいことがあると思います。ローカル角度は「自分のワールド回転と、親オブジェクトの逆行列をかける」と求めることができます。

画像では親アイテム(スケルトン)のWorld RotationをMatrix Invertで逆行列を求めています。
Matrix InvertのOutputを、ローカル角度を求めたいアイテムのWorld RotationとMatrix Composeを使用して掛けます。
Matrix Composeはチャンネルにリンクした順で計算します。(マトリクスの計算はかけ算の順番で結果が変わるので注意が必要です)
最終的にマトリクスをMatrix To Euler を使用してXYZの角度に変換します。

一般的にマトリクスからオイラー変換する場合には複数の解があり、Matrix To Euler ノード1つで3軸分の角度をユーザーが望む形でまるっと出力すのは数学的に難しいらしい。「回転順序」を適切に使用して軸ごとに角度を出力するのがいいみたいです。

測定ノードの Measure Angle で角度を求めることもできます。