myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

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は色々調べれば、色々カスタマイズが出来そうですね・・・。

Wacom サービスの再起動バッチ

Wacom のCintiq Pro を購入したけど、Intuos の代わりにはならないですね、僕には。
※ 因みに僕はモデリングはペンタブでやる派

Cintiq Pro にはタブレットモードという機能が付いていますが、マルチディスプレイ対応していない為操作画面は選べません。
自分はモニター2台+CintiqProなので、CintiqProをペンタブモードに切り替えると、左側のモニターだけで操作したいのに、両方の操作になってしまいます。

その為に、液タブではなく普通のタブレットを使いたい時にIntuosをさせるようにケーブルは用意してあります。

問題は、Intuos をさすと認識されません。
そして、CintiqProを消して、電源を付け直すとドライバーに認識されない時もあります。

PCを再起動すればなおります。
が、再起動は面倒くさいし、不便。

色々試してみたところでWacomサービスを再起動すれば直ります。

こんな感じです:
http://esupport.trendmicro.com/solution/ja-jp/1309044.aspx
この方法でWacom Tablet なんとかサービスを再起動すれば良い。

しかし、これもいちいちサービスパネルを開くのは面倒くさい。

なので、バッチファイルを書いてみたら上手くいきましたので、シェアしておきます。

net stop WTabletServicePro
net start WTabletServicePro



これだけです。これをメモ帳にコピペして、.bat として保存する。 (例:ReWacom.bat)
こいつを管理者として実行すれば、サービスの再起動してくれる。(ダブルクリックではなく、右クリックして管理者として実行)
ショートカットを作ればに管理者権限の設定が出来たような気がする・・・。自分で試してください。

因みに、ドライバーはCintiqProの最新ドライバーだけで特に問題がありませんでした。
古いIntuosドライバーをアンインストールちあっても問題ありません。

SI | mGridUV

UVツールを書き続けている。

今度は以前リクエストされたスクリプトです。

「CG自習部屋さんの Maya用 AriUVGridding」の Softimage パクリ版です。

パクったとは言っても、機能だけですよ。コードはパクってません。MayatとSoftimageが違いすぎて、そしてコメントのないmelは読みにくくてパクれませんでした。

実は自分もこういう機能が昔から欲しかったけど、どう作れば良いのかは全く分からなくて放置していました。
そしてある日、あまり関係ないツールのコードを見ていたら、アイデアが浮かんできた。ちょうど2週間前に時間があったから書き始めたら、できました!

やー面倒くさい! Softimage の サンプル(UV) は全てバラバラでマージという概念がないせいで、どれがどこと繋がっているのかは取得出来ない!
そしてループのループのループの永遠ループの確認はしんどい・・・。疲れた。

いろんなアプローチを試して、駄目なスクリプト20個ぐらい書いて、空いている時間だけだけどほぼ2週間掛かってしまいました。

AriUVGridding と少し操作が違います。

こちらはUVの島ではなく、選択されているUVだけを整列します。同じようにはしたかったけど、SoftimageでUV島の取得方法もないから、遅いループ処理になってしまう為、失敗スクリプト#10辺りでこういうアプローチはやめました。

ということで、ずっと欲しかったツールがSoftimageの開発がなくなって3年後にやっとできました!わーい!わーい!

俺みたいにまだSoftimageを使っている人のため、紹介します。

■使い方
・ 整列したいサンプルをテクスチャエディターで選択します。
・ スクリプト実行
・ オブジェクトのデータを取得して(ハイポリの場合は数秒が掛かります)、 カーソルがピックに変わります。
・ 整列の基になるサンプルを選ぶ ( 4エッジと繋がっているサンプルが条件 )
・ このサンプルの縦と横のループを直線化してから、このループの位置に合わせて残りのサンプルを整列します。
・ Fix Ratio オプションが有効になっている場合は、エッジの比率に合わせまて整列します。

■インストール方法
スクリプトなので、スクリプトファイルは好きなところに保存してから、
スクリプトエディターにドラッグ&ドロップして実行するか、ツールバーやシェルフにドラッグ&ドロップでボタンを作る。

■DOWNLOAD
https://www.dropbox.com/s/o8b10x9eaap1o5j/mGridUV.js?dl=0


下の動画のツールはまだPPG作っていなかった時のベータ版です。あれから少しバグを直して、簡単なPPGを作りました。

mGridUV beta from myara on Vimeo.

SI | MirrorUV

最近またSoftimageのUVツールを作っています。

今更ですねw

もうSoftimageツールなんか作らないと思っていたが、まだ仕事でSoftimageを使っていて、今のプロジェクトも再来年末の発売予定なので、しばらくSoftimageは使い続けます。もっとSoftimageの仕事を増やしましょう!!

で、今日は手が空いていたので実験的にUVのミラーツールを作ってみました。
UVなので、コンポーネントのループはめっちゃ多くなると予測して、久しぶりにPythonではなく、JScriptで書くことにしました。

選択されたUVのポリゴンを探して、そして反対側のポリゴンを探して、サンプルの位置を反対にするというアイデアから書き始めました。 ま、難しくはないと思いますが、ここにたどり着くにはそこそこ時間が掛かっちゃいました。

ループはたくさん使うので、出きるだけ処理を軽くする為に、オブジェクトコレクションを直接にループするのではなく、出きるだけ配列化してからループすることにしました。

