Softimageの骨は結構独特でIK/FKブレンド機能も付いていて、IKの2Dと3Dモードも変換出来て、便利だったりしますね。
しかし、これはMayaやMAXと共有する時に面倒になったりする。
と、そう勘違いしていたんだよね。
Nullでやった方がMAYAに持っていけるから骨より良いかもな。
問題はNullでEnvelopeつけると、デフォルトのウェイトはめちゃくちゃになります。
骨の範囲は骨の頭から次の骨の頭までだけど、ヌルの場合は全方向で次のヌルまでの範囲で検算されてしまいます。
なので、デフォルトのウェイトはマシなものが欲しいのなら、まずは骨で作ったほうが良い。
そして、そのウェイトを保存して、ヌルにつなげて(エンベロープ)、保存したウェイトを読み込む。
と、なんて面倒くさいことを考えていました。
そして、家でやっていたフリーの仕事を一回とめて、スクリプトを打ち始めてしまった。
でもね、本当はね、XSIでFBXエクスポートして、MAYAで開くと普通に骨が変換されます。
そして、MAYAからFBXでXSIに持っていって、インポートする時に「Import skeleton elements to Nulls」というオプションにチェックを外すと、普通に骨に変換されます。IK付きのXSI boneに。ポーズが可笑しくなったりはするけど、バインドポーズに戻すと普通に戻ります。
「Import skeleton elements to Nulls」にチェックのままでインポートすると、骨がヌルになって、ヌルボーンはMAYAと同じ構造になるので、持っていったりきたりするなら、こっちの方で作業したほうが良いかもしれません。
なので、どうしても骨をNullにしたかったら、FBXに書き出して、FBXを読み込むと骨がヌルに変換されます。
昔はそう簡単には行かなかったような気がしますね・・・。自信ないけど、上手くいかなかった気がする。
まぁ、そういう言い訳をさせてください。
それでですね、無駄に頑張って骨をヌルに変更するスクリプトを書いてしまいました。
うん、無駄にね。
今は無駄だったと分かるけど、骨をヌルに変更する方法を真剣に考えながら書いていました。
練習になったけど、やっぱり無駄でしたね。
だから仕事が終わらないんだよ!
だから皆が六本木で仮想Halloweenパーティーしている時にお前は家で仕事してんだよ!
スクリプトは大体こんな感じ:
ヌルをボーンと同じ名前にしたいから、モデルを作って(モデルの中じゃないと同名は不可)、
そして、まずは同じ構造でヌルを作ります。
骨を一個ごとに同名のヌルを一個作成して、
「ボーンルート」類の場合は、そいつを無視して、親はそいつの親にして、次のオブジェクトに続きます。
そのFunctionを自分にCallして、ループして、
骨構造をルート抜きで全部ヌルで作成できました。
構造整理して、エフェクターの場合はその骨の先っちょに移動します。
次の骨と同じ位置である場合、エフェクターを削除して、次の骨をエフェクターの親につなげます。
最後にボーンのグローバル位置をヌルにコピーする。
新しく作ったヌルは全部同じタイプ「ヌル」なので、タイプを確認する時に、同名のボーンで確認するFunctionも作らなきゃいけなかったからそんなに簡単でもなかったんですよ。
やっぱりこいつは無駄なスクリプト倉庫に入れておきます。
いつか1列でも役に立つ日が来るかもしれない。そん時まで待機してなさい。
結論:
そもそも、XSIよりMayaのデフォルトウェイトの方が良いし、もっと細かい設定が出来るので、
まずはMayaで骨を作ってバインドして、細かいウェイト作業はXSIでやった方が早い。