« 女~るFcurve。 | トップページ | ポリゴナイザをスクリプトでねじ伏せる。その1。 »

2011年8月27日 (土)

俺を縛り付けているのはいったい誰だ。

またもや急造のテキトーなスクリプトを載せますよ。




flagViewVis = true;
flagRendVis = true;
flagSelectable = true;
flagShowAllow = false;

var TheFuckingRestricters = XSIFactory.CreateObject( "XSI.Collection" );
for ( var i=0; i<Selection.count; i++ )
{
    var oOwners = Selection(i).Owners;
    for ( var j=0; j<oOwners.count; j++ )
    {
        var oO = oOwners(j);
        if ( oO.type == siGroupType || oO.type == "Partition" || oO.type == "Layer" )
        {
            IsThisGuyTheFuckingGuy = WhoTheFuckIsRestrictingMe( oO, flagViewVis, flagRendVis, flagSelectable, flagShowAllow );
            if ( IsThisGuyTheFuckingGuy )
            {
                TheFuckingRestricters.Add( oO );
                Logmessage(  Selection(i) + " を縛り付けている人 --> " + oO );
            }
        }
    }
}
if ( TheFuckingRestricters.count != 0 )
{
    SelectObj( TheFuckingRestricters );
    for ( var i=0; i<TheFuckingRestricters.count; i++ )
    {
        InspectObj( TheFuckingRestricters(i), null, null, siLock );
    }
}
else
{
    Logmessage( "誰もあなたを縛っていません。" );
}

function WhoTheFuckIsRestrictingMe( oOwner, flagViewVis, flagRendVis, flagSelectable, flagShowAllow )
{
    ResultTotal = 0;
    if ( flagViewVis )
    {   
        IsThisParamRestricting = CheckVis( oOwner.Viewvis.value, flagShowAllow );
      
//Logmessage( oOwner.Viewvis + " : " + oOwner.Viewvis.value  + " ---> " + IsThisParamRestricting );
        ResultTotal += IsThisParamRestricting;
    }

    if ( flagViewVis )
    {   
        IsThisParamRestricting = CheckVis( oOwner.Rendvis.value, flagShowAllow );
       
//Logmessage( oOwner.Rendvis + " : " + oOwner.Rendvis.value  + " ---> " + IsThisParamRestricting );
        ResultTotal += IsThisParamRestricting;
    }

    if ( flagSelectable )
    {   
        IsThisParamRestricting = CheckVis( oOwner.Selectability.value, flagShowAllow );
       
//Logmessage( oOwner.Selectability + " : " + oOwner.Selectability.value  + " ---> " + IsThisParamRestricting );
        ResultTotal += IsThisParamRestricting;
    }

    if ( ResultTotal != 0 )
    {
        return true;
    }
}

