« SAC for Maya様。 | トップページ | アニメ 戦え!XSI男 最終話「SOFTIMAGE開発終了」。 »

2014年6月12日 (木)

何個?。

Maya 様で、現在選択しているオブジェクトの数をパッと調べる方法、ありませんかね?


やっぱ、Heads Up Display ってことになりますか?

Count1

この Object Details ってのをオンにすると、どうやら選択している数が表示されるように見えますね。


もちろんこれでいいのですが、ただ、余計な情報もいっぱい表示されてて、邪魔なんですよねー。 しかもこの Heads Up Display って、文字がすんげえ読みにくくない?  なんかこう、字が小さくて、ボールド体みたいになってて、読めないんですよ。 表示に使うフォントとか変えられないのかね?


XSI だと、右上に常に出ているんですよね。

Count2

これはビューポートに干渉しないから、見づらくなったりはしない。 Maya でもこういう感じでどっかにひっそりと表示されてればいいのになーって思いました。




っていうかさ、Maya様って全体的に、ほんと、目的のオブジェクトを正確に選ぶのがすげえ難しいと思うんですよ。 例えばキャラクタアニメーションやってて、手足のコントローラをつかもうとすると、必ず間違えて違うコントローラをつかんでしまう、とか。 髪の毛など多関節の揺れ物のコントローラを複数つかんで回転のキーを打ったら、実は頭部の裏にある変なものも選択していて要らん物に回転のキーを打ってしまった、とか。


だから、選択しているオブジェクトの数がパッと見れるだけでも、現在の選択状態が正しそうかどうかくらいは、なんとなく分かるので助かるんですよね。 あれっ 4つ選んでるぞ、 この髪の毛の房はコントローラ3つのはずだから、何か余計なもの選んでるな? とか。


そもそも Maya の選択がし易ければ、つまり Mayaでセレクトのミスが少なければ、現在選んでいるオブジェクトの数なんて知りたいとも思わないかもしれないですね。 選択でいつもストレスがあるから、選んでいるブツの数なんていう間接的な手段で情報を得ようとしちまうんだな、きっと。





まあともかく、そんな気分でどうでもいいスクリプトを書きました。

(mel)
-------------------------------------------------------
// 何個?  選択中のオブジェクトの数を数えるだけ。(一応、リストアップもするけど)

nanco();
global proc nanco(){
    string $oSels[] = `ls -sl`;
    string $Display1 = "";
    string $Display2 = "";
    $count = size( $oSels );
    
    for ( $i=0; $i<$count; $i++ )
    {
        $Display1 += $oSels[$i];
        if ( $i != $count-1 )
        {
            $Display1 += ", ";    
        }      
    }

    if ( $count == 1 )
    {
        $Display2 = "  [ " + $Display1 + " ]";
    }
    else if (  $count != 0 )
    {
        $Display2 = "  [ MULTI ]";
    }
    print ( "[ " + $Display1 + " ]\n" );
    print ( "何個? : " + $count + $Display2 + "\n" ); 
}

-------------------------------------------------------

Nanco.mel


実行すると、現在選択しているオブジェクトの数をログします。 そんだけ。 一応、スクリプトエディタ内にオブジェクト名のリストアップもしてます。

Count3

いやーほんと、どうでもいいスクリプトですねw


しかも、無駄の多い、シロート丸出しのコードなんじゃないでしょうか。まあいいや。 何個か知りたいんですよ俺は。





選択しづらいと言えば、グラフエディタの中もそうなんだよなあ・・・・ 目的のキーとか、接線ハンドルとか。  ががっとドラッグすると、いつも余計なものが含まれてしまう。 だから Ctrl とか Shift とかを使って、ひとつひとつ、慎重に選択に追加していく感じになる。 モーション作業中は、これで気持ちが殺がれてしまうんですよ。  何がいけないんだろう? なぜこんなに選択しづらいのか、選択する時に Maya 様はどう振舞おうとしているのか、知りたいですね。 どういう挙動をするから俺は気に入らないのか、を分析したいのです。それさえ見えてくれば、良くない状態を上手く避けられるクセが付けられると思うんだけど、なかなか見えて来ないんだ。 Maya さま。



マニピュレータの軸も選択というか、ドラッグしづらいですよねえ。 例えばローテーション用の丸いマニピュレータ、X だけを回転させたくて赤い部分をドラッグするわけですが、クリックする位置がちょっとズレているのか、XYZ 全部回っちゃったり、あるいは選択が外れちゃったり、そういうのしょっちゅうあります。 キーーーっとなります。 なぜこうもやりづらいのか、クリックする位置なのか、リリースするタイミングなのか、などなどこれも法則が見えてくればいいんだけど、見えてこないなあ。









Maya は、普通のモーション仕事ならまあ問題なくできるくらいにはなりましたが、だからと言って鼻歌歌いながらスイスイやってるわけじゃないです。 キーーーーっとなりながら、胃を痛めながら、モニタをぶん投げながら、苦しんでやってます。 生命の危険すら感じます。




追記:
コメント欄で、中島さんがステキな MEL を書いてくれました。選択中のオブジェクトの数を表示するカスタム Heads Up Display です。 中島さん、感謝します(゚∀゚)

.

|

« SAC for Maya様。 | トップページ | アニメ 戦え!XSI男 最終話「SOFTIMAGE開発終了」。 »

コメント

