Bakulog

獏の夢日記的な何か。

モーションキャプチャでCM3D2のキャラを動かすMODを作った

本ブログ初のR-18がらみ案件ですが記事自体は全年齢向けです。 開発系の内容はほぼゼロで、主目的は「MOD作りました」の紹介になってます。

  5/29: Axis Neuronの設定部分で古い画面を紹介してしまっていたので更新しました。

もくじ

  1. 何を作ったのか
  2. インストール手順
  3. モーキャプ買わなくても動作チェックはできます
  4. (開発者向け)どうやって動いてんのコレ
  5. 注意とか要望等
  6. 追記    

1. 何を作ったのか

自らのモーションで、CM3D2のキャラをリアルタイムで動かせるMODを作りました。 現時点ではVRとの相性まで検討していませんが、メイドさんになったような気分が味わえます。

  • 「撮影モード」で選択中のメイドに対して有効
  • 通常のモーションを停止させることでモーキャプが動き出し、メイドさんを動かせるようになる

プラグインの雰囲気は下記動画でだいたいわかると思います。

 

https://twitter.com/baku_dreameater/status/867737880570900481

 

https://twitter.com/baku_dreameater/status/867022540840902656

 

https://twitter.com/baku_dreameater/status/868641865137926144

使ってるモーションキャプチャPerception Neuronです。 モーションキャプチャの価格破壊したことで一部界隈では有名なデバイスですね。

本記事作成している時点の価格ですが、日本の代理店で21万で買えます。

 

今回このプラグインを作った理由は、モーションキャプチャの魅力をもっとみんなに知ってほしいからです。

 

嘘です。

 

単にCM3D2を買ったら衝動で作りたくなっただけです。

 

2. インストール手順

※注意: CM3D2のMODなので例によって自己責任で導入してください。

他の多くのCM3D2向けMODと同様、しばりすを導入している状態でインストールします。 ただし、Sybarisフォルダじゃない場所に置く必要があるファイルがあるので気を付けてください。

※ライセンスについては下記手順で取得するzipファイルの中に入っています。

  1. しばりすを導入する(導入方法についてはググってください)
  2. Google Driveからzipを落としてきて解凍
  3. Sybaris/Plugins/UnityInjectorフォルダの下へ、zipに入ってるCM3D2.RealtimeMotionPlugin.dllをコピー
  4. Sybaris/Plugins/UnityInjector/Configフォルダの下へ、zipに入ってるrealtimemotionplugin.iniをコピー
  5. (CM3D2.exeがあるフォルダ)/CM3D2x64_Data/Pluginsフォルダの下へ、zipに入ってるNeuronDataReader.dllをコピー

アンインストールは、3,4,5で配置したファイルを削除すればOKです。

 

3. モーキャプ買わなくても動作チェックはできます

インストール手順の延長みたいなものです。 CM3D2側の準備だけでは動かないため、続けてモーションキャプチャ側を準備します。

※実機のNeuronを持っている場合は本手順の準備以外にもキャリブレーションとか色々あるのですが、 ここではより手軽に「NeuronがなくてもサンプルモーションでMODの動きが見られるよ」という手順だけ紹介します。1

まず、公式のダウンロードページAxis Neuron Standardをダウンロードしてインストールします。

インストール完了したら早速Axis Neuronを起動します。起動時にTipsのダイアログみたいのが出るかもしれませんが、消してしまってかまいません。

起動できたらメニューバーのFile > Settingsを開き、Broadcastingタブで次のように設定していきます。

5/29追記: 私の手元で使っていたAxis Neuronが最新版でなかったため、情報を修正しています。

設定は以下のようにしていきます。

  • TCPUDPのうちUDPを選択
  • IPアドレスおよびポート情報として127.0.0.1:7777を設定2
  • BVHを有効にする

画面はこんな感じになっているはずです。

[expand title="※修正前の情報(クリックで展開)"]

こちらは古いほうの情報です。おそらく最新版の設定画面だけ見てもらえれば大丈夫ですが、参考ということで残しています。

  • Tcp/UdpUdpを選択
  • Udp IpsIPアドレス127.0.0.1を設定
  • BVHで、
    • Enableチェックをオン
    • FormatBinary
    • ServerPort7001
    • ClientPort7777

 

画面はこんな感じになっているはずです。

[/expand]

 

設定が出来たら、File > Openで適当なサンプルを開きます。 通常の方法でAxis Neuronを導入すると以下のフォルダにサンプルモーションのファイル(拡張子は.raw)があるはずです。 どれでもいいので適当に選んでください。

  • (マイドキュメントのフォルダ)/Noitom/Axis Neuron/Motion Files

ファイルを開いたら再生バーにある再生ボタンとリピートONを押し、サンプルモーションを無限ループ再生させます。

もし再生バーが表示されていない場合はWindow > LayoutFull Functionなどを選び、表示させてください。

