月額199円ではじめる 2.5D Pixel Avatar
はじめに
ヤマトです。実はゲームとか作る人です。
一昨年辺りから自分なりに配信用アバター(VとかTuberとか言わないのは完全におじさんの意地(おじ✕いじ))を作ろうと思っていて、モーショントラッキングから作っていたんですがあまりに専門的すぎて挫折して1年越しにリベンジしました。最初の目論見までは成功したので、備忘録を兼ねてnoteにします。あと現在は0円構成でやっているので、マジで1円も払いたくない人は【ここまできてなんですが…】から読んでみて下さい。
僕は収入になる見込みがないものに投資できないケチなので、人件費(時間×健康=寿命)だけで済ませられるように無料のソフトや低額なサービスを利用しています。なので似たような事を始めてみたい貧乏人も気軽にスタートできるこちらのコースはいかがでしょうか?
あ、ちなみにPCとカメラとインターネットは必須です。買って下さい。
やっている事
解説する内容
使用したソフトとそれぞれで最低限必要な作業について説明します。
モデリング作業やUnityのシェーダの作り方などについては割愛します。
使っているソフト(執筆時のバージョン)
Blender(3.4.0)
ローポリモデルのモデリングをしてVRMモデルとしてエクスポートします。
Webcam Motion Capture
カメラからモーションを読み取りVRMモデルに反映し、それをUnityに送信します。月額199円。
Unity (2021.3)
ローポリモデルをドット化したり、アウトラインをつけたりします。
Blenderの作業
セットアップ
Blenderをインストールして起動したら、以下のサイトを参考にVRM用のアドオンをインストールします。また、VRM用のボーンの生成などについても書いてあるので参考にして下さい。
モデルの作成
今回はモデルの作成方法については割愛します。
1つ注意すべき点として、VRMは表情をBlendShapeで制御するため頂点を動かしやすい作りにしたほうが楽になります。
ボーンを生成
上のサイトを参考にArmatureを生成します。ボーンはわりと自由に編集して良いのでモデルに一致させて、ウェイトをつければモーションをさせられる状態になります。髪などを動かしたい場合はArmatureの子供としてボーンを追加して下さい。Armatureが複数あるとVRMモデルとしてエクスポートできません。
デフォルトポーズの作成
Webcam Motion Capture は上半身の動きをトラッキングしますが、下半身は動きません。また上半身がトラッキングしない時も味気ないポーズになります。そのままでは格好悪いのでデフォルトポーズのアニメーションを作成する事をお勧めします。ポーズを作ったらArmatureだけで良いのでfbxでエクスポートします。
BlendShapeの対応
モーションはつけられるようになりましたが、このままでは表情は一切動きません。表情のつけかたは以下のサイトなどを参考にしてシェイプキーを作成して下さい。
シェイプキーを作成したらBlendShapeの設定をします。
赤枠のVRMタブ内のBlend Shape Proxyに口のあいうえお(A,I,U,E,O)や瞬き(Blink)などがあるので、メッシュとシェイプキーをタブから指定します。
VRMのエクスポート
やっぱり最初のサイトを参考にエクスポートをします。
ここでエラーが出る場合はエラーメッセージを読んで原因を修正します。
大体は以下のような原因です。
必須のボーンが存在しない → Armatureに元からあるボーンは削除しない
Armatureが複数ある → 親子づけして統合する
Webcam Motion Capture の作業
セットアップ
インストールして起動したらまずは断腸の思いで課金します。
課金しないと画面の文字が消えず、Unityへのデータ送信ができません。
基本的な使い方は公式サイトをご覧ください。
インポート
作ったVRMをインポートします。
デフォルトモーションを以下のようにインポートします。
Unityへの送信
VRMが対応しているVMCプロトコルという方法でUnityにトラッキング情報を送信します。そのためにローカルIPアドレスを確認します。
Unity の作業
セットアップ
Unity HubでUnityエディタをインストールしたら2D(URP)テンプレートでプロジェクトを作成します。
UniVRMのインポート
ドキュメントを参考にUniVRMをインポートします。
VRMモデルのインポート
VRMファイルをAssetsフォルダに入れると自動的にUniVRMがインポートしてくれます。VRMファイルを置いた階層に複数のファイルが生成されるので、親フォルダを作っておくことをお勧めします。
マテリアルエラーの対応
URPでVRMを読み込むとマテリアルが紫色になる問題が発生します。
VRMのデフォルトシェーダを使いたい場合は以下のように対応してください。
それ以外にも自前でシェーダを用意する方法もあります。トゥーンの処理を独自に書きたい場合はShader Graphで作成します。トゥーンについては調べると以下のような参考になるサイトがいくつかあります。
Webcam Motion Captureと連携する
以下を参考にEVMC4Uをインポートします。
ポート番号はWebcam Motion Captureと一致させます。
ドット化する
いくつか方法はありますが、自分は解像度の低いテクスチャ(Render Texture)にレンダリングさせて実現しています。
アウトラインをつける
レンダリングしたテクスチャを2Dのキャンバスに貼りつけます。
このとき、アウトラインのシェーダをマテリアルに指定する事でキャラクタの周りにアウトラインがつけられます。シェーダの中身については省略しますが、簡単に説明すると白と黒に塗りつぶしたテクスチャをずらして重ねる事で再現しています(黒4枚、白8枚)
描画方法は様々なので、興味があれば最適な方法を探してみて下さい!
揺れモノについて
僕はUnityChanSpringBoneというアセットを使いました。
導入する場合は以下のサイトなどを参考にセットアップします。
しかし本来VRMにもSpringBoneが存在しているので、Unityを使う使わないに関わらずそちらを使った方が良いかも知れません。
以上でかなりざっくりですがUnityで加工したアバターを表示できるようになりました!また、Unityであればアバター以外にもアイテムやエフェクトを出す事もできるし、何ならゲームも作れるので自由度は非常に高いです。
ここまできてなんですが…
今はWebcam Motion Capture は使っていません!
ゲーム実況がメインなので身体の動きと表情だけで良いかなと思い、VSeeFaceというソフトだけでキャプチャしています。
というか、Webcam Motion Capture が表情を両目と口の大雑把な開閉しか行ってくれないので、表情を取ろうと思ったらVSeeFaceは必須です。
また、Webcam Motion Capture と併用する方法もあります。
ただコレをやると Splitcam → Webcam Motion Capture → vSeeFace → Unity と4つもソフトを起動して負荷がシャレにならないし面倒くさいので、今は節約しています。理想を言えば全部Unity上でやりたいところなので、そのうち自前のトラッキングにリベンジするかも知れません!
おわりに
長くなりましたが以上です。これであなたも一味違うなんとかTuberに!
…と言いたいところですが、まあ手間を考えると良い感じのモデルをAnimazeで動かすとかしたほうが楽だと思います。
この記事が気に入ったらサポートをしてみませんか?