前の記事からだいぶ空いてしまいました。
今回はVRMのアバターの作り方(一からとは言っていない)を説明していきます。
VRMとは
VRMとはオープンソースで公開された3Dアバターのためのファイルフォーマットです。
ドワンゴを中心に開発が行われ、VRMに対応したソフトウェア(バーチャルキャストやcluster.など)で、自分のアバターでコミュニケーションすることができます。
VRMの特徴として、ファイルフォーマットに形状だけでなく、権利表記配布条件も組み込まれている点があります。
これにモデルが管理できるプラットフォームがあれば、自分のアイデンティティを横断的に持つことが出来て良いのですが、
ニコニ立体さんAPI公開してくれないですかねぇ…
アバターを手にするまで
VR空間に着ていくアバターをすべての人が自作出来ればいいのですが、モデリングは人類の基本スキルではないようです。
そんな時我々オールドタイプは人様のモデルを拝借するわけですが、心して、以下の点は絶対に気を付けましょう。
権利的にクリアであること
(Unityにぶっこんでも許される、アバターで使ってもOKである、n次創作ではないなど)
雑誌が回収になったりバーチャルライフを叩き折られたりするので、冗談では済まされない事ですね。
今回チュートリアルで用いるのは、あいんつさん(@einz_twei)のアークトラスちゃんです。
アークトラスちゃんは以下の点でVRMのチュートリアルを行うのに適しています。
- 揺れモノを仕込まなくても不都合が無い
- ポリゴン数が控えめ
- Humanoidをセットアップしやすい(Unityで読み込むことが出来るfbx同梱)
- カスタマイズしやすい
マテリアルやテクスチャ数がだいぶ絞ってあり、MMDerよりもゲの付く業界の人が作った感じでUnityで使いやすいです。
ユニティちゃんシェーダ2の作例としても優れていて、参考になります。
そんな厳しい条件をクリアできる子が 1080円 (おやつ約3回分)です。買わない手はありません。
VRMセットアップ
バーチャルキャストや自作のアプリで動かしたい場合は、特に何も考えずVRMのドキュメントに従えばセットアップ可能です。 以下、モデルに依存した細かい部分について説明します。
VRM用のマテリアルを作る
前述したとおり、アークトラスちゃんのマテリアルはユニティちゃんシェーダ2でセットアップされています。
自作のアプリなどで、対応するシェーダを先に読み込ませておけば、何も考えずにVRM化して無事読み込めるのですが、
そうでない場合、VRMの基本的なシェーダでマテリアルをセットアップしなおさなければいけません。
今回は、マテリアルをMToonに置き換えます。
元のマテリアルはhrad, main, armor の3種類なので、変換後のマテリアルも同様の名前で3種類用意しましょう。
UniVRMを空のプロジェクトにインポートします。
Releases · dwango/UniVRM · GitHubAsset内の適当なフォルダにfbxをインポートしましょう。

prefabを2体並べて比較しながら調整するとよいでしょう。

VRM用のマテリアルを作成して

片方のprefabに適用します。

リムライトがなかったりMatCapの当たり方が異なったり、ベースカラー適用のロジックが異なったりするので、 全く同じに再現するのは難しいので、大体違和感がない程度に調整します。
大体こんなもんでしょうか。

セットアップ例を示します。
カラーはスポイト機能を使って直接設定すると便利です。



VRMへのコンバート
VRM置き場(フォルダ)を用意して

インポート & セッティング!!

そして変換。
途中NormalMapの変換で怒られるので「Fix now」で変換してしまいます。
深さ成分がスポイルされてしまいのっぺりしてしまいます。悲しいですが致し方ありません…

変換の結果ノーマルマップの座標がおかしくなるので、Normal Map の数値を 0 にしておきます。

メタ情報を入力する
変換したVRMのprefabをHieralchyに展開しましょう。

VRM Metaというスクリプトに、名前、作者情報、アバターの使用許諾条件などを記述しましょう。
Reference の項目でサムネイル画像を設定できるのですが、楽するために下のプレビューから画像を切り取って貼ってしまいました。

ファーストパーソンの時の描画設定
モデルによってはアバターにVRで入ったときに視界が顔の裏側で邪魔される場合があります。
そんなときに顔の描画を消す処理を定義します。
アークトラスちゃんの場合、腕輪がコントローラーの邪魔になるので、ファーストパーソンの時は腕輪も消えるように設定します。

表情をつける
VRM BlendShape Ploxyコンポーネントから Blend Shape Avatar をダブルクリックして
BlendShapeEditorを開いて表情を定義していきます。


目の動きをBlendShapeで行う
アークトラスちゃんは瞳の動きをBlendShapeで定義しているので、
VRM Look At Bone Appluer を VRM Look At Blend Shape Appluer に差し替えます。
VRM Look At Blend Shape Appluer を読み込んで

VRM Look At Bone Appluer を削除します

