OpenなVR空間でモデルさんと仲良くしてみる

 HTC Vive をお持ちの皆さん、お待たせいたしました。
「MMDモデルをくすぐれるVR体験ツール」を OpenVR に対応させる事ができましたので、MikuMikuTickleV06として公開したいと思います。
 OpenVRに対応したという事は、どういう事かというと、HTC Viveでも動作する可能性があるという事です。

 MikuMikuTickleV06は、以下のリンクからダウンロードできます。

MikuMikuTickleV06 ダウンロード
 V05からの主な改善点は、以下のとおりとなります。

・OpenVRに対応しました
・PMD/PMXモデルのモーションをVMD出力できるようにしました
・自分の頭に剛体を設定しました
・設定ファイル名を変更しました
・使用するVRHMDを設定ファイルに明記するようにしました
・CPU負荷軽減用の待ち時間を設定できるようにしました
・腕をIKで動かすモデルを正常に表示できるようにしました
・他(不具合対応等)

 ミニメロンが動作確認に使用した環境は、以下のとおりです。

・デスクトップPC
 (OS:Windows10 Home(64bit)/CPU:Intel(R) Core(TM) i3-3240 3.4GHz/
  メモリ:4.0GB/GPU:NVIDIA GeForce GTX 650)
・Leap Motion
・OSVR Hacker Development Kit v1.4
・Oculus Rift (DK1)
 これらのうち、OSVR HDKv1.4とOculus DK1は、どちらか片方だけあればよく、逆に二つ同時に使う事はできません。
 残念ながらHTC Viveでは動作確認ができておらず、本当に問題なく動くかどうかは分からないのですが、お持ちの方はぜひ試してみて頂きたいと思います。

 開発環境としては、前回までと同様に、Microsoft Visual Studio Express 2012 for Windows Desktopを使用します。

 動作させるためには以下のライブラリやSDK等も必要です。
 今回新たに導入した OpenVR SDK 以外は基本的に前回(V05)と同様ですが、DirectXTex及びBulletについては前回記載したビルド方法に誤りがあり、Windows8.1でモデルさんをくすぐるにはに記載した方法で行う必要があります。
・OculusSDK(バージョン 0.2.5c)
 →OculusRift DK1を使うためのライブラリです。OSVR HDKv1.4又はHTC Viveを使う場合は、なくても大丈夫です。
・OSVR SDK for Windows(32bit)
 →くすぐり漫画をOSVRな空間で読むに書いたとおり、http://osvr.github.io/using/ からダウンロード・インストールします。
・boost_1_61_0
 →くすぐり漫画をOSVRな空間で読むに書いたとおり、http://www.boost.org/users/download/#live からzipファイルをダウンロードし、その中にあるboost_1_61_0というフォルダを、C:\の直下に置きます。
 使うのはヘッダファイルのみですので、ビルド作業等は不要です。
・OpenVR SDK
 →くすぐり漫画をOpenなVR空間で読むに書いた通り、https://github.com/ValveSoftware/openvrからダウンロードし、圧縮ファイルの中のopenvr-masterフォルダをCドライブの直下に置きます。
・DirectXTex
 →http://directxtex.codeplex.com/ からダウンロードして、Cドライブの直下にDirectXTexというフォルダを作り、その中にダウンロードした圧縮ファイルの中身をすべてコピーします。
 VisualStudioExpress2012を立ち上げ、ファイルメニュー→プロジェクトを開く で、DirectXTexのフォルダの中にあるC:\DirectXTexフォルダの中のDirectXTex_Desktop_2012.slnを開いた後、メニューバーのすぐ下のツールバーの真ん中あたりにある「Debug」と表示されているリストボックスをクリックし、出てくる項目の中から「Release」を選択します。
 その後、ビルドメニュー→ソリューションのビルド を選択します。
 ビルドが正常に終了したら、ファイルメニュー→ソリューションを閉じる でプロジェクトを閉じます。
・Leap_Motion_SDK_Win_3.1.3
 →LeapMotionの新しいSDKで、Orionとも呼ばれています。
 まだ導入していない場合は、https://developer.leapmotion.com/ にログインしてダウンロードし、圧縮ファイルの中にあるLeap_Motion_SDK_Win_3.1.3というフォルダをCドライブの直下に置きます。そして、そのフォルダの中にあるLeap_Motion_Setup_Win_3.1.3.exeを実行し、LeapMotion用のドライバを更新します。
