「SATCH ARでアニメーション表示をやってみる(その1)」でやっていた2Dデータの準備をMMDでやってみましょう。

元データ作成はMikuMikuDance.exeを使いますが、ここでは作成方法は割愛します。
作成の仕方はVPVP wikiなんかを参考にしてください。

データの加工はPMDEditorに付属しているVMDView.exeを使います。

VMDView.exeは、pmdやvmdを読み込んで動きの確認を行うものですが、それ以外にも便利な機能が付いてます。

ここでは、AVI出力する際の各フレームデータを連番でBMP出力してくれる機能や背景色の変更をやってみます。

また背景透過などの作業にはimageMagickやGIMPを使ってみます。


作り方



MMDについてはVPVP wikiを参照。

PMDEditorやMMDのモデルデータ(pmd)、モーションデータ(vmd)などはここから辿れると思いますが、面倒だとお思いの方は以下からダウンロードしてください。

腕に覚えのある方は、MikuMikuDance(MMD)を使って元データを作成してください。

サンプルデータはvmd1個、pmd3個しかありません....。

PMDEditor_0063

サンプルpmd

サンプルvmd




VMDViewを使ってベースデータを作成

VMDView.exeを起動します。

VMDView起動時に「初期化に失敗」というエラーが出ることがあります。DirectX関連の場合があるので、DirectXを(再)インストールする必要があるかもしれません。
(requirement:.NET Framework2.0 DirectX 9.0c)



データ作成時には軸線やフロアメッシュは邪魔なので消しておきます。

メニュの表示をクリックして、「座標軸」のチェックを外します。



メニュのファイルをクリックして、「PMDモデル読み込み」と「VMDモーション読み込み」を実行。

「映像出力 - AVI/連番BMP」を実行。



「連番BMP保存」のボタンをクリック。

保存パスを指定するボタンをクリックして保存用フォルダーを指定します。

ファイル名を聞いてきますが、何でもいいです。

サイズは、SATCH Studio Liteを使用するので、128x128や256x256、512x512といった2の累乗サイズにします。


512x512でも何ら問題ないようです。当初、このサイズだと重すぎるのでは....という思い込みがあって縮小していましたが、 実際にやってみるとSATCH Studio上で問題なく動きました。縮小しない分エッジもきれいにでてますし...。

開始ボタンをクリック。



ヒント
256x256の画像にする場合、512x512で保存した後で256x256に縮小した方がエッジはよりスムーズになるようです(エッジがアンチエイリアスされるせいかな)。
ただこの方法を使った場合、GIMPなどで画像の背景を消去してから透過させないと、imageMagickのtransparentオプションを使うとエッジが黒く残ります。



GIMPの使い方は動画データを使ってSATCHのアニメーション表示用2Dデータを作成を参照。




またimageMgickで背景透過する場合、背景と同じ色がモデルで使われている場合その部分も透過されてしまいます。これを避ける意味で背景を青(R=0,G=0,B=255)や緑(R=0,G=255,B=0)など違う色で塗りつぶしておいたほうがいいです。 transparentの対象色はblueやgreenになります。

VMDViewでの背景色変更をする場合

メニュの表示 -> 表示設定





表示設定の背景色の黒いエリアをクリック



色の設定で、赤:0、緑:0、青:255を選んでOK




imageMagickを使って背景透過のデータを作成

インストールがまだの方は以下からダウンロードしてインストール。

imageMagick

インストール後は、imageMagickフォルダーにパスが通っているか確認してください。

VMDViewを使って作成された画像はデフォルトではすべて黒バックのbmpファイルなので、変換します。

DOS窓を開いて画像を保管しているフォルダーへ移動。

以下のコマンドを実行して、bmpファイルをpngファイルに変換。

mogrify -format png *.bmp

さらに以下のコマンドを実行して、背景を透過させます。

mogrify -transparent black *.png



以上です。

以後、SATCH Studio Liteでの作業については、
SATCH ARでアニメーション表示をやってみる(その1) を参照。



SATCH Studioで動かしてみました。さすがに128x128の画像は軽快に動きます。絵はかなりつぶれてますけど....。



サンプル3

SATCH VIEWERで動作します。

サイズは512x512でやってみました。

pmdはサンプルの初音ミク・モデル。



SATCH VIEWERのQRリーダーを起動したら以下のコードを読みます。




VIEWER画面になったら以下のトラッキング画像にカメラを向けます。
トラッキング用の画像(クリックで拡大)






以下のサンプルはブルーバックで背景を透過したものです。



単純に黒バックの時よりバックのみ色を変えるのに手間はかかりますがどんなもんかやってみました。

VMDViewの表示設定を使えば楽でした。

ちょっと位は効果があるような気がします。

背景透過のimageMagickのコマンド。

mogrify -transparent blue *.png



SATCH VIEWERのQRリーダーを起動したら以下のコードを読みます。



トラッキング用の画像は同じ。



以下の新しいサンプルではトラッキング画像から開放されるようにしました。



SATCH VIEWERのQRリーダーを起動したら以下のコードを読みます。



トラッキング用の画像は同じ。

Luaコードでは、一度トラッキングに成功したら、固定位置・方向で表示するようにしました。トラッキングをロストしても表示を続けます。

PositionとOrientationのセットはこんな感じ。

position:set(0, 0, -45)
orientation:set(0,90,0,0)
targets[luaIndex]['object']:setPosition(position, camera)
targets[luaIndex]['object']:setOrientation(orientation, camera)

アニメの動きは別関数にしておきます。

local function mmd_motion(t_index)

    --animation start

    if temp_num >= 72 and index <= max_index then
        
        setTextureToPlane(targets[t_index]['plane2d'], t_array[index])
        
        index = index + 1
        
    end
    
    --in case of repeat

    temp_case = max_index + 1

    if index == temp_case then

        temp_num = 71

        index = 0

    end
end




トラッキング成功のところではこんなコード。

temp_num = temp_num + 1
mmd_motion(1)

ロストしたところでも同様にこんなコード。

-- If any targets aren't detected
temp_num = temp_num + 1
mmd_motion(1)

サンプル

SATCH VIEWERで動作します。

サイズは256x256でやってみました。

pmdはサンプルの咲音メイコ・モデル。



SATCH VIEWERのQRリーダーを起動したら以下のコードを読みます。




VIEWER画面になったら以下のトラッキング画像にカメラを向けます。
トラッキング用の画像(クリックで拡大)




サンプル2

SATCH VIEWERで動作します。

サイズは保存時に512x512だったものを、256x256で縮小したものです。

こんな感じ。何か微妙です。



SATCH VIEWERのQRリーダーを起動したら以下のコードを読みます。




VIEWER画面になったら以下のトラッキング画像にカメラを向けます。

トラッキング画像は上と同じ。