flex
そろそろFace Poserに進もうと思いいじってみたり文書読んだりしているのだが、 口パクや表情もなんかおかしいし、flex slidersを動かしても反応ない。 alyxにmale06のqcファイルをそのまま使うとflex関係の問題は何も起こらないが、 その代わり首の下にポリゴンの裂け目ができてしまう。 alyxにmdldecompilerから抽出したqcファイルを使うと、 首の下の裂け目はなくなるが今度は表情がおかしくなる。 良くみるとflexfileのframe番号がずれているので、 frame番号だけ直せば良いのかと思うのだが、 今度は表情もおかしいままに首の裂け目も残る。
alyxがCharacter Facial Animation Shapekey Set:jp に書かれている順番にフレームに表情が割り当てられているのではないのはもはや明白で、 もう他に方法も思いつかなかったので、 alyxからmdldecompilerで得られたqcファイルに書かれているフレームの通りに shape managerでキーをうち直してvtaを書き出すことにしたらうまくいった (正確に言えば、首が裂けずになんとなくまともにみえる、がほんとにうまくいってるかどうかはわからない)。
qcファイル。 ここでflexfileの中にはframe 5から29までが、欠番無く記述されている。 思うに昔はフレーム29まででflexを記述していたが、その後足りなくなってフレーム数を34まで増やし、 alyxなど古いモデルには昔のなごりが残っているのではないか。 また1フレームから4フレームまではflexfileに記述がないのだが、 少なくとも1フレーム目には目を閉じた表情のキーフレームを作っておかないとまばたきしない。
Barneyのqcファイルのflexfileの記述はこんな感じなのだが:
flexfile "mdldecompiler_expressions.vta" { flex "upper_right" frame 2 flex "lower_right" frame 4 flex "upper_left" frame 6 flex "lower_left" frame 8 flex "AU42" frame 9 flexpair "AU1" 1.0 frame 10 flexpair "AU2" 1.0 frame 11 flexpair "AU4" 1.0 frame 12 flexpair "AU1AU2" 1.0 frame 13 flexpair "AU12" 1.0 frame 14 flex "AU12AU25" frame 15 flexpair "AU15" 1.0 frame 16 flexpair "AU17" 1.0 frame 17 flexpair "AU10" 1.0 frame 18 flex "AU16" frame 19 flexpair "AU6" 1.0 frame 20 flexpair "AU9" 1.0 frame 21 flexpair "AU25" 1.0 frame 22 flexpair "AU18" 1.0 frame 23 flexpair "AU22" 1.0 frame 24 flexpair "AU20" 1.0 frame 25 flex "AU32" frame 26 flex "AU24" frame 27 flex "AU38" frame 28 flex "AU31" frame 29 flexpair "AU26" 1.0 frame 30 flexpair "AU27" 1.0 frame 31 flexpair "AU26Z" 1.0 frame 32 }
これまたalyxともmale06とも全然違う独自のものである。 alyxとmale06 (standardflex_xsi.qci)はflexの名前(AU1とかAU2)などが同じなので類推可能なんだが、 barneyにはよくわからんのが含まれている。 順番もめちゃくちゃ。もうお手上げである。 おそらくこれは完全な憶測なのだが、 flexは最初、AU1とかAU2などの謎のコード名が決まり、 それにキャラの担当ごとに勝手にフレームを割り当てていたのだが、 開発者たちが「flexちょっと標準化しません?」 とかいう話になり、 主要キャラができた後、 一般のキャラを大量生産する手前で、 standardflex_xsi.qciなどのようなものを作る世話焼役が現れ、 おおむね標準化がfixしたのではなかろうかなあ。
それで、half-life2の中のalyxとかbarneyなどのキャラを置き換えようという場合には今のような不都合が起こるが、 まったく新しいゲームの新しいキャラを作るときにはmale06を元にスクラッチから作れば良いのであり、 ドキュメントに書かれたように作っていけば良いものと思われる。 male06を元にbarneyを作ろうとしたら、 barneyから取ったqcファイルの通りにvtaを作り替えなくてはならん (male06のqcを使おうとすると首が裂ける)のだが、 たとえばbarneyのupper_rightという特殊なflexがどういうものかは誰も知らないし、 たとえmdldecompilerからbarneyのvtaを抽出してもxsi mod toolはvtaをloadできないので、 結局barneyのvtaを再現することはvalveの内部の人ででもない限りわからんということだわな。
kleinerのflexの記述は割とまとも。 standardflex_xsi.qciの中にすべてflexnameがある:
flexfile "mdldecompiler_expressions.vta" { flex "AU42" frame 5 flexpair "AU1" 1.0 frame 6 flexpair "AU2" 1.0 frame 7 flexpair "AU4" 1.0 frame 8 flexpair "AU1AU2" 1.0 frame 9 flexpair "AU12" 1.0 frame 10 flex "AU12AU25" frame 11 flexpair "AU15" 1.0 frame 12 flexpair "AU17" 1.0 frame 13 flexpair "AU10" 1.0 frame 14 flex "AU16" frame 15 flexpair "AU6" 1.0 frame 16 flexpair "AU9" 1.0 frame 17 flexpair "AU25" 1.0 frame 18 flexpair "AU18" 1.0 frame 19 flexpair "AU22" 1.0 frame 20 flexpair "AU20" 1.0 frame 21 flex "AU32" frame 22 flex "AU24" frame 23 flex "AU38" frame 24 flex "AU31" frame 25 flexpair "AU26" 1.0 frame 26 flexpair "AU27" 1.0 frame 27 flexpair "AU26Z" 1.0 frame 28 }
男キャラはBarneyはあきらめてKleinerにしようかな。
で、d1_trainstation_05というチャプターなのだが、 ここのalyxはとても表情が豊かで、他のチャプターではこんなにまばたきをしたりしない。 最初に作られた開発者向けのチュートリアルでもあったのだろう。 そうとうきっちりと作られている。 alyxがうまくできているかどうか確認するにはちょうど良いシーンである。 例によってwmvの動画を置いておく: nesan_glasses.wmv。
このムービーには開発を途中で放棄したジャージおじさんがBarneyとして登場している。
まあ多少不具合は残っているがFace Poserに進むことにしよう。 同じ場所に立ち止まっているヒマはない。