
MOTION BEATS PROJECT
- Dance
- MotionCapture
- Unity
2017.7.15
■ヒップホップダンス+モーションキャプチャー+サウンド
元FLASHerでダンサーという経歴を持つ上前さんとコラボし、モーションキャプチャーを使ったリアルタイムコンテンツにチャレンジしてみました。
上前さんのヒップホップダンスの動きに合わせて、様々な音を出すことができれば面白いパフォーマンスができるのでは?という提案により、「体の動きで音を出す!」ことを目標に定めました。
まずはモーションキャプチャー設備が無料で使えるというATLに訪問させていただくと、そこには本格的なモーションキャプチャーブースが待っていました。赤外線マーカーがついたボディースーツが用意され、天井には何台ものカメラが設置されています。さらに作業用デスクにハイスペックマシン、モーションキャプチャー用の本格的なアプリケーション(英語)もインストール済みです。想像以上にプロ仕様で面食らいます。怖じ気づいたことはひた隠し、ちょっと今回の目標にはオーバースペックかなと、上前さん持参の「PERCEPTION NEURON」というモーションキャプチャーシステムを利用することにしました。
■PERCEPTION NEURON(https://neuronmocap.com/ja)
PERCEPTION NEURONはボディスーツに付いた32個のセンサーが体の動きをキャプチャするシステムです。ボディスーツとPCの連携はWi-Fi経由が可能で、配線を気にせずに動き回ることができます。また、開発元が用意したキャプチャ用ソフトウェア(Axis Neuron)やSDKも付属しています。まずは試してみようと装着するもなかなか上手くいきません。ソフトの設定、Wi-Fiの設定、ボディスーツの設定、接続する手順等々、手助けを借りながら、何とかボディスーツとPC上のソフトウェア(Axis Neuron)との連携ができました!

キャリブレーションが終わると、上前さんの動きに合わせてAxis Neuron上でロボットが動いています。
結構なめらかに同調して動いていて期待が高まります。
そのまま、ダンスの動きを何パターンかキャプチャしてモーションデータとして保存しておきました。
■Axis NeuronとUnityの連携
Axis NeuronにはTCPやUDPでモーションデータをBroadcastできる機能があります。そこで、Node.js経由でSocketを受取り、ブラウザを介して、Three.jsでごにょごにょする目論見でしたが、どうにもSocketが拾えません。。UDPでBroadcastするとソフト自体がクラッシュし、起動さえしなくなる現象にも遭遇し、レジストリを削除して再インストールを繰り返すも、家にある別の環境で試してみるも改善せず、あえなく断念。
せっかくなので連携事例のあるUnityに鞍替えします。Unityは初心者ですが、Axis Neuronと接続さえできれば、御の字です。
ただやはりこちらも一筋縄ではいきません。まだAxisNeuronにもSocket通信にもUnityにも精通しているわけでもなく問題の切り分けが非常に難しいのです。
- AxisNeuronのソフトウェアやバージョンのせい?
- AxisNeuronのTCP,UDPのBroadcastの設定のせい?
- 検証中のPC環境(Windows7)のせい?
- AxisNeuronが用意しているUnityコンポーネントの設定のせい?
- Unityのバージョンのせい?
- Unityのプログラムミスのせい?
開発環境を変えてテストしたくても進行中の他の仕事への影響を考えるとなかなかそれも怖いので、仕事で環境を変えたくないマシンはそのままに、様々なマシンや環境で試すことができるATLは開発には大助かりです。
■Unityでの開発
Axis Neuronとの連携はかなり手間取りましたが、最終的にはPort番号を変更することでつながりました。つながってしまえばあっけなく、悩んだ日々は何だったんだろうと思いますが、これも開発の醍醐味です。今なら圧倒的な短時間で連携できる気がします。

Axis Neuron(画面右)で再生しているロボットの動きがUnity(画面左)で同期して動いている。
あとはUnityでの開発ですが、こちらは人気のあるソフトウェアだけにさすがに使いやすく、書籍や事例も充実していて、やりたいことから順番に実装していきます。
まず最低限確認したかった
- Neuronロボットの各パーツの座標が取れるか?
- 音の再生方法は?
の2点が確認できた時点が、ほぼ主たる目的は達成できるだろうと確信した瞬間です。
あとは、右手と左手の距離が一定値離れたら音Aを再生し、ひざのY座標が一定値を越えたら音Bを再生、、という風に実装していくだけです。細かく設定すれば、指ぱっちんや昇竜拳もセットできそうです。また、せっかくなので、パーティクルや物理演算やエフェクトも追加してみます。
■実地テスト

スタジオでも実際に動くか試してみる。
一通り動くサンプルができたところで、一式、上前さんのダンススタジオに送り、動作環境を整えてもらいます。バージョン違いや環境違いで内心ドキドキしていましたが、Unity上で動いていることを確認できた段階でほっと一息です。実際にボディスーツを着用してもらい、指定したポーズを取ると想定通りリアルタイムに音が出ています。距離感の調整は必要でしたが、概ね想定通りで満足です。上前さんも体から音が出ているみたいと可能性を感じています。
■Unity勉強中
あとは、どんどんやりたいことを興味本位でUnityで実装していきます。
- ロボットのパーツをシンプルなボールに変更
→ボールのサイズを変更することでもミシュランマンやベイマックスぽくてかわいい
- パーティクルのサンプルを元にパーツをファイヤーにしてみる
→ドラクエのフレイムをイメージ
- 物理演算…ロボットにほかの物体をさわらせたい
→Rigid Bodyを設定
- ロボットの動きに合わせてエフェクトをつけたい
→配置したcubeを吹き飛ばす
- 動きの速度変化を利用してみる
→移動速度に合わせて色を変更してみる
- 動きの軌跡をとってみたい
→座標にボックスを配置してみる
→TrailRendererを試してみる
- 別の3Dモデルをダンスさせてみたい
→Unityちゃんで試してみる

いろいろUnityで試してみる。楽しい。
等々、芋づる式に試してみたいことが出てきます。
最終的にはクオリティを追求して作り込んだり、引き算してクールな作品に昇華させたり、期待は拡がります。
■まとめ
モーションキャプチャなんて、ハリウッドや大学の研究室等、限られた人だけの高価なイメージでしたが、今では誰でも扱える時代になったんだなと実感しました。昔POSERでとんでもない方向に関節を曲げながらも、人体のモーションデータをちまちま作成していましたが、ぎこちなさがどうしても抜けなかったのがもはやいい思い出です。生身のダンサーの動きはやはりなめらかで、無機質なCGキャラでも一気に感情が入りこみます。もっともキャラの必要性さえなく、ボールの連結だけでも有機的な動きには面白さを感じます。
一度自分で手を動かして試しておくことで、できる、できないが明確になり、提案にも反映しやすく、また、二度目の開発は圧倒的に効率よくできることも大きなメリットです。
また、ATLを活用させていただき、次はVRも組み合わせてみようかな?とか妄想は膨らむばかりです。to be continued..