(cache)バーチャルYouTuberのやり方 - ReDo

2018年1月 7日

バーチャルYouTuberのやり方

vtuber1.png
Unity+ViveベースでバーチャルYouTuberを試してみました。

YouTube Liveの実施に引き続き、YouTuberっぽい動画の投稿までやりまして、ひとまず当初の目的は達成しましたので、観測されるバーチャルYouTuberシステム構成の候補、やったことと・コスト(時間・費用)をまとめておきます。
ちなみに、所要時間については「ちらほらVRについては趣味で触って遊んでいる」僕を基準に考えると、「業務でUnity等を触っている方」だとおそらく半分、「まったくプログラミングをしたことがない人のチャレンジ」だと数倍+誰かのサポートが必要だと思われます。

※各種スクリプトは質についてはアレですが追ってgistに置きます。

○システム構成と選択肢

バーチャルYouTuberになるには、バーチャルな部分を担当する3Dモデルと、なんらかのモーションキャプチャシステムが最低限必要です。

A) VR HMDベース
Unity+HTC Vive+Tracker
・Oculus RiftやWindowsMRと比較すると、トラッキング部位を追加で増やせるTrackerに対応したViveが向いています。
・Trackerは腰や膝、肘に装着の上トラッキング精度をあげたり、コントローラ・HMDをTrackerに置き換えることでキャプチャ時の動作自由度をあげるのにも使うことができます。
・Unity+Final IKではなくて、Unreal Engine+IKinemaでも同等のトラッキングが可能そうです。

費用はいわゆるVR Ready PC(10万円前後)+HTC Vive(84,000円)+Tracker(1つ12,500円)でトータルで20万円程度になります。ただし、Vive 2.0の噂があり、購入はそのあたりがはっきりする1月中旬までは待ったほうがよいかもしれません。

B) Perception Neuronベース
(このジャンルとしては)安価(約20万円)なモーショントラッキングのPerception Neuronを使用する方法です。磁気センサまわりの環境相性でトラブることが多く、運用コストが高いですが高精度のトラッキングが可能です。
現行の商用メインストリームYouTuber(?)はこれを前述のVR HMDベースのシステムに追加する形で運用しているケースが多そうです。
MikuMikuMovingを経由したMMDプラットフォームでも利用が可能ですが、どちらにせよボーン構造やモーションデータに関するそれなりの知識と気合いと根性でのノウハウ蓄積が必要という認識です。

C) Kinectベース
DanceEvolutionなどのボディトラッキングに対応したXBOXゲームで有名な、Kinectを使用する方法です。
Kinect自体がEOL(End of Life, 生産終了)となってしまったことが最大の欠点ではありますが、MikuMikuCaptureでvmd形式でのモーションデータが記録できるなどの利点があり、その後モーフ追加なども含むモーション編集もMMDプラットフォーム上で実施することができ、最終ターゲットがあくまで動画であるバーチャルYouTuber目的の際にはアリの選択肢だと思われます。

# Unity-Humanoid対応が必須のルートであるVRChatターゲットと比較すると、バーチャルYouTuberターゲットではMMDプラットフォーム上ですべてが済むルートがあるのがおもしろいところです。niconicoのプラットフォームとしてのメリット低下に伴って定着してしまったYouTubeへのMMD動画投稿のルートとライセンス観点では同等であり、このあたりは「めっちゃ複雑で大変だとは思うけど正確に議論を頼む〜」という気持ちです。

D) その他
以前FaceRig実況がバズった際にGOROmanさんが試していたコントローラ裁きの疑似再現(参考:中の人(二次元)になる方法【FaceRig × Live2D × Unity × OBS × AVVoiceChanger × 気合】 - Medium)のように、身ぶり手ぶりはぶっちゃけおまけ要素のため、顔の向きとそれっぽい表情の切り替えができればバーチャルYouTuberの要件は満たしているといえます。
Daydreamのようなアームモデルエミュレーション(傾きだけで腕の姿勢をそれっぽく推測する)と、iPhoneXのTrueDepthカメラを組み合わせることができれば片手とフェイシャルのキャプチャが実現するので、2018年中に一点モノレベルだとは思いますが、「バーチャルYouTuberスマホ配信アプリ」までは到達するんじゃないかな、と思っています。

◯カメラデバイスへの頭・両手のモーショントラッキング映像流し込み(3時間)


