CG 日記

Tips

modoのコマンド範囲でアイテムセレクター作ってみた

前回はカードビューを使用したアイテムセレクターの作り方について書いてみましたが、今回は「コマンド範囲」を使用したアイテムセレクターの作り方について書いてみたいと思います。

■ サンプルファイル

 

コマンド範囲とは

コマンド範囲はmodo 901 で追加された機能で、ポリゴンをクリックしてコマンドを実行する機能です。
「コマンド範囲割り当て」ダイアログを見てわかる通りアイテム選択することを意図した機能ですが、スクリプトやモデリングコマンドを設定して使用することもできます。

これはMayaのリグでよく見かけるコントローラーが数多く表示されるリグと異なり、ドリームワークスのツールピクサーのPrestoのようにアニメーション専用ツールで見かける、アニメーションしたい部分を直感的に選択するための機能を実現するための仕組みと思われます。

 

コマンド範囲の作成方法

ポリゴンを選択して「コマンド範囲割り当て」を実行し、以下のような選択コマンドを設定することでアイテムを選択しています。「名称」はマウスオーバー時のツールチップとして表示されるので、わかりやすい名前を設定するとよいです。簡単ですね。

select.item アイテム名 set

 

コマンド範囲はポリゴンに設定されているので、アイテムを別のシーンに読み込めば、そのままアイテムセレクターとして使用することができます。
セレクター用のアイテムをシーンの邪魔にならない位置に移動して、専用のビューポートを表示すればカードビューのような使い方もできます。

コマンド範囲はポリゴンをそのまま使用できるので、カードビューを使用したアイテムセレクターより手軽に作成することができるんじゃないかと思います。
次回はWebビューを使用したアイテムセレクターの作り方について書いてみたいと思います。

 

参考

Tips

modoのカードビューでアイテムセレクター作ってみた

modoのカードビューを使用したアイテムセレクターを作ってみたので公開したいと思います。

リギングされたモデルをアニメーションする場合に、素早くアイテムを選択するためにグラフィカルなアイテム選択ツールが使用されることが多いと思います。3dsMaxだと「bipedsel」が有名でしょうか。

modoにはアイテム選択ツールのようなUIを作るのに便利な機能がいくつか用意されています。今回はmodoに古くからある機能「カードビュー」を使用してみました。カードビューから select.item コマンドを実行してる単純なものです。自分が便利に使いたいだけなのでCBOX専用です。汎用性は高くないですが必要に応じて書き換えてご使用ください。アイテム名を書き換えればACSでも使えると思います。シンプルなカードビューファイルも置いておくので解析に使ってみてください。

CBOX Selector

 

インストール方法

解凍したファイルを「Configs」フォルダにコピーしてください。

C:\Users\ (ユーザー名) \AppData\Roaming\Luxology\Configs

 

カードビューの使用方法

カードビューの使用方法は「メニュー / レイアウト / パレット / 新規パレット」を実行後に、パレット右上の▼アイコンから「アプリケーション / カードビュー 」を選択します。ギアアイコンまたはタイトルを右クリックで表示するカードビューを選択します。

 

注意点

CBOX用のアイテム選択ツールです。CBOXでデフォルトで設定されるスケルトン名称に準拠しています。「select.item アイテム名 set」のようにアイテム名を使用して選択しているため、シーンにリグが複数ある場合やスケルトン名を変更してる場合はCFG内のアイテム名を書き換える必要があります。

RootItemがないシーンで「ALL」ボタンをクリックするとmodoが落ちます。単体のコマンドでは問題ないのですが、なぜかバッチコマンドを使用すると落ちる。

 

カードビューとは

カードビューは新機能紹介で使用されていたビューポートです。modo 201の頃には搭載されていてmodo 起動時に表示されていました。(modo 10.2からはWebビューに変更されました)

カードはCFGファイルによってカスタマイズ可能で、カードの背景画像の指定や、コマンドを実行可能なクリック領域などを指定することができます。

 

CFGファイル

カードビューはHTMLをテキストエディタで編集するのと同じ感じで作成できます。modoのショーケースのCFGは以下のディレクトリに保存されているので参考になると思います。

C:\Program Files\Foundry\Modo\12.1v1j\extra\scripts\801_Showcase_Kit\configs\showcase_cards.cfg

解析しやすいように単純化したファイルも置いておくのでテンプレートとして使ってください。コマンドはスクリプトなどmodoで実行可能なコマンドは全て実行できるので、モデリング専用のツールパレットなグラフィカルなUIを作成することができます。

CFG解析用サンプルファイル

CFGファイルをテキストエディタで開くと、カードに関する設定が書かれているのがわかると思います。カスタマイズしたい場合は、”Command”の部分を書き換えるところからはじめるといいと思います。

<hash type=”Region” key=”Pelvis”>
<atom type=”Box”>230 346 310 398</atom>
<atom type=”ToolTip”>Pelvis</atom>
<atom type=”Action”>
<atom type=”Command”>select.item Pelvis set</atom>
</atom>

私も手探りで編集してるので正確なことは書けないのですが、編集してて気がついたメモを残しておきます。

  • CFGファイルを変更した場合はMODOを再起動が必要があります。
  • タグの閉じ忘れがあるとカードビューの一覧に表示されなくなります。
  • “Region” はクリック範囲の定義で、その後のKey=は範囲の名前です。
  • “Box”はコマンドを実行するクリック範囲です。矩形の左上と右下の座標(ピクセル数)を指定します。CARD VIEW CREATION TOOLSCard-O-Matic KITを使用するとmodo内でボタンの範囲を設定できて便利です。
  • “ToolTip”はマウスオーバーで表示されるツールチップ用のテキストです。
  • “Command”にはmodoのコマンドを設定します。
  • “Scheme”のkey=はmodo全体で名称が重複しないように設定します。
  • ファイルパスにはresource:、configs:、content:などの短縮パスを設定可能です。リソースフォルダC:\Program Files\Luxology\modo\801_sp2j\resrcresource:

     

    コンフィグフォルダ

    C:\Users\ (ユーザー名) \AppData\Roaming\Luxology\Configs

    configs:

     

    コンテンツフォルダ

    C:\Users\ (ユーザー名) \Documents\Luxology\Content\

    content:

  • openURLでURLをブラウザで開くことができます。openURL “https://www.google.com/”

     

  • “CardName”でカードの切り替えを指定します。
  • “ImagePath”で背景画像を指定します。.png.jpg.tif.psd.tgaなどmodoがロード可能な画像フォーマットが使用可能です。pngで試したところアルファは無視されます。

