myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

Maya | AutoKeyFrame Color

元々Mayaユーザーのデザイナーは今の案件の都合によってSoftimageを使っています。 Softimageユーザとして少しアドバイスしたりしていて、キャラクターのポーズを付ける時にオートキーフレームにした方が楽かもよーと教えたら、Softimageの画面のフチが赤くなったことに驚きました。 これは分かりやすいですね!
Mayaだとオートキーが付いているのを忘れて、色々失敗してしまいますね。

そっか、Mayaにはないですね。こういう目印。
Softimage 2011 か 2012 までもそうだったから、良く分かります。オートキーに気付かずにキーを打ちまくるからなるべくオートキーは使わないようにしていました。

で、Mayaでもなんとか出来ないかなと考え、このやり方を思い出した。

Maya | UIの色変更

これをイベントにすればなんとかなるじゃん!
と思ったけど、実行してみると、エラーが出ました。

そっか、Maya 2017 はPySide2だね・・・。そんな簡単には行かないか。

2、3ヶ月程前に社内ツールを2017に変換しようとして色々試していて、何日も掛けても失敗し続けていた絶望的な時に出会えた神モジュールがあります。

Qt.pyです。

なんとなくUIを作っているだけで、正直PySideとか良く理解していないですw

それでも、これを使えばなんとかなるんじゃない?と思いながら色々やってみて、ネットでサンプルを探してみたら、出来ました!
これで2015,16,17,18 は同じコードで動きます! (16と17でしか試していないけど)

Qt.py、すばらしい。

MayaColor2.gif

コードはこんな感じです。

#Python
from Qt import QtWidgets
from maya import cmds

class autoKeyFrameColor():
def __init__(self):
cmds.scriptJob(conditionTrue=['autoKeyframeState', self.changeMenuStyleSheetRed] )
cmds.scriptJob(conditionFalse=['autoKeyframeState', self.changeMenuStyleSheetDefault] )

def changeMenuStyleSheetRed(self):
QtWidgets.QApplication.instance().setStyleSheet("QMenuBar {background: rgb( 155, 10, 10 );}")

def changeMenuStyleSheetDefault(self):
QtWidgets.QApplication.instance().setStyleSheet("")


このモジュールを読み込んで、クラスを実行すれば良いだけです。

例:
autoKeyFrameColor.py というファイルに保存して、このファイルをMayaのScriptsフォルダに入れます。

Mayaの「userSetup.py」に

import autoKeyFrameColor
autoKeyFrameColor.autoKeyFrameColor()


を書いておけば、Mayaが立ち上がるたびにこのイベントが登録されます。
これだけで、オートキーがONと感知したら、メニューの色を赤にしてくれる。OFFにすると、元に戻してくれる。

もちろん Qt.py ファイルを Scripts フォルダに入れないと動かないですよ。


Qt.py の開発者の皆さん、ありがとうございます!

Maya | UIの色変更

あるプロジェクトでそのプロジェクト専用のプラグインやシェーダーを使うために Maya 2016.5 とPythonの環境パスを set MAYA_SCRIPT_PATH と PYTHONPATH でバッチファイルで変えています。

他のプロジェクトも同じMaya 2016.5 を使っているので、今どのMayaが立ち上がっているかは分からなくなってしまうという問題が出てきました。プロジェクトの専用プラグインちゃんと動いているかどうかは確認すれば済む話ですが、ミスを防ぐために一見で見分けられるようにしたい。

とりあえず、-style cleanlooks などを試してみようと思いました。

こんな感じです:

C:\Program Files\Autodesk\Maya 2016.5\bin\maya.exe -style cleanlooks


使えるスタイルは:
gtk, cleanlooks, windows, windowsxp, windowsvista, macintosh, cde, motif, plastique, monolith

MayaColor2.jpg

白っぽくて一発で違うMayaを使っているのが分かります。

しかし、見づらいな・・・。

