|
|
【Vocaloid初音ミクとMikuMikuDanceという驚愕のソフトウェア】 |
||
【リンクフリー】 私設研究所ネオテックラボ Neo-Tech-Lab.co.uk 【記載者】 私設研究所Neo-Tech-Lab.com 上田智章 |
|
|
ここにチェックボックス型外部コンテンツ・メニューが入ります。 | ||
|
|
【メニュー】 [index] ■メモ [PMD1] ●【VBA】ポリゴン・フィルとテクスチャー・マッピング [PMD2] ●【VBA】透視変換 [PMD3] ●【VBA】光源計算 [Sensor]★【NyARToolkitCS】拡張現実センサ【ソース公開】C# [PMD6] ■【NyARToolkitCS】MMDのPMDで拡張現実(モデル描画)C# [PMD4] ■【NyARToolkitCS】MMDのPMDで拡張現実(表情処理)C# [PMD5] ●IK bone制御 [Kinect]★【Kinect Sensor】拡張現実センサ2【ソース公開】C# [TTS] ★【iSpeech APIの音声合成TTS】【ソース公開】JavaScript [シンセ]★『JavaScriptでWebシンセサイザ/ボーカロイド(なんちゃって版)を自作してみた』 |
|
【Webシンセサイザ/ボーカロイドのページ】JavaScriptだけでシンセサイザやボーカロイドの歌唱/音声合成を実装してみようとする試みを始めました。【対象ブラウザ】Google Chrome12, Mozilla FireFox5, Apple Safari ●『なんちゃって初音ミク』NTL版Text-To-Speech API [JavaScript Ver.0.06] ●『なんちゃって初音ミク』Ieavan Polkka [JavaScript Ver.0.06] スタンダード・ドラム・セット付 音が出るまでに10~30秒を要します。気長にお待ちください。 【WebGLのページ】JavaScriptでリアルタイム3次元グラフィックスが楽しめる時代の到来までもうすぐです。現在、Google Chrome12、Mozilla FireFox5、及び開発版のSafari、Operaで使うことができます。 WebGLは、JavaScriptエンジンv8とDirectXを利用して高速化したOpenGLを融合して構成されたものです。 2011年5月に指摘されたセキュリティー問題はありますが、処理速度の高速性から利便性も高いので、将来的には普及するのではないでしょうか? ●WebGLとは? ●事前準備:利用できるウェブブラウザは? ●事前準備:FireFox5でWebGLが動作しない場合には? ●WebGLのサンプル ●WebGLのデモ ●クロスドメインテクスチャーを将来も利用できる方法 ●ローカルのPMDファイルを読み込んでJSON形式に変換し、3次元モデルを表示 ●物理エンジンBullet.jsのWebGLデモの紹介(Pl4n3氏のragdollデモの修正版)[btBoxShapeとbtCapsuleShape] |
【参考】鏡音リンを透視変換表示するExcel VBA |
バグ修正のお知らせ■バグを発見したので、NTL_Lib3DCG_ver048.zipをお使い下さい。詳しくはメモを書きましたのでこちらをご覧ください。 ■■■記載日2009年10月9日■■■ 【MikuMikuDanceのモデル(PMD)をExcel VBAで光源計算表示】透視変換まで行ったら次はいよいよ光源計算だ。透視変換処理の前段階で、視点座標(カメラの位置)Eye (x_Vector型)、注視点座標(カメラで撮っている場所、フォーカス)Target (x_Vector型)、上方ベクトルEyeUp (x_Vector型)を基にして視線ベクトルEv (x_Vector型)とその単位ベクトルEz (x_Vector型)を求めた。この単位視線ベクトルEzが光源計算に重要な要素となる。光源計算では、x_material型(材質)で定義されている物体色faceColor (x_ColorRGBA)、鏡面反射係数power (単精度浮動小数点型)、鏡面反射光色specularColor (x_ColorRGB)、散乱光色emissiveColor (x_ColorRGB)と、光源の方向を示す入射光源ベクトルEl (x_Vector型)、法線ベクトルnormal (PMD_vertex型)、及び単位視線ベクトルEzを用いて光源計算を行う。 詳しい資料がなかったので以下のように仮定した。 光源は無限遠を想定した平行光源。光源色は白色光とする。 雲、建物、周囲の物体等の様々な反射体からの反射により全方位から入射する光によって一定の輝度の環境光Ambientで物体色faceColorが決定される。これを環境光成分とする。 一般的に物体表面では乱反射が起こる。この乱反射による反射光強度は入射光源ベクトルElと法線ベクトルnormalの内積に比例すると考える。これを拡散反射光成分とする。 表面が滑らかな物体では鏡面反射が起こる。鏡面反射は入射光源ベクトルElと法線ベクトルnormalによって決まる鏡面反射光ベクトルを単位ベクトル化したEr方向が最も強い。 この反射光方向に視点が存在するとき最も明るい反射光が観測されるので、単位視線ベクトルEzと単位反射光ベクトルEr、鏡面反射係数powerを基に鏡面反射光成分を求める。 これら3成分を適切な割合で合成することで光源計算を行うことができる。 【図1】光源計算について ■■■記載日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で実現するのかな?なるほどね。そうすると式を変える必要があるなぁ。 【図1】では『拡散反射』Deffuse項にemissiveColorを使ったが、正しくはfaceColorを使うべきらしい。O3Dの記述に準拠するように修正する予定。 |
Public Ex As x_Vector ' 単位ベクトル(ex) Public Ey As x_Vector ' 単位ベクトル(ey) Public Ez As x_Vector ' 単位ベクトル(ez) Public Ev As x_Vector ' 視線ベクトル(Eye Line Vector) Public El As x_Vector ' 入射光源ベクトル(Light Source Vector) ' ****************************************************************************** ' ***** 【光源計算処理】 ' ****************************************************************************** Public Function NTL_LightingParallel(N As x_Vector, material As x_Material) As x_ColorRGBA ' N: 正規化された法線ベクトル ' Ev: 視線ベクトル ' El: 入射光ベクトル(事前に設定しておくこと)平行光源の存在方向を示す ' 環境光成分, 拡散反射成分, 鏡面反射成分 Dim C As x_ColorRGBA, C1 As x_ColorRGB, C2 As x_ColorRGB, C3 As x_ColorRGB Dim Diffuse As Single Dim Er As x_Vector, Reflect As Single, w As Single Const b1 As Single = 0.7 Const b2 As Single = 0.65 Const b3 As Single = 0.65 '【環境光】一定 C1.Red = b1 * material.FaceColor.Red C1.Green = b1 * material.FaceColor.Green C1.Blue = b1 * material.FaceColor.Blue '【拡散反射】物体色を法線ベクトルNと入射光ベクトルElの内積値で決定 Diffuse = N.x * El.x + N.y * El.y + N.z * El.z If Diffuse < 0 Then Diffuse = 0 C2.Red = b2 * Diffuse * material.EmissiveColor.Red C2.Green = b2 * Diffuse * material.EmissiveColor.Green C2.Blue = b2 * Diffuse * material.EmissiveColor.Blue '【鏡面反射】 w = 2 * (El.x * N.x + El.y * N.y + El.z * N.z) '【反射光ベクトル】 Er.x = w * N.x - El.x ' Er.y = w * N.y - El.y ' Er.z = w * N.z - El.z ' w = -(Er.x * Ez.x + Er.y * Ez.y + Er.z * Ez.z) If w < 0 Then w = 0 w = w ^ material.Power C3.Red = b3 * w * material.SpecularColor.Red C3.Green = b3 * w * material.SpecularColor.Green C3.Blue = b3 * w * material.SpecularColor.Blue '【効果】 C.Red = C1.Red + C2.Red + C3.Red: If C.Red > 1 Then C.Red = 1 C.Green = C1.Green + C2.Green + C3.Green: If C.Green > 1 Then C.Green = 1 C.Blue = C1.Blue + C2.Blue + C3.Blue: If C.Blue > 1 Then C.Blue = 1 C.Alpha = 1 NTL_LightingParallel = C End Function 【注意】拡散放射項はemissiveColorではなく、faceColorを使うのが正しいようですが、上記のリストはまだ反映できていません。 |
【「このクオリティ、誰も疑問を持たなかったのか?」 フジの「バーチャル女子アナ」不評】J-CASTニュース10月28日(日)10時0分雑談していて、このニュースが話題にのぼりました。 このページに来られるような方は、フジテレビの新番組に「バーチャル女子アナ」【杏梨ルネ】が登場したことは既に御存じだと思います。 でも一応、何故、【杏梨ルネ】が3次元モデルのくせに立体感に乏しいのか書いておきますね。 このキャラクタは3次元モデルに違いないが、テクスチャーマッピングだけで陰影付けをしており、光源計算を全く行っていないのです。 その結果、首もとや髪の毛の下に影が付かないだけでなく、凹凸に応じたシェーディングの変化が全くないCG画像となってしまいます。 通常のCG製作に使うソフトとかなら当然基本機能として備わっているはずの機能ですし、DirectXでも数行の追加だけでマシな映像が簡単に得られるはずです。 1996年作の【DK96 伊達杏子】でさえ光源計算を行っています。 ネットで言われている程、1980年代のCG(多くは2次元の手書きでした)ではないと思いますが、光源計算は是非やっておくべきだと思います。 残念な結果と言えば、Microsoft社のクラウドガールのときにも少し感じました。 調査段階では、検索でPMDフォーマットについて調べておられたようですが、Kinect for WindowsのおまけCGデータで読み込んで表示してみると、まばたきと『あうえお』くらいしか表情データが入っていませんでした。 MMDなので光源計算が入っている分、【杏梨ルネ】よりはマシですが、キャラクタ本来の個性がだせない結果になっています。 どうせCGデータを起こすのならもう少し頑張ってほしかったと思いました。 【光源計算の効果】咲音メイコの場合だとこんなに違いがでます。違いは明らかですよね? 【光源計算・透視変換無しのケース】 【光源計算・透視変換ありのケース】 |