南中ソーランを一人で踊るのは寂しくてできないよ。そや！MMDと踊ろうや！！！

# はじめに  
わが旭川高専には「決意表明」なる競技がある．
僕はそれに今年エントリーしたんのだが，いまいちインパクトが足りない．  


端的に内容は「南中ソーランを踊る」というものだったのだが，どうもインパクトがなく困っていた．  


そこに研究室から出てきた「KINECT v1」(正式名称ではないが)を使って何かできないものと思っていた．KINECTが何かわからない人はggってください．  

そこで僕が思いついたのは,「初音ミクと踊れば一人ぼっじじゃないじゃないか！」という**天才的な案**です．決してオタクの行き過ぎでこうなったわけじゃないです．『決して』  

実はKINECTとMMDを組み合わせることによって，モーショントラッキングによって得た情報を，モデルに入れ込み，モデルが動くようになるんです．もちろんプレーンなMMDじゃ動かないので，いろいろ突っ込まないとだめですが．  

では，やっていきましょう．　　

# 動くまでの作業
## KINECTの原理
KINECTはもう十数年ほど前に流行ったデバイスです．Xboxなどの家庭用ゲーム機に搭載されていて，体をトラッキングしてゲームを操作するなどという使い方をするものです．  
肝心の原理なのですが，赤外線レーザーで構造化光の単一パターンを赤外線カメラで対象物体に投影した状態で対象を撮影し，その情報をもとにパラメータを用いて三角測量で各点のデプスを求めるセンサです．このパラメータは工場出荷時にキャリブレーションれているものです．  
以下の動画が，赤外線を撮影できるカメラでKINECTが撮影している状態を撮影した動画です．気になった人は見てみてください．  
https://youtu.be/dTKlNGSH9Po  

## KINECTを使うにあたって必要なもの
XboxのKINECTを使おうと思っても，モノが足りないことがあると思います．(たしかKINECT Xbox版も使えたような気がしますが，真偽は定かじゃないです.**責任は取れません！！！！**)  

### KINECT本体
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628829/cf53831b-3a51-f1af-ea3a-3a21b4af2bc2.png)
KINECT本体は必要です．当たり前ですね．  
ですが，お気をつけ願いたいのが**KINECT v1**であることです．v2という四角いほうもあるのですが，そちらは後継機で一見性能がいいのかと思うのですが，実際のところ**そもそも使うにあたってソフトウェアの充実性が皆無**であることがミソです．  
MMDを今回は使いますが，MMDを使うためのOpenNIなど(後述します)のソフトウェアがあまりに少ないのでお勧めしません．もし，いまからv2を使うためのコードをイチから書くのであればいいと思いますけど．(そもそも書ける人はもう書いていそうですが・・・w)  

### Windows PC
PCはWindowsじゃないとだめです．そもそもKINECT自体がMicrosoftが開発したものなのでMacOSのサポートがないです．ちなみに，今回使うPCはWindows10を搭載しています．多分，11だとうまく動かないと思います．(互換モードを使えば動くかもしれませんが，わかりません．)  

## KINECTを使うための準備
### Kinect SDK v1.8
Kinectのドライバーをインストールします．以下のリンクからインストールできると思いますので，ダウンロードしインストーラーを実行しましょう．
https://www.microsoft.com/en-us/download/details.aspx?id=40278

インストールが終了したら，KINECTを電源に刺しUSBを接続し，デバイスマネージャーで表示が出ているかを確認しましょう．

![20240519_105608.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628829/767d5845-3215-4f53-cfe0-38db8f979d06.jpeg)

こんな感じで表示できれば大丈夫です．

### Microsoft VisualC++ パッケージ
モノとしてもかなり古いものになりますので，それ相応のパッケージを突っ込まないとだめです．ですので，まずはVC++の以下の再頒布パッケージを導入しましょう．

- VC++ 2005
- VC++ 2008
- VC++ 2015,2017および2019

