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のコマンドを組み合わせて自動化や効率化するのは難しくないんじゃないかと思います。
参考
今日のMODO Tips: マクロファイル内の一部の値を実行時に変えたいときには、マクロ実行時にマクロ名の後ろに追加パラメータを指定すると、ファイル内の%1 %2 %3...の部分が置き換えられて実行される。数字が違うだけのマクロ等をたくさん作る必要がなくなって便利 pic.twitter.com/YKtbY1Jdkr
— クールなびじゅつかん館長 (@TheCoolMuseum) 2018年3月17日