ちょっとした自分用覚え書き(長め)。
フィギュアの特定のパーツだけジオメトリを変更したい場合、方法としては3通り考えられる。
- A)ジオメトリチェンジを使用する
- B)参照そのものを書き換える
- C)カスタムジオメトリを使用する
Aのジオメトリチェンジは、パーツのジオメトリをパラメータパレット上のダイヤル操作で複数個切り替えることができるという機能。Poser 2あたりの古いフィギュアの手パーツの切替などに使用されている。拙作長袖Tのネックレスにも使っている。
が、Poser上で操作するのが面倒だし、最初から最後まで差し替わった状態でいい場合には少し冗長だ。それに、複数個のジオメトリと差し替えるわけでもない。
というわけでB、キャラクターファイル(以下CR2)の参照そのものを書き換えてみると、どうなるだろう。
ひさびさにテスト形状。
CR2内では、フィギュアのジオメトリはfigureResFileという行とそれに続くactor部分で指定される。最初にジオメトリファイルを指定して、次に「どのパーツにどのポリゴングループを使用するか」を指定するわけだ。
通常actorの内部名と使用するポリゴングループは同名だが、ひょっとしたら変えてもいけるかもしれない(面倒だから検証は省略)。
(2011.4.18追記)
一応ちゃんと検証してみた。同名でなくても参照できる模様。
CR2などのPoserファイルの内容は、ただ機械的に先頭から順番に処理されていく。同じ記述が重複していたら、どちらを優先するとかそういう複雑な処理はナシに、後から記述された内容でどんどん上書していると思われる。たぶん。
なので、途中にfigureResFileを挿入して、別のジオメトリを参照してみる。
結果、狙い通りB以降のパーツがTest2のジオメトリに差し替わっている。
ということは、この2番目のfigureResFileの記述って、ひょっとして読んでいないんじゃ? と思い立って、最初のCR2から記述を削除してみた。
結果、何事もなく読み込めている。
ところが、このフィギュアをライブラリに再登録すると、消したはずの記述が復活している。
ということは、ジオメトリを差し替えたフィギュアも再登録すると……
今度は1番目も2番目も差し替え後のジオメトリを参照している。
色々試してみた結果、Poserはやっぱりフィギュアにつき一つのfigureResFileしか記憶していなくて(まあ当然だけども)、後から上書きされたfigureResFileの内容でフィギュアを保存するらしい。ということは、この方法を使ってジオメトリを差し替えても、シーンファイルを保存して再度読み込んだ時には全パーツが差し替え後のジオメトリになってしまうわけだ。これでは実用性がない。
というわけで、Cのカスタムジオメトリ。カスタムジオメトリはフェイスルームで編集した顔を「形状のみ適用」などで出力した場合や、「パーツを小道具に差し替え」を実行した場合に使用される。これらの操作をしたカスタムジオメトリを持つフィギュアをライブラリに登録すると、新たなジオメトリファイルが作成される。なので、内容を確認するには保存したシーンファイルをエディタで開いてみる。
この記述、見慣れてる人ならすぐにピンと来る、小道具の記述そのままである。
なので、CR2の該当部分を小道具の外部参照の記述に書き換えてみる。(図はエディタのマクロを実行したところ)
で、ファイル読み込み。
これもまたいろいろ試してみた結果、カスタムジオメトリではジオメトリファイルの中から特定のポリゴングループだけをロードすることはできないらしい(っていうかよく考えたらfigureResFileでも不要なポリゴングループは読み込まれてるわけで)。ジオメトリの中に含まれる全部のポリゴングループがそのパーツのジオメトリとして割り当てられる。
差し替えたパーツのマテリアルは、フィギュア本体の持つマテリアルで設定する場合はactor内のcustomMaterialの行を0にする。
逆に、小道具の持っていたマテリアルを使用したい場合や、フィギュアとは別に設定したい場合、customMaterialを1にして次の行からmaterialの指定を記述する。
呼び出してみるとこんな感じ。
あと、外部参照にしておくとライブラリに再登録しても記述は外部参照のまま、新しいジオメトリは作成されない。よしよし。検証終わり。
で、結局何がしたいかというと。
以前のエントリで、JamesHiResの眼球のメッシュがガタガタだったのがずっと気になってたのだ。というわけで、眼球部分だけ別に作り直して差し替え。
まああんまり違いはない(笑)。OBJ出力して合成しちゃえばこんな手間かけずに済むじゃん、みたいなツッコミはあると思うけど、それはそれ、また別の機会に。