« 2012年6月 | トップページ | 2012年9月 »

2012年7月

2012年7月26日 (木)

アクションで動かされる奴隷どもを選択する。

ずっと以前、あのときに書いたスクリプトが今、また役に立ちそうな悪寒。

Select Driven Objects from ActionSource 的な。


JScript
--------------------------------------------------------------------
var oActions = XSIFactory.CreateObject( "XSI.Collection" );
oActions.unique = true;
for ( i=0; i<Selection.count; i++ )
{
    if ( Selection(i).type == siActionType )
    oActions.Add( Selection(i) );
}

var oAllActionDrivenObjects = XSIFactory.CreateObject( "XSI.Collection" );
oAllActionDrivenObjects.unique = true;
for ( i=0; i<oActions.count; i++ )
{
    var oAction = oActions(i);
    oAllActionDrivenObjects.AddItems( GetActionDrivenObjects( oAction ) );
}
if ( oAllActionDrivenObjects.count != 0 )
{
    SelectObj( oAllActionDrivenObjects );
    Logmessage( "アクション奴隷たちの数 : " + oAllActionDrivenObjects.count );
}



function GetActionDrivenObjects( oAction )
{
    var oModel = oAction.Model;
    var oActionSources = oAction.SourceItems;
   
    var oTargetObjCol = XSIFactory.CreateObject('XSI.Collection');
    oTargetObjCol.unique = true;

    for (var i=0; i<oActionSources.count; i++)
    {
        TargetParamString = oActionSources(i).Target;
        var oTargetParam = Dictionary.GetObject(oModel + '.' + TargetParamString,false);
        if (oTargetParam != null)
        {
            oTargetObjCol.Add(oTargetParam.Parent3DObject);
        }
    }
   
    logmessage('--------------------------');
    logmessage('Action Name : ' + oAction.name + " ( Model : " + oModel.name + " ) " );
    logmessage('Number of Action items : ' + oActionSources.count);
    logmessage('Number of Objects assigned : ' + oTargetObjCol.count);

    return ( oTargetObjCol );
}

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




Action Source
を選択して(複数可)実行すると、そのアクションソースによって駆動されるオブジェクトを選択します。

Selectobjfromaction

Clip じゃないですよ。アクションソースです。
このアクションソースってどのオブジェクト達を動かすんだっけ? の時に、Apply Action しなくても、ミキサのトラックに Clip として置かなくても、すぐに分かるように、という目的で書きました。たぶん。数年前の話ですが。 今日また使いました。


・・・・標準では、この機能、ないよね? ね?

Clip から選択する機能はあるんだっけ。 違ったっけ。



スクリプティング的には、別にどうというアレでもなさそうですが、一応書いておくと ActionSource オブジェクトには Target プロパティというもんがあってアクションのターゲットとなるパラメータのフルネーム=つまりModel名も含めたオブジェクトの名前からそのパラメータ名までのフルパスが取得できるんですが実はこれはオブジェクトではなくただの文字列なのでこの野郎って感じだけどまあフルパスでゲットできてんだからあとは Dictionary.GetObject でオブジェクトとして取得してやりゃいいんじゃねえか的なアレです。 昔に書いたものなので、いまどきの XSI ではもうちょっと便利に書けるようになってたりしないかしら。どうでしょう。





親方! 死なないでくれ! な時に初めて書いて、
おやっさん、俺が楽に死なせたる! の頃にもよく使った気がする。
違ったっけ。

死なないで欲しい場合でも死なせてあげる場合でも、親愛なるオヤジってもんはどのみち死んじまうという所がポイントです。




.

.

| | コメント (0) | トラックバック (0)

2012年7月 5日 (木)

クラスタから発射。

また ICE のメモ的なアレなんですがね。


オブジェクトをパーティクルのエミッタとした場合、オブジェクト全体ではなく、クラスタから発射させたい場合はどうしたらいいんだろう?  などという、ごく基本的なことを知らないことに気付きましてね、今日もいつものように唖然としたわけです。



で、ちょっと調べてみたら、その昔は、発射してから消すという方式もあったようです。 ICE ではいつも死ぬほどお世話になっている m4g さんのブログにも、昔の記事でこんなのがありました。 2008年ですって。 そんな昔から ICE ってあったんだね。ヤヴァいよ俺 orz





