この記事は ここのえ Advent Calendar 2023 Day 24 の記事です。
Streamemeの紹介
2023年4月、IoTメガネである JINS MEME を使用してVtuberの配信ができるツール、「Streameme」をリリースしました。
MEMEのジャイロ情報をLoggerアプリ経由で取ってきて、PCのアプリケーション上でVRMを動かすことができるアプリになっています。
カメラ切り替え・背景のGB/BB化・リップシンクにも対応しており最低限配信に必要な機能が揃っています。
現在はα版で、将来的に VMCProtocol にも対応予定です。
開発の動機
一時期Twitchの配信や、オンラインの集会、LTイベントなどの機会に、VRChatで使っているアバターのVRMを使っていました。
ただVTuber的なことをやろうとすると面倒なのが機材のセットアップです。フェイストラッキングするのに机の上から機材をどかして、スタンドを設置しiPhoneを置く…という手順を踏まなければならず、どうにも手間になっていました。
そこで白羽の矢が立ったのが JINS MEME です。前から面白そうなデバイスだと思って購入はしていたのですが、実はあまり活用できておらず… 公式アプリでたまに集中度とかを計測して遊んでいたのですが、そういえばLoggerアプリでWebsocket送れたな…?と思い作り始めました。
全体の構造
以下、クローズドなLTで登壇した際の資料と並行して紹介します。少し見辛づらいですがご了承ください。
JINS MEMEからiPhoneに接続し、iPhoneの専用Loggerアプリでデータを取得します。iPhoneからPC側にWebsocketで転送し、送られてきたデータをC#でパースし、Unityでモデルを動かします。
またリップシンクには uLipSync を使用しています。
LoggerアプリからのWebsocket通信について
JINS MEMEのデータ送信には幾つか形式があり、集中力とかを計測するのであれば15,60sec間隔の統計データを使用することができます。今回の用途ではリアルタイム性が求められるので、20Hz間隔のデータ(currentData
)形式を使用して送信しています。統計データに比べると取得できる情報は制限されてしまいます1が、モーションキャプチャに必要な情報は取得できているため、問題ありません。
またYawの方向が正面とは限らないので正面リセット機能を付けたりしています。精度についてはシンプルな制御しか行っておらず、まだ最低ラインに達したぐらいなので、今後改善していきたいなーという気持ちです。
一番大変なのはuGUIだった
これは大正コソコソ噂話なのですが、一番実装に手間がかかっているのはUIの部分だったりします。
他のアプリケーションでは大抵uGUIのデフォルトのボタンを使っていたり、別ウィンドウでインターフェースを用意している場合が多いと思います。
ただ今回はシンプルかつ分かりやすく機能を纏めたかったので、イラレでアイコンを作ったり、uGUIのアニメーション周りをゴリゴリに書きました。
実は実装コスト的に結構洒落にならなくて、v0.1.0
の実装作業のうち半分ぐらいの時間はここに手間をかけています。特にボタン周りのアニメーションを伝播させようとしたりするのが面倒でした…
最近だとUI Toolkitという新しい仕組みも出来ているので、どこかのタイミングでそちらに移行してもいいかな…と考えています。HTML/CSSをベースにしたUXML
, USS
で定義できるようです。
まとめ
暫くWeb開発やBlenderの3Dモデリングにリソースを振ってしまっていたため、実はちょっと開発が停滞してます… そろそろ開発を再開せねば、という気持ちでこの記事を書いています。
JINS MEME自体は面白いデバイスですし、度付き眼鏡にしても2万円弱で購入できるので結構お得です。もし手に取る機会があったら、一度試してみてください