Hangout等のビデオ通話サービス、YouTube LiveやTwitch等の動画配信サービスと、対応するOBS Studioなどのデスクトップ配信ツールへの対応を想定して、カメラデバイスに映像を流しこむのを最初の目標に設定します。

概ねこのエントリですべてが済んでいるとも言えますが、Unity, IK, モーフ, カメラキャプチャについて、とりすーぷさんのエントリを参考にします。

VRで「結月ゆかり」になって生放送する/@toRisouP
https://qiita.com/toRisouP/items/14fe62f89808013f9f6e

【環境】
・Unity 2017.3.0p1
 ・Final IK 1.3
 ・Steam VR Plugin 1.2.2 (Jun 29, 2017)
 ・UnityCam

・利用モデル
Mikoko/ねこます KemomimiVRchIP
https://nekomasu.wixsite.com/kemomimivrch/character

・VR IK(Final IK)
とりすーぷさんのエントリから紹介されているはるねずみさんのエントリを参考にします。

Unity+Vive+MMD+VRIKで、キズナアイちゃんになりきりVR
https://qiita.com/halne369/items/daadf0e00330a1019830

ここまでで無事、PCのカメラデバイスとしてViveのHMDを頭、コントローラを両手にマッピングしたIK制御されたキャラクターになりきることができました。

◯HMDが重いのでTrackerに切り替える(2時間)

VR HMDをかぶってしまうとPC操作ができないのでヘッドバンドのように頭の上部に装着していたのですが、さすがに重くて不安定です。 Vive TrackerをHMDの代わりにFinal IKにアサインすることにしました。

Trackerについての基本的な話は@kohack_vこと坪倉さんのエントリが分かりやすく、そしてすべてです。

HTC Vive Trackerの仕様・使い方まとめ | TsubokuLab - ツボクラボ
http://teruaki-tsubokura.com/Lab/htc-vive-tracker/

Viveのコントローラ・Trackerは起動順にIDが割り振られる(っぽい)ので、Unity上で固定IDにしているとFinal IKでのトラッキング対象がずれておかしなことになります。起動後に手動で入れ替えてしまう運用回避が楽で、Unityエディタ上起動でなくexe起動だったとしても、運用回避のための設定UIを作りこんでしまうほうがTrackerの充電交換などにも勝てそうな気がします。

◯OBS StudioでYouTube Live(3時間)

こちらはとくにバーチャルYouTuberに特化した話ではありません。他に参考になるサイトがいっぱいあるのでググってください。
OBS Studioのインストーラのダウンロードに苦戦しましたが、BitTorrentクライアントを利用するとすぐにダウンロードできました。

ViveのHMDに付属するマイクが動かないという罠にハマった(ドライバ入れ直しなどを試してみましたがどうも個体不良っぽいです・・・いつから壊れてたのやら)ものの、結局別ヘッドセットのマイクを首に装着することで回避しました。
また、Viveのシステムは2.4GHz帯を使っているので、2.4GHzのWiFi環境と相性が悪いです。5GHz対応ルータの導入と、母体のPCのネットワーク接続を有線LANに切り替えることで回避しました。

◯マイク入力ベースのリップシンク(2時間)
Unity でリップシンクができる OVRLipSync を試してみた - 凹みTips
http://tips.hecomi.com/entry/2016/02/16/202634
Oculus Lipsync Unity | Developer Center | Oculus
https://developer.oculus.com/downloads/package/oculus-lipsync-unity/
1.16.0 | Published 2017/06/30をダウンロードします。

単独ではさっくり動いたのですが、既存のSceneに組み込んだら動かない問題が出て苦戦しました。Sceneをほぼ作り直すことで回避という力技のせいで2時間かかりました。
なお、順調に行けば1時間で済みますが、前提として3Dモデルが音素別の口の形にあわせたBlendShapeに対応している必要があります(ミニマムだと閉じた口と母音5つぐらい?)。ねこますさんのMikokoモデルはVRChatのリップシンク仕様(15種類の音素仕様が同一です)に基づいた音素が全てBlendShapeとして対応しているため、OVRLipSyncの適用はとくに悩む必要がありません。(詳しくないですがたぶんVRChatがOVRLipSyncを使ってるんじゃないかな・・・)