選択のしにくさに超同意します。
回転マニピュレータはプリファレンスで判定サイズを最大に設定してますが
それでもやっぱりドラッグミス多いです。

不思議な事に、周りのMayaユーザーは特に不満を持ってないので
Softimageならではの手癖があるのかもしれませんね。

投稿: Tom | 2014年6月12日 (木) 14時44分

はじめまして。HeadsUp Displayもmelでコントロール出来ますので、選択個数を表示するだけの物を作ってはどうでしょうか?(名前はそのままheadsUpDisplayコマンドです。)

投稿: 中島 | 2014年6月12日 (木) 14時58分

Tomさん、そうそう、判定サイズ変えても、操作感は変わらないです。ドラッグミスします。 回転の場合、Gimbal モードだと XYZ の色が付いた線以外の部分をクリックしても無反応なので、まあ、助かります。これは南さんに教えてもらった。 Local モードの時とかに、キーーーっとなります。

XSI手グセかあ。もちろんあるでしょうがね。それにしてもやりづらいと思うのですよw

投稿: 潤樹 | 2014年6月12日 (木) 15時06分

中島さん、ありがとうござます!
今、一瞬パッとやってみたら、全然分かりませんでしたw  感覚で行けないんだよなあ。MEL不思議ですw  またいずれ研究します

投稿: 潤樹 | 2014年6月12日 (木) 15時17分

僭越ながら、ざっくり組んでみました。

global proc int NKJ_GetSelectedItemListSize()
{
string $list[] = `ls -sl`;
return `size $list`;
}

{
headsUpDisplay -section 2
-block 0
-dataFontSize large
-command NKJ_GetSelectedItemListSize
-event SelectionChanged
NKJ_HUDObject;
}

これを実行すると画面上端中央に、選択数がちょっと大きめに出現する…はずです。

投稿: 中島 | 2014年6月12日 (木) 23時14分

わあ、ご親切にありがとうございます!  勉強になります。

この HUD 表示を消す方法はあるのでしょうかね? 新規シーンを実行しても表示され続けています。Mayaを再起動させたら表示は消えていました。 headsUpDisplay コマンドに、消すというオプションがきっとあるはずだよな・・・・

投稿: 潤樹 | 2014年6月13日 (金) 16時21分

実を言うと私も余り詳しくなかったので調べてみました。
非表示にするには
headsUpDisplay -e -section 2 -block 0 -visible 0 "NKJ_HUDObject";
(再表示は-visible 1に)、
除去するには
headsUpDisplay -remove "NKJ_HUDObject";
という感じで行ける様です。

Mayaを再起動するとプロシージャはクリアされてしまうのですが、どこかのフォルダに.melファイルとして配置しておけば起動時に自動でロードしてくれた様な気が…(うろ覚えですが…)

投稿: | 2014年6月13日 (金) 22時29分

中島さん、ありがとうございます! 感謝します。

スクリプトノードというものを作ると、シーンと一緒に保存され、ロードしたら実行されるように見えます。前にやってみた気がするんだけど、忘れちゃったな・・・。
http://download.autodesk.com/global/docs/maya2013/en_us/index.html


あと、userSetup.mel でしょうか。
http://monawiki.wiki.fc2.com/wiki/%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E5%AE%9F%E8%A1%8C

http://me.autodesk.jp/wam/maya/docs/Maya2009/index.html?url=PC_Run_MEL_commands_whenever_Maya_starts_up.htm,topicNumber=d0e79112

投稿: 潤樹 | 2014年6月13日 (金) 22時51分

userSetup.mel、それです!ありがとうございます!

投稿: 中島 | 2014年6月13日 (金) 23時06分

MayaのHUDについて調べていて辿り着きました。

まことに勝手ながら、中島様のmelをカスタマイズしてました。

global proc int NKJ_GetSelectedItemListSize()
{
string $list[] = `ls -sl`;
return `size $list`;
}

{
if(`headsUpDisplay -ex NKJ_HUDObject`)
{
headsUpDisplay -remove NKJ_HUDObject;
}else{
headsUpDisplay -section 2
-block 0
-label "Selected Objects:"
-dataFontSize large
-command NKJ_GetSelectedItemListSize
-event SelectionChanged
NKJ_HUDObject;
}
}

シェルフに登録して、ボタンを押す毎に表示・非表示を切り替えてみました。

headsUpDisplayコマンドの『-event』部分の記述がイマイチ分からなくて困ってます。
何か良い情報をお持ちでしたら、御教授頂けると助かります。

投稿: luna | 2016年6月27日 (月) 14時17分

わあ、luna さま、しばらくコメントに気付かず失礼しました。
その mel あとで試してみます。

皆さん、シェルフって好きなんですね~
俺はなんか好きになれなくて、基本シェルフの表示はオフにしてますw
ビューポートの面積がもったいなくなるw
代わりにホットキーか、UnitBus 様のメニューですねー

あー、で、headsUpDisplay コマンドとか、全然忘れちゃいましたw
最近 mel とかいじってないなあ・・・
ひたすらキーを打ち、アニメーションカーブをいじる日々です
役に立てずすいません!

投稿: 潤樹 | 2016年7月 6日 (水) 00時39分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217974/59771326

この記事へのトラックバック一覧です: 何個?。:

« SAC for Maya様。 | トップページ | アニメ 戦え!XSI男 最終話「SOFTIMAGE開発終了」。 »