« V-Ray でピタゴラ装置。 | トップページ | お名前でイッキに選択。 »

2012年9月14日 (金)

パーティションの掟。

うーむ。

Background_***_Partition は、特別なんですよ。


新規のオブジェクトとかが自動的に入る場所ですからね。 レンダの事故が起こらないためにも、Background Partition のレンダビジビリティは基本的に Hide にしておきべきだと思いますし、そもそも Background Partition の名前を完全に変えてしまって、どれが Background Partition なのか分からなくなっている状態なんて、言語道断です。


そういういけないデータを扱うときは、もう、スクリプト書いていけない子を発見するしかありません。



JScript
------------------------------------------------------------------------

var oBackgroundPartitions = XSIFactory.CreateObject( "XSI.Collection" );//    全てのBGパーティションを格納する容器
var oPasses = ActiveProject.ActiveScene.Passes;
//    全てのPass
for ( var i=0; i<oPasses.count; i++ )
{
    var oPartitions = oPasses(i).Partitions;   
//    その Pass の全ての Partition
    for ( var j=0; j<oPartitions.count; j++ )
    {
        if ( oPartitions(j).Background ) oBackgroundPartitions.Add( oPartitions(j) );
//    BGPartition なら格納
    }
}

//    ここまでで、まずは全Passの BGPartition が引っかき集められた

var oFuckinBackgroundPartitionsRenamedInVeeeeryBadWay = XSIFactory.CreateObject( "XSI.Collection" );//いけない名前のBGPartitionを格納する容器
for ( var i=0; i<oBackgroundPartitions.count; i++ )
{
    var oPart = oBackgroundPartitions(i);
    if ( oPart.PartitionType == siObjectPartition ) TheName = "Background_Objects_Partition";
//あるべき名前(オブジェクト)
    else TheName = "Background_Lights_Partition";
//    あるべき名前(ライト)

    if ( !oPart.Name.match( TheName ) ) oFuckinBackgroundPartitionsRenamedInVeeeeryBadWay.Add( oPart );//いけない名前のやつを格納
}

//結果報告 & いけないやつセレクト
Logmessage( "全てのバックグラウンドパーティション : " + oBackgroundPartitions.count );
Logmessage( "Background_***_Partition を含まない名前にリネームされてしまっているバックグラウンドパーティション : " +  oFuckinBackgroundPartitionsRenamedInVeeeeryBadWay.count );
SelectObj( oFuckinBackgroundPartitionsRenamedInVeeeeryBadWay );

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

このスクリプトの場合は、Background_Objects_Partition (ライトの場合は Background_Lights_Partition)を含まない名前になってたら、悪い子だということにしてあります。 法則を変えたいなら TheName のところを変えれば良い。

幸い、スクリプトを書けば Background パーティションかどうかは見分けられるのですね。 Partition オブジェクトの Background プロパティです。 名前がどのように変えられていようとも、このプロパティで true が帰ってくるパーティションは、Background パーティションです。 手で削除してみて削除できないパーティションならそれは Background パーティションなんですが、見分けるために削除してみるとか馬鹿らしいですよね。 まあ、こんなスクリプトを書かなければいけないシーンデータを扱うのが一番馬鹿らしいのですが。とかなんとか。




結果的にスクリプトによって判別はできましたが、スクリプトでトラッキングできればそれで良いわけではありません。ちゃんと掟を守らなければなりません。



俺的掟:

●バックグラウンドパーティション判別可能にせよ

Background_***_Partition をリネームする場合は、せいぜいアンダーバーを付けるとか程度にしておいて、ひと目でそれが Background パーティションであるということが分かるようにせよ



●バックグラウンドパーティションはハイドせよ


Background_***_Partition は、レンダしないパーティションにせよ。
 つまりレンダビジビリティは Hide にせよ。 ビュービジビリティはまあ、レンダ的にはどうでもいいや。



●男らしくせよ


レンダすべきパーティションのレンダビジビリティは全て Show にせよ。
 レンダしないパーティション(Background含む)は Hide にせよ。 つまりレンダ可否はオブジェクトレベルや Group や Layer に頼らず、一番強い存在である Partition でオンかオフにすることによって一元管理せよ。 No Effect 禁止。 男らしく白黒はっきりせよ。 女も男らしくせよ。



これがレンダ事故を避けるためには必須です。 異論を待つ。




.

|

« V-Ray でピタゴラ装置。 | トップページ | お名前でイッキに選択。 »

コメント

コメントを書く



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




トラックバック


この記事へのトラックバック一覧です: パーティションの掟。:

« V-Ray でピタゴラ装置。 | トップページ | お名前でイッキに選択。 »