前回、
MMDなミクさんを表示することが出来ましたが、
踊らせることは未だできていません。
ただ、いろいろ分かって来たこともあるので
メモっておきたいと思います。
まず、
PMD+VMDをCollada(DAE)に変換できるツールがあることが分かりました。
それはこちらのMMDfromColladaです。
で、Three.jsで再現すべく色々やってみたのですが、
うまく行ってません。
ColladaLoaderはDAEのGeometryとMaterial情報から
SkinnedMeshを作ってくれるのですが、
そのSkinnedMeshにはBone情報が設定されてなく、
各頂点がどのBoneから影響受けるのか、
及びその影響度(重み)情報も設定されていないようです。
ColladaLoader.jsを見てみると、
//createBones( geometry.bones, skin, hierarchy, skeleton, null, -1 );
//createWeights( skin, geometry.bones, geometry.skinIndices, geometry.skinWeights );
というようにコメントアウトされている関数があるのを見つけました。
現状では自前でこれをどうにかしないといけない感じです。
当然Animation情報もThree.jsで扱えるようにしないといけないわけですね。
ということで保留・・・(^_^;)
ときに、
Three.jsはリビジョンが50に上がったようです。
んで、こんなのを見つけました。
BoneというかSkeletonアニメが良い感じに動いています。
ShadowMapな影もどうやってるのか参考になりそうですね。
これをミクさんでやりたいのです。
中身を覗いてみたところ、データはjson形式になっており、
“Blender 2.63 Exporter” というテキストを見つけました。
調べた所、BlenderというオープンソースなCGソフト向けの
jsonエクスポータをThree.js側で用意していることが分かりました。
さらに、ここやこことかここで
PMDやVMDのインポータやエクスポータがあることも発見しました。
Blenderに読み込ませてThree.jsなjsonで書き出せば
バッチリ行けるんぢゃないのか!?
ということで、
意気揚々でやってみたところ、
Blender上で踊ってくれるようになりました。
おお!
んじゃ、あとはThree.jsなjsonで出力すれば!!
Three.jsで再現できるはず!?
・・・残念ながらうまく行ってません。
正確にはモーションさせることは出来たのですが、
結果がわけわかめなことになってます・・・。
なんかもう不気味な踊りになってしまっています(^_^;)
ん~・・・
現状の自分のスキルでは埒が明きそうにないので、
まずはThree.jsの中身を解析して、
より理解を深める所から始めた方がよさそうです(^_^;)
ちなみに、
ちょっと分かったコトは、Blenderを経由すると
MaterialのAmbientやDiffuseの値がおかしくなっている感じです。
少なくともPmdEditorのエクスポータを利用して出力した
DAEの内容と一致していません。
どうやらBlenderの内部のMaterialでは、
Ambientは色(RGBA)としては保持してなくて、
明るさ的な情報だけしか保持していないっぽいようです。
Diffuseが一致してくれないのはイマイチよくわかりませんでした。
なんにしてもBlenderでPMDやPMDから直接変換されたDAEを読み込むと、
一部の情報がうまく再現できなくなってしまう感じです。