|
|
![]() 【Vocaloid初音ミクとMikuMikuDanceという驚愕のソフトウェア】 |
||
【リンクフリー】 私設研究所ネオテックラボ Neo-Tech-Lab.co.uk 【記載者】 上田智章 ☆Tomoaki Ueda☆ NTLMMD |
![]() |
|
ここにチェックボックス型外部コンテンツ・メニューが入ります。 | ||
|
|
【過去メモ・メニュー】 ■2008/03/11 驚愕のソフトウェアMMD ■2008/03/13 英語版登場!! ■2008/06/27 プロ級の作品が登場 ■2008/12/31 マルチモデルバージョンの普及 ■2009/01/01 咲音メイコのスカート / GaoMachine氏のSkyLineスクリプト ■2009/01/24 物理干渉に挑戦する人達 ■2009/04/24 ちびミク登場 ■2009/06 物理エンジンBulletが搭載された(Version5.xx登場!) ●ついに物理エンジンBulletを搭載したMikuMikuDance5βの配布が開始 ●MikuMikuDance5β 重力設定で『風』が表現可能に!! ●オリジナルモデルに物理エンジンを搭載できるエディタが標準装備 ●ちびミクちゃんに物理エンジンを実装してみる ●ちびハクちゃんにも物理エンジンを実装してみる ●きれいなアホ毛の定義方法 ■2009/08 ブラウザでリアルタイム3Dグラフィックスの時代到来! ■2009/09 進化を続けるMikuMikuDance!Sphere Mapping機能追加! ■2009/09 Excel VBAでMikuMikuDanceのモデルを表示するぞ! ■2009/10/15 誰でも簡単に曲を作れるミュージック・シェーク(MusicShake) ■2009/10/17 テクスチャーにjpegファイルが使える / bone制御について ■2009/10/25 ソフトウェア業界のMikuMikuDanceへの期待?? ■2009/11/01 Panoramio用ツールにもMikuMikuDance動画を表示したよ ■2009/11/10 うーん、なかなかExcel VBAでの作業を再開できない(泣 ■2009/11/13 あれ?YouTubeの仕様が変わりましたね?(困 ■最近のメモ(メイン・ページ) |
![]() |
■■■記載日2009年10月9日■■■ 【Excel VBAでMMDモデルに施した光源計算の内容をメモ】 先週に仮実装した『光源計算』の内容をちょっとメモしてみた。本当はすぐにでも表情(Skin)に進みたいのだが、意識してまとめておかないと後で何がなんだかわけがわからなくなるので。 ポリゴン・フィルとテクスチャー・マッピングの動作原理図(簡易版)をPMD1.htmに追加。 実は光源計算(ライティング)辺りから段々とよくわからなくなってくる。 現時点でO3Dのドキュメントと光源計算内容に差が生じている。x_material型に基づいて『環境光』Ambientと『拡散反射』Deffuse、『鏡面反射』Specularしかコーディングしなかったが、何故かO3Dは第4項があるし。何これ? 【O3D Calculating Lighting】 OUT.COLOR = material.emissive + light.ambient * material.ambient + light.diffuse * material.diffuse * dot(normal, lightvector) + light.specular * material.specular * dot(normal, halfvector) material.shininess emmisiveって自ら発光する成分のこと?つまり暗闇でも光るってことですね。じゃあ、ambientもdiffuseもfaceColorで実現するのかな?なるほどね。そうすると式を変える必要があるなぁ。今度変えてみるかな。 何気にシャドーイングもやらなかったり。フロアに影を落とすだけなら透視変換の応用で床をスクリーン座標に見立てて光源位置あるいは光線ベクトルで各頂点を投影して影ポリゴンを得る方法はあるだろうけど....凹凸のある面に影をマッピングする方法がわからなかったり。 今後のコーディング方針(もう昔と違って脳内で設計、いきなりコーディング。地球にやさしいペーパーレス設計)を建てるために、PMDデータ構造を眺めて表情(Skin)処理を想像してみた。これを透視変換処理の前に行えば、表情(Skin)操作できるはず。 さらにIK Bone制御もわからないので空想(脳内シミュレーション)してみる。 ところでGoogle O3Dのドキュメントに『Skining』というタイトルを見つけた。凄い!Boneの関節部の滑らかな変形処理に使えそうな予感。 |
■■■記載日2009年10月3日■■■ 【Excel VBAでMikuMikuDanceのモデルを表示】(続き)[光源計算] まだ、ところどころ点々が出ているが、『光源計算』を仮実装してみた。環境光で決まる色調と、法線ベクトルと入射光ベクトルのなす角で決まる拡散反射項、反射光ベクトルと視線ベクトルのなす角で決まる鏡面反射項を盛り込んだ。光源は平行光源とした。理由は計算がちょっとだけ楽だから。ただ、MikuMikuDanceにはこれら3項の成分の配合比率が存在するかもしれないようでよくわからない。(いや、こちらの単なるバグなのかな。やっぱり。)これから微調整タイムだな。 でも段々とらしくなってきたかも。やっぱり光源計算入れないとダメだったねぇ。この結果を見れば入れてよかったと思える。エッジというかトゥーンを実装していないので少しMikuMikuDanceとは雰囲気が違うけど。 次は表情(skin)かな....やっぱり。 しかし、ここまでできたのもみんなこちらのページ(通りすがりの記憶)のおかげです。本当に感謝。 光源計算まで仮実装したExcel VBA版3次元グラフィック・ライブラリ[鏡音リン] (ここまでのコーディング・デバッグ累積時間23時間) ![]() ![]() |
![]() |
■■■記載日2009年10月2日■■■ 【Excel VBAでMikuMikuDanceのモデルを表示】(続き)[透視変換] 昔のことはもう結構忘れていて理論に自信がなかったので、『透視変換』のバグ取りに苦労してしまった。 原因は、コーディングのミスだった。先に変数を書き換えているのに...碌に考えずに書いたのが悪かった。 短いプログラムに苦労してしまった。 別ページに書いていた理論通りベクトルで済ませた。 マトリックスはBone制御に取っておこう。 【参考1】VBA 3Dグラフィック・ライブラリ 【参考2】VBA 透視変換の説明とソース 【参考3】鏡音リンを透視変換表示するExcel VBA (ここまでのコーディング・デバッグ累積時間19時間) しかし、こうなると是非とも光源計算(ライティング)をしなければならないな。 なんかコードを書いてると、FPGAでハードを再設計すれば超高速アクセラレータが自作できそうな気がしてきた。 |
【Excel VBAのMikuMikuDanceモデル達】![]() ![]() ![]() |
■■■記載日2009年9月28日■■■ 【Excel VBAでMikuMikuDanceのモデルを表示】(続き) ポリゴン・フィルのバグ取りを実施。ついでにテクスチャーマッピングもポリゴン・フィル処理ルーチンをコピーして作る。ポリゴン・フィルはグローシェーディングに対応しているが、光源計算を行っていないので物体色でそのまま表示されている。そのせいでベタっとした感じ。 テクスチャー・マッピングで画像ファイルが利用されるときの座標系はu座標は左から右へ増加方向だが、v座標は上から下へ増加方向となっている。画像ファイルのサイズに関係なく、座標範囲は0.0~1.0となっている。今は表情やBoneが優先だが、やっぱり将来的に光源計算は入れよう。 鏡音リンの画像を表示したとき、バグに気付く。zy座標方向のビューで左右が反転していた。orz.... Excel VBA(Visual Basic for Application)がわかる人には、別ページにソースやデータを用意した。 PMDデータの構造と3次元グラフィックスライブラリを公開中。 (ここまでのコーディング・デバッグ累積時間14時間) ■■■記載日2009年9月27日■■■ 【Excel VBAでMikuMikuDanceのモデルを表示】 ワイヤーフレームだけだとわからないことも多い。Google O3Dに移植するにしてもMikuMikuDanceのモデル構造が把握できたわけではないのでチェック用のビュワーをMicrosoft社のExcelで作ることにした。昔作ったExcel VBA版3D-CGライブラリをDirectXやMikuMikuDanceのデータ構造を念頭にして作り直した。 急造なので、まだまだポリゴン・フィルにバグがあるし、透視変換、光源計算、テクスチャーマッピング等のモジュールも接続していない状態だが、一応、下のような結果が得られた。ここまでで8時間くらい使った。流石にちゃんとした3D-CGを実装するのは2、3日ではきつい。後、フルに1カ月はかかりそうな感じ。ちょっとそんな時間は捻出できそうにないなぁ。 如何に光源計算(鏡面反射、散乱光)、シャドーイング(影付け処理)が大事かわかる。物体色だけだとベタっとした感じ。取り敢えず、透視変換、テクスチャーマッピング、表情くらいで止めとくかな。アルファ・ブレンディングもどうしようかな?ちゃんとした透明処理を行うにはzソートが必要になってしまうし。 さすがに眼がないと怖いな。あと表情データも読み出して持ち込む必要がありそうだ。まぁ、頂点データリスト(Vertex Buffer)、面頂点データ(Index Buffer)、材質定義リスト(material)くらいまでは大体理解できたように思う。透視変換は全頂点データに対して変換をかけるだけだし、テクスチャーマッピングも単純なリニア・マッピングなら簡単だろう。でも実際に光源計算はどうだろうな。手を抜いてグローシェーディング・レベルに抑えた方がいいかも。PhongまでやるのはVBAではかなりきつい。 でも、これで3D-CG表示が必要なセンサ・ネットワーク関連アプリケーションで新しいアルゴリズムの確認が行える。このライブラリはかなり仕事でも使えるかもしれない。前に書いた実写動画からのモーション抽出も独自に実験が行える。 真の目的はBone(特にIK bone)と表情の実装後にある。センサ・ネットワークを持ったAIを組み込みたいのだ。つまり、メカニカル制御は取り敢えず横に置いておいて知性化しようと思っているわけだ。 ![]() |
![]() |
■■■記載日2009年9月26日■■■ 【O3Dの制約】 久しぶりにちょっとO3Dを触ってみる。前回、Excel Sheetに落としたMikuMikuDanceの初音ミクver.2の形状データを描画してみようと思ったからだが、いやな予感が的中。こんなメッセージが出力された。 ![]() 『1つのバッファには65534要素までしか登録できないよ』って、どうやらindexバッファのエラーらしい。 初音ミクのデータの場合、indexバッファの要素数が68883で確かにその数値を超えている。 なら、弱音さんなら表示できるかもと考えて諦めずトライしてみたら、ちゃんと表示できた。弱音ハクの材質定義リストは13個なので材質(material)毎に分割すればなんとか多色表示まではできそうだ。 でもまだ疑問はある。Text AreaにShaderの入出力フォーマットを定義する部分があるのだが、テクスチャーマッピングと通常の色付けを混在させる方法を勉強しなくちゃならない。とか言いながら普段から人の書いた本は全く読まない、マニュアルも見ない性分なので、勉強といっても実はコードを地道に読んでトライアンドエラーをするだけなのだが。 【MikuMikuDance初音ミクver.2の場合】 demoPrimitive.numberPrimitives = 22961; // 【三角形の総数】22961 = 68883/3 triangles demoPrimitive.numberVertices = 12354; // 【頂点数】 【MikuMikuDance弱音ハクの場合】 demoPrimitive.numberPrimitives = 14701; // 【三角形の総数】14701 = 44103/3 triangles demoPrimitive.numberVertices = 8085; // 【頂点数】 |
■■■記載日2009年9月19日■■■ 【亞北ネルのテクスチャー領域の謎】 まぁ、どうでもいいことなんだけど、興味本位で亞北ネルのPMDデータのテクスチャーマッピング領域がどうなっているかトレースしてみたらこんなになった。??何?これ? あっ!そうか!車輪みたいなのは眼だね。 でもなんで片腕を消しているんだろう?『透かし』だったりしてね.... ![]() |
初音ミクver2形状データ(Excel:MikuHatsuneVer2.xls) 弱音ハク形状データ(Excel:HakuYowane.xls) ![]() 咲音メイコの形状データ ![]() 亞北ネルの形状データ ![]() 弱音ハクの形状データ |
■■■記載日2009年9月19日■■■ 【MikuMikuDanceのPMDデータ形式からなんとか形状データが読みだせた】 MikuをWeb上で喋らせようとしている。やっぱりMikuMikuDanceの初音ミクに喋らせたいので、PMDデータについて勉強してみる。こちらのページ(通りすがりの記憶)と、MikuMikuDanceに添付のDirect-X形式ステージデータ(stage01.x)を参考にしてMicrosoft Excel VBAで抽出プログラムを書き始めた。取り敢えず、頂点データリストと面データリスト、及び材質データリストを抽出してみた。 ちゃんと読みだせたかどうか確認のためにワイヤフレームで書き出してみる。 おぉ、やったぞ!ミクだ! 頂点数12354個、面(三角形)数22961ポリゴン、材質数17。すごく細かい。これでローポリとは... プログラムは自作の汎用ルーチンを使って記述したので短い。後はモデル毎に次々変換していくだけ。 各モデルのワイヤフレーム表示を見てモデルデザインの凄さにあらためて驚く。美しい。これは天性の才能だな。とてもまねできそうにない。しかし、これでMikuMikuDanceモデルをBlenderを経由せずに直接O3Dデータに移植できそうな感触がちょこっとだけ湧いてきた。 基本的にMikuMikuDanceもO3DもDirectXベースのはずなのでそんなに違わないはずなのだが... Google O3Dの方に移植するにはBoneごとのShapeに分割すればいいのだろうか? ちょっとコンセプトがわからず、停滞している。私としてはたとえ階層構造データでも頂点データリスト、面頂点データリスト、材質定義リストをそれぞれ1つずつにまとめ、各階層(子オブジェクト)ごとに使用するインデックス範囲を定義するコマンド(range)がほしいのだが、O3Dの例題(サンプル)からそれを探し出せないでいるためだ。 MikuMikuDanceのPMDデータについて少しExcel VBA文法で記述してみた。 まだ、2次元ワイヤフレーム表示だけで、透視変換と3次元ポリゴン・フィル、テクスチャーマッピングまでリンクしていないものだが。不思議なことにOffice2007だとエラー(たぶん原因はワード境界の扱い)がでるのでOffice2003を使っている。 ここまで作ってデータを見て気がついた。色違いモデルは材質定義リスト部分を書き換えて戻しているんだな。なるほどね。材質も17種類だったらVBAでも作れそうだな。そしてさらに気がついた。なんと初音ミクモデルには使用していないはずのUVデータがほぼ全面に存在している。ということは材質ごとテクスチャーマッピングファイルに差し替え可能なんですね。面白い。 こうなってくるとVMDデータも調べてみる価値がありそうだ。もしかしたらMikuMikuDanceでシーンデータの出力が可能かもしれないからだ。 というよりMikuMikuDanceに物理演算後のフレームごとのBone情報の吐き出し機能があったらなぁ。そうすれば物理演算した動画再生をSilverLightやO3Dに表示するのが楽になるんだろうけど。 ...などと楽をしようと考えてはいけないのだが。 ![]() ![]() MikuMikuDance 初音ミクver2モデルの形状データ(モデリング:あにまさ氏作) |