その後、SI-Support Blog にこんな記事があって、これが一番良さそうに見えました。

ただし、コンパウンドの中身に潜っていかなければならないんですね。 潜りさえすれば、そこに必要なパラメータがあってクラスタでフィルタリングできるのですが、じゃあなんでこのパラメータを表に出さないのか(Exposeしないのか)、謎だと思いました。




とか思いながら、何気なくいつもの Emit From Geometry コンパウンドの PPG を見てみると・・・・ 

あれ? 表に出ているじゃないか。 ちゃんとクラスタなどでフィルタするパラメータが、そこにあります。



正確に追いかけてないので想像ですが、昔はコンパウンドの中にあって表に出ていなかったパラメータを、ユーザの要望が強かったので、最近のバージョンになって表に出したとか、そんな感じなんじゃないでしょうかね?

っていうか、アレか、昔は Emit From Surface だったもんね。 いつの間にかそれが Emit From Geometry に変わってたんだよな。 その時にこうなったのかな。



Emitfromcluster

クリックするとでかい画像が出ます。

シーンファイル(2012)のダウンロード(ZIP)




目のところにポリゴンクラスタを作ってあります。 そのクラスタの IsElement アトリビュート、つまり 「そのポリゴンは、このクラスタに入ってますか?」 の属性を、フィルタのリファレンスとして指定してやるというものです。たぶん。 これに引っかかったポリゴンのみから、パーティクルが発射されます。 

この記事はその部分をメモしときたかっただけですんで、ICETree のそれ以外の部分は何がどうというものでもありません。 




ってことで、Emission Filter ParametersReference に、エミッタにしたいクラスタの IsElement アトリビュートを指定、ということでファイナルアンサーにしてしまって良いでしょうか? 落とし穴ありますかね? 他にもっと良い方法ありますかね? どうかご教示ください m(_ _)m








問題は、マニュアルに、このパラメータを使えばクラスタで発射位置をフィルタできるとは明記されてない点ですね。

  Emit From Geometry のヘルプ(2012)

このパラメータの説明は、「ウェイトマップ」が対象であるという意味のことが書かれています。 クラスタとは書かれていませんね。 これじゃクラスタにも使えるって、読んでもわからないでしょう。 そもそも、ウェイトマップでどういうことができるのかすら、この表記じゃ分かんないなあ。 まあ、所詮 XSI のマニュアルですからね、そんなに親切なわけないですよね。



ちなにみ、最新のマニュアルではどう書いてあるのか確かめようと思って 2013 のヘルプを見てみたら、 

  Emit From Geometry のヘルプ(2013)


ウェイトマップ「など」 に使えると書いてあります。

おおっ、「など」 が付いたぞ! 表記がバージョンアップしてる! (゚∀゚)


・・・・まあ、なんつうか、「など」 なんて付けても相変わらず意味不明、と言うか更にも増して意味不明ですねぇw  この 「など」 に Cluster.IsElement を含めているつもりなのかなあ・・・?w   クラスタから発射するなんて、いかにも需要ありそうなことなので、ズバリそう書くとか、サンプルとして出しておけばいいのになあ。  まあ、所詮プラグイン扱いのソフトウェアのマニュアルですからね、そんな親切なわけが





っていうか、上のリンクの 2013 の方、まさにその Reference パラメータの説明ですが、「属性はジオメトリ全体における放出の速度をコントロールするために使用されます」 って書いてありますね。  は? 速度?  量(程度)じゃなくて?  英語のマニュアルを確かめたら、Rate って書いてありますよ?  Rate って日本語にすると速度なんですか?  嘔吐デスク様?

まあ、所詮われわれ下層の者どもが使うソフトウェアのマニュア




お、とか言ってたらこんな親切なヘルプのページが・・・・

  ICE パーティクル放出をフィルタする

なるほど、ウェイトマップやテクスチャマップで発射場所をフィルタする例が挙げられていますね。 そう、こういうサンプルをまさに載せて欲しいんですよ。やればできるじゃないですか嘔吐デスク様。

でもこれだけ豊富にサンプルを載せておきながら、なぜそこにクラスタから発射という我々下層の者どもでも思いつきそうな基本的な例が無いのかw


まあ、所詮





.

| | コメント (2) | トラックバック (0)

« 2012年6月 | トップページ | 2012年9月 »