例えば、XSI男の頭のサンプルを選択して、選択したサンプルをフェイスに変換したい。
2つの方法は思いつきます。

①コンポーネントのコレクションのループ。
オブジェクトのポリゴンを全てループして、ポリゴンのサンプルをループして、選択したサンプルと同じIDでしたら、そのポリゴンをポリゴンクラスターに入れておく

var oSample2Poly = oObj.ActivePrimitive.Geometry.CreateSubComponent(siPolygonCluster)
it = 0
var oFacets = oObj.ActivePrimitive.Geometry.Facets
for ( var i=0; i < oFacets.Count; i++ ) {
var oFacetSamples = oFacets(i).Samples
var oFacetIdx = oFacets(i).index
theloop:
for ( var j=0; j < oFacetSamples.Count ; j++ ) {
oFacetSampleIdx = oFacetSamples(j).index
for ( var k=0; k < oSampCol.Count ; k++ ) {
if (oSampCol(k).index == oFacetSampleIdx){
oSample2Poly.AddElement( oFacetIdx )
it++
break theloop
}
}
}
}

LogMessage ( it + 'iterations' )

ループの回数: 294
処理時間: 883 ミリ秒

数年前に書いた記事のループの最適化と同じやり方にすると

for ( var i=0, a = oFacets.Count; i < a; i++ ) {
・・・などなど

ループの回数:294
処理時間: 699 ミリ秒

ま、若干早くなりますが、たいした差がない。


で、もう一つの方法は
②オブジェクトの全てのポリゴンをループして、ポリゴンのサンプルをループして、配列にそのIDを入れておく。
選択したサンプルをループして、そのサンプルのIDを使って先ほどの配列でこのサンプルのポリゴンを探して、ポリゴンIDをクラスターに入れる。


it=0
var aSample2Facets = []
var oFacets = oObj.ActivePrimitive.Geometry.Facets
for ( var i=0, a = oFacets.Count; i < a; i++ ) {
var oFacetSamples = oFacets(i).Samples
for ( var j=0, b=oFacetSamples.Count; j < b ; j++ ) {
aSample2Facets[oFacetSamples(j).Index] = oFacets(i).Index
it++
}
}

var oSample2Poly = oObj.ActivePrimitive.Geometry.CreateSubComponent(siPolygonCluster)
for ( var i=0, a = oSampCol.Count; i < a; i++ ) {
oSample2Poly.AddElement( aSample2Facets[oSampCol(i).Index] )
it++
}

LogMessage ( it + 'iterations' )

結果:
ループ回数:2304
処理時間: 30ミリ秒

コードが若干長くて、ループの回数も多いけど、処理は29.4倍も速い ! 29倍 !
期待以上だな。


えっ? 今更 Softimage  しかも JScript ?
時代は Python だと?

Python は基本的に処理が遅い方なので、MayaでPythonを書く時にもこういう風に工夫して書いたりしています。

例えば、頂点一個ずつの位置を取得するより、オブジェクトの頂点の情報を全部一回配列にとっておくと後の処理はかなり早くなります。


あっ、忘れていた、ツールですね。

今はGUIなどないですけど、スクリプトでよければここにアップしました。
https://www.dropbox.com/s/klutsonp12hp4zs/mirrorUV_script.js?dl=0


Softimage : MirrorUV from myara on Vimeo.



Maya | おちる。ハイパーシェードで落ちる。保存オプションでも落ちる。

うちの従業員にこういう問題がありまして、そのPCを見に行きました。

■ 使用バージョン
Maya 2016 Ext 2 SP 2
Windows 7

■ 現象
ハイパーシェードを開いて、ためしにランバート作成 → クラッシュ!
別名で保存オプションを開く → クラッシュ!
色々やると → クラッシュ!

マヤめ・・・ 


しばらくオートデスクの悪口を言って、怒りが収まってから色々試してみました。

プリファレンスリセット、ドライバー更新、MRay更新、など。
Mayaは相変わらずおちる。

最後に思いついたのはプラグインの確認。

Mayaはバージョンアップするたびにデフォルトで読み込んでいるプラグインが増えて重くなってきた気がするので、自分のPCではプラグインの読み込みはなるべく最低限まで抑えている。

プラグインマネージャーを開くとプラグインのリストが出てきます。
めちゃめちゃ長い。
半分以上は何のためにあるかはさっぱり。

プリファレンスフォルダのバックアップとってから、読み込むプラグインリストをいじりはじめる。

なんとなく知っているやつを残しながら、知らないやつを消していく。
Alembic系とか知ってるけど要らないやつももちろんチェックを外していく。
Mayaを再起動。

わりと立ち上がりが早くなった気がしますが、今はそういう問題ではない。

ハイパーシェードを開いて、ためしにランバート作成  → おちない!
別名で保存オプションを開く → おちない!
Maya が おちない!!!

原因は知らないです。
プラグイン一個ずつ試していく気もないです。
原因が分かる人がいましたら是非教えてください。

そして、似たような問題がありましたら、是非これを試してみてください


Mayaに入っているプラグインについて詳しく知りたい人:
https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/Maya/files/GUID-DF9366D9-E24B-4A08-88F1-8EE1B78A52F9-htm.html#mtc-japanese
Next page