カードビューを使用するとアイテムセレクターを手軽に作ることができます。ですが注意事項に書いた通り私が公開したものはアイテム名を使用して選択しているので汎用性が低いです。スクリプト書ければ自由度の高いセレクターが作れるんじゃないかと思います。
次回はコマンド範囲を使用したアイテムセレクターについて書いてみたいと思います。

 

参考

modo 202 Card View紹介ビデオ
http://community.thefoundry.co.uk/tv/training/view.aspx?id=76

カードビューの解説

Tips

CARD VIEW CREATION TOOLS

CARD VIEW CREATION TOOLSについて書いてみたいと思います。

CARD VIEW CREATION TOOLSはmodo内でカードビューを作成するためのスクリプトです。modo 201の頃にPerlで書かれたものですが、背景色の設定やカードの切り替えなどカードビューの多くの機能をカバーしています。
modoの仕様が変わってしまったのが原因か、残念ながら701以降はエラーがでてCFGを保存することができません。記事を書くために601を引っ張り出しました。

コマンドの設定にポリゴンの「パートの設定」を使用するため、Card-O-Matic KITに比べてコマンドの編集が少し面倒です。

 

配布元のWebアーカイブ

SenecaさんはDOOMで有名なid Softwareの方で、多くのmodo用スクリプトを公開してましたがサイトが閉鎖されてしまいました。
https://web.archive.org/web/20170504221035/http://www.indigosm.com/modoscripts.htm

再アップURL
https://community.foundry.com/discuss/post/1137398

 

インストール方法

ファイルを解凍して以下のファイルを「Configs」フォルダにコピーします。

  • cardTools.pl
  • cardToolsForm.CFG

C:\Users\ (ユーザー名) \AppData\Roaming\Luxology\Configs

 

使用方法

とりあえず既存のCFGファイルを開くと理解しやすいです。modo 801のショーケースを読み込むとこんな感じになります。

C:\Program Files\Foundry\Modo\12.2v1j\extra\scripts\801_Showcase_Kit\configs\showcase_cards.cfg

CARD VIEW CREATION TOOLSでは1アイテムが1カードとして扱います。ボタンを作るには、ボタンのクリック範囲になる平面ポリゴンを作成して「ポリゴンのパート」にコマンドを設定します。このときカンマ区切りで「Region名,コマンド」のように入力します。Region名はボタンのクリック範囲に使用するKeyです。詳細はCFGファイルを開いて見ると理解しやすいです。

簡単なCard set Settingの説明です。

  • LOAD CFG : 既存のCFGを読む込むことができます。ボタンのクリック範囲をメッシュとしてロードします。パートにもコマンドが入ってるので、ファイルを解析するに便利です。
  • SAVE CFG :シーンのアイテムを参照してCFG出力します。
  • name : カードの名前
  • username : UIのに表示されるタイトル
  • description : カードの説明
  • transition : カード遷移時のフェードの速度。ミリ秒指定
  • scheme :スキームの名前設定
  • color : 背景色の名前設定
  • COLOR SETS : 使用するスキーム名と背景色の指定

 

 CARD VIEW CREATION TOOLSのコマンド

CARD VIEW CREATION TOOLSが独自に使用するコマンドの記述方についてメモっておきます。

  • カードの切り替え
    CARD VIEW CREATION TOOLSでは1アイテムが1カードとして扱われます。LINK=で切り替え先のカード名を指定します。

    Showcase_Design_Image,LINK=M801_Showcase_Design
    Design_To_Showcase_Home,LINK=M801_Showcase_Homepage

  • URLに飛ばす

    NewIn601Link,openURL “http://www.luxology.tv/help.aspx?name=NewIn601.m4v”

  •  (–CARD–)
    特別なパートです。ディスクリプションやスキーム、カードのインデックス番号が記述されてます。

    (–CARD–),QuickLaunch,Start Card,1,set.cardQTbg
    特殊フラグ, 名前,説明/ディスクリプション,カードインデックス1~4,背景色

古いスクリプトですがカードビューの多くの機能に対応しているので、カードビューの仕組みを調べるのに役立つ気がします。

 

参考

https://web.archive.org/web/20170105055017/http://indigosm.com/modo2/CardTools.mov

Tips

Card-O-Matic KIT for modo

Card-O-Matic KIT for modoのについて書いてみたいと思います。

Card-O-Matic KIT for modoはmodo内でカードビューを作成するためのスクリプトです。Pythonで書かれていてmodo 12でも動作します。
CARD VIEW CREATION TOOLSと同じようにmodo内でポリゴンを使用してボタンのクリック範囲指定と、コマンドを設定することができます。既存のCFGを読み込んで編集することはできませんが、ざっくりとボタン配置してコマンド設定するにはCARD VIEW CREATION TOOLSより使い勝手がいいです。

配布先

残念ながらフィードバックが少なかったためキットの配布が終了してしまいました。

https://www.youtube.com/watch?v=HD5Y_HwEzAo

Youtubeのコメントを見と(ここ数日で公開が停止された?)、メールすれば配布していた最後のバージョンを送ってくれるようです。使いたい場合は問い合わせてみてください。
https://www.marc-albrecht.de/

 

Kitのインストール方法

「cardomatic」フォルダを「Scripts」フォルダにコピーします。

C:\Users\ (ユーザー名) \AppData\Roaming\Luxology\Scripts

 

使用方法

Card-O-Maticはツールパレットもカードビューで作られています。カードビューの表示方法は「メニュー / レイアウト / パレット / 新規パレット」を実行後に、パレット右上の▼アイコンから「アプリケーション / カードビュー 」を選択します。ギアアイコンまたはタイトルを右クリックで表示するカードビューを選択します。