・UnityにフォーカスがないとMic Inputが動かない→バックグラウンドで録音を一時停止する処理がかかれている、スクリプトをコメントアウトする
・キーボード操作でループバック音声再生のON/OFFが切り替わる→Debug機能として実装されている、邪魔ならキーバインドを変更またはコメントアウトする

◯自動まばたき(1時間)


プロ生ちゃんに瞬きさせる - Onoty3D
http://onoty3d.hatenablog.com/entry/2015/03/24/211247
を参考に、最低限の動作を確認したのち、ユニティちゃんの瞬きを滑らかにするスクリプト
https://dskjal.com/unity/unitychan-blink-smoother.html
をベースに改造しました。

まぶたまわりのモーフ構造に依存しますので、モデル毎に調整が必要ですが、スクリプトを読むと比較的シンプルな力業で、モデル側が目をつぶるBlendShapeに対応さえしていれば難しくはありません。

◯キー入力によるモーフ切り替え(1時間)
他のYouTuberの方々は、リアルタイムでモーフ切り替え担当者が居るか、モーションキャプチャデータを使った動画編集時に手動で追加している模様です。
僕は個人なので特定キーの押下でを切り替える力技スクリプトを実装しました。

◯ワキからインゴット召喚+投げ(2時間)


Vive Trackerでモノを掴んで投げる話はFixedJointとColliderの組み合わせで以下のエントリの通りです。

HTC Vive向けにアプリケーションを開発する〜コントローラでインタラクション編〜 - VOYAGE GROUP VR室ブログ
http://vr-lab.voyagegroup.com/entry/2016/10/13/003204

で、インゴットをInstantiateしてFixedJointコンポーネントを追加すると物理特性を扱えるようになるRigidbodyコンポーネントが自動的につきますので、今まで登場していなかった重力まわりが影響するようになり、腕が勝手に下がっていく、といった動きをするようになります。
ViveコントローラのController(left)やController(right)にRigidbodyコンポーネントを追加した際に、「他の仕組みで運動学上の制御が行われるので(RigidbodyとしてUnityの物理演算の影響を受けないようにする)」という意味のisKinematicのチェックを入れておく必要があります。

◯Viveコントローラで指の形を制御(2時間)



前述のとりすーぷ氏のエントリではMMD4FingerControllerなる「任意の指を好きな度合いで曲げる」便利そうなスクリプトがあったので、HumanoidのFingerまわりにもそういうAPIがあったりするのかな?と思ったのですが、AnimatorからHumanoidの仕様に基づいた指定部位のTransformの参照をもってくるAPIまでしかありませんでしたorz

次に期待したのは、せっかくモデルがMecanim Humanoid対応なので、「グー・チョキ・パーのHumanoid対応モーション拾ってきて、AnimatorControllerで制御すればいけるだろう」と思ったのですが、シンプルな手の形だけのモーションが都合よく見つかったりはしませんでしたo..rz。

もっとサボりたかったのですが、結局「指が5本x3関節x両手分の2=30箇所のlocalRotationを直接いじる」という力技スクリプトを書きました。
今は1フレームで指の形が変化し終わってしまうのですが、Lerpでなまして5フレぐらいかけて指の形が変化するあたりまでは実装しようと思っています。

Viveのコントローラのタッチパネルは、少々癖があって「狙ったところを少し指を滑らせるようにしてタッチ」する必要があります。十字キーのように使わせるプログラムをいくらか見るのですが、Viveのチュートリアル中での風船カラーの選択のように「左上・右上・左下・右下」という四象限制御の方が操作難易度が低いように思えます。

◯モーション録画+音声録音と動画編集(尺5分で3時間)

ここまで動いたらあとはネタを考えて喋って動画を編集します。Unity上で適当なグリーンバックを作ってOBS Studioで必要なところにクロマキー設定を挟みつつ録画・録音したのち、AviUtlの拡張編集でひたすら字幕をつけていきます。

・台本はがっつり用意した方がいいです。
・字幕だけ読んでも話が通るぐらい字幕もがっつりつけた方が見る側のコストが下がるので良さそうです。
・週報を題材にしたためいきなり数分オーダでしたが、30秒〜1分の小ネタでおさえたほうが色々楽そうです。
・BGM・効果音は次回やる気があったらチャレンジしたいと思います。

あなたも今日からバーチャルYouTuber, 今すぐインストー

コメントする

コメントする前にサインインすることもできます。