再生中の画面イメージはこんな感じです。(再生中なので、再生ボタンが一時停止ボタンに切り替わってます)

 

準備が出来たらCM3D2を起動して撮影モードに入ります。 動かしたいメイドさんを選択し「モーション」ウィンドウでモーションを停止させます。 すると、メイドさんが動き始めます。 冒頭で紹介したツイートの再掲になりますが、実物MODの動きに一番近いのはコレです。

 

https://twitter.com/baku_dreameater/status/867737880570900481

 

キャラの身長によっては「動きはするけど足が浮いてる」という状態になるので、 そのときはキャラクター選択ウィンドウで基準座標や倍率を調整していい感じにしてください。

  • 座標(とくにY座標)を調節 → 足がきちんと床につく
  • 倍率を調節 → 足がツルツル滑ってるように見えにくくなる

倍率をいじる時のイメージとしては、大まかに 「モーキャプスーツを着てる人とキャラの身長が一致している方が見栄えがいい」 という話だと思ってください。

また「キャラが見えなくなったんだけど?」という場合は背景を非表示にしてみてください。 Axis Neuronのサンプルモーションの中には、 モーキャプスーツを着ている人が非常にながい距離を歩くようなデータもあるので、 モーションによってはメイドさんが部屋を突き抜けてどっかに行きます。ご愛嬌です。

 

4. (開発者向け)どうやって動いてんのコレ

完全にFK(Forward Kinematic)で動かしています。 モーキャプで全身の姿勢取れてるからIK不要でしょう、というコンセプトがベースになってます。

ソフト的なシステム構成ですが、まずAxis Neuronのソフト側で 「姿勢情報のバイナリをUDP通信で投げる」という所までしてくれます。 受信側についてもUnity向けSDKがあるので、 受信処理まではSDKに任せられます。

じゃあ開発者は何を組まなければならないのか、という話になってきますが、 UDPで飛んできた姿勢データはNeuron形式と呼ぶべき少し特殊な角度情報になっているので、 CM3D2用のボーン情報に再整形する必要がなります。 ここが開発者の出番で、要するに算数っぽいプログラムを組まなければなりません。

計算の理屈は一年半前の記事に書いた方法と同じです。 CM3D2もそもそもUnityなので、計算のコンセプトに加えてコードも上記記事から流用しています。 理屈が知りたい、という方は上の記事を追ってもらってコードをじーーーっと見てください。

その他、細かい内容ではありますが、もとの記事に対する違いは以下のような感じです。

  • Hipsボーンの位置情報も投げ込むようにしてる → キャラがきちんと動き回れる
  • 指とかのモーションも全部投げ込むようにしてる → 指まで動くと非常にそれらしくなる
  • ただしHeadの回転情報は投げ込まない → 頭の動きはCM3D2のカメラ追尾機能に任せる
  • Tポーズの情報はコード中に仕込んでおく → キャリブレーションしないでも動くようにするため
  • その他パッと見では分からないことをごにょごにょして解決する

ごにょごにょ以外については、元記事の内容を使って自力で改造できるはずです。 ほんとはコードを公開してしまいたいのですが、ごにょごにょの内容を露骨に公にするのもちょっとアレなので、公開はしないつもりです。

 

5. 注意とか要望等

導入の所にも書いてますが、ご使用は全て自己責任でお願いします。 それなりに複雑なことをしているので、「Neuron買ってきたけど動かないぞ」 みたいなパターンも可能性ゼロではありません。 Neuron自体も調子悪いときは調子悪いですし。

不具合報告とか要望はTwitterか、あるいは本記事のコメントへお願いします。

 

6. 追記

この記事を書いている途中で自宅のNeuronのケーブルが調子悪くなってしまい、 「いい機会だし投げ銭も兼ねて!」ということでNeuron新調しました。 21万なので安くないですが、まあ、VR小道具というのは高くつくモンです。

今にして思えば、Neuronは初クラウドファンディング出資ということで、 KickStarterで4万円ほど払って手に入れた思い出深いデバイスです。 (※当時は学生だったので、この価格がどれほどヤバいか理解してませんでしたが。) 私が色々とこじらせる原因になったアイテムでもあります。

皆さんもモーキャプに限らず、積極的に何かしらをこじらせていきましょう。


  1. もし「この記事を見てCM3D2のためにPerception Neuronを買ったのに動かないしググってもよく分からないぞ!」という事があったらご連絡ください。保証まではできませんが、手順の分かりにくい所が解消するよう記事を書き足す努力はします。 
  2. このIPアドレスとクライアントポート番号はMOD側に入っているrealtimemotionplugin.iniファイルでも設定しています。.iniファイルをテキストで開くとなんとなーくわかると思います。両者の内容が一致し、きちんとしたIPアドレスとポートの設定になっていれば動きます。