・Bullet(バージョン2.82)
 →現在の最新バージョンは2.86のようですが、MikuMikuTickleでの動作は未確認です。
 2.82は現在も https://github.com/bulletphysics/bullet3/releases/tag/2.82 からダウンロードできるようですが、フォルダの名前が若干変わっているかもしれません。
 今回は、モデルさんをくすぐるついでにスカートをめくってみるでダウンロードし、Windows8.1でモデルさんをくすぐるにはで行った方法でビルドしたものを使用します。
・MMDモデル
 今までデモ動画で使用させて頂いた
 Tda式初音ミク・背中見せアペンド(http://www.nicovideo.jp/watch/sm29211145)
 Tda式初音ミク・アペンド Ver1.00(http://seiga.nicovideo.jp/seiga/im2018614)
 Lat式ミクVer2.31(http://www.nicovideo.jp/watch/sm11205201)
の他にも多数のMMDモデルで動作確認をしております。
 今回IKを実装した事により、前回までは正常に召喚できなかったSANYO公式マスコットキャラクター「アイマリンちゃん Vol.02」(http://www.imarine-project.jp/)も正常に召喚する事ができるようになりました。
 なお、MMDモデルの中にはMMD以外のツールでの読み込みが禁止されているものもありますので、使用する前にモデルに付属しているReadme等を確認するようにして下さい。

[動作手順]
1、MikuMikuTickleV05プロジェクトの作成
 VisualStudioExpress2012のファイルメニュー→新しいプロジェクト を選択します。
 テンプレートからVisual C++ を選択し、Win32プロジェクトを選択して、名前欄にプロジェクト名(例えばMikuMikuTickleV06)を入力し、「ソリューションのディレクトリを作成」にチェックが入っている事を確認し、OKボタン→次へボタン→追加のオプションの「空のプロジェクト」をチェック(この時Security Development Lifecycleにチェックが入っている場合はチェックを外す)→完了ボタン の順に押します。
2、リリースビルドへの切り替え
 メニューバーのすぐ下のツールバーの真ん中あたりにあるリストボックスに「Debug」と表示されている場合は「Release」に変更します。
3、ソースの準備
 MikuMikuTickleV06のダウンロード圧縮ファイル(mmt_v06.zip)の中の、MikuMikuTickleV06というフォルダに含まれている、readme.txtを除く全ファイルを、MikuMikuTickleV06.slnの存在するフォルダの中にある、MikuMikuTickleV06というフォルダにコピーします。
4、インクルードディレクトリの設定及びプリプロセッサの定義
 VisualStudioの画面の右の方にあるソリューションエクスプローラという枠の中の、一番上に表示されているプロジェクト名(MikuMikuTickleV06)をクリックして選択状態にし、プロジェクトメニュー→プロパティでプロジェクトのプロパティを表示させます。
 「構成プロパティ」の中の「C/C++」の中の「全般」をクリックし、プロパティページの右側の枠の「追加のインクルードディレクトリ」をクリックします。枠の右端に現れる下向きの矢印のようなマークをクリックし、「編集」を選択して表示されるダイアログボックスの上の枠に、以下の7行の内容を入力します。

C:\Leap_Motion_SDK_Win_3.1.3\LeapSDK\include
C:\OculusSDK\LibOVR\Include
C:\DirectXTex\DirectXTex
C:\bullet-2.82-r2704\src
C:\Program Files (x86)\OSVR\SDK\include
C:\boost_1_61_0
C:\openvr-master\headers

 ただし、OculusSDKを持っていない場合は、2行目を除いた6行を記述します。
 入力が終わったら、OKをクリックします。

 OculusSDKを持っていない場合は、「構成プロパティ」の中の「C/C++」の中の「プリプロセッサ」をクリックし、プロパティページの右側の枠の「プリプロセッサの定義」をクリックします。枠の右端に現れる下向きの矢印のようなマークをクリックし、「編集」を選択して表示されるダイアログボックスの上の枠に、
WITHOUT_LIBOVR
という文字列を追加します。
 入力が終わったら、OKをクリックします。

5、ライブラリディレクトリの設定
 「構成プロパティ」の中の「リンカー」をクリックし、プロパティページの右側の枠の「追加のライブラリディレクトリ」をクリックします。枠の右端に現れる下向きの矢印のようなマークをクリックし、「編集」を選択して表示されるダイアログボックスの上の枠に以下の6行の内容を入力します。

C:\Leap_Motion_SDK_Win_3.1.3\LeapSDK\lib\x86
C:\OculusSDK\LibOVR\Lib\Win32
C:\DirectXTex\DirectXTex\Bin\Desktop_2012\Win32\Release
C:\bullet-2.82-r2704\lib
C:\Program Files (x86)\OSVR\SDK\lib
C:\openvr-master\lib\win32

 ただし、OculusSDKを持っていない場合は、2行目を除いた5行を記述します。
 入力が終わったら、OKをクリックします。
 その後、プロパティページのOKボタンをクリックします。

6、ソースをプロジェクトに追加
 先ほどコピーしたMikuMikuTickleV06のファイルのうち、以下のファイルを プロジェクトメニュー→既存項目の追加 でプロジェクトに追加します。

DXCommon.h
LMCHand.cpp
LMCHand.h
MikuMikuTickle.cpp
pmd.cpp
pmd.h
PMDXBullet.cpp
PMDXBullet.h
PMDXWork.cpp
PMDXWork.h
pmx.cpp
pmx.h
SensorClient.cpp
SensorClient.h
UIPanels.cpp
UIPanels.h
vmd.cpp
vmd.h
VMDWork.cpp
VMDWork.h

7、設定ファイルの編集
 mmt_v06.zipの中の、MikuMikuTickleV06フォルダの中のreadme.txtファイルを参考に、先程コピーしたいくつものファイルの中に含まれる設定ファイル(mmtconfig.txt)を必要に応じて編集します。
 1〜3行目は、使用するVRHMDに関する設定です。
 HTC Vive を使用される方、又はSteamVR経由でOSVRを使用される方は、この部分の変更は特に必要ありません。
 SteamVRを使用せずにOSVR HDK v1.4 又はOculus Rift DK1を使用される方は、3行目の
HMD=OpenVR
の1桁目に半角の#を挿入し、
#HMD=OpenVR
にします。
そして、OSVR HDK v1.4の方は1行目の
#HMD=OSVR
の#を外して
HMD=OSVR
に変更します。
Oculus Rift DK1の方は2行目の
#HMD=OculusDK1
の#を外して
HMD=OculusDK1
にします。

 4行目の
SleepPerFrame=1
 は、1フレーム描画毎に待ち時間を1ミリ秒入れる事を指定しています。0にすると、待ち時間なしになります。
 CPUパワーに余裕がなくてポジトラが不安定な場合、この数字を大きくする事により安定する場合があります。
 ただし、その分フレームレートは低下します。

 5行目以降は、LeapMotionのデータ取得に関する設定です。
 詳細については、readme.txtをご覧ください。
 ここを変更する事により、他のPCからLeapMotionのデータを取得できるようになるのですが、通常は素直にこのまま使用し、LeapMotionはMikuMikuTickleを実行するPCに接続するのがよいでしょう。
 もともとはOSVRな空間でモデルさんをくすぐってみるで、CPU負荷低減のために入れた機能なのですが、OSVR HDKでカノジョの部屋へ行ってみるに記載したとおり、OSVRServerの設定ファイル(osvr_server_config.json)にsleep設定を入れる方が効果が大きいです。

 編集が終わったら、上書き保存します。

8、VRHMDの準備
 VRHMDの電源を入れます。
 HTC Viveの方は、Steam VRを起動します。
 SteamVRを使用せずにOSVR HDKを使用する方はOSVR Serverを立ち上げます。ダイレクトモードになっている場合はC:\Program Files (x86)\OSVR\SDK\binの下にあるDisableOSVRDirectMode.exeをダブルクリックして解除します。
 逆に、OSVRでもSteamVRを使用する場合はダイレクトモードにするためにEnableOSVRDirectMode.exeをダブルクリックしてから、SteamVRを起動します。
 LeapMotionはVRHMDの前面に貼り付け、VRHMDと同じPCに接続します。

8、実行
 デバッグメニュー→デバッグなしで実行 で実行します。
 最初は「leap.dllがない」等のエラーが出ますので、その場合は C:\Leap_Motion_SDK_Win_3.1.3\LeapSDK\lib\x86 から以下のファイルを実行形式(MikuMikuTickleV06.exe)と同じフォルダにコピーします。

Leap.dll
msvcp120.dll
msvcr120.dll

 また、以下のファイルをC:\Program Files (x86)\OSVR\SDK\bin からコピーして、実行形式(MikuMikuTickleV05.exe)と同じフォルダに置きます。
osvrClient.dll
osvrClientKit.dll
osvrCommon.dll
osvrUtil.dll

 更に、以下のファイルをC:\openvr-master\bin\win32 からコピーして、実行形式(MikuMikuTickleV05.exe)と同じフォルダに置きます。
openvr_api.dll

 コピーが終わったら、再度、デバッグメニュー→デバッグなしで実行 で実行します。
 ファイル選択ダイアログボックスが出てくるので、召喚したいモデルさん(MikuMikuDance用PMDファイル又はPMXファイル)を選択します。
 SteamVRを使用する場合、デスクトップ画面は真っ白になったままとなりますが、しばらくすると、VRHMDにはMMDモデルが表示されます。
 操作方法に関しましては、readme.txtを参照頂きたいと思います。

 前回までは、例えば長い髪のモデルさんの後ろに回り込んだ際に、視界に髪の毛が覆いかぶさって周りが見えなくなるような事がしばしばあったのですが、今回は自分の頭に剛体を設定した事で、そのような状況がだいぶ改善されたのではないかと思います。

 モーションを記録するには、LeapMotionで認識した手による操作又はマウスの右ボタンで表示される操作パネルの「設備操作」を押し、切り替わったパネル群の左上の方にある「動記録」というパネルを押します。
 同様の操作をもう一度行うと、記録が終了し、ドキュメントフォルダにm00.vmd等のファイル名のついたVMDファイルが出力されます。
 Escキーを押してMikuMikuTickleを終了した後、MMDを立ち上げ、先ほどMikuMikuTickleで召喚したモデルさんを読み込み、続いて先ほど出力されたVMDファイルを読み込むと、モデルさんがMikuMikuTickleでの時のように拘束されたような格好になり、再生ボタンを押すと、モデルさんの笑顔と身悶えがMMDの中で再現されます。
 なお、MMDのバージョンが古い場合は、足の向きがMikuMikuTickleでの場合と異なる事があるかもしれませんが、その場合は、0フレーム目で左足IK、左つま先IK、右足IK、右つま先IKをOFFにして登録ボタンを押してから再生してみてください。

 今回VMDファイルを出力できるようになった事で、彼女たちをくすぐって笑顔と身悶えを堪能しながら、彼女たちの本来の目的であるMMD動画制作ための作業の一部を、彼女たちと一緒にできるようになりました。
 これで今後は彼女たちともっと仲良くなれそうです。

[VisualStudioExpress2012を立ち上げなくても実行できるようにする]
 MikuMikuTickleを使う度にいちいちVisualStudioExpress2012を立ち上げるのは面倒だと思いますので、VisualStudioExpress2012を立ち上げなくてもMikuMikuTickeを起動できるようにする方法を紹介します。

1、実行ファイルとDLLファイルのコピー
 実行形式のあるフォルダ(先ほど.dllファイルをコピーしたフォルダ)の中にあるファイルのうち、.pdbの拡張子のついたもの以外の全てを任意のフォルダにコピーします。

2、D3Dcompiler_46.dllのコピー
 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin から、D3Dcompiler_46.dllを、1のコピー先のフォルダにコピーします。

3、シェーダーファイル、設定ファイルのコピー
 ソースをコピーしたフォルダから以下のファイルを、1のコピー先のフォルダにコピーします。

mmtconfig.txt
OSVRDist.fx
OVRDist.fx
shader.fx
 この後は、1のコピー先のフォルダフォルダでMikuMikuTickleV06.exeファイルをダブルクリックすればMikuMikuTickleが起動します。
(2017/7/3)

戻る