2回目のVRMコンバート(仕上げ)
セットアップが完了したので、VRMのprefabをApplyし、再度VRMエクスポートを実行します。

ビュアーで見てみよう
VRMのサンプルプロジェクトに、VRMキャラクターのビュワーがあるので
インポートして実行してみましょう。
UniVRM-RuntimeLoaderSample-0.38.unitypackage をプロジェクトに展開し、
シーン VRMViewer を読み込んで実行します。

動いた!

バーチャルキャストで連携する
これでニコニ立体にアップすれば、バーチャルキャストに連携することもできます。
再配布が禁じられているモデルの場合、アップロードして下書きのまま運用すれば、
ニコニ立体の一覧に表示されないので、活用しましょう。


バーチャルキャストの設定方法は、以下を参照ください。
cluster.対応 VRMセットアップ
アークトラスちゃんの真価は、制限に強いところだと言えます。
ポリゴン数控えめで、物理無くても困らないので、
cluster. などの制限フルなプラットフォームへの対応コストが劇的に低く、
ロー or ミドルポリゴン向けの環境にも、特にメッシュを落とさずに入っていけます。
要件を確認する
cluster. で動かすためのVRMアバターは結構制限が厳しいです。
| 要素 | 上限 |
|---|---|
| ファイルサイズ | 25MB |
| GameObjectの数 | 256 |
| ポリゴン数 | 32000 |
| メッシュの数 | 16 |
| サブメッシュを含めたメッシュ数の合計 | 32 |
| ブレンドシェイプの数 | 64 |
| ボーンの数 | 128 |
cluster. SDKでインポートしてみる
cluster. で使うアバターをセットアップするのに、 cluster. SDK があれば便利です。
中身はVRMにアバターチェック、アップロード機能が追加されたものです。
セットアップは以下のリンクを参照してください。(SDKダウンロードのリンクもそこにあります)
最初のチュートリアル - cluster. SDK ドキュメント
cluster. SDK の推奨バージョンは Unity 2017.4 です。
他のバージョンでも動きそうではありますが念のため合わせておくと確実です。
新規プロジェクトにcluster. SDKを読み込み、
モデルを変換しようとすると、
問題がある場合は、写真のように問題がある箇所を指摘されます。
なお問題ない場合はそのまま変換されます。
やってみよう!

今回はメッシュの数が1つ多いようです。
つまりやるべき作業は、 メッシュの統合を行って数を減らす ということです。
blenderでメッシュを統合する
blederでfbxを読み込ませます。
設定はこんな感じで。


軸設定が大事で、以下のように設定します。
Main が -Z Forward , Y Up
Armatures が Primary Y Axis, Secondary X Axis
cluster.の基準に入るには
メッシュを一つ統合すれば済みます。
あとで得物とかギミックを仕込めるように、もう少し統合しておきましょう。
背骨のアーマーとブーツをそれぞれまとめます。
統合事故を避けるために編集したいメッシュ以外非表示にしましょう。

Shift キーを押しながら統合したいメッシュを選択して、左の Join ボタンで統合します。

ブーツも同様に統合します。

名前をシンプルに変えます。

仕上げにfbxに書きだします。

fbx書き出しの設定はこのようにします。
軸設定は、インポート時と同じにしましょう。
あと注意する点としては、 Path Mode : COPY にする Add Leaf Bones は OFF とかです。




Humanoidのセットアップ
Unityにインポート
blenderから書き出したfbxをUnityに読み込ませます。
変更前のファイル一式もプロジェクトにインポートしておきます。
Rig
3DモデルデータをUnityにインポートするとき、ボーンやテクスチャの設定が必須なのですが、
アークトラスちゃんはボーン名がローマ字読みで入っていて辞書で解決されないので、ボーンの設定が面倒です。
そこで先に変更前のモデルのアバター定義を HumanTemplate ファイルとして保存して、読み込ませます。
変更前のfbxを開いて、 Rig の設定から Avatar Definition → ✓ Configure... をクリックします。

アバターのボーン設定メニューになるので、下の Mapping から Save で保存します。

次に変更後のfbxに保存した HumanTemplate ファイルを読み込ませて Rig の設定は完了です。
Main
Main は変更前のfbxの真似でOKです。

Materials
Materials は、既にVRM用のマテリアルを定義済みだと思うので、それを適用します。

Prefabの作成
Hierarchyに変更したモデルを設置すると、変更前とツリー構造が異なっていることに気が付きます。

散らかって分かりにくいので元のツリー構造と同じに設定します。

*_ALLGとかいう謎の追加オブジェクトは削除してしまいましょう。
モデルをプロジェクトディレクトリにドロップして Prefab 化します。
VRMの作成(2回目)
Hierarchy上のPrefabをVRMに変換します。
以降は前述のVRMセットアップと同じ内容なので省略します。
そんなわけでメタ情報や表情の設定を同様にやりなおして完成です。
cluster. にアップロードする
cluster. SDK のメニューからアバターをアップしてみましょう。

MANZOKU
