日々適当

hibitekitou

前のフレームの値を取得する

xsi |2012-07-12
シミュレーションコンストラクションにあるICE Treeと違って、モデリングコンストラクションのICE Treeにおいて、フレーム毎にICE内で設定しているアトリビュートの値が再評価されるらしくって、結果として、前のフレームの値を取得することが困難ってのがあったりします。

シミュレーションコンストラクションにあるやつだったら、Get Data at Previous Frame ってノードがあったり、それが上手く動かなくても、 Set Dataノードに値を書き込んでおいて、次のフレームで、その値が更新される前に読み込めば前のフレームの値を取得できるって手法もあるんですけどね。

ってことで、無理やり何とかならんものかとやってみたのが以下。
シーン構造は以下の通り。





グリッドを ICE Tree 内で PointPosition の値を書き換えることで Y軸回転しています。これがグリッドに設定した 以下のようなICE Tree の一番上の流れ。



そして、真ん中の流れ(Set Data の self.temp に繋がっている)で前のフレームの値を取得して、前のフレームとの差分を表示したり、現在フレームと前フレームの位置を表示したりさせています。

一番下の流れでは、現在のフレームでの位置を、次のフレームのために保持するようにしています。

この保持を自分自身にやらせるとうまくいかないので、別のオブジェクトに持たせてやろうってのが今回のやり方でございます。やけっぱちなやり方でございます。

空の PointCloud を用意しました。
そして、そのモデリングコンストラクションで、グリッドから受け取った位置の値をため込むためのアトリビュートを設定しています。初期化ってやつです。



その上で、シミュレーションコンストラクション内に ICE Tree を作成しています。中身はありませんが。

んで、グリッドから値を渡すように設定した関係上、PointCloud内にグリッドで設定された ICE Tree が見えています。ICE Tree (grid)ってヤツですね。これが、シミュレーションコンストラクションに入っている事が大切です。

この結果、



こんな感じで前のフレームの値が保持されている事が分かるかと思います。

なお、もちろん、これはシーンのタイムラインの頭から順番に再生してはじめてただしい値を取得できる類いの設定なので、あんまり賢いやり方じゃないように思います。ってか、設定も面倒だしね。

前のフレームの値を取得する必要があるような処理の場合、素直に、シミュレーションコンストラクション内で ICE Tree を構築すべきなのでしょうなぁ(でも、トポロジーをいじる系の処理はモデリングコンストラクションでやらんといけないのよねー)。
コメント ( 0 )|Trackback ( )
 
コメント
 
コメントはありません。
コメントを投稿する
ブログ作成者から承認されるまでコメントは反映されません
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。