・・・といっても、MMDをハックしたわけでもPMDViewの秘密バージョン(?)を使ったわけでもなく、元モデルよりも一回り大きなモデルを用意し、そこにAVIを貼り付けてなんとなくごまかしているだけです。
大きな流れとしては、
1. 普通にMMDでモーションを舞台背景つきででっちあげる
2. 対象となるモデルをPMDEditorで表示される頂点法線ベクトルを基にUVマップを張り替え、加算合成用モデルを作成
3. 対象モデルの特定ボーン(今回はセンター)の動きに追従するようカメラを動かし、上下左右前後360度の映像をAVIで録画
4. それぞれbmpに分解し、動くスカイドームでも使用したPanoToolsで1枚360度を表した球状環境マップを作成
5. 連番BMPで作成した球状環境マップをAVIにつなぎ直す
6. 1で作成したものにscreen.bmpをテクスチャにした加算合成用モデルを重ね、5の動画を表示させる
って感じです。
最初、メタセコイアで環境マップ貼り付けのプラグインでも作ってみようかとも思ったのですが、各頂点の法線ベクトルを出すには、まず面の各頂点から面法線を、さらに各面が共有する頂点をまとめて頂点法線を求めなくてはならない(はず)のですが、私の脳みそでは一生かかっても完成することはなさそうだったので、PMDEditorで表示されるデータを流用して作成しました。
変換の自動化にあたって、初めてUWSCってのを使ってみたのですが、汎用性高くていいですねコレ。
環境マップ用の一回り大きいモデルの作成ですが、アクセサリの場合はメタセコイアの「面の押し出し」、pmdモデルの場合はそれだと頂点数が増えてしまい、再度スキニングを行う手間が増えてしまうので、PMDEditorのスケールや移動を使って元よりも微妙に大きなモデルを作成しています。
# と、ここでpmdモデルだとscreen.bmpが使えないことが判明 orz
# 仕方なしに15個のアクセサリに分割して代用してます・・・。手抜きで間接に隙間が
各頂点ごとにリアルタイムでUVマップの座標を算出しているわけではないので、センターボーンとかけ離れた動き(首、腕、足など)、またはモデル正面から逸脱したカメラの動きをすると、違和感が出る可能性があります。
また、同時に再生できるAVIは1つなので、適用できるモデルは1つのみとなります。
# たぶん、適用先のモデルが同じ動きであれば、複数でもごまかせるとは思いますが。
制限をまとめると:
・動画AVIを占有してしまうので、(合成なしに)ステージ背景のスクリーンなどが使用できなくなる
・画面中に表示できる適用モデルは原則として一つ
・反射用にカメラに映らない後ろ方向もそれなりに作りこまないといけない
・環境マップ用のカメラの動きを逸脱するモデルの動き(センターに対する腕など)は違和感が出る可能性がある
・モデル正面からのカメラを想定した反射(のはず)なので、静止した適用モデルをぐるっと見回すと「なんじゃこりゃ」となる
・なによりも環境マップや専用モデルを作成する手間が膨大
・今はモデルモーションとも他のレンダーへ輸出することができるし、toon.bmpでそれっぽいこともできるので、同じ手間を掛けるならそうしたほうがいいです
というわけで、結論としては、
「なんでBlender使わないの?馬鹿なの?死ぬの?」
って感じでしょうか。
# 最初、これをタイトルにしようかと。
・使用スクリプトなど
http://cid-dc333aadd0f0517b.skydrive.live.com/self.aspx/V...
・参考サイト
MSDNライブラリ - 環境マッピング
http://msdn.microsoft.com/ja-jp/library/dd188508.aspx
Fake Sphere Mapping
http://www.daionet.gr.jp/~masa/column/2000-07-02.html
SphereMappingを応用した動的環境マッピング
http://www.geocities.co.jp/Playtown-Spade/2530/dynenv.html