元々のグレイバックグラウンドが残っているけど、文字が黒に変わってしまっているところが多くて、見辛い。
色設定で色々カスタマイズすればなんとか使えるようには出来ると思いますが、やっぱり元のUIのままで1ポイントだけ変えたいと思って、色々調べてみたら、QtGuiコマンドで変更が出来ました。

from PySide import QtGui
QtGui.qApp.setStyleSheet("""
QMenuBar {
background: rgb( 68, 100, 35 );
color: rgb( 225, 225, 225 );
}
""")

background は 背景の色で color は文字の色。0 ~ 255の数値で設定が出来ます。

以上のコードを実行すると、こうなります:
MayaColor.gif

有効期限はそのセッションが終わるまで。

なので、Mayaが立ち上がるたびに自動的にこの色になって欲しい場合はuserSetup.py にこのコードを入れれば、毎度この色に変更されます。

因みに、userSetup.py をこのプロジェクトのMAYA_SCRIPT_PATHに入れれば、このプロジェクトを立ち上げる時だけに実行されます。

例えばプロジェクトはProjectXという名前にしよう:

- プロジェクトXのMayaスクリプトフォルダ: D:\ProjectX\Scripts
- D:\ProjectX にMaya.bat を作成する
このMaya.bat の中身は:

@set MAYA_SCRIPT_PATH = Scripts
@start "" "C:/Program Files/Autodesk/Maya2016.5/bin/maya.exe"



そして、userSetup.pyの中身は:

# -*- coding: utf-8 -*-

def changeUIColor():
from PySide import QtGui
QtGui.qApp.setStyleSheet("""
QMenuBar {
background: rgb( 68, 100, 35 );
color: rgb( 255, 255, 255 );
}
""")
changeUIColor()

userSetup.pyに色々入れているので、コードの整理と管理しやすくする為にファンクションに入れましたが、別に直下でもOK。

Maya 2011 から QtGui を使っているので、2011以降でしたら、こんな感じでUIの色は簡単に変えられます。QtGuiは色々調べれば、色々カスタマイズが出来そうですね・・・。

Maya | 回転値を方向値に変更

回転値を0にして、方向値(Orient) だけでジョイントの向きを設定しないといけない作業がありました。そして、Y軸は外側に向かせないといけない条件。

Orient Joint は 100% 合わせてくれない(ま、これを100%自動にするのは無理ですね)

?マークでピボットを回転させると Rotate Axis に数値が入ってしまうし、
普通(スクリプトなし)ではどうやって出来るのかは分からないです。

少しずつ、ペアレントを切って、方向を直して、ペアレントしなおして、なんとなーく色々いじてみると出来たりするのですが効率的に最悪です。そして死ぬほどつまらない。

物量も多いから、仕方なくスクリプトを書いてみることにした。

目的は回転を0にして、方向が変わらないようにを方向値を自動に調整。
そうすると、回転で好きな方向に向かせて、自動的に仕様に合わせられます。

で、出来たのはこれです。


Maya | Rotation To Orient (and vice versa) from myara on Vimeo.



やーつまらない動画ですね。説明もないし・・・なんか、すいません。

必要性があるかは分からないですけど、自由に使って下さい。

同じ事をスクリプトなしで出来る方法があれば、是非教えてください。

DOWNLOAD

■使い方
GUIなどないです。作る予定もない。
Script フォルダに入れて、以下のコマンドでボタンを作って:

回転値0方向自動調整:
import mRotOri
mRotOri.main()

方向値0回転値自動調整:
import mRotOri
mRotOri.main(0)

---

これからはちょっとマニアックな話です。

方向が変わらないようにを方向値を自動に調整したいので、
回転値を方向値に足せばいいで。
単純に考えるとそうですが、Euler角はそのまま足すことが出来ないですね。

なので、Matrix に変換して、Matrix で足して、Eulerに戻して、Radiansから角度に戻すという流れかなと思っていましたが、OpenMaya を使えば一発で出来るとこの記事に書いてありました (英語) http://www.akeric.com/blog/?p=1067

