« ぬるぬるバージョンアップ。 | トップページ | サブちゃんの恐怖。 »

2008年3月29日 (土)

this_model の恐怖。

                  
エクスプレッションで、thisthis_model というものがありますね。 「私」 もしくは 「私が所属する Model 」を表すものですね。 長ったらしいオブジェクトの名前や Model の名前を書かなくても済むので便利ですね。
      
      

 便利ですか。
 そうですか。
 ほんとにそうですか。
      
      


Hoge という名前の Model があります。 cube と cone がこの Hoge に所属しています。
PPG から Rot Z のアニメーションアイコンをドラッグ&ドロップして、普通にイコールの関係のエクスプレッションを作りました。

Tm01

画像の赤線のように、エクスプレッションの中には Model の名前である Hoge  が入っています。ここではひとまず this_model を使っていないということです。
      



この状態で、cube を Hoge から切り離してみます。

Tm02

cube はもはや Hoge の子供ではなくなったので、エクスプレッションも自動的に更新され、Hoge.cube.kine.local.rotz ではなく、cube.kine.local.rotz になっています。なんも問題ありません。スヴァらしいです。っていうか当然です。
      
      

      
今度は cube を、別の Model である PIYO に所属させてみます。

Tm03

同じようにエクスプレッションは正しく自動更新されています。 いい子だなあ XSI ちゃん。
      
      

      
ここで、便利な this_model が登場します。 親子関係は元の状態に戻しました。つまり cube は Hoge という Model の所属です。

Tm04

this_model に書き換えたので、Hoge だろうが PIYO だろうが名前は関係なくなり、自分が所属する Model を指し示すことになりました。 問題ありません。エクスプレッション通り、Rot Z がちゃんと連動して動いてくれています。 いい子です。
      
      


      
でも、シーンを作り進めていくうちに、cube は Hoge から切り離す必要が出てきたので、親子をカットしました。

Tm05

げげ。 今度は自動更新されない。 this_model のまま残っている。 cube は Hoge から切り離されたので、もはや this_model.cube というものは存在しないのに。

でも不思議なことに、エクスプレッションの関係は生きています。ちゃんと Rot Z が連動します。エクスプレッションの表記と実際の挙動が違ってしまっていることになります。 うーむ どうなのよこれ。
      
      



さらに、cube は別 Model に所属させる必要が出てきました。 すると、

Tm06

やはりダメー。 this_model は居座り続けます。 でも、やはりエクスプレッションの関係は生きています。
      
      


      
バグだそうです。 アフォか Softimage。
      


      
      
もっと最悪なのは、これに気づかず、エクスプレッションを Action 化してしまったときです。
上に書いたように、親子を切り離したり別 Model に所属させた場合、エクスプレッションの表記は更新されていなくても実際の挙動はちゃんとエクスプレッションが生きている状態になっているため、パッと見は正常なので気づきにく いわけです。この状態でエクスプレッションを持っている cone を選択し、Store メニューから Action 化します。

Tm07


すると、

Tm08

Action の中には、this_model が残ったまま格納されます。まあ、そりゃそうだわな、実際にエクスプレッションに this_model って書かれているんだからな。
で、Action 化するときのPPGでアニメーション(エクスプレッション)を削除したり、後で Apply Action するつもりで手動でエクスプレッションを削除したりとか、よくやります。そのための Action ですから。
      

ってことで、Apply Action を実行して格納したエクスプレッションを cone に戻してあげます。

Tm09


すると。
      

Tm10

Action の中には this_model という表記で格納されているにも関わらず、実際はもう cube が元の Model に所属していないわけで、つまり this_model.cube が指し示すオブジェクトが存在しないわけで、当然、エクスプレッションが元に戻せません。したがって Apply Action したあとも、エクスプレッションは空っぽのままです。
ふざけんな XSI。 悪い子です。
      


しかたなく、Action のPPGを開き、this_model と書かれている部分を、現在の所属モデルである PIYO に手で書き直してやります

Tm11

これでちゃんと Apply Action でエクスプレッションを戻せるようになります。 
ああめんどくせえ。ふざけんな XSI。
      
      

      
Apply Action でアニメーションが戻せないのは、this_model で参照しているオブジェクトが存在しないから当然なので、それ自体が問題なのではない。 問題は、this_model を使っていると親子を変えたときにエクスプレッションの表記が正しく更新されないことにある。 正しく更新されていないまま、でもエクスプレッションに書 かれた文字列をそのまま Action として格納するため、このようなことが起こるのである。
      
・this_model を使ってるときでも、親子変えたらちゃんとエクスプレッションを更新しろゴルァ
・さらに安全策として、Store で Action化するときに、参照先の存在をチェックしろ。存在してないなら警告出せゴルァ
      
ということになる。そしてこれは XSI側の不具合なので、次のバージョンとかで修正されるまでこちらとしては為す術が無い。そうなると結論は、
      
・this_model 使うな
      
ということになる。 Orz
      
      
      
最初これに気づかずガンガン this_model を使っていたため、後で大変なことになった。 気づいた後は、Action 化する前に全部 this_model を普通に model の名前に戻そうと手で打ち直していたが、やってらんなくなったのでスクリプトを書いた。ついでに検索と置換もできるようにしたらけっこう便利になった。ま だ散らかっている状態のスクリプトなので、そのうち整理できたらアップします。
      
      
XSI はこういう細かい不具合多いですねえ。細かいことだからまあいいでしょなんて思ったら大間違いですよ Softimageさん。 もし8本足の動物がいて、1本につき400個のエクスプレッションが入っていたりしたら、どうするんですか。実際にいるんです よ、8本足の動物は。10本のだっています。わかってますか。
      
今日もモントリオールに向かって怨嗟の炎を吐く。
      
      
      

|

« ぬるぬるバージョンアップ。 | トップページ | サブちゃんの恐怖。 »

コメント

コメントを書く



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




トラックバック


この記事へのトラックバック一覧です: this_model の恐怖。:

« ぬるぬるバージョンアップ。 | トップページ | サブちゃんの恐怖。 »