CC4 のフォトリアル系人物モデルを VRM アバターに変換しようとすると、理科室の人体解剖モデルのように透明になってしまう。
- CC3 + のリグを下絵にして、VRM リグを全て手作業で位置合わせ
- 絶対に失敗している確信があるけど、いったん VRM に出力
- 問題点に対処していく
- 後日、このような位置合わせやメッシュ修正をしないで済む方法に気付く
- テクスチャが透けて見える不思議な VRMアバターが爆誕
- 結局のところ、振り出しに戻る
- VRM はアニメ調が前提のシェーダらしいので質を落とす
- 後日、ノーマルテクスチャ・アルファハッシュの出力を抑制することでテカリは解消
CC3 + のリグを下絵にして、VRM リグを全て手作業で位置合わせ
そのうちスクリプトで自動化するが、まずは手動でリターゲット。
腕については、水平方向はポーズモード Pose Mode で上腕リグ に 30度の回転を適用すれば大体は一致した。一旦、レストポーズに適用しておく。
そこから先は編集モード Edit Mode で手作業で拡縮したり回転させたり、詳細に位置調整をする。指の先までジョイントの位置は全部合わせた。2時間位はかかったかな。
絶対に失敗している確信があるけど、いったん VRM に出力
今回はフォトリアル系人物モデルを追求しているので、CC4 から Blender へのデータ移入時になるべく高品質を保つことが出来るように最大限の努力をしている。
- CC4 で最高品質の CC Avatar (CC3 Base+) で人物モデルを作成
頭髪についてはスマートヘアではなく、単なる髪メッシュ - Blender 向けに衣服付き FBX でエクスポート
テクスチャは分離して出力している - Blender Auto Setup Add-on にて Blender にインポート
Characters : CC/iC Tools 1.5.2 の CC/iC Pipeline にてインポート
現状では一番優秀なインポート方法のハズである
そのため身体の部位ごとにメッシュが分かれている状態となっている。
過去に The Sims 4 人物モデルを VRM アバターに変換したときには、メッシュを統合しない限り、常に失敗していたので、今回も絶対に失敗する確信がある。
しかし怖いものみたさで、このままVRM リグにスキニングを行うことにした。
絶対に失敗するので、スキニングヲ行う前の時点でプロジェクトファイルを保存しておく。
Blender のポーズモードで VRM リギング結果をテスト
まだ VRM に出力する以前の段階で、すでに不具合のオンパレード。
どれも The Sims 4 からの移行で散々、対処済みなので、多分何とかなる。
靴メッシュの内側が置き去り
メッシュが破綻しており穴が開いているか、近辺で内側にある別のボーンにもウェイトが割り振られてしまったかどちらかだろう。
歯メッシュが置き去り
頭部のボーンが遠すぎてウェイトが振られなかった一方で、近辺の別のボーンにウェイトが割り振られてしまったのであろう。
髪メッシュが置き去り
内側の髪?と外側の髪?があって外側だけ置き去りになっているようだ。
メッシュの問題か、ウェイトの問題か、頂点グループの割り当て不足の問題か?
視線ボーンに顔メッシュ全部連動
頂点グループの割り当ての問題だろう。
衣服メッシュ凹まず
そもそもちゃんと服を着ていなのかもしれないし、ウェイトのかかり方が皮膚側と衣服側で微妙に違うからなのかもしれない。
VMagicMirror で VRM アバターをテスト
Blender の時点で既におかしいので、当然ながら正しく出力されるはずはないが、まずはテストしてみる。Blender では正しく表示されているように見える髪・瞳のテクスチャが出力されていないように見える。
問題点に対処していく
靴メッシュ置き去り
当初、靴メッシュそれ自体に問題があると思って、頂点のマージやメッシュのクリーンアップを試みたが、頂点は1つも削除されず、穴のフィルも反応がなかった。
つまり靴メッシュ自体に問題は見つからなかった。
そこで足元を拡大してみたら、CC4 での編集の時点で既にミスしており、靴が足からはみ出していることに今更ながら気づいた。
CC4 でエクスポートする前段階に立ち戻り、Conform の干渉計算 Calculate Collision で靴を身体に合わせ直す。衣服の方もおかしかった可能性があるので、靴以外も一通り合わせ直しておいた。
しかしそれだけでは修正されなかった。
基底ボーン root の「変形」チェックボックスがオンになっていたので、再スキニングのさいにオフにしたら、靴メッシュは崩壊しなくなった。ついでに、歯メッシュ置き去り問題も一緒に解決したようだ。
基底ボーンに対するウェイトがあちこちに振られていたのかもしれない。
髪・瞳のテクスチャが出力されていない
VRM ではテクスチャが1枚にまとまっていたような気がするが、CC4 では逐一テクスチャもバラバラだったような気がする。まとめてしまおう。
FBX エクスポートのさいに、InstaLOD のオプションで、マテリアル統合 Merge Material (UV) を選択できるので、1枚のテクスチャに統合する。
この設定でエクスポートしたら FBX から CC に戻せないという警告が出たが、Blender から CC4 へ逆反映するつもりはなく、常に上流 CC4 から修正していくつもりなので OK を押した。
髪メッシュ置き去り
まずメッシュの頂点マージを行い、31個の頂点を削除した。
続いてメッシュのクリーンアップで穴のフィルを行ったが、反応はなかった。
時間をかけて処理はしていたようなので、穴はあったのかもしれないし、なかったのかもしれない。おまじないだ。
続いて頂点グループの割り当てがされているかを確認する。
髪メッシュを選択して編集モードに切り替え、オブジェクトデータプロパティの頂点グループ head の行をクリックし、[選択] ボタンを押したが、髪メッシュの頂点は一切選択されなかった。
つまり頂点グループ head には、何も頂点が割り当てられていないようだった。
[選択]-[すべて] で髪メッシュの頂点全てを選択状態にした後に、[割り当て]ボタンを押して頂点グループに全頂点を割り当てた。
かなり癖のある操作だが The Sims 4 モデルで散々やった操作なので慣れている。
[割り当て]ボタンを押しても利用者へのフィードバックが一切ない困った仕様なので、割り当てられたかどうかを確認するために、3Dビューポート画面の適当な部分をクリックして選択を一旦外してから、頂点グループ head の行をクリックし、[選択] ボタンを押す。この時、髪メッシュを構成する頂点全てが選択されていれば成功だ。
涙腺髪メッシュ置き去り問題を新たに発見
頂点グループに髪メッシュを割り当てたことで、特に再スキニングを行わ1なくても、置き去り問題は解決した。首を曲げると髪もついていくようになった。
しかし、フォトリアル系人物モデルのディテールの要とされる、目頭がその場に残されていた。
しかしこの目頭の部分、身体メッシュの一部なのに、なぜ置き去りにされるのか。
話は簡単で、頭部 head の頂点グループから除外されているのだ。
まてよ、ということは睫毛も置き去りになるってことだよね。
はい、そうです。
何故か上の睫毛は無事だが、下の睫毛は目頭とともに置き去りでした。
なぜ含まれないかというと、目頭と上下の睫毛は、身体のメッシュとは繋がっていないから。このことは、目頭または上下の睫毛のどれかのポリゴン面を1つ選択し、[選択]-[選択の拡大縮小]-[拡大] を何度も繰り返してみると分かる。身体メッシュの方には広がらないから。
では結局どうすればいいのか。
CC4 の頂点グループ CC_Base_Head を参照してみると、上下睫毛と涙腺がこのグループに包含されている。
つまり VRM の頂点グループ head に含めてしまってかまわない。
頂点グループを複写する操作は癖がきつくて分かりにくいが、以下のとおり:
- 頭部を含んでいる身体メッシュ CC_Base_Body をオブジェクトモードで選択
- 編集モードに切り替える
- オブジェクトデータプロパティの頂点グループ一覧の行のうち、頭部の頂点グループのみを含む CC_Base_Head の行をクリック
- 一覧の下にある[選択]ボタンをクリック
すると上図のように頂点が選択状態になる - オブジェクトデータプロパティの頂点グループ一覧のかなり下の方に、、VRM の頂点グループ head の行があるのでクリック
- 一覧の下にある[割り当て]ボタンをクリック
-
[割り当て]ボタンを押しても利用者へのフィードバックが一切ない困った仕様なので、割り当てられたかどうかを確認するために、3Dビューポート画面の適当な部分をクリックして選択を一旦外してから、頂点グループ head の行をクリックし、[選択] ボタンを押す。この時、目頭と上下の睫毛メッシュを構成する頂点全てが選択されていれば成功だ。
頂点グループに睫毛・目頭メッシュを割り当てたことで、特に再スキニングを行わ1なくても、睫毛・目頭置き去り問題は解決した。首を曲げると睫毛・目頭もついていくようになった。
視線ボーンに顔メッシュ全部連動
これは置き去りの逆パターンで、連動しなくてよいメッシュにスキンウェイトが自動的に割り当てられている。
VRM のリグ(アーマチュア)の目のボーンは、眼球の中ではなく、頭のど真ん中らへんに配置することが想定されているようである。
そして連絡するメッシュは、眼球だけであり、近辺にある頭部のメッシュにはウェイトは振らない。しかし Blender は普通に表情筋の一種だと勘違いして、近辺のメッシュに自動ウェイトでスキンウェイトを割り当ててしまうのだろう。
眼球以外を連動しないようにするには、ウェイトをゼロにするか、割り当てを削除すればよい。この両者は厳密には違うらしく、割り当てておきながらもウェイトをゼロにする方が安全という説があるが、面倒臭いので削除する。
[選択]して頂点グループに含まれる頂点を全て選択状態にしてから、その左横にある[削除]ボタンを押すと、例によってフィードバックは無いが割り当ては削除される。
これで肌が連動することはなくなったが、視線ボーンを動かすと眼球が外れたようになるのが気になるかもしれない。
VRoid のサンプル VRM アバターでは、眼球というものはなく、瞳のレンズ部分だけとなっており動作の想定が異なっているだけなので、後で動作確認して気になるようなら修正する。
後日、このような位置合わせやメッシュ修正をしないで済む方法に気付く
VRM アドオンでボーンの対応関係を設定すれば、元の CC3+ Base のスケルトンリグを流用することができることに気付いた。
この数カ月、無駄な努力をしていたらしい orz
テクスチャが透けて見える不思議な VRMアバターが爆誕
身体内部の部位の動作確認ができるという意味では画期的なのだが、どうやらテクスチャが正しく適用されていないようだ。
カラーマップ Diffuse のテクスチャは確かに1枚で出力されている。
それ以外のテクスチャも1枚で、合計9種類が出力されており、シェーダで合成されているようだ。
そもそも CC4 から出力したさいにテクスチャを統合したのが失敗だったのか?
振り出しに戻りたくないので、悪あがきをしてみる
9枚のテクスチャを 9_meshes_Merge にまとめるさいの重みづけ設定をしているような画面があったので、値が 1になっているものを 0に変えてみる。
不透明度の2項目は、ゼロにすると異常になったのでそのままとした。
VMagicMirror で動作確認したが残念ながら何の変化も無かった。
ブレンドモード をアルファハッシュからアルファクリップに変更したら多少変化あり
マテリアルプロパティの設定に、アルファという単語が含まれていた。
アルファが透明度に関係するものだということ程度は知っていたので変更してみた。
透けなくはなったが、肌や髪がテカりすぎた状態になっている。
髪メッシュの生え際あたりの薄っぺらいメッシュも灰色ベタ塗りで表示されている。
クリップのしきい値 : 0.1 などに変更してみたが、それ以上の変化はなかった。
フォトリアルっぽさは何もない。いったん、手詰まりだ。
結局のところ、振り出しに戻る
後で解決方法が見つかるかもしれないので、いちおう元のプロジェクトファイルは未練がましくとっておき、別プロジェクトで保存して試行を続ける。
頂点グループの割り当て作業などは全てやり直しになりそうだが、別の手段を試すしかない。
- CC3+ Character Base は諦め、1レベル下の actorBuild に切り替え
- CC3+ Character Base のままだがテクスチャを統合せず Blender に出力
VRM はアニメ調が前提のシェーダらしいので質を落とす
色々試したが、どうしても VRM 人物モデルはフォトリアルな描画がされない。
調べてみると、そもそもアニメ調でのアバターを狙っているとのことだった。
いったん CC4 のリアル調で貫徹する路線はあきらめて、質を落とす。
1レベル下の actorBuild に切り替え
CC4 に戻り、数分間かけて最適化&圧縮 Optimize and Decimate を行って actorBuild のモデルに変換した。その後、Blender 向け FBX 形式へのエクスポートを行った。
最適化&圧縮に数分かかったが、色んなモノをベイクしていたので、うまくいくかもしれない。
サイズ違いで3種類の FBX ファイルとテクスチャ格納フォルダが出力された。
最大のファイルを Blender にインポートしてみた
一番大きいサイズの奴 High_High_1024 (1.8MB) が一番品質が高いに違いない。
- CC4 に表示されている actorBUILD のモデルと見た目が違いすぎる
- 最適化&圧縮に処理時間がやけにかかっていたし、ファイルサイズ 2MB 未満というのは、いくら何でも小さすぎておかしい
どうやら、すでに actorBUILD で作り直したモデルに対して、エクスポートのさいにも再度 InstaLOD にチェックを入れて圧縮を適用してしまったようだ。
このため、さらに低品質に劣化したものを生成していたらしい。
InstaLOD のチェックを外して、エクスポートをやり直す
今度は Blender にインポートした直後なのに半透明になっている。
テクスチャを埋め込んでも半透明であり回復しない。
別の人物モデルでエクスポートをやり直す
自作したモデルに問題があるのだろうか?
切り分けのため、ActorCore から無償で入手できた人物モデルをエクスポートしてみることにした。
集会に行く女 Party_F_0001 を Content Manager にダウンロードしてドロップ。
自作のモデルとは違って、少しも透明になっておらず、成功している!
私が CC3+ Base Charactor の人物モデルを Natural_M から組み立てて作った時の作り方がそもそも悪かったのか?それとも actorBUILD に変換した時に透明になったのか?
前者だとすると、そもそも一番最初の CC4 での作業工程に問題があったということになるので最初から全部やり直しとなるので、かなりショック orz
VRM にエクスポートしてみる
ドロップした後、即座にエクスポートしたところ、TポーズでもAポーズでもない立ちポーズで出力されたので、Tポーズに変更する。
この actorBUILD の人物モデルの場合、T-Pose に表示変更してエクスポートし直すだけで、正しく Tポーズでエクスポートされた。
CC3+ Base の人物モデルの場合には、T-Pose に表示変更しても Aポーズでエクスポートされることがあるが actorBUILD (actorSCAN) では大丈夫らしい。
VRM Add-on for Blender にて、余計な揺れモノのボーンが無いスケルトンリグを生成。
そんなにボーンの位置に差がないので、あまり凝らず手早く位置合わせを行う。
Blender プロジェクトファイルを保存してから、スキニングを行う。
- ポーズモード : ポーズ - ペアレント - 自動のウェイト
左下のペアレントを作成でトランスフォーム維持をしないと、なぜか巨大化するようなのでチェックを入れておく。
一発では通らず、エラーになった。
- ボーンヒートウェイト : 一つ以上のボーンで解決に失敗しました
よくある対処法をネットで調べた。
法線の再計算(Shift+N)を行ってから再実行したところ、エラーは出なくなった。
もともとあった CC3+ AccuRIG リグに VRM リグが足され、スケルトンリグが2個になった。CC3+ AccuRIG リグの方は除去できないこともないが、後で使うかもしれないので残しておく。
やっぱり、半透明になってしまう
ブレンドモード : アルファハッシュのままの場合、見るに堪えない。
妖怪人間ベラが真人間に思えてくる勢い。
ブレンドモード : 不透明の場合、少しはマシになるが、髪周りがおかしい。
根本的な問題は解決していないことは明白だ。
マテリアルとシェーダーの原理をもっとよく勉強してから、対応を考えることにする。
後日、ノーマルテクスチャ・アルファハッシュの出力を抑制することでテカリは解消
ノーマルテクスチャの出力抑制が利いたのは意外だった。
もしかすると、今回行った法線の再計算が悪さをしたのかもしれない。
今後は手控えることにしよう。