2009-07-05

[]PTAMテスト(その3) PTAMテスト(その3) - Nao_uの日記 を含むブックマーク はてなブックマーク - PTAMテスト(その3) - Nao_uの日記 PTAMテスト(その3) - Nao_uの日記 のブックマークコメント


基準位置の合わせ方

普段はキーボードの前にDVDケースを置き、ケースをマーカー代わりにして毎回同じようにカメラを動かしてキャリブレーションを行うことで、ほぼ同じ位置に基準平面を生成するようにしている。

動画の撮影時にはモデルをそのまま机の上に立たせたかったので、DVDケースでなくキーボードを基準としてカメラ位置をキャリブレーションした。キーボードを基準にするとキーの傾きに沿って斜めに平面が生成されてしまうので、そこからは手作業で角度と位置を微調整している。

影について

普段は上記のようにDVDケースを基準にカメラ位置を設定しているため、無限平面の上にDVDケースの形に膨らんだ足場のモデルを作成し、影を落とすための透明物体としてレンダリングしている。テスト版の動画では、この透明モデルの輪郭がモデルの足元の左右に黒い影として表示されているのがわかる。

本番の撮影時にはこの黒い影を消すために、DVDケース型のモデルを左右にスケーリングして引き伸ばしている。なので、キーボードに落ちている影は実際にはキーボードの形に膨らんでいるのではなく、逆にお立ち台から地面に向かって凹んだ形状に沿って表示されている。それでもちゃんとキーボードの形に影が落ちているように見えたため、そのまま手を加えずに動画を撮影することにした。

床とキーボードの境目くらいなら目分量で位置を合わせることができるけど、もっと複雑な背景に対して実際の物体と同じ形の透明物体をレンダリングして、zテストでモデルを隠すようなやり方がうまくいくのかは実験してみたい。

レンダリング関連

ディファードレンダリングを使用し、背景になじませるためにSSAOで陰影を追加している。現時点ではSSAOはZ値のみを使用。アンビエントオクルージョン関連はCGを実写にうまく合成するために非常に重要な要素になりそうなので、今後もいろいろ模索してみたいと思っている。

実写と合成してみるとCG単体では気づかなかった違和感や、背景に馴染ませるために足りない要素などがよくわかり、とても参考になった。

質感

キューブマップの反射係数やスペキュラの強さを元のモデルに手を加えることなく調整するために、テクスチャのαプレーンに反射率を書き込む手法をとることにした。α値が0の部分は鏡面反射しないマットな質感になり、1.0に近いほどキューブマップ反射とスペキュラが強い状態でレンダリングされるようになっている。このやり方はあまり多様な質感は表現できないけど、Gimpなどを使って適当に元テクスチャのαプレーンに書き込むだけで簡単に加工や調整ができるので簡単なのが良い。

モーション再生について

MMDの標準モデルは200近い関節を持っているため、そのままではスキニング用の行列が頂点シェーダーのレジスタには収まり切らない。モデルをレジスタに入る50関節程度のセグメントに分割する手法もあるけれどけっこう面倒な作業が必要になるため、今回はスキニング行列をCPUでテクスチャに焼いて渡すやり方を採用した。この形であれば将来的にモーションブラーに対応するときにも容易に拡張できるはず。

足や髪の毛のIKについてはMMDの元の実装がどんな形になっているのかが不明だったために、自前の実装でなるべく似た動きをするようにしてみたものの、いまひとつ調整不足でたまにひざの関節や足首が怪しい動きになる時がある。また、捻りボーンなどの特殊な設定も未実装。とりあえず今動かしている範囲ではそれほどおかしな動きはしていないようなので保留中。キーフレームの非線形補完にも対応はしていないのだけど、今回使用したモーションはキーフレームの設定間隔が短いためにほとんど気にならなかったので、これも今回は保留にしている。

表情

MMDの表情変化は頂点モーフィングを使用していて、自前のシステムとは相性が悪い。

使っているライブラリは1つの頂点データを全表示モデルで共有する作りになっているので、何も考えずに頂点データをCPUで変形させてしまうと複数体表示したときに全員の表情が同時に変わってしまう。表示モデルごとに頂点データをコピーするような形に修正するのは手間がかかりそうだったので、今回は実装を見送ることにした。

もし表情変化を追加するのであれば、頂点データを直接変形させるのではなく、表情の変位情報をまるごとテクスチャに焼いておいて、必要な分だけ頂点シェーダー内で読み込んでブレンドするような仕組みが良さそうかも。顔以外の動かない部分のデータも持つことになるので効率は悪いけど、七葉1052式のような頂点数が少なめモデルであればあまり問題にはならないんじゃないかと思う。

モデル・モーションともにいろいろな人によって解析された情報を使わせてもらったので、さほど時間がかからずに導入できた。

もともと使ってたライブラリの範囲内でなるべく手間をかけずに動くようにしてみたような状態なので、他のPMDファイルを読み込んでいる人がスキニングやIK、表情モーフィングなどをどんなやり方で実装してるのかが気になるところ。