Daz3D の Genesis 8 のモデルを Daz to Blender で取り込み、自動ウェイトで VRM のボーンを埋め込んだ。Blender でポーズさせてみると全身とズボンは追従するが、上着は置き去りで、髪は一部が取り残されるトラブルとなった。
最終的には VRM アバターにしたいのだが、だいぶ道は遠そうだ。
この状態のままで VRMアバターに変換したが怖すぎた
リグ付け以外のトラブルも発生すると想定できるので、他の問題もまとめて発見すべく、まず一旦 VRM に変換してみた。
案の定、問題だらけだ。この時点での問題点は3つ。
- 上着はリグに紐づいておらず、もちろんアニメーションされない
- 髪のアニメーションは、Blender で見たときほどの違和感はないものの、やはり一部の髪が取り残されている
- 顔・肌・ズボンのテクスチャが全然出力されていない
テクスチャをどのように修正するか?
リアルアバターを追求するために Daz を使ったのに、色すらないクレイモデルでは話にならない。まずはテクスチャを出力させることが最優先だ。
別件の調査の中で、Daz3D の高解像度テクスチャは正しく出力されないことが多いのでベイクすべきという論説があった。
今回は Blender まではテクスチャが移行できているので、多分テクスチャそれ自体には問題なさそう。しかし VRM には出力されていないので、何らか修正の必要がある。
Daz Gen8 のマテリアルを確認しておく
Blender で Daz Gen8 素体部分のマテリアルプロパティ Material Property を確認したら、身体の部位ごとにマテリアルがあり 16個もある。
1個ずつクリックして割り当てられているテクスチャを確認すると、顔面、瞳、唇、歯、口、眼窩、胴体、脚、腕、手指ネイル、足指ネイル(以下略)それぞれにテクスチャが割り当てられていた。
しかし、そのどれ1つとして VRM モデルには出力されていなかった。
これは難航しそうだ。
「VRMモデルのチェック」をしてみる
VRM出力アドオンにチェックの機能があった。
エラーはなかったが 54件の警告があり、空のマテリアルに置き換えられて出力されたらしいと分かった。
解決のヒントは見つかった
現在、サーフェスのシェーダーには
- ほどんどの身体部位では IrayUberSkin
- 目玉周りは EyeDRY または EyeWet
というものが指定されているが、これらは VRM では認められておらず、指定できるのは警告メッセージに列挙された4種類らしい。
いつも使っている
- プリンシブルBSDF
以外の3つのシェーダーが何なのか全然分からないが、割り当てを試みると「グループ」という表示があったので用途の推測はついた。
- GLTF は BSDF と同類らしい
- MToon_unversioned、TRANSPARENT_ZWRITE の二つは放射と同類らしい
しかしそれ以上のことは分からないので、いつも使っているプリンシブルBSDFに置き換えてみることにした。
- 胴体と顔のシェーダーをプリンシブルBSDFに変更
- 画像テクスチャを割り当て
してみたところ警告は2件減ったが、やはり VRMモデルには出力されていなかったので失敗だった。
正しく出力された別のモデルを確認する
マテリアルの数が多いのは妥当なのか、確実に正しく動作する VRM アバターを出力しているといえる本家 VRoid Studio で作成したモデルを確認してみた。
- 部位ごとのマテリアルがあることは普通
- テクスチャがそれぞれ違っていることも普通
シェーディングとレンダープロパティが一致していなかっただけ orz
色々調べていたら、どうやらポカミスだったらしい
シェーディング Shading のマテリアル出力のエンジン名と、
レンダープロパティのレンダーエンジンのエンジン名を両方とも同じ Eevee に一致させてから出力する必要があった。
上着の出力にも問題があるので、素体だけの出力に切り替えておく
Daz to Blender で素体だけ送信 Send to するために Daz Studio 側で変更を行った。
- 衣服を素体の子にしていたが、親子の関連付けを解除した
- まつげと涙袋は要らないという説があったので、メッシュは削除した
送信する際の設定も変更した。
- Bake Subdivision をオン
正しいとは言い難いが、一応、肌のテクスチャらしきものは出力されている。
- 顔面だけジェイソンになっているのは何でだろう?
- 歯が飛び出ているし、目玉のテクスチャも無い
テクスチャは目途が付いたので、髪と服の追従を修正する
胴体だけではあるが、テクスチャが出力できることは分かった。
グダグダになっているアニメーションと崩壊したメッシュを何とかしないと。
VRoid のメッシュの構成は
- 身体 Body、顔面(能面)Face、髪 Hair
なので、これに近い構成に揃えないといけないのかもしれない。
Blender でリグ付けする前に戻り、Daz のメッシュを編集
ジオメトリ(メッシュ)へのリグ付け(ボーン埋め込み)が失敗したときの常套手段(おまじない)をまず実施してみた。
- 別々になっている服・身体のメッシュを結合
- メッシュの頂点をマージ
しかしながら、上着のメッシュが含まれていると
- ボーンヒートウェイト 一つ以上のボーンで解決に失敗しました
というエラーが必ず出ることが分かった。
問題がある上着のジオメトリ(メッシュ)を分離
Blender がわで、形状のポリゴン数削減を適用して大胆に上着のポリゴンを減らしてみたが、ボーンヒートウェイトのエラーは消えてくれない。
上着は後回しにして、素体・髪・ズボンだけを出力してリグ付けしていくことにした。
髪を素体メッシュの子にしてみたが、それでは治らず
髪メッシュを素体メッシュの子にしてから自動ウェイトでリグ付けしてみたが、その後ポーズさせても髪は追従せず、置き去りのまま。メッシュに親子関係を設定しても、親に子が追従するわけではないらしい。
髪のウェイトペイントを力技で修正
オブジェクトデータプロパティ Object Data Property で頂点グループ head のウェイトペイントを確認したところ、髪メッシュのウェイトはゼロだった。
髪メッシュの全ての頂点を編集モードで選択して、ウェイト 1.0 を割り当てた。
これで髪メッシュ全体が、頂点グループ head に連動するようになった。
VRoid Hub で動作確認してみたら、髪の大部分は追従するようになった。
しかし、
- 一部の髪が空中浮遊している
調べてみると右目 eyeR の頂点グループに髪へのウェイトが含まれている。
頂点グループは90個もあるが、全部確認して治す必要がありそう。
- ズボンのテクスチャが腹肉にめり込む
両脚を拡げた場合にめり込むようだ。両脚をすぼめた場合や、脚を反対側に振った場合には、いい感じ隙間が開くのは素敵なのだが。足の付け根の位置を少し上にすることで気にならない程度に解消された。 - 肩幅がおかしい
これはボーンの肩関節の位置を外側にしすぎただけ。Blender で確認できたはずだが手を抜いてしまった。肩関節の位置を内側に移動させれば治る。 - 肌のテクスチャがまたしても表示されなくなった。
振り出しに戻った。レンダーエンジンを EeVee から Cycles に変更したせいだろうか?Blender のレンダリングでは表示されているのだが、VRM にするとテクスチャが無い。
The Sims 4 のモデル移行の時と比べて、さらに厄介
以前に移行実験をした The Sims 4 の人物モデルはフォトリアル路線ではなかったが、
- 全身のテクスチャマップが1枚にまとまっており、VRMモデルに出力されないといった事象は発生しなかった
- 上着のメッシュがシンプルであり、ボーンヒートウェイトのエラーが発生したことはなかった
- 頂点グループは勿論あるが、90個といった膨大な数ではなかった
といった点で、DAZ よりも構造が簡単だった。Daz の Gen8 モデルを移行するのは、かなり修練を要することになりそうだ。