Vtuberって普通、moc3ファイルをどっかから買ってきてAnimaze(FaceRig)にぶち込んでなると思うんですけど。たしかにAnimazeは精度良く顔を読み込んでくれるんですけど、Animazeでは制御パラメータを弄ったりとかは出来ないんですよね。例えばケモミミとか作ってピコピコするようなモーションをLive2Dで作ったとするじゃないですか?そのパラメータを動かす機能が付いてないわけですよ。 つまり一般的にVになりたい人は、プログラムとかナニソレ分からんなのでAnimazeで妥協してるわけですな。 私もVを手作りしてたわけですが、このAnimazeに大変不服でして。 「「「おっぱいを作り込んだのに、おっぱいが全然揺れないんですよ!?」」」 なんでおっぱいが揺れないのかと言えば、Animazeは顔の動きの取り込みはしてるけど、体の動きは捉えないので、体が動かないわけなんです。なので、Live2Dでおっぱいを作り込んでもAnimazeじゃ全然揺れない! というわけでUnityです。 Unityで作るメリット:おっぱいがぷるんぷるん!!商用Vに近い動き。 Unityで作るデメリット:Unityがむずかちい。あと余裕で6万円ぐらい吹っ飛ぶ。 なんで6万も吹っ飛ぶのかと言うと顔の動きを取り込むUnityの有料アセットで1.5万ぐらい飛びます。あとはモーションキャプチャー(mocopi)で4万ぐらい吹っ飛びます。 とはいえ、世の中の大半のVはAnimaze製で顔さえ動けば十分みたいな作りということなんで。商用に近い動きができるUnity製のVを作れば物凄い差別化が出来るわけで。ダイナミックな動きのVが作れますよ!ってアピールすれば依頼とかも来やすいんじゃないかなー??? と考えれば実質無料ですね。いぇい、いぇい。 さてさてお金の話をした辺りで8割ぐらい脱落したと思いますが。 まずはUnityにLive2D Cubism SDK for Unityというアセットを入れます。 https://www.live2d.com/sdk/download/unity/ これはUnity上でLive2Dを動かすためのやつですね。 「SDKをインポート」に従いインポート。 https://docs.live2d.com/cubism-sdk-tutorials/getting-started/ このページに書いてある「モデルをインポート」の部分でご自分のLive2Dの書き出しファイルをインポートするわけですね。 インポート時点だと、たぶん大きくズレて配置されるので、カメラの調整。TransformのPositionのXYで横と縦の位置を、CameraのSizeで大きさをテキトーに弄って合わせます。CameraのBackGroundをクリックし、色を緑か赤か青に変えます。いわゆるクロマキー合成用で後で透かす色なので、キャラクターに使ってない色を選ぶ必要があります。 SceneとかGameとかあるタブのGameの中のFreeAspectをクリックし1920×1080を選んでおきます。(これ忘れるとOBSでエラーが出る) 次に必須ではないですがUnityCaptureを入れておきましょう。 詳しい解説はココ↓。 https://takaaki-hobby-blog.com/unity/output_obs_from_unity/ これがあるとUnityのカメラで写ったものを配信アプリであるOBSなどで映像として拾うことができるようになります。 ココでダウンロードして、 https://github.com/schellingb/UnityCapture UnityCaptureSample/Assetsの中のUnityCaptureをプロジェクトへインポートします。 MainCameraのInspectorでAdd Componentを押しUnityCaptureを選びアタッチ。 OpenCVのアセットを購入しインポート。 https://assetstore.unity.com/packages/tools/integration/opencv-for-unity-21088?aid=1101l8AFE&utm_source=aff Dlib FaceLandmark Detectorのアセットを購入しインポート。 https://assetstore.unity.com/packages/tools/integration/dlib-facelandmark-detector-64314?aid=1101l8AFE&utm_source=aff インポート後、セットアップツールでMoveStreamingAssetsFolderを押すこと。(消しちゃってたらToolsから再度開けば出来る) ここからはココを参照。iOS用の作成のページだが、PC用として読み替えていただければ。 https://welchizm.medium.com/%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8Bvtuber%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86-live2d%E7%B7%A8-917eb5208ffe Assets内の分かりやすい所で右クリックしてCreateしてC# Scriptして「DlibWebCamFaceDetector.cs」を作成。コードは以下のページからコピペ。 https://gist.github.com/welchi/42a61adc4f18ae0c3f8ae8c41bb67b83#file-dlibwebcamfacedetector-cs Live2DのVモデルにAdd ComponentでDlibWebCamFaceDetectorを選択。 同じくAssets内の分かりやすい所で右クリックしてCreateしてC# Scriptして「FrontalFaceParam.cs」を作成。コードは以下のページからコピペ。 https://gist.github.com/welchi/a2c7abb4a8e61f8ac4559677040061eb#file-frontalfaceparam-cs Live2DのVモデルにAdd ComponentでFrontalFaceParamを選択。 HierarchyビューでLive2DのVモデルに右クリック>「UI」>「RawImage」。Colorを押しA(透明度)を0にする。(カメラが動作してるかチェックするときは255にするとよい) Add ComponentしたDlibWebCamFaceDetectorのSurfaceでRawImageを選択。 同様にFrontalFaceParamでFaceDetectorでLive2DのVモデルを選択。HeadAngleParameterをクリックし、カメラで撮った顔の動きを反映するパラメーターを選択。 この時点で再生を押すとVにカメラ(ivCam)の動きが反映される。(…のだがコードに致命傷があって、物理演算が反映されない。次の記事で修正版のコードを提案する) ここからはmocopiを使うのでここのページを参照。 https://www.sony.net/Products/mocopi-dev/jp/documents/ReceiverPlugin/Unity/CreateSampleApp.html 余談だが、mocopiを使って3Dアバターを動かす記事はそこそこあるのに、Live2Dの2Dアバターを動かす記事は確認した限り無かったので多分ここが初出です。やったぜ。 mocopiを動かすためのSDKをダウンロードしましょう。 https://www.sony.net/Products/mocopi-dev/jp/downloads/DownloadInfo.html アセットをインポート。 MocopiReceiver/Samples/ReceiverSample/ModelsからMocopiAvatarをHierarchyへ入れます。この時点だとVに3D人形が重なって大変邪魔ですが後でどかします。とはいえ、ちゃんとmocopiの動きを受信出来ているかチェックするのに便利。 同様にMocopiReceiver/Resources/PrefabからMocopiSimpleReceiverをHierarchyへ入れます。 MocopiAvatarにAdd ComponentでMocopiAvatarをアタッチ。 MocopiSimpleReceiverにAdd ComponentでMocopiSimpleReceiverをアタッチしAvaterSettingで+を押しMocopiAvatar>MocopiAvatar、port>12351を押す。 mocopiでモーションキャプチャーして送信すると、Unity側で再生した際に3Dのアバターが動くはずなのでチェック。動いてたらMocopiAvatarのTransformのpositionをテキトーな値にして画面外に出す。 Assets内の分かりやすい所で右クリックしてCreateしてC# Scriptして「AvatarToLive2D.cs」を作成。コードは以下のページからコピペ。 https://ginmei182.fanbox.cc/posts/7698885 Live2DのVモデルにAdd ComponentでAvatarToLive2Dをアタッチ。反映するパラメータを選択。 まあ単純に3DのAvatarのパラメータ拾ってLive2Dの方に反映させてるだけなんだけどね。 再生すると、カメラの動きとmocopiでの動きがVに反映される。 次回はLive2DをUnityで作る際のつまづきポイントである、手書きのコードでパラメータを動かすと、物理演算が上手く反映されない問題について解説します。