モデルさんをくすぐって身悶えさせてみる

「VR空間にMMDモデルを召喚してくすぐる事ができるOculusRift用VR体験ツールMikuMikuTickle」の開発を始めてから1年以上が経ちました。
 世の中ではOculusRiftのアプリのほとんどがUnityProで開発されていた中で、MikuMikuTickleについては特に費用面での事情からゲームエンジンなしで開発を始めたわけですが、世の中ではあれから状況が変わり、2015年現在はUnityの無料版でもOculusRiftのアプリを開発する事が可能となっています。
 とはいうものの、今さら乗り換えるのは大変ですし、アプリの開発時ではなく実行時にMMDモデルを選択できるようにしようとすると、Unityでもそれなりに難しいそうなので、MikuMikuTickleの開発には当面はゲームエンジンを使わない予定です。

 MikuMikuTickleの前回のバージョンであるV03に関して気になっていた事の一つに、「くすぐられた時のモデルさんの反応が今一つ」といった事が挙げられます。
 一応、腋をくすぐればのけぞって笑い、足裏をくすぐれば足を回転させたりするのですが、胴体はピクリとも動きませんでした。
 手足を拘束されているとはいえ、胴体が全く動かないのは不自然です。まるで召喚に失敗して胴体だけ石化してしまっているようです。というか、実際そのとおりだったりします。
 今回はこの石化の呪いをなんとかしようと奮闘してみました。
 また、前回までの腋、足裏に加え、太股と脹脛をくすぐれるようにしました。
 その結果、すべやかな腋の下や健康的な太股をくすぐられたモデルさんが、健康的に身悶えてくれるようになりました。
 もちろん、モデルさんがいくら激しく身悶えても、手足が拘束から外れる事はありません。
 フトモモをくすぐりながら上を見上げた時にモデルさんの笑顔が見られるよう、前回までくすぐられている間のけぞったままだった頭の動きも少しだけ直しました。

 MikuMikuTickleの今回のバージョンは、以下のリンクからダウンロードできます。

MikuMikuTickleV04 ダウンロード

 前回と同様に、実行するには以下の機材が必要です。

・DirectX11対応Windows PC (動作確認はWindows8.1で実施)
・Oculus Rift (DK1)
・Leap Motion

 残念ながら、OculusDK2には対応しておりません。
 また、これも前回と同様ですが、このダウンロードファイルに実行形式は含まれておりません。
 開発環境やライブラリとして、以下の物が必要ですので、前回までの手順に従ってインストールしておきましょう。

・Microsoft Visual Studio Express 2012 for Windows Desktop
・OculusSDK(バージョン 0.2.5c)
・Leap Motion Developer SDK(バージョン 2.2.2+24469)
・DirectXTex
・Bullet(バージョン2.82)

 今回はLeapMotionのSDKを新しいバージョンに変更しています。
 これによりLeapMotionで取得できる指の情報が増え、前回までアプリ内で推測していた指の関節の向き等を、今回はAPIから直接取得しています。
 LeapMotionSDKについては今後も認識精度向上等の改善が行われると思われますので、2.2.2+24469が最新版でない場合は、まずは最新版で試された方がよいかもしれません。
 逆に、OculusSDKについては新しいバージョンへの対応ができておりませんので、できるだけ0.2.5cで試されるのがよろしいかと思います。

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

C:\LeapDeveloperKit_2.2.2+24469_win\LeapSDK\include
C:\OculusSDK\LibOVR\Include
C:\DirectXTex\DirectXTex
C:\bullet-2.82-r2704\src
 入力が終わったら、OKをクリックします。
5、ライブラリディレクトリの設定
 「構成プロパティ」の中の「リンカー」をクリックし、プロパティページの右側の枠の「追加のライブラリディレクトリ」をクリックする。枠の右端に現れる下向きの矢印のようなマークをクリックし、「編集」を選択して表示されるダイアログボックスの上の枠に以下の4行の内容を入力します。
C:\LeapDeveloperKit_2.2.2+24469_win\LeapSDK\lib\x86
C:\OculusSDK\LibOVR\Lib\Win32
C:\DirectXTex\DirectXTex\Bin\Desktop_2012\Win32\Release
C:\bullet-2.82-r2704\lib
 入力が終わったら、OKをクリックします。
 その後、プロパティページのOKボタンをクリックします。