画像を読み込んでクリック範囲とコマンドを設定する流れ。

  1. カードビューに使用する画像を「Configs」フォルダに保存する。
  2. 「Prepare Card」をクリックして画像を読み込む。
  3. 平面ポリを作成。これがクリック範囲になる。
  4. 「Put Box」をクリックすると空のアイテムが生成される。
  5.  3で作成されたアイテムにBOXツールで平面を作成する。
  6. 「コマンド」をクリックして、ダイアログにコマンドを入力する。
    カードビューでボタンをクリックしたとき、ここで入力したコマンドが実行されます。コマンドはアイテムのユーザーチャンネルに追加されているので、直接ユーザーチャンネルを編集しても大丈夫です。
    必要なボタンの数だけ「Put Box」でアイテムを作成してコマンドを入力します。
  7. 「Write CFG」をクリックして「Configs」フォルダに保存する。
    保存時に使用したファイル名がカードビューのタイトルになります。

Card-O-Matic KITは細かな設定はできませんが、手軽にカードビューを作成できて便利だと思います。公開が停止されてしまったのが残念です。

Tips

modoのコマンド

modoのコマンドについて書いてみたいと思います。コマンドはmodoの根幹のシステムで、マクロやリギングなど様々な用途で便利に使える仕組みになっています。

 

コマンド

modoではツール切り替え、アイテム選択、ファイルの保存など、ユーザー操作のほとんどが「コマンド」として管理・実行されています。コマンドを実行するときは同時に「引数」がセットになっていて、コマンドの動作を決定しています。コマンドの仕組みがわかるとUIのカスタマイズや、マクロやスクリプトの作成で役立ちます。

コマンドと引数はコマンドラインUIを縦に広げて確認できます。

コマンドと引数の例です。たとえば、移動ツールをアクティブにすると、以下のコマンドが実行されます。

「tool.set」がコマンドで、それ以降の「TransformMove on」が引数です。

引数がない場合は、引数を入力するダイアログが表示されます。コマンドラインの「tool.set」だけ入力してEnterした場合、以下のようにどのツールを実行するか選択するためのダイアログが表示されます。

 

コマンド一覧

modoで実行可能なコマンドはコマンドタブに一覧として表示されます。

コマンドを検索することもできます。

iアイコン をクリックしてコマンドの説明を表示することもできます。

 

ショートカットキーの割り当て

履歴タブでは実行したコマンドにショートカットキーを設定することができます。コマンドの履歴で右クリックメニューから「コマンドにキーを割りあて」を実行すると、キーの割り当てダイアログが表示されます。


割り当てたいキーを押してOKすると、コマンドにショートカットキーが設定されます。

「コマンドにキーを割りあて」は後述のマクロやスクリプトなど、modoで実行されるコマンド全てにキーを設定することができます。

 

マクロ

モデリングやアニメーション作業で、決められたいくつかの操作を繰り返したいときがあります。そんなときmodoは操作を「マクロ」として保存して、同じ操作を繰り返し実行することができて便利です。

例えば選択したポリゴンに決まった量のベベルを実行したいときに使用します。下の画像のでは選択したポリゴンに「放射状」に整列した後、チューブ状に「ベベル」を実行するマクロの作成手順です。

作成したマクロは「Scripts」フォルダに保存すると、コマンドラインに「@マクロ名.LXM」を入力していつでも実行することができます。

C:\Users\ (ユーザー名) \AppData\Roaming\Luxology\Scripts

マクロファイルはテキストエディタで開くことができます。今回作成したベベルマクロを開くと、以下のように「コマンド」と「引数」が処理順で記載されていることがわかります。

#LXMacro#
tool.set xfrm.radialAlign on
#Command Block Begin: ツール有効化
tool.setAttr xfrm.radialAlign centerX 0.0
tool.setAttr xfrm.radialAlign centerY 0.5
tool.setAttr xfrm.radialAlign centerZ 0.0
tool.setAttr xfrm.radialAlign radius 0.3018
tool.setAttr xfrm.radialAlign angle 0.0
tool.setAttr xfrm.radialAlign radHandleX -0.7071
tool.setAttr xfrm.radialAlign radHandleY 0.0
tool.setAttr xfrm.radialAlign radHandleZ -0.7071
#Command Block End: ツール有効化
#Command Block Begin: ツールの修正
tool.setAttr xfrm.radialAlign angle 0.0
tool.setAttr xfrm.radialAlign smooth 50
#Command Block End: ツールの修正
tool.doApply
tool.set poly.bevel on
tool.noChange
#Command Block Begin: ツールの修正
tool.setAttr poly.bevel inset 0.0
tool.setAttr poly.bevel shift 0.285
#Command Block End: ツールの修正
tool.doApply
tool.set poly.bevel off 0
tool.clearTask snap
tool.set *.bevel on
tool.noChange
#Command Block Begin: ツールの修正
tool.setAttr poly.bevel inset 0.109
tool.setAttr poly.bevel shift 0.0
#Command Block End: ツールの修正
tool.doApply
tool.set poly.bevel off 0
tool.clearTask snap
tool.set *.bevel on
tool.noChange
#Command Block Begin: ツールの修正
tool.setAttr poly.bevel inset 0.0
tool.setAttr poly.bevel shift -0.315
#Command Block End: ツールの修正
tool.doApply
tool.set poly.bevel off 0
tool.clearTask snap

「ペイント選択」のようにユーザー入力必要な操作はマクロに記録ることができないので注意が必要です。modoのコマンドを組み合わせると「レンダリング完了後に音声ファイルを再生する」ようなこともできるようになります。

 

マクロ内の値を実行時に変更

マクロ内の一部の値を実行時に変えたいときがあると思います。そんな時はコマンドのマクロ名の後ろに追加パラメータを指定すると、マクロファイル内の %1 %2 %3 … の部分を値に置き換えて実行することができます。

たとえば私の場合は、ループスライスの「位置」を決め打ちにしたカスタムのボタンを使用しています。スライス位置ごとに複数のマクロファイルを用意してもいいのですが、この追加パラメータを指定する方法であればファイルの数が少なくて済みます。

 

バッチコマンド

バッチコマンドは複数のコマンドを順番に実行することができます。複数のコマンドを実行したい場合、以前はマクロかスクリプトを使用する必要がありました。modo 801以降はバッチコマンドを使用して連続してコマンドを実行することができるようになりました。

バッチコマンド記述は以下の通りです。1つめの{}はラベル用の物で、2つめ以降のコマンドが実行されます。コマンドは最大20個実行できます。