オブジェクトの Matrix は getAttr で取得が出来ます。
しかもローカルとグローバルとインバースも。これは便利ですね。
この記事では グローバルマトリックスを使っていますが、今回はローカルの方が必要です。

このMatrix は角度値ではなく、オブジェクトの方向の角度なので、回転値を方向値に足す必要はありません。もう、このMatrix情報をDegreesに変換すれば良いだけです。それだけです。すばらしい。

流れとしては、OMのMMatrixを作って、Matrix情報をMMatrix に入れて、MTransformationMatrixに変換して、euler情報を取得という結構簡単な方法です。
単純だけど、昨日からこのツールを書いているんですね。

このMatrix情報を変換したら後は入れ替えるだけです。
回転を0にして、変換したMatrix情報を方向値として入れなおせばOK。
逆に方向値を0にして、変換した情報を回転値として入れなおすことも可能。

以上 Read more

Maya | ネームスペース削除

2013 から ネームスペースエディターが出来て、簡単に削除が出来るようになりましたが、
それでも1クリックでやりたい時もあり、他のスクリプトと同時に走らせたい場合も多い為のメモです:

ネームスペースを全て取得して、
削除して、ペアレントとマージする。(ネームスペースエディターと同じ効果)

//mel
string $allNS[] = `namespaceInfo -listOnlyNamespaces`;
for ($ns in $allNS){
if ($ns != “UI” && $ns!=”shared”){
namespace -mergeNamespaceWithParent -removeNamespace $ns;
}
}


#Python
from maya import cmds
allNS = cmds.namespaceInfo(listOnlyNamespaces=True)
for ns in allNS:
if ns!="UI" and ns!="shared":
cmds.namespace( mergeNamespaceWithParent=True, removeNamespace=ns)

Maya | mSetProject (自動プロジェクト設定)

シーンを開く度に、プロジェクト設定手動でやり直さないとテクスチャパスが絶対パスになっていしまい、
モデルの表示は真っ白(または真っ黒)になってしまいます。

プロジェクト設定し直し、テクスチャを更新しないといけません。
ま、テクスチャパスを手動で更新すると死にたくなるので、シーンを開きなおす。

という面倒な作業は毎回やらなければなりませぬ。


面倒くさい!!


自動にしてくれよ !


と文句言ってもAutodeskはやってくれないから自分で書いてみました。


mel とかは書いたことがあったんですけど、MayaでPythonを書くのは初めてなので、練習としてPythonでチャレンジしてみました。

そして、おまけに自動インストール/アンインストールも付いています!

インターネットでいくつかプロジェクト設定スクリプトは見つけて試してみましたが、上手くいかない場合も多くて、特徴なフォルダ構造だとエラーが出たりしていた為、自分のバージョンを作ってみました。

このスクリプトは単純に一個上のフォルダーに設定するのではなく、
「workspace.mel」探して設定するという仕組みになっています。
「workspace.mel」がない場合は、開いているファイルの2個上のフォルダをベースでプロジェクト設定画面を出します。


インストール方法:

C:\Users\ユーザー名\Documents\maya\scripts フォルダにコピーして、
Maya内のスクリプトエディター、 またはコマンドラインでは以下のコマンドを実行して下さい。

#Python

import mSetProject; mSetProject.mSetProject_Setup( True )




アンインストール方法:

#Python

import mSetProject; mSetProject.mSetProject_Setup( False )




mSetProject DOWNLOAD LINK



Maya ( 特に 2013以前のバージョン ) はあまりにも不便だから、頑張ってスクリプトを書きまくっています。

Mayaでコードを書くのもなかなか面倒ですけど・・・。
Pythonを使うと少しだけ楽になる。ま、面倒だけど mel ほど悪くはない。

Maya Python API 2.0 を試してみるべきなのかな。 Read more

Topic:CG Design - Genre:Computer/Internet

Next page