3D-Avatar: VRM を作って → detune して → cluster へアップロード成功するメモ; 2020-04-10版
経緯などはさておき、件について少し複雑ですので整理するメモです。時間がないけど結論だけ気になる人は最後のまとめだけどうぞ。
目次
- (1) VRoid Studio や セシル変身アプリ でVRM を作って
- (2) cluster へアップロード -> 「アップロードに失敗しました。」
- (3) Blender に add-on 群を導入
- (E) 何かエラーが起きてしまった場合の対処療法メモ
- (E-1)
Blender
+CATS
でFix Model
しようとしたら "No mesh inside the armature found!" エラー - (E-2)
Unity
でいい感じの VRM 系シェーダーを設定しても髪の毛の内側が消えちゃう - (E-3)
Unity
で Rig を Humanoid にして Apply しようとしたら 'Error(s) found while importing rig in this animation file. Open "Import Messages" fold out below for more details' エラー - (E-4)
cluster
で "アップロードに失敗しました。ファイルサイズを25MB以下にして下さい。」エラー - (E-その後) cluster へ セシル変身アプリ で作成した un-h002; Atropos をアップロード -> 成功✨
- (E-1)
- まとめ: VRoid Studio や セシル変身アプリ で作成した VRM を cluster へアップロードして使う方法
(1) VRoid Studio や セシル変身アプリ で VRM を作って
今日までに著者が実際に VRM 作成に使用してみたツールと成果:
どちらも近年のゲームにしばしば搭載されている高機能なプレイヤーキャラクターエディターのような使用感で VRM を作れるすぐれものです。標準搭載されているパーツの選択だけでも"ことはじめ"には十二分な見栄えのするキャラクターを造形できてしまいます。手間暇次第でテクスチャー、小物、衣装、素体を他の専用ツールで編集、作成もできます。使い方は使えばわかる、みたいないいツールです。
つまり、ここの部分の説明はメモないです😜 だいじょうぶです。使えばわかります…たぶん。
(2) cluster へアップロード -> 「アップロードに失敗しました。」
さて、↑のツールで作成した VRM を cluster へアップロードしてさっそく楽しもう!とするとつらい現実に叩きのめされます:
↓un-h001; Lachesisの場合:
↓un-h002; Atroposの場合:
つらい😭 (要件的にも、できたーからのオチ的なお気持ち的にも)
手作業でデータをごりごりいじって対処するのはわりと手間暇かかりそうな予感がするので、1ヶ月ほど cluster はほぼ棚上げ状態になっていました。今回は棚卸ししたのでメモを残しました💪
(3) VRM の detune (≃軽量化)
cluster の厳しい要件を満たすため、 VRoid Studio や セシル変身アプリ で思いのままに作ったアバター VRM たちを cluster 用に detune する必要があります。素体のモデリングから完全にフルスクラッチで自作する場合も cluster の要件の範囲内で人型のかわいいモデルを作るのはなかなか難しいと思うので、それなりモデルを作ろうとするとフルスクラッチでも同様の工程を経る事になるかもしれません。
基本の手順:
VRoid Studio で出力した VRM はたぶんこの基本ばーじょんでほぼうまく cluster 対応できます✨ セシル変身アプリ で出力した VRM はいまのところ少し小細工が必要だったので、末尾の小細工必要ばーじょんに対処療法のメモを残します。
(3-1) モデルデータごとに作業用ディレクトリーを別けられるようにディレクトリーを1階層堀り、作業対象の VRM ファイルだけを入れておく
はじめは VRM ファイル1個を放り込むだけですが、この後いろいろとファイルが増えます。複数のVRMを同じディレクトリーに置いて作業するとたいへんです。ケチって他のモデルデータと作業ディレクトリーやプロジェクトを共有するのは事故の元なので別けて管理できるディレクトリー構造を用意して作業をはじめます。
(3-2) Blender を導入
手操作または choco install blender
など。
(3-3) Blender に add-on 群を導入
- VRM_IMPORTER_for_Blender2.8 ; 執筆時点では Testing 扱い
- Cats Blender Plugin ; Community 扱い
- material-combiner-addon ; Community 扱い
- Note: もし、対象の VRM の色付けにテクスチャー+ベタ塗り(diffuse color)を使っている気がする場合は、本家公式版の変わりに usagi/material-combiner-addon:experimental-vrm-diffuse-color 版を使うと便利かもしれません。
(3-4) Blender で VRM を読んで detune して FBX を出す
(3-4-1) File -> New -> General ( または起動初期状態 )
(3-4-2) Cats Blender Plugin で VRM を Import
↑引っ張り出したら↓縦タブから CATS
を選び、 Import Model
します。
↓ファイルオープンダイアログが出たら、モデルデータのある場所へ初回は頑張って辿り着いて下さい。辿り着いたら、ファイルを選ぶ前に、Favorites
に現在のディレクトリーを +
で覚えさせて置くと、これからファイルオープンダイアログが出るたびに疲弊せずに使えるようになります💪 不要になったら -
で消せばよいのでよく使う場所は気軽に Favorites
へ入れるといいです。
↑から .vrm ファイルを選択して開くとしばらく Blender はプチフリーズ状態になりますが生暖かい目で待ちます。たぶん今どきの3DCGやろうとする人が使っているPCなら10秒か20秒くらい待っていれば読み込みが終わります💪
↑こんな感じ。画面中央はカメラが遠いだけなので、近づけてみたい時は操作方法いろいろありますが、マウスでハンドルを操作する方法がいちばん直感的に見ればワカル方法です。
XYZがRGBの棒とぽんぽんでつながっているハンドルを Drag&Drop すると原点中心で視点をオービタルに回転。同様に、+印のルーペっぽい🔎ハンドルは同様に拡縮、てのひら印✋のハンドルは同様に視線系での平行移動です。基本の視点操作のほか透視投影と正射影の切り替えも↑の縦に並んだツールの最下にあります。お好みの使い勝手の良い、作業しやすそうな視界に調整します↓
↑はマテリアル(材質の色や質感など)が乗っていないので3DCG入門者はやや警戒してしまうかと思います。シェーディング技術の一般的な表現分離の段階として表示設定上マテリアルが乗っていないだけなので作業中はお好みで↓を切り替えてマテリアルを乗せた絵にもできます。
↑から Rendered
の玉を選ぶと空間のライティングを考慮した仕上げの色味を確認できます。 VRM の detune 作業のようにマテリアルの発色を確認できれば十分な場合は Material Preview
の玉を選択するのがよいかもしれません。↓のようになります
(3-4-3) Cats Blender Plugin で Fix Model
して Mesh, Bone, Material を軽量化
CATS
でのお手軽全自動 detune 作業を続ける前に Import したモデルの Object 群 (≃3DCG一般としての扱い上はほぼ Mesh 群の事ですが、 Blender の中では Blender 独自の階層構造と用語として橙の▽の 'Object' という単位で扱わる部分です) の名前の末尾が .baked
または .baked0
になっている事を確認します↓
VRoid Studio で作成した un-h001; Lachesis の VRM は↑の様にすべての Object の名前は .baked
になっているのでこのまま進めました。 セシル変身アプリ で作成した un-h002; Atropos はそうなっていなかったのでこのままでは進めません。なぜ進めないのか、応急措置できるかは対処療法メモへどうぞ。( VRoid Studio でも素体選択その他の状況次第で対応が必要な事もあるかもしれません。)
.baked
/.baked0
の確認ができたら CATS
での detune 作業を進めます。次は Fix Model
で Mesh, Bone, Material を最適化します。ざくっとお手軽全自動ですが、具体的に Fix Model
が何をするのか、あるいは一部最適化を on/off したい場合はスパナー🔧印のところからにゃんにゃんできます↓
Fix Model
を押すとマウスカーソルが怪しくバグった感になりつつ例によって Blender がプチフリーズしている感じになりますが仕事してくれています💪 そっと見守りましょう。今回も10秒か20秒くらいで終わると思います。終わると↓
↑すっきりざっくり detune されています。もし、Fix Model
でエラーが出た場合はスケルタルアニメーション関連の設定値がどこかしらよくないかもしれません。その時は諦めて対処療法メモへ。
(3-4-4) material-combiner-addon でマテリアルを Atlas 化して軽量化
次に3DCGモデルデータとしてのテクスチャーの次元(個別割り当てされる画像の枚数の意図)と空間(1枚の画像の中でUV座標を詰め込んでデータの疎部分を少なくしたりの意図)を圧縮します。主に商業用ゲーム向けのレンダリングリソースの制限が厳しい3DCG業界で頻繁に使われるテクスチャーの工夫技術の1つで Atlas と呼ばれています。
CATS
-> Optimization -> Atlas を開きます↓ または、 CATS
縦タブではなく MatCombiner
縦タブで操作しても同様です。(CATS
はMatCombiner
の機能を取り込んでUIを出しているだけなので)
↑ "If this saved you time:" とパトロンの案内が出ている通り、これを手でやるのも面倒だにゃー億劫だにゃーと思い1ヶ月くらい調査時間も取れないまま放置してました。アバターで何か楽しむ実用に繋がった際にはお気持ちパトロンまたは Commit しようかな、と思います。
もし、画面が↑のように Generate Material List
, Save Atlas to..
が出ていない場合は、代わりに機能を使うために不足の add-on が案内されていると思います。その場合は導入すると Blender の再起動を促される事になるので、特に慣れないうちは作業途中の状態を File メニューから事前に名前をつけて保存しておくと安心かもしれません。
Generate Material List
を押すと個別に作られているマテリアルが列挙されます。マテリアルの発色は主に diffuse color (=拡散反射光の色) で決まります。マテリアルが最終的に発色する色は最も単純には単色のベタ塗り、次いでテクスチャーマッピングによる画像のベタ貼り(≃現代では一般的にUVマッピング)、あるいはその組み合わせ(=シェーダーで乗算合成したり加算合成したり)が基本になります。
後の Unity 工程で登場する VRM 規格向けの推奨シェーダー群でもマテリアルの対応としては単色でベタ塗り、テクスチャーでベタ塗り、テクスチャーに単色ベタを乗算合成、そんなような表現が基本になっています。工程を進めて色が抜けてしまったり、あるいは期待していない色が塗られてしまっている事に気づいたら、この工程へ戻り(古典的な対処方法ですが念の為 .blend を別名で保存しておくと楽です) マテリアルごとの歯車⚙で Multiply image with diffuse color
(≃乗算合成結果の焼き込み設定)を調整するだけで解決するかもしれません↓
最終的にはこの工程で Atlas にしたテクスチャーを2D画像編集アプリで直接ごりごりと塗り替えてしまうという方法もあります。細かい事を考えるよりその方が"はやい"こともあります😅 わりと柔軟にどうとでもできるのでわからんかったらとりあえず進みましょう。
Save Atlas to..
を押下するとマテリアル最適化によって結合された1枚のテクスチャー画像ファイル(≃Atlas)の保存先ディレクトリーを聞かれます。この工程を進めるとインポートしているモデルデータそのもののマテリアル構造がある意味でぐちゃっと、ある意味ではすっきりと変更されます。最適化前の状態へ戻りたくなる予感がする場合は進める前に Blender の作業状態を .blend へ保存しておくと安心です。問題なければ進めましょう↓
↑ぽちると一瞬マテリアルが全て剥がれた後、数秒待っていると Atlas 化されたマテリアル&テクスチャーが読み込まれて色が戻ります…が…ここで現行オリジナル版の 色が…↓
↑と、こんな感じで diffuse color が抜けます。塗りが複雑なテクスチャー部分は Atlas に合成成功しているので、この程度の微調整なら先に触れたように出力された Atlas テクスチャー画像ファイルを画像編集アプリで編集し、透明部分を選択 -> 選択反転 -> レイヤー追加 -> diffuse color でベタ塗り -> レイヤーを乗算合成 -> 統合して手修正版 Atlas 画像を出力、とかすれば大丈夫です。
あるいは、 add-on の導入の項で書いたように、暫定的に VRM の diffuse の全自動合成に対応する機能を追加した実験版の add-on を導入しておけば↓のように texture に diffuse color も合成した Atlas を出せるかもしれません↓
実験版を作るまでに原因、BlenderのAPI、CATS で Import したデータの内部構造…などの調査に数時間かかっています。脳筋対応なら3分でできるし、実験版も結果的な diff は実はたったの2行なのだけど。ahaha... 😅
ともかく、無事に Atlas 化もできてマテリアルも detune というか軽量化できたら、.fbx に Export します。 CATS
の Export Model
をぽち↓
(3-5) Unity で FBX を読んで detune 版の VRM を出す
(3-5-1) Unity Hub を導入
https://unity3d.com/get-unity/download または https://chocolatey.org/packages/unity-hub あたりで入れます。
(3-5-2) Unity (特定リリースのエンジン本体) を導入
- Unity Hub を起動し、
Installs
縦タブのADD
から Unity を導入- もし、 cluster SDK を使いたい用途がありそうな場合は cluster SDK の現行版で指定されている特定リリースの Unity を導入します
- Note: FBX から VRM を出力するだけの場合は動けばなんでもいいです(たぶん)
(3-5-3) Unity の作業用プロジェクトを作成
Unity Hub の縦タブを Projects
へ切り替えて NEW
-> VRM 作業用ディレクトリーまたはお好みのどこかに Unity プロジェクトを作成
(3-5-4) UniVRM で軽量化版の VRM を書き出し
作成した作業用 Unity プロジェクトを起動し:
- プロジェクトへ UniVRM パッケージを導入
- プロジェクトの Assets へ Atlas 化して保存しておいた
.png
と Expoert した.fbx
を Import - Create -> Material -> 名前はなんでもよいので適当につける
- 画面下側の Project タブの直下にあります
- インポートしたモデルデータの Animation Type を
Humanoid
へ変更してApply
- モデルを選択すると画面右側の Inspector の Rig タブの上部に Animation Type が出ます
- Note: ここで
Apply
を押した時にError(s) found ...
などエラーが出たら画面下側の Console タブを確認して対処し始める必要があります。残念ながら小細工必要ばーじょん対処療法へどうぞ。
- インポートしたモデルデータを原点へ配置
- Drag & Drop -> Inspector で座標を 0,0,0 にします
- 配置したモデルデータに先に作成した Material を設定
- Material の Shader を VRM 系のどれかもっともそれっぽくなるものへ設定
- Material を選択 -> Inspector の Shader をぽち
UnlitCutout
または、MToon
で Rendering Type をCutout
にして Cull Mode をOff
にすると期待に近い再現になるかもしれません
- 画面左側のシーンのツリー表示から VRM 出力したいキャラクターのオブジェクトを選択した状態で、メニュー: VRM -> UniVRM-xx.x ->
Export Humanoid
- 諸元を書いて
Export
-> 出力先ファイルを設定して完了!
- 諸元を書いて
↓ファイルを取り込んだ程度の状態。やや怖い。
↑の状態にマテリアルを適用(Drag&Drop)した状態↓
よい具合👍
↑Export Humanoid
ぽち
↑書き出す VRM の諸元を書いて Export
(6) cluster へアップロード -> 成功✨
Atlasの最適化が甘いか余計な構造が入り込んでしまっているのかファイルサイズは太りましたが…↓
↑ここまでは失敗する場合でも進みます…
↓こうなったら全ての構成が完了し成功です!!
💪🎉💪🎉💪🎉💪🎉
(3-おまけ)
アバターのアップロードに成功した状態で cluster を起動すると↓
アバターを選択して cluster のワールドへ入ってみます↓
↓detuned ばーじょんと言ってもさほど劣化した感じもなく、綺麗です👍
アバターを使えると気分的な没入感がとても高まって嬉しい&楽しいですね🎉
(E) 何かエラーが起きてしまった場合の対処療法メモ
セシル変身アプリ で作成した un-h002; Atropos で↑の基本ばーじょんをやろうとすると幾つかの問題が発生しました。本項ではそのトラブルシューティングを例に、何かエラーが起きてしまった場合の対処療法としてメモを残します。
(E-1) Blender
+ CATS
で Fix Model
しようとしたら "No mesh inside the armature found!" エラー
↑これが出て Fix Model
できない VRM データがあります。"armature" はスケルタルアニメーションのボーン群の事です。 VRM にボーンはきちんと入っていても出ます。VRM の規格的には問題無くても、 CATS
の実装がまだ甘い部分があり弾かれてしまうのが原因でした。原因はどうでもいいので対処療法をすぐに確認したい場合は少し読み飛ばして下さい:
↓ここから原因について↓
Cats Blender Plugin のソースを確認すると:
直前に VRM フォーマットの確認機構が実装されていて、その確認が false
に終わるとこのエラーへ繋がります。確認機構では:
を mode=2
で呼び、すべての mesh
を走査して、名前の末尾が .baked
または .baked0
の mesh
があれば true
と判定しています。この確認機構には詳細不明ながら TODO のコメントもあり、
など VRM, gltf, Unity/humanoid など関連の規格で定義されている確実な方法でも無さそうな事から、 Cats Blender Plugin の Author による暫定仕様の判定方法なのだろうと思います。
とりあえず Issue は立ててみました。
↑ここまで原因について↑
この問題が起きた場合は応急措置として、Blender で Object
と認識される頂点データの入った部品すべての名前の末尾に .baked
を追加します。すべてです↓
↑名前の変更は、変更したい Object をぽちって F2
キー押下です。
こうすると Cats Blender Plugin の現状の暫定 VRM 判定をクリアーして Fix Model
できるようになります💪
(E-2) Unity
でいい感じの VRM 系シェーダーを設定しても髪の毛の内側が消えちゃう
↓Blender
では期待表示されていたのに…
↓Unityでは髪の毛を内側から見ると完全に見えない場合
Unity のマテリアルの Shader を VRM/MToon
に設定して、 Cull Mode を Off
にします:
↑こうすると内側からも髪の毛が見えるようになります↓
より根本的に修正したい場合は一般論としては FBX またはその手前の .blend の編集段階でこの部分の面の向きを反転…=頂点データのインデックス群をいじる必要があるかもしれません。
(E-3) Unity
で Rig を Humanoid にして Apply しようとしたら 'Error(s) found while importing rig in this animation file. Open "Import Messages" fold out below for more details' エラー
↑つらい。これが出たら先ずエラー表示(='この下の方の"Import Message"を展開して詳細を確認してね')に従い "details" を確認します。
Invalid Avatar Rig Configuration. Missing or invalid transform: Required human bone 'LeftLowerLeg' not found
今回の例では Unity さん的にはあってほしかった LeftLowerLeg
が無かったようです。Leftが無い場合はたいていRightも無いので一緒にどうにかします。
先ず、 Blender で、この部分については問題のなかった un-h001; Lachesis の Armature
の構造を展開して期待動作系のボーンの状態を確認すると:
↑期待動作系: Hips
-> Left leg
-> Left knee
-> Left ankle
-> Left toe
次に、問題が発生してしまった un-h002; Atropos の Armature
の構造を同様に確認すると:
↑LeftLowerLeg
エラー系: Hips
-> Left leg
-> Left ankle
-> Left toe
Hip
から Left toe
までの間にジョイント部分が3箇所欲しいのが Unity の Humanoid の要件ですが、エラー系では1つ足りなかったようです。Armature
のツリー構造をよく見ると:
今回ケースでは UpLeg_L_001
が Left leg
の先、 Left ankle
と同じ階層に浮いている事に気付きました。Animation
タブへ切り替えてどのボーンがどの部分なのかもっとよく確認してみます↓
↑の確認の結果:
- ふとももの辺りにある随分と小さなボーン =
UpLeg_L_001
- 膝から脛の辺りにあるボーン =
Left leg
- 踵から指の付け根にあるボーン =
Left ankle
- 爪先のボーン =
Left toe
↓ここから(2020-04-11 追記)↓
昨日の時点ではこのあとボーンを手修正へ流れましたが、あらためて「もしかして」と思い CATS
で Fix Model
する「前」の状態を Import して統合処理前のボーンの構造と Pose Mode での動きを確認したところ、元VRMデータに問題はないので「 Fix
のオプションを見直したら手間暇かからず重要なボーンの消失と再構築を免れるかも」と思い、試してみました💪
結果、Fix Model
しても脚を構成する Humanoid 用のボーンに欠陥が生じないようにできました✨ これで解決する場合はこの↓↓は不要になります。以下は一応この追記後も「やむを得ない場合は」用の対処メモと残しておきます💪💪
↑ここまで(2020-04-11 追記)↑
期待動作系との比較から、おそらく…:
UpLeg_L_001
ボーンが本来はLeft leg
相当になるボーンLeft leg
になっているボーンが本来はLeft knee
相当になるボーンLeft ankle
ボーンとLeft toe
ボーンはそのまま
となるところ、CATS
の Importer か Fix Model
で大雑把に作業し過ぎたために狂ってしまったか、あるいは元になった素体データのボーンの実装に Importer を誤動作させてしまう微妙な値が設定されていたのかもしれません。↑の推定に基づいたボーンの階層構造の修正を行います。修正は Left も Right も同じ様に必要そうなので、左右セットで同様に編集します:
↑左右の同等パーツをCTRL+クリックでセットで選択し↓
↓ボーンの親が期待しないところへ繋がっている場合は Armature
-> Parent
-> Clear Parent
で親への接続を解除し、
↓ボーンに期待する親を繋ぎたい場合は子ボーンと親ボーンになる予定のボーン2つを選択して Armature
-> Parent
-> Make
-> Keep Offset
(親子の距離を維持) or Connected
(子の根本を親の先端まで移動)
↓ボーンを選択して Armature
-> Transform
-> Move
(移動) and Scale
(拡縮)して綺麗に再配置します。必要に応じて回転ほか適当にそれらしく配置されるようにします。
↓名前の変更はぽちって F2
キー押下でできます。
今回の場合のようにボーンを大きく編集した際には、ウェイトも調整が必要になります。現状アニメーションするとどうなるかは CATS
から Start Pose Mode
を押下してボーンごとに回しておかしな挙動がないか確認します↓
↑どのように実験的にポージングさせても、Stop Pose Mode
すれば T姿勢に戻ります↓
ウェイトの調整がどの辺りにどういった具合に必要そうか Pose Mode でおおよそ把握できたら、緑の頂点3つが繋がった印のメッシュデータをぽちり、 Weight Paint にモードを切り替えます↓
↓Vertex Group からウェイト編集したい頂点群を選択すると、
↓選択した頂点群のウェイトが青=0→緑→赤=1で色分けされます。
↓画面上部の Weight, Radius, Falloff ほかを塗りやすいブラシに設定し、視界も塗りやすいように回しながらぽちぽちウェイトを塗り絵します。
↓パーツごと、あるいはある程度塗ったら Pose Mode で妙な事が起こらないか確認します。肉(ポリゴンはサーフェスなので皮だけど)がボーンの動きに付いてこなかったり、逆に余計なところまで付いてきたり、そうした妙な事が起こらなければボーンの修正は完了です💪
この修正を施した状態から改めて CATS
から Expoert Model
したところ、 Unity
の作業用プロジェクトでも .fbx をインポートしたモデルに Humanoid を設定できました🎉
(E-4) cluster
で "アップロードに失敗しました。ファイルサイズを25MB以下にして下さい。」エラー
↑無慈悲なエラー。さすがにひとり50MBのアバターを使ったら20人集まっただけで1GBショックになります。これは寧ろエラーにしてくれないとワールドがつらくなるかも。
一般的に3DCGデータのファイルサイズを縮めるための対処方法は、
- テクスチャーを圧縮(内部保持形式を高圧縮率のフォーマットへ変更する、解像度を半減する、色情報のビット表現をケチる…など)
- 頂点数を削る(頂点数を削るとインデックス数も削れるのでハイポリ→ローポリくらい削れる場合には大きく削れます)
- スケルタルアニメーション用の頂点ブレンディング、アニメーションのキーフレームを削る
- プロシージャルにして実行時(描画時)にごりごり計算して絵を作らせる; 今回はたぶん使えません
.fbx の段階では膨れていません。 .fbx には Atlas 化したテクスチャーが含まれていないので別途、確認:
5MBしかない。48MB -> 25MB のためには最小でも 23MB 削る必要がありますし、テクスチャーを0にはできないのでもっとずっしりと VRM のファイルサイズに効いている何かを発見する必要があります。
un-h002; Atropos は セシル変身アプリ で cluster 用など気にせず思いのまま作成したので、アニメーションが多めでマテリアルの Atlas 化の副作用でスケルタルアニメーションの頂点ブレンディングが最終的な VRM のファイルサイズに強く響いている…かもしれません。または、単純に髪の毛と猫しっぽにボーンが多すぎるのかもしれません。
↓当たりを付けるため、髪の毛のボーンをいったん削除してみます。悲しい😭
↓ .fbx の段階でもそこそこ減りました。
↓ Unity
で .vrm にします。T姿勢では違いはでません。
↑DT1がボーン削除前、DT2がボーン削除後です。82ボーン削除しているのでそれなりに効果があるかと思いましたが、ほぼ無意味でした☠
UniVRM には Import 機能も付いているのでボーン削除していない状態の un-h002; Atropos の VRM (UniVRMで Export したもの) を Import して prefab を作って貰いました。どこにどれくらいファイルサイズ爆発の要因があるか powershell
で Get-DirTotalFileSize .
してみました↓
↑Meshes が 300MB 弱もあるようです😂 Textures + BlendShapes + その他は porefab 段階では全体の 1% にも満たない事がわかりましたが、恐らく頂点ブレンディングに起因したスケルタルアニメーションの頂点データが大爆発している、が答えかもしれません。
ここで UniVRM の Export
機能には Export
-> Import
-> Export
として prefab がある状態からのみ使用可能なオプション Reduce Blendshape Size
機能が付いている事を思い出しました。試してみます:
↓
- DT1 = 思うままに作った VRM を detune してみたつもりだったけどファイルサイズは爆発していた detune-1
- DT2 = 試しに .blend に戻り髪の毛のボーンを82個削除してみたけどほぼ無意味だった detune-2
- DT3 = UniVRM で
Export
した DT1 をImport
して prefab を生成して再度Export
をReduce Blendshape Size
付きで行った detune-3
解決しました。こんなに今回があるとは思っていなかったので驚きました🎉
…まだ un-h002; Atropos の cluster 登録まではもうひと頑張り、必要だったけどね😅
↑このくらいだと希望が見えます。
(E-その後) cluster へ セシル変身アプリ で作成した un-h002; Atropos をアップロード -> 成功✨
目標、残り:
- node 数: 290 -> 256 ; ⊿node = +34 💪
- joint 数: 287 -> 128 ; ⊿joint = +159 💪💪💪
https://clustervr.gitbook.io/sdk/guide/avatar_customization/avatar_limit を確認すると、アップロード時のエラーメッセージの "joint" は "bone" の事、 "node" は "GameObject" の事のようです。"GameObject"は Unity用語の"GameObject" のようです。
今回のゴールが見えてきたため、ヤルキを醸し出して Blender でごりごり削ろうかと思いました…が、 "GameObject" の削減効果の要因を探る意味でも、ここまでの過程で作成していた DT2 ( 試しに .blend に戻り髪の毛のボーンを82個削除してみたけどほぼ無意味だった detune-2 ) を UniVRM で Import
-> Export
with Reduce Blendshape Size
してどの程度 joint と node が cluster のアップロードシステムで低下するか確認してみることにしました。
↓まだ削らないと joint の判定もダメなはず…
↑と、思っていたので意表を突かれてしまいましたが、アップロードに成功してしまいました🎉🎉🎉
cluster のアバターは現時点では同時に複数登録しておけない仕組みみたいですね。 VRoid Hub から使用可能なアバターを一覧表示、選ぶと全自動で↑↑↑でしてきたような detune をしたデータを cluster のアクティブなアバターとして取り込んでくれる、とか機能要望したいですね。案外、いろいろと仕組みが分かった今ではそれほど無茶な要望でもないような気がしてきました。
↑ cluster にログインして歩いてみました↓
大丈夫そうです💪…と、言いたいところでしたが、
頭パーツのボーンかウェイトが甘いみたいで、上下に首をふると怪しげな事になってしまいました😂 でも、ここまで来ていれば、ボーンのウェイト調整くらいどうという事は無いですね💪 これでようやく cluster も楽しめそうです🎉🎉
↑あらまあ😂 こういう状態(髪のボーンを削減した際に髪の頂点ブレンディングのウェイトの再設定を忘れている!)でした。髪の毛を構成する頂点群にウェイトがまったく入っていない状態になってしまっていたんですねー。入れましょう💪
↓ここから(2020-04-11追記)↓
↑はMatCombiner
で「マテリアルを Atlas 化した後」だと、髪の毛とヘア・アクセサリー、メガネ、顔、服、肩などなどが重なっている造形状態で頂点ウェイトをペイントで再設定するのはかなり"気難しい"作業になります。ポージングでやや無理やり髪の毛だけペイントしやすいようにボーンを回したり移動したりして作業するのはかなり大変です😂
入り組んだパーツ単位での編集作業を施したい元VRMを扱う場合には、 Blender で 元VRM を Import
して Fix Model
した後、マテリアルをアトラス化する「前」の状態で編集するとその後で行うよりもとても楽です✨
"楽"のなかにも Blender では方法がたくさんあると思いますが、1つの"楽"の例として「髪の毛だけ編集しやすい選択と表示の状態」にする方法をメモに残します:
(x-1) 「選択」機能の対象を「面」に↓
(x-2) 髪の毛の「面」を1つ、どれでもよいので選択しやすいところを「選択」↓
(x-3) SHIFT + G
(または F3 -> "Select Similar" など
) で "Material" ↓
↑こうすると実質的に髪のパーツだけ選択できます↓
(x-4) SHIFT + H
(または F3 -> Hide Selected
など) ↓
↑こうすると実質的に髪のパーツだけ編集しやすい状態になります💪
対象部位の編集がおわり表示状態を戻したくなったら ALT + H
で隠していたメッシュ群を表示状態に戻します。
(x-応用) マテリアル的には複数部位に跨る部分を同時に選択したい場合
↑複数マテリアルに分かれている部位の最低1つ以上の面について、2箇所目以降は SHIFT + CLICK
で選択し、あとは同様に SHIFT + G
-> "Material" -> SHIFT + H
すると↓
こうなります💪
ボーン節約のために髪とヘア・アクセサリーとネコミミを同じボーンでスケルタルアニメーションの頂点ブレンディングをしたい場合に便利です。
↑ここまで(2020-04-11追記)↑
まとめ: VRoid Studio や セシル変身アプリ で作成した VRM を cluster へアップロードして使う方法
- VRoid Studio や セシル変身アプリ で「元VRM」を作成 (他のアプリ、フルスクラッチでも以下は応用できます✨)
- Blender と Blender 用の以下の add-on を導入
- VRM_IMPORTER_for_Blender2.8 ; 執筆時点では Testing 扱い
- Cats Blender Plugin ; Community 扱い
- material-combiner-addon
- Blender で
CATS
を基点に「元VRM」をImport Model
- Blender で Import した Object の名前の末尾が
.baked
または.baked0
でなければ F2 ぽちぽちして全ての Object の名前の末尾に.baked
を付ける - Blender で
CATS
のFix Model
で軽量化 - Blender で
material-combiner-addon
でマテリアルを Atlas 化して軽量化 -> Atlas_12345.png 的な「(A)Atlasテクスチャー」ファイルができる - Blender で
Export Model
して .fbx な「(B)FBX」ファイルを出力する - Unity を導入
- Unity で作業用のプロジェクトを作成し UniVRM パッケージを導入
- Unity の作業用プロジェクトの Assets へ「(A)Atlasテクスチャー」と「(B)FBX」を放り込む
- Unity の作業用プロジェクトの Assets へ
- マテリアルを1つ新規作成し、
- Shader を
VRM/MToon
,VRM/UnlitCutout
など VRM 系の良さげな表示になりそうなものに設定 - Texture に Assets へ追加しておいた Atlas テクスチャーを設定
- Unity の作業用プロジェクトの Asset へ追加しておいたFBXを
- Unity の作業用プロジェクトで画面左側のシーンツリーで配置したアバターを選択した状態で UniVRM の機能でメニューから VRM -> UniVRM-xx.x ->
Export Humanoid
で「(P)軽量化版仕上げ直前VRM」を出力- ここで 25MB 以下ならそのままでも cluster へアップロードできる可能性が高いです。重い場合は以下スキップせずもう一息。
- Unity の作業用プロジェクトの UniVRM の機能でメニューから VRM -> UniVRM-xx.x ->
Import
で「(P)軽量化版仕上げ直前VRM」をプロジェクトへインポートし 「(Q) prefab なアバター」をプロジェクト内へ生成 - 「(Q) prefab なアバター」をワールドへ配置
- Unity の作業用プロジェクトで画面左側のシーンツリーで配置した「(Q) prefab なアバター」の方を選択した状態で UniVRM の機能でメニューから VRM -> UniVRM-xx.x ->
Export Humanoid
をReduce Blendshape Size
オプション付きで行い「(R)軽量化完成してるはず版VRM」を出力 - cluster へ「(R)軽量化完成してるはず版VRM」をアップロードできたら完成確定✨
Happy avatar life.