cmds.batch {Temp} {item.duplicate false all:true} {item.setType locator locator}

このコマンドはアイテムと同位置にロケータを作成するものです。アイテム選択してコマンド実行すると、選択アイテムを複製してアイテムタイプをロケータに変更します。

 

コマンドとフォーム

modoのUIにはボタンがいくつも並んでいます。ボタン、プルダウンリスト、チェックボックスなどですが、これらのUI要素をmodoでは「フォーム」と呼んでいます。フォームにはコマンドが設定されていて、ボタンをクリックするとコマンドが実行される仕組みになっています。

下の画像はmodoの左側に表示される「移動ツール」のフォームを表示したものです。「フォーム編集」ではボタンラベル、ツールチップ、アイコンなどを編集することができるのがわかると思います。

フォームは「フォーム編集」を使用することで自由に表示方法を編集することができます。modo標準のフォームを編集したり、お気に入りのコマンドを集めたカスタマイズしたツールパレット作成にも使用できます。

 

ワークベンチ

modo 12.2ではより直感的にフォームを編集する機能として「ワークベンチ」が追加されました。

ちなみにZBrushのようにUIのボタンをドラッグアンドドロップで編集する「フォーム編集モード」もあります。

 

 アセンブリ ユーティリティとコマンド範囲

コマンドが使用されるのはUIだけではありません。ロケータのアセンブリタブのユーティリティや、コマンド範囲からもコマンドを実行することができます。

これらの機能は主にリギングでの使用を目的とているため、▼のプリセットボタンにはトランスフォームツールを起動するコマンドが並んでしますが、マクロやスクリプトなど任意のコマンドを登録して使用することができます。

 

まとめ

modoはほとんどのコマンドを確認できるので、UIを自由にカスタマイズしたり、スクリプトが書けなくてもマクロを作ることで作業を効率化できるところが素晴らしいです。コマンド範囲のように、ポリゴンにコマンドを貼り付けることができるというのも面白いですね。

コマンドのような仕組みは比較的一般的なようです。たとえばPhotoshopの「アクション」もコマンドのような仕組です。LightWave、3dsMax、Mayaも同様でツールを実行したときにコマンドを発行して、ユーザーがスクリプトやマクロを作りやすくする仕組みがあります。
しかしLightWaveや3dsMaxなんかは発行されるコマンドが限られているため、マクロやスクリプトを作成しようとするとパラメータにどうアクセスすればいいかわかりにくいという話をよく見ます。Mayaがカスタマイズしやすいと評価されるのは、より細かくコマンドを確認できることや、UIがMELなどスクリプトベースで作られているため動作を解析できるところにあるようです。

私はまったくスクリプトを書くことはできませんが、Pythonの知識があればmodoのコマンドを組み合わせて自動化や効率化するのは難しくないんじゃないかと思います。

 

参考


 

Tips

modoのプロシージャルモデリングでスライスアニメ

modoのプロシージャルモデリングで、ロゴマークなんかがスライスアニメの作り方について書いてみます。

サンプルファイル(12.2)

スケマティックとメッシュオペレーション リストです。

処理はアニメーションを見た通りです。ロゴのモデルを Merge Mesh で読み込み、複数のSliceノードで縦にカットします。Sliceのオプションででは「分割」「断面を埋める」をONにして、カットした部分のポリゴンを生成しています。
Axis Sliceに「分割」「断面を埋める」のオプションがあれば1ノードで済むのですが、オプションがないのでちょっと処理がスマートじゃないです。スライス幅を調整しやすいように演算ノードを使ってスライスの「開始 X」「終了 X」を制御しています。

スライドするアニメーションはmodo 12.2で追加された Jitter ノードを使用します。「リジッド移動」をONにて「範囲 Y」にキーを設定することでスライドさせています。スライドインする範囲を指定するために Boolean も使用してみました。回転のアニメーションはTransform Deformerを使用しています。

 

ちなみにブーリアンでも同じことができます。キューブを配置してブーリアンした方がノードの数を少なくできたかもしれません。

今回はプロシージャルモデリングの再編集可能な状態でアニメーションを作ると、どんな感じになるかのテストでした。詳細はサンプルファイルを見ていただくとわかりますが、プロシージャルモデリングを使用すると再編集のメリットはありますが細かなノードが増えてしまいます。

ロゴはパスの細かさや厚みを再編集できる状態が便利ですが、エッジベベルで面取りしたりアニメーション作業では通常のメッシュアイテムになってる方が作業しやすいように思います。

Maxの「ポリゴン編集モディファイヤ」のようにダイレクトモデリングツールの編集をスタックできるようになれば、だいぶ使いやすくなる気がします。将来のバージョンに期待したいですね。

 

参考

Tips

modoのAxis Sliceでスライスしたエッジを選択する方法

modoのプロシージャルモデリングで、編集したコンポーネントの選択方法を見かけたの書いておきます。

サンプルファイル

プロシージャルな等高線の作り方」でAxis Sliceでスライスしたエッジを選択する方法がないと書きましたが、Assign Selection Setで現在の全てのエッジで選択セットを作成し、Edges to Curves の Select By Selection Set で[反転]をONにすると、新規に生成されたエッジのみ選択できるようです。これは編集後のコンポーネントを直接選択するオプションが無い場合に、他の機能でも使える考え方かも知れません。

Assign Selection Setは発想しだいで便利に使えるんだね。勉強になった!

Tips

modoのリプリケータのランダムタイム変動

modoのリプリケータにある「ランダムタイム変動」について書いてみたいと思います。


リプリケータはアイテムを手軽に複製する機能ですが、アイテムにアニメーションが設定されている場合はアニメーションした状態で複製します。単純にアニメーションを複製すると、すべてのアイテムの動きがそろってしまいます。リプリケータの「ランダムタイム変動」を使用すると、アニメーションにランダムな時間の変化を設定することができます。

アイテムのトランスフォームにアニメーションを設定してる場合は、こんな感じにランダムにずれてアニメーションが再生されます。

 

デフォーマで変形したアイテムはビューポートで「ランダムタイム変動」を確認することができないので注意が必要です。下の画像はスケルトンで円柱を変形した例です。

レンダリングした場合は、正しく「ランダムタイム変動」が効いているのが確認できます。ビューポートで確認できないのがちょっと不便ですね。