全部必要があるかは**正直自分でもあんまりわかっていない節がある**ので，とりあえず全部入れてもらえたらと思います．

### DirectXのインストール
DirectXという動画などをWindows上で処理するためのAPIをインストールします．以下のサイトからダウンロードできますので，それを実行してください．
https://www.microsoft.com/ja-jp/download/details.aspx?id=35&

## MMDの準備をしよう
MMDの準備をしましょう．MMDについては以下を参照してください．
```MikuMikuDance（ミクミクダンス）は、樋口優が制作した、プリセットされたキャラクターの3Dモデルを操作しコンピュータアニメーションを作成する3DCGソフトウェアである。略称はMMD。デフォルトで初音ミクなどVOCALOIDキャラクターの3Dモデルを使用できるほか、オリジナルのキャラクターモデルやアクセサリを組み込んで操作することも可能で、MMD用の3Dモデルも有志によって多数公開されている。```

とりあえず，インストールします．

MMD自体，64bit版もあるのですが，上手に動作しないようなので32bitを使用します．OSが64bitであっても32bitで動作します．

https://sites.google.com/view/vpvp/

このサイトからMMDをインストールしましょう．
特にインストーラーがあるわけではないので，展開しておわりで大丈夫です．

次にMoggNuiをインストールしましょう．
こちらは，MMDのDxOpenNIと同様のインターフェースをもつDLLです．これを使う必要があるのでインストールします．
以下のサイトから最新版のv0.3.2をDLしてください．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628829/5afa8eda-a5da-6355-44a6-ae2e5b0b1e54.png)

https://sites.google.com/site/moggproject/

DLが終わったら展開し，中の以下のファイルをMMDの中にあるDataフォルダに貼り付けてください．

- jaフォルダ
- DxOpenNI.dll
- MoggNuiConfig.exe

これらのアプリケーションがKINECT v1では豊富なのですがv2になると極端に少ないので今回はv1で行っています．

# 動かしてみよう
KINECTを接続し電源を入れ，MMDを起動します．そうしたら，まずモデルを読み込む必要があるので，その作業を行います．モデルは，今回MMDに付属しているMMDモデルを使用します．
左下の赤いエリアに，読み込みというボタンがあるのでそれをクリックします．そうすると，付属のMMDモデルのファイルが表示されるのでお好きなものをクリックします．今回私はあにまさ氏によってつくられた「初音ミク ver2」を利用させていただきます．![20240519_161950.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628829/82b3e619-c1c5-0146-9b97-b376992caa1c.jpeg)
実際にやったらこんな感じになります．

ここまで出来たら，次にKINECTによるモーションキャプチャを有効化します．
上のバーにある「モーションキャプチャ」をクリックし，KINECTをクリックし有効化しましょう．正しくドライバが入っていればもうこれで有効化されます．

もうこれで下準備は終了なので，実際にKINECTの前で踊ってみましょう．
うまくいかない人は以下のことを試してみましょう．

- 服装に気を付ける
    - オーバーサイズなどはやめよう
    - タイツマンとかいいかもね
- 部屋を明るくする
- カメラと自分の間になにも置かない
- KINECTと自分の距離を調整する
    - 2,3mくらいがいいと思います
- Kinectの高さを上下しましょう

実際に踊ってみた動画をYoutubeに乗せておきます．

**後で載せます．**

# おわり，今後の展望
今回はKinect単体の使用でしたが，Wiiリモコンなどを用いてセンシングできるという情報もありましたので，センサーデバイスを増価させ，より細かなトラッキングを実装していきたいと考えている．また，ソニーがリリースしているデバイス「mocopi」と組み合わせることによって上手に動くことができるのではないかと考えている．
今後の目標としては，Kinectに加えていくつかのセンサーデバイスを用いて体の裏表を表現したいと考えている．その先に考えられる3D没入を実装していきたいと考えています．