6、ソースをプロジェクトに追加
 プロジェクトディレクトリに置いたMikuMikuTickleV04のファイルのうち、以下のファイルを プロジェクトメニュー→既存項目の追加 でプロジェクトに追加します。
DXCommon.h
LMCHand.cpp
LMCHand.h
MikuMikuTickle.cpp
pmd.cpp
pmd.h
PMDXBullet.cpp
PMDXBullet.h
PMDXWork.cpp
PMDXWork.h
pmx.cpp
pmx.h
UIPanels.cpp
UIPanels.h
7、実行
 デバッグメニュー→デバッグなしで実行 で実行します。
 最初は「leap.dllがない」等のエラーが出ますので、その場合は C:\LeapDeveloperKit_2.2.2+24469_win\LeapSDK\lib\x86 から以下のファイルを実行形式と同じフォルダにコピーします。
Leap.dll
msvcp120.dll
msvcr120.dll
 コピーが終わったら、再度、デバッグメニュー→デバッグなしで実行 で実行します。
 ファイル選択ダイアログボックスが出てくるので、Oculus Rift の電源を入れ、Leap Motion をPCに接続した後で、召喚したいモデルさんを選択します。

 なお、LeapMotionの設置ついてですが、前回まではユーザーの腰の高さくらいの机の上に置いてある事を前提としていましたが(卓上モード)、今回はそれに加え、OculusRiftの前面に固定した場合(HMDマウントモード)にも対応するようにしました。
 キーボードの[M]キーで卓上モードとマウントモードを切り替えます。
 とりあえず今回はデフォルトを卓上モードとしていますので、マウントモードで使う場合は[M]キーを押します。
 LeapMotionのOculusRiftへのマウントは、LeapMotionの製造元から販売されているDeveloperMountを使えばよいのですが、私は持ってないので、セロテープで固定しています。
 実際に試してみた感想としては、今の所、卓上モードもマウントモードも一長一短有りといった所です。
 マウントモードでは、VR空間内で現実世界の机の位置を気にする必要がなく、どの方向を向いていても自分の手をVR空間に持ち込む事ができます。
 しかし、例えばモデルさんの太股をくすぐりながら顔を見上げようとして手が視界から外れると、手が見えなくなるだけでなくVR空間から消えてしまいます。
 また、手をある程度前に伸ばして指を激しく動かすと、卓上モードの場合に比べて高確率で手がロストしてしまいます。ただし、これは自分の周りに何が置かれているか等、使用環境にもある程度依存するのかもしれません。
 あるいは、LeapMotionのSDKやドライバーの将来のバージョンで改善されるのかもしれませんし、最近OculusVRが買収したNimbleVRの製品によって解決されるのかもしれませんので、期待して待ちたいと思います。
 PCによってはLeapMotionがキーボードに搭載されている場合があり、その場合は基本的に卓上モード一択になると思います。
 マウント用にもう1個LeapMotionを入手すれば可能なのかもしれませんが、「LeapMotionを複数個繋いでも認識するのは1個だけ」という内容の記事を見た事があるので、うまく行くかどうかは分かりません。
 ただ、「一旦Windowsu上でLeapMotionのサービスを停止してから新たなLeapMotionを接続すれば認識するかも」という話を聞いた事があるので、キーボード搭載品以外にもう1個LeapMotionをお持ちの方は、試してみられるのもよいかと思います。

 OculusRiftを装着したら、とりあえずモデルさんの腋をくすぐってみて頂ければ、前回のバージョンとの違いを分かって頂けるかと思います。
 次に、モデルさんのフトモモをくすぐってみましょう。
 足枷動かして足を少し開かせ、手前に上げさせた状態で、フトモモの間に入り込み、自分の顔の両脇にあるモデルさんの健康的な太股をくすぐりながら、そのくすぐったさに腰をくねらせるモデルさんの身もだえぶりを見上げるというのは、まさにOculusRiftとLeapMotonがあってこその体験だと思います。

 まだいろいろと改善の余地の残るソフトではありますが、今回は前回に比べて完成度が大幅にアップしたのではないかと思います。
 Oculus DK1とLeapMotionをお持ちのWindowsユーザーの方は、ぜひ試してみて頂ければと思います。


戻る