アニメーションを特定のフレーム以降から再生したい場合は、「タイムオフセット」を使ってアニメーションの開始フレームを調整するといいです。

「量子化カウント」はアニメーションのパターン数を指定する機能です。例えば3を設定するとランダムなアニメーションのパターンが3種類になります。確認してませんが「量子化カウント」の値が小さい方が、メモリの使用量が少なくなったりするのかな?と思います。

リプリケータを使用してアニメーションしてるモデルを複製する場合は、「ランダムタイム変動」を使用すると手軽にランダム感が設定できて便利ですね。

ちなみにmodo11からリプリケータのパフォーマンスが大幅に向上しましたが、modo11.2~12.2でデフォーマを使用したメッシュに「ランダムタイム変動」を使用すると、ビューポートのアニメーション再生パフォーマンスが悪くなる問題が発生しているようです。レンダリング時のみ「ランダムタイム変動」に値を設定するといいかもしれません。

Tips

modoをカスタマイズした設定の保存方法

modoのバージョン間で、カスタマイズした設定を引き継ぐ方法について書いてみたいと思います。

modo901以前は一年に1度メジャーアップデートが行われていましたが、modo10以降は10.0、10.1、10.2のように1年間に3回アップデートされるポイントリリース方式になりました。これらのマイナーバージョンはそれぞれ初期設定が異なるため、ショートカットや初期設定をカスタマイズしているとマイナーバージョンごとに設定が初期化されてしまい不便です。

modoではユーザーがカスタマイズした設定は個別の.CFGファイルに書き出して管理します。設定をファイルを書き出すのはMaxやLightWaveなど他の3Dソフトと同じですが、modoは特定のフォルダにファイルを入れておくと全てのmodoバージョンから設定を参照してくれるので便利です。

設定ファイルの保存方法

modoのカスタマイズした設定ファイルの保存方法は、ファイルメニューの「ファイル / 設定の書き出し」を使用します。

画像では「一部出力」に「 (全て) 」を使用していますが、「初期設定」や「キーマッピング」など、カテゴリ別に保存することもできます。保存したファイルはmodoの「Configs」フォルダに入れます。

C:\Users\ (ユーザー名) \AppData\Roaming\Luxology\Configs

modoは起動時に自身のバージョンのコンフィグファイル「MODOxxx.CFG」を読み込みます。次に「Configs」フォルダ内のCFGを読み込み、重複している設定については後から読み込んだCFGの設定を使用している気がします。

.CFGファイルはテキストエディタで編集することができます。設定を変更するごとに別々の設定ファイルとして書き出し、必要な部分をコピペしてファイルを維持するといいと思います。

 

modoの初期設定ファイル

modoの初期設定は以下の「Luxology」フォルダにバージョンごと保存されています。

C:\Users\ (ユーザー名) \AppData\Roaming\Luxology

modoの初期設定ファイルを削除すると、インストール直後の状態になります(インストールしてるKitsは除く)。カスタマイズした設定ファイルを「Configs」フォルダに入れたら、modoの初期設定ファイルを一時的に移動してカスタマイズした設定ファイルが正しく読み込めてるかテストしておくと安心です。

 

参考

音声付きで丁寧に解説されています。

Tips

modoのウェイトマップフォールオフ

modo 12.0で追加されたウェイトマップフォールオフについて書いてみたいと思います。
modoのデフォーマはインフルエンスによってどこを変形するか指定します。しかしジェネラルインフルエンスを使用していない Soft Lag や Wrap Influence のようなデフォーマはウェイトマップを使用して変形を制御することができませんでした。

ウェイトマップフォールオフを使用すると、これまでウェイトップに対応していなかったデフォーマでもウェイトマップを使用して変形を制御できるようになります。Soft Lagと組み合わせるとメッシュの一部だけ揺らすことができるようになるので、キャラクターの一部を揺らす擬似的なマッスルなんかに使えるんじゃないかと思います。

 

Soft Lagはウェイトマップの解釈が少し独特なようです。ウェイト値0の頂点は変形しませんが、ウェイト値が0以上の頂点はソフトラグの「強さ」が変わって見えます。単純にマスクしてくれた方が使いやすいんですけどね。

 

需要があるかわかりませんが、モーフもウェイトマップを使用して変形する範囲をマスクすることができます。

Locatorの位置Xが正数/負数かを条件式の「A は B より小さい」を使用してリグっぽくしてます。
ウェイトマップを切り替えはString Switchノードを使用します。String Switchは「入力」チャンネルにリンクされた順番で文字列を出力するので、ユーザーチャンネルに文字列チャンネルを追加してウェイトマップ名を設定し、String Switchの「入力」チャンネルにリンクしています。

これまではウェイトマップを使用できない一部デフォーマの使い勝手に不満がありましたが、ウェイトマップフォールオフのおかげで不満が解消されそうです。

Tips

modoでプロシージャルな等高線の作り方

modoのプロシージャルモデリング機能を使用した、オブジェクトの等高線のような表現方法について書いてみたいと思います。

プロシージャルモデリングとモデリング機能のように呼ばれていますが、modoのプロシージャルモデリングは自由度が高いので、アニメーション作成でも便利に使うことができます。例えば入力データに依存しないアセンブリやエフェクトを作成することができます。このサンプルファイルでは、好きなメッシュをMerge Meshにリンクすると等高線のようなカーブを生成します。

サンプルファイル(12.2以降)

 

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

処理は簡単です。プロシージャルモデリングのAxis Drillでスライスしてエッジを作成、Edges to Curves でエッジからカーブを作成しています。レンダリングは「カーブをレンダリング」機能を使用してます。