function CheckVis( VisVal, flagShowAllow )
{   
   
//    Show Members(Allow selectiong members ) の時も、反応
    if ( flagShowAllow == true )
    {
        if ( VisVal == 0 || VisVal == 1 )
        {
            return true;
        }
        else
        {
            return false;
        }
    }

  //    Hide Members(Do not allow selectiong members ) の時だけ反応
    else
    {
        if ( VisVal == 0 )
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}



これもですね、ついにブチ切れて書きました系なんですがね。


View Visibility, Render Visibility, Selectability ってありますよね。 ビューポート上で見えているか否か、レンダされるか否か、ビューポート上で選択可能か否か。 各オブジェクトが持っているし、Group や Layer や Partition も持っている属性です。


ブツが Group, Layer, Partition に入っていてこの Visibility が上書きされていた場合、当然その  Group, Layer, Partition にたどりつかなければ変更はできないわけですが、自分で Group とかに入れたのならともかく、他人様からもらったデータだとこのオブジェクトがどの Group に入ってるのかとかわかんないじゃないですか。 それを調べるスクリプトです。




人からもらったデータで作業するときによくあるわけですが、例えばリギング済みのキャラクターで、ご丁寧にもジオメトリやデフォーマは選択不可の状態になっている。そりゃそうですね、アニメータが下手にいじれたら困りますもんね。 リグのコントローラだけが選択可能で、それ以外は選べなくしてあるわけです。これでいいのです。合理的です。


でも、何かの都合でジオメトリを選択しなければいけない時もあるわけですよ。 あるいは、アニメータとして作業する仕事ではなく、リグを改造するとか追加するとか、アニメーションセットアッパー的なタスクを請け負うこともあるわけです。 そんなとき、まずは選択可能にしたいのですが、オブジェクトのビジビリティのプロパティを見てみると、Selectability のアニメーションアイコンは水色の三角アイコンになっており、チェックボックスはグレーになって編集不可の状態になっています。つまり、Group か何かでロックされているわけですよ。 じゃあ、どの Group に所属しているんだ? というのを調べる所から始めねばなりません。



でも、大抵の場合、人からもらったデータって信じられないくらいわかりにくいですよね。 個人によってデータの整理方法が違うから、というのもありますが、場合によっては全く未整理だったり、同じ作品の複数キャラで整理方法のポリシーが違っていたり(Group分けの基準が違ったり)することもよくあるわけですよ。っていうかほとんどの場合、そうなのですよ。 自分の会社なりチームなりで作ったデータなら、整理を頼むとか整理ポリシーの修正を指示するとかできますが、クライアント様からもらったデータだとそうも行かない。 だから毎回、なんだこの汚いシーンはちゃんと整理しやがれそれが仕事を振る側の責任だお前それでもプロかこのクソ野郎  などと心の中でクライアント様へ罵倒の言葉を浴びせ続けながら仕事をしているのは内緒です。



こうなると Group を徹底的に探し出し、やっと Selectabiliy をロックしている Groupを見つけ出し、解除します。 すると・・・・・ まだ選択可能な状態になっていません。 どうやら複数の Group でロックされているようです。 アホか複数でロックするんじゃねえ選択可能不可能で Group 分けするならその目的だけの Group を1つだけ作りやがれ名前もそれと判るようにつけやがれ他のGroup には同じ役割を持たせるんじゃねえこのマゾ野郎 と更に罵倒は続きます。


やっと他の Group を探し出して解除すると・・・・。まだ選択可能な状態になっていません。 じゃあパーティションか? どうすんだよ Pass が10個とかに分かれちゃってるじゃねえかよ全部の Pass でパーティション見て行けってことかよこのハゲ野郎 と罵倒しながら全てのパーティションをチェックすると、どれもロックしていない。



あれ? と思って、ここでレイヤをチェックしていないことに気づき 6 を押したらレイヤがずらり。 
 
ええ~ こんなにレイヤ要るの~? Left と Right でレイヤ分ける意味あるのかよ~ 細かく分けりゃいいってもんじゃねえだろう無目的に分けるのは整理じゃねえよどういう運用方法を想定してるのかちゃんと注釈テキストくらい付けろよこのファック野郎 

などと、ほぼ丸一日罵倒を続けた挙句窓から遠投されるモニタの数は増え続けEIZOの営業さんは喜ぶし俺の筋肉は鍛えられます。




ということで、ビジビリティの主要3つのパラメータ View Visibility, Render Visibility, Selectability に関して、そのオブジェクトをロックしている Group, Layer, Partition を見つけようというのが、このスクリプトの役割です。


ブツを選んで実行します。複数を選んでもいいけど、複数だとわかりにくいので、まずは1つだけ選んで実行したほうがいいと思います。

すると、そのブツをロックしている Group, Layer, Partition が選択されます。また、スクリプトエディタ上にもログされます。見つかった Group, Layer, Partition の PPGも表示されます。 見つけちまえばこっちのもの、あとは自分でロックを解除して下さい。




スクリプト冒頭を書き換えると、挙動が変わります。

flagViewVis = true;
flagRendVis = true;
flagSelectable = true;
flagShowAllow = false;


現状このようになってますが、どれをチェック対象にするかをここで決めています。現在、ViewVis も RendVis も Selectable も、 true になってますね。

例えば ViewVis が true なら、ViewVis はチェック対象に入っているということです。 つまり ViewVis がハイドになっている Group, Layer, Partition を探しに行きます。 ここを false と書き換えると、ViewVis はチェック対象から外れるので、ViewVis がどうなっていようが関係なくなります。ブツが所属する Group, Layer, Partition で View Visibility がハイドになっていても無視するということです。

最後の flagShowAllow ってのは、Show members( Selectability の場合は Allow selecting members )の状態をどう見るか、のフラグです。 Visibility には、 No effect on members, Show members, Hide members の3つの状態がありますよね。 「ロック」という意味では、Show もロックなわけです。必ず表示する、という状態にロックしているわけですからね。 なのでこのフラグを true にしておくと、Show になっている Group, Layer, Partition もヒットします。 false にすると Show になっている Group, Layer, Partition はヒットしないので、Hide になっている Group, Layer, Partition だけを探そうとします。





同じような目的のスクリプトで、貴様、どのレイヤだ。 というのを以前載せました。 これは所属しているレイヤを探し出すためだけのスクリプトでしたが、今回のはレイヤだけでなくグループとパーティションも対象であり、かつ、ロックされているかどうかという条件で探すものになっていますね。

実は似たようなスクリプトはずっと以前から、いくつも書いてきています。よく使っているのは オーナーさん というスクリプトなのですが、これはまさに、そのオブジェクトが所属する Group Layer Partition を探し出すためのスクリプトです。 スクリプティング的に、所属する Group, Layer, Partition は Owners というプロパティからたどるので、オーナーさんと呼んでいます。 オーナーさんを探し出してスクリプトエディタにログするのが初期のバージョンで、現在はオーナーさんを XPOP にズラズラと表示するようになっています。 XPOP でその項目を選ぶと、オーナーさんが選択されるしくみになっています。 これに、オーナーさんの Visibility の状態が今どうなっているのかの表示を付け加えようと思っていたんですが、それをやる前に、単体でそういうスクリプトを書いてしまったというのが、今回のこのスクリプトです。 オーナーさんは個人的にはすごく便利なので、そのうちここにも載せます。

※Owners プロパティについてはこの記事に書いてましたね。この記事のスクリプトに、ビジビリティチェック機能を付けたようなものですね、今回のスクリプトは。




ということで、クライアント様におかれましては、超美しく整理されたデータを出して頂けるよう、何卒よろしくお願い致します。






久しぶりに曲行きましょう。



良すぎます。
この人と結婚したいです。
しばらくハマっています。
テイラーちゃん。俺は毎日あなたの歌を聴きながらつらいタスクも頑張ってこなしているよ。



それにしても、いちおうカントリーミュージックとして分類されることが多いテイラーさんですが、ううむ、この曲なんかは全然カントリーじゃないよなあ。

ま、でも、よく聴いてみると最近のカントリーって、通常の歌モノポップスとかロックミュージックとかに、バンジョーやマンドリンの音を足してるだけ、と言っても過言ではないかも知れません。あの金属的な響きが加わればもうそれでカントリー、あめりかーんな感じ、みたいな。

あとは歌のテーマや、歌詞に登場するアイテムかしら。 
家族愛とか、愛国主義とか、時にはアメリカ軍万歳とか、キリスト教とか、野球やアメフトなど庶民が好きなスポーツとか、ジャックダニエル、マルボロ、カウボーイハット、カウボーイブーツ、、レッドネックとトラクター、ピックアップトラック、工場で働くお父ちゃんがんばれとか、そんなキーワードが入ってればもうカントリー、みたいな。


日本で言う演歌みたいな感じなのかなあ。
カントリー良いですよ。
あんまりベタな古いカントリーじゃなくて、このテイラーちゃんみたいな現代風のやつが好きですけどね俺は。




.

|

« 女~るFcurve。 | トップページ | ポリゴナイザをスクリプトでねじ伏せる。その1。 »

コメント

コメントを書く



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




トラックバック

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

この記事へのトラックバック一覧です: 俺を縛り付けているのはいったい誰だ。:

« 女~るFcurve。 | トップページ | ポリゴナイザをスクリプトでねじ伏せる。その1。 »