アバターVRM作成と軽量化
この記事は クラスター Advent Calendar 2020 の7日目の記事です。
昨日はわらび餅さんの「webエンジニアだった私が新規プロジェクトでAndroid開発メンバーになった話」でした。
(いつまでもチャレンジ精神を持ち続けたいと思いました。いい話!)
クラスターで3DモデラーをしているShimasayです。
アバターや会場制作のお仕事をしています。
実は社内向けのVRM作成~軽量化記事を書こうとしていたのですが、公開しても問題無さそうなのでアドカレにしてしまいます。
最初に
・現在のUniVRMのオススメバージョンは0.61.1
・UniVRM-0.61.1_7c03.unitypackage です
・ダウンロードはこちら
・Unityは2019.4.11を使っています
・UnityにUniVRMをインストール
・unityPackageをドラッグ&ドロップするだけ!
基本の設定
・FBXをUnityに読み込んでAnimationTypeをHumanoidに変更
・Configure...を押してMapping設定
・ボーン構造はUnityHumanoidに準拠している必要があります
・Eye、Jaw以外は設定するのがオススメ
・UpperChestはあってもなくても大丈夫
・指の無いアバターでもHandの設定をするほうがエラーが起きにくいです
・Pose>SampleBindPose、その後 Pose>EnforceT-Pose
・これをしないとclusterに読み込んだ時に膝がちょっと内側によります
・それでも曲がってしまう時は、3Dソフトで正面から見た時に足のボーンが真っ直ぐになるように調整しましょう
・VRMに対応しているマテリアルを適用
・MToonかUnlit
・StandardはUnlitに変換されるので注意
・1回目の「UniVRM-0.61.1>Export humanoid」
・アバターをAポーズで作った時はForce T PoseをONにして書き出す
・自動でTポーズを設定してくれます
・Force T PoseをONにしないと....どうなるの?
・こんな風に腕の向きがおかしくなってしまう事があります
・cluster内で肩が下がってしまう場合は、Shoulderのボーンを上向きに10~15度回転させる
・自力でTポーズにして、Force T Poseはoffで書き出しましょう
表情の無いアバターは、この時点でclusterにアップ出来ます!
表情の設定(※任意)
・書き出されたVRMをUnityに読み込むとPrefabが作成される
・このPrefabをシーンに追加
・Prefabを選択>Inspectorの「VRM Blend Shape Proxy(Script)」の「Blend Shape (Blend Shape Avatar)」をダブルクリックで開き
・A、I、U、E、O、Blink、Joyにブレンドシェイプを設定する
・Blinkに使うパラメータを他の表情に使いまわすと上手く動きません
・軽量化の為には、BlendShapeで動くメッシュのポリゴン数を少なくしましょう
・また、1表情=1パラメータにするのがオススメです
追記:2021/09/10のバージョンアップでモバイルとデスクトップでも表情を出せるようになりました!
https://note.com/cluster_official/n/nf54f391d25f8
左から 通常、笑顔、怒り、悲しみ、緩やか、驚きです
これらの表情を出している間は口パクの動きは無視されます
揺れ物(※任意)
・PrefabをHierarchyで開くとsecondaryというノードが追加されているので揺れものを設定する
・RootBonesのSizeを1以上にして、揺らしたいボーンのルートを設定
・揺れ物のコリジョンはVRM Spring Bone Collider Group
・ColliderGroupsのSizeを1以上にして、VRM Spring Bone Collider Groupを付けたボーンを登録するとRootBonesに登録したボーンをはじいてくれる
・イベントで負荷が気になる場合は揺れ物を付けないほうが良いです
・RootBonesのSizeの合計は25以下
・ボーンの階層の長さは10本まで
・Spring Bone Collider Groupの数も負荷に直結しますので、なるべく少なくするのがオススメです
2回目の「UniVRM-0.61.1>Export humanoid」→ clusterにアップロード可能!
注意点
マテリアル
・Standardシェーダはclusterにアップロード時にUnlitに変換されます
・ライトに影響されないMToonのパラメーター
・Emission、MatCap、Rim Color、Fixed ColorのOutlineはライトの影響を受けません
・ライトの無い会場で輪郭線だけが見えてしまっている状態↓
・これはこれで面白い表現に使えそうではありますね?
ボーンウェイト
・clusterで使えるVRMの1頂点に対して使用出来るボーンウェイトの数は4つまで
・動かした時にウェイトがおかしいな?と感じたら、3Dソフト側で4つ以上のウェイトが登録されていないか確認してみましょう
モバイル向けデータサイズの目安
・ポリゴンは三角で32,000以下
・マテリアルは3~4以下
・テクスチャは512、3~4枚以下
・メッシュ数4以下
・SetPassCallは10以下 が目標
・揺れ物は25本以下
・ボーンの階層の長さは10本まで
実際どれくらいが軽量なのかと言うと、ファイルサイズが500kb以下のVRMになっていると「とても軽い」と言えます。
exportオプション
・この3つは意図した挙動になるならONにしたほうが軽くなります
・2つ目のReduce BlendShapeは使ってないBlendShapeを削除してくれるので、手軽にサイズダウンが可能です
BlendShape
・全身が1つのメッシュで、大量のBlendShapeが付いていると重くなる
・3Dソフトで編集するのが難しい場合は、Mesh UtilityのMesh Separatorを使ってメッシュを分割しましょう
最後に
モバイル端末で大勢の人に見てもらえる事、ワールド/イベントで負荷にならない事はとても大事です。
快適なclusterライフには欠かせないアバター軽量化、自作勢のみなさんは是非挑戦してみてください!
わからない事があったらcluster公式Discode、または私のTwitterに直接質問でもOKです!
明日はのむらさんの「クラスター社員が語る、バーチャルカメラの魅力。」です。
世界初(?)のバーチャルカメラマンの初執筆、楽しみです!