本当は等間隔でエッジを作るにはAxis DrillよりAxis Sliceを使うのがスマートです。Curve Slice、Slice Effector、Pen Slice、Curve Sliceというスライス関連のノードがありますが、Axis Sliceには「エッジ選択セット」を作成する機能がないため、スライスしたエッジを選択する手段がありませんでした。しかたがないのでArrayで平面を複製してスライス専用のメッシュとして使用しました。(2018/12/11追記、Assign Selection Setで追加したエッジのみ選択する方法を見つけました

Merge Meshes でメッシュの入力を分けてるのは好みの問題です。アニメーションしているメッシュにノードをまとめることもできますが、メッシュオペレータは処理が重いので、分けたほうが表示をオンとオフで切り替えるのが簡単です。処理をライブラリ化して使い回したい場合にも便利だと思います。

テクスチャでも似た感じのことができると思いますが、メッシュをスケールしたときに、均一な太さの線にならないんじゃないかな?という気がします。

 

メッシュ入れ替えた例。いちど処理を作ってしまえば再利用できるのがいいですね。

ダイレクトモデリング機能でも同じようにエッジからカーブを作ることができますが、プロシージャルモデリング機能では自動的に等間隔のカーブを作ることができます。しかもアニメーションしているメッシュを使用できるというのが、プロシージャルモデリングの魅力ですね。

 

参考

Tips

modoのカーブプローブでアニメーション制御

前回のフォールオフプローブの続きで、カーブプローブを使用したアニメーション制御について書いてみたいと思います。

カーブプローブはカーブとアイテムの「距離」や「パーセンテージ」を抽出して、他のチャンネルで使用することができるようにするノードです。このカーブプローブとリプリケータを使用すると、カーブの特定の位置にあるアイテムを制御することができます。

例えばモーショングラフィックでよく見かける、オブジェクトがシーケンシャルに組み上がるようなアニメーションを作ることができるようになります。

サンプルファイル

 

カーブプローブを使用したアニメーション制御

簡単にテストしたところ、カーブプローブとリプリケータを使用して制御できるのは表示の「可視」、「ローカル」「ワールド位置」「ワールド回転」「ワールドスケール」のような、リプリケータの機能が使用しているチャンネルのみのようです。

 

可視の制御

見てわかりやすい、アイテムの「可視」の制御例です。

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

サンプルファイルがあるので、ザックリした解説です。

  1. カーブを作成してCurve Probeノードにリンクします。
  2. 別のメッシュにプロシージャルモデリングのCurve Rebuildノードを追加して、カーブをリンクします。
  3. Curve Rebuildしたメッシュは Replicator の「パーティクルソース」にリンクします。
  4. Replicatorの「原型となるアイテム」にはメッシュのない空のアイテムを指定して「子のアイテムを含む」をONに設定するのがポイントです。空のアイテムにペアレントしたアイテムがReplicatorによって複製されます。
  5. LocatorはユーザーチャンネルにControllerというパーセンテージ型のチャンネルを追加し、アニメーションのタイミング制御用のチャンネルとして利用します。
  6. 減算ノードを作成して Controllerの値から、Curve Probeの「パーセンテージ」を引きます。
  7. 減算ノードの出力をRelationshipノードを使用して値をリマップします。
  8. Relationshipノードの出力をアイテムの「表示属性」チャンネルにリンクします。

「表示属性」はプロパティでは「可視」と表示されます。modoはチャンネルタイプがリストの場合、0からの数字でリストの項目を制御できます。Relationshipを使用したリマップの値が2と1のリニアカーブなのは、「可視」が「いいえ」の2、「はい」の1に切り替えてるからです。


modoのカーブ関連の機能はあまり使いやすいとは言えませんでしたが、徐々に強化されて12.1のCurve Rebuild はだいぶ使いやすい状態になってる気がします。

 

位置の制御

基本的には「可視」と同じです。Relationshipノードの出力をアイテムの「ローカル」チャンネルにリンクすることで位置を制御しています。Relationshipと「ローカル」の間にMatrix Composeノードを使用しているのは、「ローカル」がマトリクスチャンネルだからです。位置のマトリクスを出力したいので、Matrix Composeのマトリクスタイプを「位置」にします。

 

回転の制御

回転のマトリクスを出力したいので、Matrix From Eulerを使用します。

 

スケールの制御

スケールのマトリクスを出力したいので、Matrix Composeのマトリクスタイプを「スケール」にします。

今回参考にしたmodo 801のCurve Probeの紹介ムービーでは「ワールドスケール」を使用していますが、「ローカル」がお勧めです。「ローカル」を使用すると Replicator の「ばらつき」にあるランダム系パラメータを使用してランダムさを加えることができるからです。「ワールドスケール」を使用するとマトリクスの計算順の関係で、Replicator のランダム系のパラメータを上書きしてしまいます。

 

 

ランスフォームを制御

Matrix Compose ノードを使用して位置、回転、スケールを「ローカル」にリンクする方法です。

Matrix Composeはチャンネルをリンクする順で計算するので、スケール、回転、位置の順番でリンクします。リンクする順番が違うとアイテムの位置が変わります。この計算順は座標変換の数学的な問題らしい。

 

カーブプローブを使用したアニメーション制御

上で紹介した方法でも十分アニメーションを制御できると思いますが、普通にアイテムにキーを設定して動かしたものを制御する方法について紹介したいと思います。方法は単純でTime Offset:Matrix ノードを使用します。

まずは普通にアイテムのトランスフォームにキーを設定してアニメーションを作成します。

あとは、アニメーションを設定した各アイテムの「ローカル」チャンネルをTime Offset:Matrixで循環させ、Curve Probeの「パーセンテージ」をTime Offseの「タイム」に入力すると、個々のアニメーションをオフセットできるようになります。

Time Offseは数が多くなるとアニメーションの再生に負荷がかかるようです。ハンバーガーを構成する6アイテムくらいなら問題ありませんが、ハンバーガー、ポテト、ドリンクの計23個のアイテムにTime Offseを設定したら、そこそこ重くなりました。12.1で追加された Driven Action を使って制御できたら便利だなと思ってテストしましたが、Driven Action では上手く行かなかったです。

ちなみにTime Offseはリンクしたらたまたま動いた感じで、正直なところCurve Probeの「パーセンテージ」が出力してる値がよくわからないです。出力先が「タイム」チャンネルの時だけアニメーションに関する何かが出力されてる気がします。上のスケマティックではCurve Probeの「パーセンテージ」を適当な値で割ってアニメーションの再生タイミングを遅くしようとしてますが、なぜかカーブの始点から終点に向けて徐々にアニメーションの再生間隔が遅くなっていきます。

 

簡単にアニメーションを設定するとこんな感じです。それっぽいんじゃないかと思います。

 

カーブプローブとリプリケータを使用すると、modoでもモーショングラフィック的なアニメーションを手続き的に作ることができたのは驚きですね。ノードを理解できれば、もっといろんな表現ができそうです。

 

参考

modo 801リリース時に公開された草のツルの成長アニメーションと、成長に合わせて葉が生えるチュートリアル動画です。木とかも作れそう。

Tips

modoのフォールオフ プローブでパーティクルを制御

フォールオフプローブでパーティクルを制御する方法について書いてみます。
modoにはカーブプローブやフォールオフプローブという、カーブや3D空間の位置を利用してリギングするための便利ノードが搭載されています。特にフォールオフプローブは位置を利用して大量のパーティクルをシーケンシャルに制御できるので、モーショングラフィックなんかで便利に使えます。

フォールオフプローブを使用すると、以下の画像のようにフォールオフの影響範囲内のパーティクルを制御することができるようになります。

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

Particle Operator に「位置」を追加して、Falloff Probe の「位置」にリンクします。Falloff Probe の「出力」をParticle Operatorの「速度」や「サイズ」にリンクすると、フォールオフ内のパーティクルを制御することができるようになります。
Radial Falloff 内のパーティクルは Channel Waveformを使用して「速度 Y」を制御して上下移動させています。また Linear Falloff と Relationshipを使用して、下から上にかけてパーティクルのサイズが小さくなるように設定しています。

パーティクルは Particle Generator を使用して等間隔にパーティクルを発生させてます。Source Emitterの「パルス」を設定することで、 Particle Generator の1頂点から1パーティクルだけ発生するように設定してます。
プリミティブのCubeをそのまま使用しているので、シーンのサイズが100mほどあります。Channel Waveformの「振幅」の値が大きいのはこのためです。

 

フォールオフは3D空間でアバウトに影響範囲を指定できるのが便利なため、バージョンアップのたびにフォールオフチャンネルが追加されたノードが増えています。代表的なところだとメッシュの変形、デフォーマのインフルエンス、チャンネルモディファイヤ、フォース、パーティクル モディファイヤ、テクスチャ、プロシージャルモデリングなど、多くのノードでフォールオフを使用することができるようになってます。

 

パーティクルの上下移動程度であればフォースにフォールオフを設定しても同じようなことができるのですが、少し複雑な制御にフォールオフを使用したい場合に、どんな感じでノードを組めばいいのか忘れがちだったのでフォールオフプローブの使い方の記事を書いてみました。

ちなみに、当初は Channel Waveform の「オフセット」をアニメーションさせる予定でしたが、「オフセット」はフォールオフの外側にも影響がでてしまいました。CSV Point Cacheでパーティクルのキャッシュを作成して、カメラをパーティクルコンストレイントで動いていないパーティクルにくっつければフォールオフ内だけ動いて見えるようにレンダリングすることもできます。

 

質感の設定はGradientを使用しています。入力パラメータで「ロケータまでの距離Y方向の距離(オブジェクト空間)」を使用して上下方向の色と、「ロケータまでの距離」を使用してRadial Falloffの距離で「ルミナンス色」と「ルミナンス量」を制御してます。

単純なシーンですが、modoのレンダリング力のおかげでそれっぽく見えるんじゃないかと思います。

 

Tips

AEでアニメ風の波打ちぎわの作り方

水着回に欠かせないアニメ風の「波打ちぎわ」の作り方について書いてみたいと思います。

海の記号としてよく見る気がしますが、それほど重要な要素でないためかアップのカット以外では止め絵が多いように思います。最近だと「ISLAND」の波がいい感じでしたね。
CGはじめたての頃は動く波打ちぎわを作りたかったけど難しかった気がするので、こんな感じで作るとこんな絵になるよ。という感じの参考になればいいなと思います。

波打ちぎわの作る工程は大まかに3工程です。

  1. 波打ちぎわの素材を作る(白波の素材、波で砂浜がぬれる素材、波のマスク素材)
  2. 波のように動かす
  3.  波を配置する

それでは行程ごとに解説してみたいと思います。

 

波打ちぎわの素材を作る

波打ちぎわの要素、素材を作ります。
波打ちぎわを絵として思い浮かべたとき、構成する要素として欲しいのは以下の4種類くらいでしょうか。欲しい表現によってもっと多くなると思います。

  • 白波
  • 波で砂浜がぬれる
  • 波のマスク素材
  • 背景 (砂浜。海)

それでは要素をAfterEffectsで作っていきます。

 

白波1

よせては返す白波を作ります。

適当に平面を作成して水平にパーティクルを発生させます。パーティクルは「Particular」を使用しています。EmitterのTypeは横長のBoxで、Size Over Life と Opacity Over Life で時間経過と共にパーティクルを小さくして消しています。波全体の消え方を制御するためにパーティクルの数と、サイズにキーを設定してます。
パーティクルはGravityで下に落ちる単純な設定ですが、PhysicsのTurbulence FieldのOffsetにキーを設定して波っぽい揺らぎを加えてます。

後の工程で波の移動アニメーションを6秒にしたので、2秒15フレを中心にキーを設定しています。ちなみに緑色の部分は透明で、コンポジッションの背景色です。

念のためParticularの変更したパラメータも乗せておきます。パーティクルがそれっぽく見えるかはレイヤーの移動距離など相対的ものなので、シーンの作りに応じて調整する必要があります。
AfterEffectsはレイヤー選択して U キー2回押すと、デフォルト値から変更されたパラメータだけ表示できて便利です。

 

ちなみにエミッターの位置をアニメーションする方法も試したましたが、白波の密度が薄くなってしまうのと、引き波の動きがレイヤーを移動した方が好みの感じに仕上げることができました。

 

白波2

手描きの波にあるような記号的な白波も作ります。

平面に「タービュレントノイズ」を適用して、フラクタルの種類を「にじみ」にして微調整します。「展開」にキーを設定してノイズをアニメーションさせます。次に「レベル」を適用してコントラストを上げて線のように設定します。ヒストグラムにキーを設定して線の幅をアニメーションさせています。
色の白い部分以外は透明にしたいので、ノイズレイヤーの下に白平面を作成して「ルミナンスキー マッド」に設定します。最後にマスクを使用して上から下にかけて透明になるようにしました。

 

白波3

白波1と白波2を使用して波が動くアニメーションを作成します。

白波の素材の上に「調整レイヤー」を追加し「メッシュワープ」でアニメーションします。メッシュを波っぽくギザギザにしてしますが、アニメーションの途中で直線的になりすぎない方がいい感じに仕上がると思います。
白波2にはマスクを追加して、波模様があらわれるタイミングを調節しています。

 

波で砂浜がぬれる

砂浜がぬれたとき用の素材を作ります。

黒い平面を作成して 白波3で作った「メッシュワープ」のアニメーション設定済みの「調整レイヤー」をコピーします。
砂浜のぬれた感じをだすために「ブラー (滑らか) 」で少しぼかします。
レイヤーは「不透明度」をアニメーションさせて徐々に透明にします。砂がぬれた後に、水が浸透してちょっと乾いて見せるためです。

 

波のマスク素材

波に水の色をつけるためのマスク素材を作ります。

黒い平面を作成して 白波3で作った「メッシュワープ」のアニメーション設定済みの「調整レイヤー」をコピーします。
水の深さをだすために「ブラー (滑らか) 」で大きめにぼかします。ブラーを大きめに設定したぶん、レイヤーの位置を下にずらします。

 

波を動かす

波打ちぎわの素材をアニメーションさせます。

波のアニメーション

寄せ波と引き波のアニメーションを設定します。

白波3のコンポジッションの「位置」を上下に移動するようにキーを設定します。波の振幅は全体で6秒。0~2.15秒で波がピークに達し、残り3.15秒で波がゆっくり引いていくアニメーションにしました。キーはイージーイーズを使ってイーズイン/イーズアウトするようにしています。
波をリピートさせたいので、アニメーションを設定したレイヤーを複製して、波が連続して見えるようにレイヤーの再生タイミングをオフセットします。

今回は波の素材が1種類のため昔のゲーム(ICOとかの時代)のように波がクロスフェードするような設定にしていますが、実際に波を観察すると「寄せ波」と「引き波」がぶつかって寄せ波の距離が「長い」と「短い」を繰り返したりします。もう少しリアルな波を作りたい場合は、寄せ波と引き波がぶつかる素材を入れるといいと思います。

この画像ではコンポジッションの高さが素材と同じ高さですが、もっと高く設定すればよかった。高さが足りなかったせいで最終的な絵の波の発生位置が近すぎてます。。。

 

砂浜がぬれるアニメーション

波で砂浜がぬれる素材をアニメーションします。

波のアニメーションから位置のキーをコピーします。 波のアニメーションと違い、波のピーク位置で停止させます。

 

波のマスクアニメーション

波のマスク素材をアニメーションします。

波のアニメーションから位置のキーをコピーします。
引き波のときに水位が一定の位置から下がって欲しくないので、黒いレイヤーを追加して波形にマスクを作成しています。

 

波を配置する

アニメーションさせた素材を背景に配置します。

アニメーションさせたコンポジッションを3Dレイヤーにして海岸線に見えるように配置しました。作った素材はそのまま順番に重ねています。白波の素材を複製して、白波の影を落としてみました。背景描くの面倒だったので、砂浜と海はグラデーションした平面です。

 

作りは簡単ですが、アニメ風の波打ちぎわに見えるんじゃないかと思います。

上の画像は波に水透明度や深さを意識した感じにしてますが、完全に水色にするとよりセルっぽい感じになります。

Tips

modoでマッスルボーンの作り方

チャンネル リレーションシップを使用したリグの応用として、マッスルボーンの作りかたについて書いてみたいと思います。

 

マッスルボーンとは

ボーン(スケルトン)を使用して筋肉の伸縮を表現するリグのことです。デフォーマやシミュレーションで筋肉を揺らしたりする表現が高コストだった時代に、簡易的に筋肉表現をおこなうために利用されていました。今でもリグのデモリールを見ると、肩の変形制御用に伸縮するスケルトンを見かけることがあります。

 

マッスルボーンの作り方

スケルトンを使用する普通のマッスルボーンはチャンネルリレーションシップで簡単に作れるので、今回はこれまで紹介したセットアップの基本機能を組み合わせながら、フォールオフを使用した編集が手軽にできるマッスルボーンを作ってみました。

セットアップモードに入るとフォールオフが表示され、セットアップモード内のフォールオフの位置のメッシュを伸縮します。ウェイトマップを使用せずに変形してるところ面白いんじゃないかと思います。

サンプルファイル

スケマティックはこんな感じで単純です。スケマティックの左から右に解説してみます。

  1. 上腕と手のスケルトンの「ワールド位置」をMeasure Distanceノードに繋いで、アイテム間の距離を求めます。
  2. Measure Distanceの「距離出力」をRelationship ノードに接続してアイテムを制御します。
  3.  Relationshipの「出力」をRadial Falloffの「位置Z」と「スケールY/Z」に接続して、距離に応じてスケールするように設定します。位置はトランスフォームゼロで追加されるトランスフォームアイテムに接続しているので、セットアップモードではマスタートランスフォームで位置の編集ができます。
    フォールオフはデフォーマやダイナミクスのフォースを制御するアイテムのような印象がありますが、単体でデフォーマとして使用することができます。「セットアップ使用」というセットアップモードでアイテム位置を使用して変形する機能があり、この機能を使用することでセットアップモードのフォールオフ位置に変形を加えることができます。
    「セットアップ使用」を使うので、Radial Falloffはスケルトンの親子関係と関係ない構造になっています。スケルトン変形とフォールオフの変形は「デフォーマリスト」の順番で計算されます。このサンプルではフォールオフの変形後にスケルトンの変形を加えています。セットアップモードでの表示の切り替えは、Radial Falloffの「可視」チャンネルにセットアップ静止値を設定することで切り替えています。

Measure Distanceノードの変わりに Measure Angleノードを使用して前腕の角度を使う方法もありますが、人間の腕や脚のように3関節であれば距離を使用することもできますよ。という感じのサンプルにしてみました。
単純に伸縮する筋肉表現したい場合は「スケルトン角度でモーフを制御する方法」のようにモーフを使用して表現することもできます。どの方法を使用するかは好みの問題ですね。

 

LightWaveのボーンには手軽に力こぶを発生させる「筋肉の発生」という専用機能が搭載されていました。ソフトを覚えはじめの頃に1度だけさわっただけですが、変形形状を指定するような設定があれば便利な機能になったのかもなと思います。