読者です 読者をやめる 読者になる 読者になる

Ueta CG Tech (blog)

Maya・MotionBuilderツール開発/ゲーム開発支援/映像制作支援/各種テクニカルスタッフ代行

vim を Maya のスクリプトエディタの代わりにする vimScript

vimで書いたスクリプトをMayaで即実行するためのカスタムコマンドです。
vimScriptの勉強の一環で作ってみました。
(vimScriptと言いつつほとんどpythonです!)

windows でしか確認していませんのでmaclinuxでは動かない可能性大です。また、vimの設定によって動かない場合があります。

便利ポイント

  • 保存しなくても実行できる。
  • ビジュアルモードで選択した任意の行を実行できる。
  • エラーログを vim で受け取れる。(日本語対応)

以下のコードを vimrc 等にコピペしておき、コマンド「:Toma」を入力すると実行できます。

utatsuya / SendToMaya.vim

【Maya】リガーのためのQuaternion(オイラー角回転順序の変換)

前回に続きQuaternionノードの便利な使い方をご紹介してみたいと思います。

早速ですが最終的な結果を短い動画にしました。

まったく同じ回転をしているオブジェクトが2つあると思います。

動画の中の2つのオブジェクトは階層もオイラー角の回転順序も異なります。 左側はソースオブジェクトです。右側はソースオブジェクトの回転が変換されて動いているオブジェクトです。
動画ではわかりませんが親階層もあり、その親階層の回転もバラバラです。

動画の結果を見て、
「Orient/Parentコンストレイントでも同じことができるんじゃ・・?」
と思った方がいらっしゃるかもしれません。
そのとおりです。コンストレイントを使っても解決できます。
できるんですが、コンストレイントを使わずに同様の結果を得たいことってありませんか?ありますよね?
わざわざノードを組まず、計算式だけで結果が知りたいときとか。ありますよね!?

f:id:ue_ta:20150314183301p:plain

実は、たいしたことをしていません。

「回転の表現方法をQuaternionにしてからオイラーに戻す」

これだけです。

そもそも回転順序というのはオイラー角表現だけのものですから、別の表現方法に変えてしまえばなんてことはないということです。

とても便利に使えますね。

今回はこれで以上になります。

MayaのQuaternionノードを使ってみよう(ベクトルの回転)

Mayaのプラグインマネージャーに quatNodes.mll というのを見かけたことがありませんでしょうか。
私は、この記事投稿時点で Maya2014 を使用しておりますが、2~3つぐらい前のバージョンから追加されていた気がします。存在は知っていても使ったことがある人はあまりいないんじゃないかなと思います。
というわけで今回はこのクォータニオン系のノードを使ってみようと思います。

計算式の参考にさせて頂いたサイト様

やろうとしていることは「あるベクトルを回転させる」です。

画像では、赤い球の位置と立方体の回転を与えて、青い球の位置を求めています。

f:id:ue_ta:20150213000826p:plain

ノードグラフは以下のようになりました。

先ほどのサイトの中の 「★こうすれば四元数で3次元の回転が計算できる」の部分の式を参考にノードを組んでいます。

f:id:ue_ta:20150213000752p:plain

(quatProdノードはクォータニオンの掛け算ノードです)

赤い球の位置ベクトルをそのままクォータニオン虚数部(XYZ)に渡して、立方体の回転クォータニオンとそれの共役四元数虚数部の符号反転)を掛け合わせるというシンプルな計算です。
計算結果のクォータニオン虚数部が目的の位置ベクトルになっているというのがなんとも不思議といいますか面白いなと思いました。

とても小さな小さな使用例なので、お役に立つんだか立たないんだかわかりませんが、こういう風にも使えるんだなーぐらいに思っていただければということで終わりにしたいと思います。以上です。

【Maya】PySideやPyQtで作ったツールのテキスト入力欄にうまくコピペできない問題

タイトルのまんまなのですが、つまりどういうことなのか、画像で説明いたします。

f:id:ue_ta:20150131170742p:plain

フォーカスが外れたことに気がつかないまま数値や文字列などをコピペしちゃうと、 Mayaに変なオブジェクトが追加されてしまいます。 (おそらく、昔コピーしたなんらかのノードとかです)

私は、この現象に対して、今までは KeyPressEvent をオーバーライドしたりして対応したつもりでいましたが、どうやら勘違いだったようです。

正しい(?)解決策がリリースノートにありましたのでご紹介いたします。

http://download.autodesk.com/us/maya/pdfs/2014/Maya2014_Readme_jpn.html

[MAYA-20292]
Need option to prevent hotkeys from giving focus to panels under the current window in focus
Set MAYA_FORCE_PANEL_FOCUS to 0 so that when you have a Maya or Qt window over another window with a model panel (or a window such as the Outliner, Graph Editor, or any panel under Panels > Panel), hitting the Shift key does not cause the model panel's window to steal focus.

The default value of this variable is 1.

When this environment variable is set to 0, clicking a hotkey only affects the workspace that has focus. If you want to use the hotkey with a different workspace, you may need to click on the workspace to bring focus to that area before your hotkey takes effect.

環境変数を設定するだけで意図する動作になりました。

set MAYA_FORCE_PANEL_FOCUS=0

ただ、ショートカットキーの影響がフォーカスされているワークスペース(ウインドウ?)に限定される?というのがいまいち再現できません。

たとえばフローティングのアウトライナにフォーカスした状態で、ショートカット[Alt+.]「次のフレームへ移動」を押すと正しく動作します。問題なさそうですが、念のためご自身の環境でテストしていただければと思います。

Notepad++をMayaのスクリプトエディタにするプラグイン NppMaya

Mayaのスクリプトエディタの代わりとして、さくっと簡単に使える外部エディタが欲しいという方向けです。
デバッガを使いたいときはWinpdbなどを併用してください。

Notepad++がどうしても使いたいんだという方がいらっしゃればぜひお試しください。
とても簡単に使えるので便利です!

ダウンロードリンク
NppMaya.zip version1.0.0 20141206

f:id:ue_ta:20141207004919j:plain

プラグインのインストール方法

zipを解凍するとNppMaya.dllがあるので
notepad++のインストールパス\Plugins\の中に入れてください。

使い方

1. Maya側でポートを開放しておきます。

import maya.cmds as cmds
# ポートを開く
cmds.commandPort(n=':8888', eo=False, nr=False, stp='python')
# ポートを閉じる
cmds.commandPort(n=':8888', cl=True)

2. Notepad++で実行する。(範囲選択して実行。または非選択状態で実行)

注意点

  • Notepad++の初期設定では、Ctrl+Enterには別のショートカットが割り当てられているので解除しておいてください。もしくは別のショートカットキーを割り当ててください。

  • mel 非対応。今後対応するかもしれません。

その他詳しくは README.txt をご確認ください。

お問い合わせ

請負の開発案件から、一時的なテクニカルスタッフの補充要員など、幅広く対応いたします。
TA(ゲーム開発)、TD(映像制作)、セットアッパー、リガー、といった役割ごとの対応も可能です。

まずはお気軽にお問い合わせください。
後ほど、Eメール、または、お電話にてご連絡をさせていただきます。

google forms

入力画面へ移動(https)
当方では、お問い合わせフォームに Google Forms を利用しています。
SSL 技術によって暗号化して送信されるので、セキュリティ面で安全です。