過去2回ほど VRM アバター生成に失敗しており、CC4 や Blender での試行錯誤を繰り返している。今回は最初から手順を全て記録することにした。
正しく出力するためには、
- Blender Auto Setup Add-on のマテリアル再構築を基本に変更して、Digital Human Shader を使わないようにする
- Blender 向け FBX 出力のさいに、設定ダイアログの最下部までスクロールさせて、隠れた面の削除 Delete Hidden Faces チェックをオンにする
- Blender でインバースキネマティックス (IK) の設定をする
- VMagicMirror の設定で表示位置を微調整する
ことが必要だった。
- 頭部撮影 Headshot プラグインにて AI が生成した顔写真を転写
- ビューの表示を見やすいように調整
- 衣服・靴を着脱し、衣服で見えなくなる素体メッシュ部分は隠す
- 髪群 HairGroup を適用する
- フルボディ体操でテストしたら脇に穴が開いていた orz
- CC3 Base+ から ActorBUILD モデルへ格下げ変換する
- Blender 向けに FBX で出力する
- Blender で新規プロジェクトを作成し、VRM スケルトンリグを生成
- Blender へ FBX のモデルをインポート
- Blender の新規プロジェクトを一旦保存、マテリアルを修正していく
- スケルトンリグの位置合わせを行う
- Blender のプロジェクトを一旦保存、スキニングを行う(失敗)
- やっぱりアルファブレンドが不透明以外だと破綻する(失敗)
- CC4 のチュートリアルを見返したところ、基本マテリアルの再構築 Rebuild Basic Materials をすれば治る
- 顔面の出力については、あっさり問題は解決した
- 顔面以外の明らかな不具合については以下のようなものがある
- 乳首の露出についても、あっさり問題は解決しそう
- 残るは上腕の異様な捻りのみ
- 右手の位置が左寄りすぎるが、それ以外は問題なし(成功)
頭部撮影 Headshot プラグインにて AI が生成した顔写真を転写
AI に生成させた適当な顔写真から、髪の毛ナシ*1で頭部を生成させた。ボクサーパンツ一丁の男性キャラが生成された。
ビューの表示を見やすいように調整
やや暗くて見づらいので、ステージ Stage のライティングを変更しておく。
ライティングを適用
姿勢をTポーズに変更
衣服・靴を着脱し、衣服で見えなくなる素体メッシュ部分は隠す
ボクサーパンツを脱がす
上着 Shirts とズボン Pants で隠れてしまうので、余計なメッシュ。必要ない。
上着 Shirts を着せる
とりあえず、3色のTシャツでも着せておく。
ズボン Pants を穿かせる
デニムのズボン Content : All > Cloth> Pants > Slim Jeans_A3 を穿かせた。
靴 Shoes を履かせる
派手な赤いスニーカー Content : All > Cloth> Shoes > Canvas Shoes_A3 を履かせた。
自動的にメッシュを隠す Auto Hide Mesh(失敗)
衣服で隠される素体部分について、メッシュを隠しておく(透明にする)と、ポーズ・アニメーションのさいに素体が衣服を突き抜けるような事態になったとしても、メッシュ自体が透明なので異常には見えない。
まず衣服・靴などを全て適用する。
次に衣服の重ね合わせ設定 Cloth Layer Settings を開き、それぞれの衣服・靴について、自動的にメッシュを隠す Auto Hide Mesh ボタンを押していく。
隠れている素体部分が透明になるが、隠れているので、そのままでは、きっと違いは分からないことだろう。
Scene : Character > 衣服・靴の各行を選択してぎょろ目ボタンをクリックし、衣服・靴の表示を見かけ上消すと素体のメッシュが透明にされていることが分かる。
髪群 HairGroup を適用する
古典的な短髪 Content : All > Hair > HairGroup > Hair > Classic Short を載せた。
これは最新の髪モデル仕様 Smart Hair で作られており、CC4 上では最新の Digital Human Shader でレンダリングされる。
マテリアルとシェーダーを確認しておく
今回はシェーダーは変更するつもりはないが、どういう状態なのかは記録しておく。
フルボディ体操でテストしたら脇に穴が開いていた orz
衣服・靴、髪群の適用まで終わったので、おかしな点がないか、アニメーションで目視確認テストを行う。
チュートリアル動画でよく使われている全身体操 Full Body をやらせてみると、脇腹のあたりに皮膚がチラチラと露出していることに気付いた。
自動的にメッシュを隠した Auto Hide Mesh 結果を見たさいに、脇と腰の辺りにメッシュが残っていたので、その時点で気づくべきだった。
衣服の衝突計算をやり直してみたが治らない(失敗)
衣服の当てはめ Conform についてのチュートリアル動画によると、衣服の上に素体のメッシュがはみ出すような場合には、とりあえず衝突計算 Run/Calculate Collision をかけるのが常套手段である。
今回は上着がはみ出ているので、上着 Basic T-Shirts を選択する。
当てはめ Conform にて衝突計算 Calculate Collision を行う。
手順は合っているハズだが、メッシュのはみ出しは治らなかった。
脇を締めた直立ポーズ Stand Pose_M で確認すると素体の肉がはみ出ているようだ
わざわざフルボディ体操をしなくても、すでに単なる気を付け直立ポーズの状態で、素体の肉がはみ出していた。
肉がはみ出ないように衣服の寸法を大きくしてみたが効果ナシ(失敗)
チュートリアル動画によると、衝突計算で解決しない場合には、衣服の寸法を大きくしてから衝突計算をやり直す手順が紹介されている。
メッシュ編集 Edit Mesh で直接直すのが素直な方法だが、手抜きとして衣服の当てはめ画面にある寸法の増加 Increase Size を使う方法もある。
スライダーで 1.0 に変更したら見かけ上は肉がはみ出なくなったので、衣服の衝突計算をやり直した。しかしその後、Scene : Character > Basic T-shirts の行を選択してぎょろ目ボタンをクリックし、上着の表示を見かけ上消してみたところ、相変わらず脇下の肉が表示されていたので、この方法ではダメだったようだ。
素体が肥えすぎているのだろうか?とりあえず寸法の増加は元のゼロに戻す。
自動的にメッシュを隠すのではなくて、手動で隠すことにした(解決)
どうやら自動は役立たずだったようだ。
しかし手動で詳細に隠す身体部位を指定する方法もあるので、そちらを使えば良い。
右のダミー人形の身体部位をクリックすると、その部位のメッシュは隠される。
隠されるといっても、メッシュが削除されるわけではない。見かけ上、透明になるだけである。
Scene : Character > Basic T-shirts の行を選択してぎょろ目ボタンをクリックすると、メッシュが非表示になっていることが分かる。
もう一度、フルボディ体操をさせてみたが、今度は問題なさそうだ。
しかし見かけ上、透明になっているだけのようなので、この後に Blender にインポートした後や、VRM に出力した後に事故になるかもしれない。
ここまで凡そ1時間半かかったので、一旦保存しておく
HeadshotBoy というフォルダを作成し、ファイル名に日付時刻を追記して保存した。
- RL_CC3_Plus Male_20230109T0900.ccProject
CC3 Base+ から ActorBUILD モデルへ格下げ変換する
今回は CC4 標準の CC3 Base+ ではなく、actorBUILD で作成する。深い理由があるわけではない。ここ数回の制作を actorBUILD (actorSCAN) で行ってきたため、条件を同じにしているだけである、
PC が5年前のものであり古いため、格下げ変換には時間がかかる。
9時8分に変換スタートして14分に完了した。凡そ6分かかってしまった。
処理が遅いのは CPU ネックだからか?
待っている間にパフォーマンスモニタで経過観測していたが、時たま CPU が 100% になるものの GPU はほとんど何もしていないという無様な様子だった。
GPU は NVIDIA GeForce GTX 1060 6GB なのだが、このような処理では、何にも役に立たないのだろうか?
待たされはしたが ActorBUILD に無事変換された
actorBUILD になったので、衣服・靴は単なるメッシュとなり着脱不能となった。
actorBUILD の人物モデルに変わったので、別名で保存しておく
HeadshotBoy というフォルダの中に、ファイル名に日付時刻を追記して保存した。
RL_CC3_Plus Male_20230109T0920.ccProject
Blender 向けに FBX で出力する
チュートリアル動画によると、テクスチャ埋め込みはオフにすべきである。
※後日、このダイアログ最下部にあるチェックボックスをオンにしなければいけないことに気付いたが、この時点では気づいておらず、オフのままで FBX 出力を行った。
Blender で新規プロジェクトを作成し、VRM スケルトンリグを生成
VRM Add-on に VRMモデルを作成というボタンがあり、これを押すと VRM スケルトンリグが出現する。
CC3+ Base と比べると、ボーンの数は大分少ない。シンプルなリグである。
背丈があっていないので、手作業で合わせていく必要がある。
※後日、既存の CC3+ Base スケルトンリグ AccuRIG をそのまま流用する方法があることに気付いたが、この時点では気づいておらず、新たなリグに手動でリターゲットを行っている。
Blender へ FBX のモデルをインポート
チュートリアル動画によると、Blender の Import メニューではなく、Blender Auto Setup Add-on にある Import Characer を使うことが望ましい。
マテリアルはスケスケの透過状態となっている
CC4 ご自慢の Digital Human Shader では、アルファ(半透明/透明)をふんだんに使っているが、アルファブレンド周りの設定が全て妥当なわけではない。
チュートリアル動画では、アルファブレンドの修正手順が解説されているので、異常な場合には手作業で修正するのは普通のことのようだ。
メッシュは CC4 と同じ名称で同数が出力されている
CC4 のシーン Scene の一覧表示内容と概ね等価なメッシュ単位となっている。
Blender の新規プロジェクトを一旦保存、マテリアルを修正していく
この後、Blender 側の設定を試行錯誤する予定なので、やり直しに備えて、インポート直後の状態を保存しておく。
HeadshotBoy_20230109T0935.blend
オブジェクトモードに変更し、各メッシュのマテリアルプロパティの設定を確認
Blender ではマテリアルプロパティ > 設定 > ブレンドモード/影のモードで確認できるが、メッシュに複数のマテリアルが割り当てられている場合には、マテリアルプロパティの一番上に一覧表示されるため、うっかり見落とす可能性がある。
Blender Auto Setup Add-on の CC/iC Pipeline の方でも Character Build Setting 配下の Object & Material Setup で同じ情報を分かりやすく確認できるので、そちらも併用する方がよい。チュートリアル動画でも併用が前提となっている。
初期状態だとマテリアルの表示が一行分になっているので、8つの点々があるボタンを下にドラッグして縦幅を拡げておくと分かりやすい。
これから試行錯誤するが、その前の状態を全て調査・記録しておく。
マテリアルが1つしか割り当てられていないメッシュを確認
アウトライナーでメッシュをクリックして切り替えながら、マテリアルプロパティ > 設定 > ブレンドモード/影のモードの値を確認する。
- 上着 Basic_T_shirts、靴 Canvas_shoes、ズボン Slim_Jeans の3つについては、すべて両方とも不透明となっていた。
- 舌 CC_Game_Tongue は両方ともアルファハッシュとなっていた
マテリアルが複数割り当てられているメッシュを確認
- 歯 CC_Base_Teeth は、2つマテリアルが割り当てられていたが、いずれも不透明となっていた。
- 目 CC_Base_Eye は、4つマテリアルが割り当てられている。
白目 Eye はブレンドモードはアルファブレンド、影のモードは不透明、背面を表示オン。
黒目(角膜)Cornea はアルファブレンド、アルファクリップ、裏面を非表示/背面を表示の両方ともオン。
3Dビューポートでの眼球の表示 - 身体 CC_Game_Body は6つマテリアルが割り当てられている。
まつげ Eyelash のみ アルファハッシュ、アルファハッシュ。
それ以外はアルファブレンド、不透明、背面を表示オン。 - 髪 Classic_short は2つマテリアルが割り当てられており、共にアルファハッシュ、アルファハッシュ。
かなり色々なパターンで使い分けがされており、ややこしい。だから事故る。
一部のマテリアルの設定を変更
アルファブレンドを放置したままでは VRM 出力は成功しそうもないが、一旦、Blender での見かけが正しくなるようにする。
- 眼球マテリアル Std_Eye_R/L の背面を表示はオフ
- 腕/胴体/頭/脚の肌マテリアル Ga_Skin_Arm/Body/Head/Leg の背面を表示はオフ
マテリアルはスケスケの透過状態ではなく、不透明のような感じになった。
Blender のヘルプによると、背面を表示は、英語ではカリング Backface Culling と呼ばれている。オンだと正面のみが見え、オフにすると両面が見えるようになるとのこと。分かりにくい。
スケルトンリグの位置合わせを行う
正面から見ると、VRM のスケルトンリグの方が一回り小さい。
側面から見ると、VRM のスケルトンリグは Z軸沿いに鉛直に立っているが、CC4 の方はやや背骨が湾曲しており鉛直ではない、
これから位置合わせを行うが、身体 Body のメッシュは一応は見えていた方が分かりやすいので、ワイヤーフレーム Wireframe 表示で表示させておく。衣服その他は不要なので非表示にしておく。
正面から見たジョイントの位置を揃える
まずは正面から見て位置を揃える。つまり奥行き Y座標は後回しにして、X/Z座標の位置を合わせる。
ほとんど左右対称のはずなので X軸ミラーをオンにしておく。これをしないと手作業が2倍になる。特に手指とかは面倒臭い。
CC3 Base+ (AccuRIG) のスケルトンリグのジョイントがとてもみづらいが、Z軸固定 [g][z]、X/Z軸固定 [g][Shift][y] を駆使して位置を揃える。
側面から見たジョイントの位置を揃える(手指・視線を除く)
CC3 Base+ のスケルトンリグとメッシュは後ろに反っている。
[g][y]、gy[g][Shift][x] を駆使して位置を揃える。
手指のジョイントの位置を揃える
上面からの表示に切り替え、[g][x]、[g][y] で手指のジョイントの位置を揃える。
その後、斜め表示にして [g][z]で高さも揃える。実に面倒くさい。
視線ボーンの位置を揃える
頭のメッシュが少し右に傾いていたので、X軸ミラーは外して位置合わせした。
Blender のプロジェクトを一旦保存、スキニングを行う(失敗)
この後、トラブル続出間違いなしのスキニングを行うので一旦保存しておく。
HeadshotBoy_20230109T1350.blend
VRMスケルトンリグを選択してポーズモードへ
いつもどおりの自動ウェイトによるスキニングの手順だが一応記録しておく。
- いったんオブジェクトモードに戻す
- VRMスケルトンリグ(カタカナでアーマチュア)を選択
- ポーズモードに変更
- [Shift]クリックで全てのメッシュを選択
- ポーズ - ペアレント - アーマチュア変形 自動のウェイトで
メッシュが巨大化するが、トランスフォーム維持にチェックすれば戻る
左下「ペアレントを作成」の「トランスフォーム維持」にチェック
スキニングのエラーを解決していく
いつもどおり
ボーンヒートウェイト:一つ以上のボーンで解決に失敗しました
と表示されたが、いちおうスキニングは完了しているらしく、ポーズモードでメッシュが動くようにはなっているので、いまは放置しておく。
それ以外にも様々な障害が発生している。
これらはすべて過去にも経験したエラーなので治し方は同じ。
30分位で全て修正し終えた。
見えていないが異常な部分としては、歯もおかしい
視線/首ボーンに追従していたり、頭ボーンには追従していなかったり。
まだ表情ブレンドシェイプは設定していないので、どのみち口を開くことはできないので、これらは後で治す。
上腕をひねると乳首の露出が発生する
CC3 Base+ と違って補助ボーンがないため捻り操作に弱く、素体と衣服へのスキンウェイトの付き方が違っているらしく衣服を素体が突き抜ける現象が発生するようだ。
これも対処(調整)が難しいので、後回し。
Blender のプロジェクトを一旦保存、VRM出力を行う
直ぐに治せるものは治したので、いったん出力してみる。その前に保存。
HeadshotBoy_20230109T1450.blend
やっぱりアルファブレンドが不透明以外だと破綻する(失敗)
絶対に失敗するという確信はあったが
- いつも通りだが、顔面は全面的におかしい
- 腕の曲がり方がおかしい
とりあえず顔から治すか。
白目のマテリアル Std_Eye_R/L を、不透明 Opaque に変更
眼球が飛び出ているように見えていたのが修正されて、眼球は引っ込んだ。
まつげは透明になってくれない。アルファハッシュのままなのだが...
古典的な短髪のスケールを 0.9x倍に縮小して頭内に埋め込んでしまう
短髪の側方にある薄皮一枚のメッシュが透明になってくれないので、逆の発想で、このメッシュを頭部メッシュの内側に入れてしまうことにした。
頭髪メッシュを選択し、座標をノーマルに変更する。
その後、[s][0.999]、[s][x][0.981] などで寸法をわずかに縮小して側頭部の薄皮が見えなくなるようにする。
しかし VRM アバターの表示の方には変化はなかった。
おそらく身体メッシュがアルファブレンド(半透明)になっているせいだと思う。
身体メッシュのマテリアルのブレンドモード/影のモードを不透明に変更
腕/顔/身体/脚のマテリアルのブレンドモードを、アルファブレンドから不透明に変更してみた。
皮膚が不透明になったので、押し込んで隠したかった部分は隠されたようだ。
しかし、まつげは黒い板ポリゴン風になってしまっている。
まつげと頭髪のマテリアルを、アルファハッシュからアルファクリップ Clipped に変更
どうやら何の効果も無かったようだ。もとに戻しておく。
どうしてもまつげにアルファを出力できない。
うまく出力されている別の人物モデルと比較すると、シェーダー Shading のノード構成は複雑なままで、Digital Human Shader の出力を別の PBR シェーダーが再出力するような構成になっていた。
CC4 のチュートリアルを見返したところ、基本マテリアルの再構築 Rebuild Basic Materials をすれば治る
チュートリアル動画によれば、「詳細設定」になっているとシェーダーが Digital Human Shader になり、「基本」にするとシェーダーが PBR になるようだった。
マテリアル再構築 Rebuild Materials で「基本」を選択して、基本マテリアル再構築 Rebuild Basic Materials をクリックした。
シェーダーが PBR になり簡単になった
シェーダー Shading のノード構成が簡単になり、Digital Human Shader は存在せず、PBR シェーダーが出力するような構成になっていた。成功のようだ。
マテリアルは原則として不透明になった
すべてのマテリアルのブレンドモード/影のモードが一律、不透明に統一された。その結果、Blender での表示も透明部分が無くなり、まつげや頭髪が黒い板ポリになった。
別のチュートリアル動画では、まつげを不透明からアルファハッシュに変更し直していたので、同じように設定を変更した。
顔面の出力については、あっさり問題は解決した
基本マテリアル再構築が正解だったようで、この数日間ハマっていた顔面の出力異常はほとんど解消した。
顔面以外の明らかな不具合については以下のようなものがある
顔面の出力は問題なくなったが、相変わらず腕の動きはおかしい。
それに乳首も見えている。
- VMagicMIrror で5種類用意されているポーズで上腕をテストしてみると、どれも不自然な動きをした
何がおかしいのだろうか? - 上腕の影響もあると思われるが、相変わらず乳首が上着を貫通している
衣服に隠れているメッシュが削除されておらず、不透明にされているので、ちょっとした動きで皮膚が衣服を突き抜けて露出してしまう。 - 上着の一部が透明になったりもしている
背面の表示(カリング)がおかしいのだろうか?
もういちどスキニングとメッシュ/ウェイト修正をやり直してみたが治らず(失敗)
原因が分からないままなのだが、何とかして上腕の異常を直したい。
過去に制作した人物モデルでは、このような現象は起きたことはなく、今回が初めてである。もう一度、自動ウェイトをかけ直し、メッシュ/ウェイト修正をやり直してみたが治らなかった。
乳首の露出についても、あっさり問題は解決しそう
別のモデルで試行錯誤している中で、衣服に隠れているメッシュを削除する設定がされていないと乳首が露出することが判明した。
今更 Export FBX の他の設定 Other Settings の存在に初めて気付く
チュートリアル動画の中で Blender 向け FBX 出力のさいに、隠れた面を削除 Delete Hidden Faces その他のチェックを全部オンにするように指図されていた。
https://youtu.be/SHAEDbc8kOQ?t=36
この設定は Export FBX の下の方にあって、スクロールしないと見えないので、これまで全然気づいていなかった。
隠れた面の削除はオフになっていた。
どうやらこれまでずっと、隠れた面を削除していなかったようだ orz
隠れた面の削除で乳首の露出問題が解消しそう
これまではエクスポート時に隠れた面が削除されていなかったせいで、素体が上着を貫通するという障害を惹起していた。
しかし別のモデルで試したところ、隠れた面の削除にチェックを入れて出力すると、素体のメッシュが透明になるのではなく削除され、この問題が発生しなくなった。
このモデルでもおそらく同じ対処で大丈夫だろう。
残るは上腕の異様な捻りのみ
これさえ解決すれば、ほぼ使える VRM アバターになるだろう。
VMagicMirror でマウスパッドやキーボードに手のひらの位置を合わせてくれているが、このときに問題が起きていると推測した。
そもそも理論が頭に入っていないので予習
Maya でキャラクターアニメーションを制作する場合の注意事項を細々と解説している書籍を熟読したところ、インバースキネマティックス IK の設定が不十分だと思わぬ方向に腕が曲がるといった説明があった。Blender の場合の解説ではないが、置き換えて理解することはできた。
そもそも、どのようにキャラクターアニメーションの文脈で IK が動作しているのか理屈が分かっていなかったので、もう一冊読み込んだ。ツールに依存しない共通の要素技術が詳しく説明されており良書。
解説書を精読した結果、上腕捻り問題は以下のような原因ではないかと推測
- 手のひらの位置合わせのさい、腕周りのジョイントチェーン(ボーン群)の制御に自動的に IK が適用されているけれども、優先回転軸や回転方向の制約がかかっておらず、おかしな方向に腕が可動してしまっているのではないか
- Character Creator で製作したアバターは欧米人サイズの体格であるため、VMagicMirror が表示しているマウスパッドやキーボードが身体に近すぎて、無理な姿勢になっているのではないか
Blender で手のひらにインバースキネマティックス IK を設定
チェーンの長さを肩口あたりまでの 4 にして、ボーンコンストレイントを追加した。
それぞれのジョイント(ボーン)に対して、人間である以上、絶対にこの方向に腕は曲がらないだろうと思われた回転軸については IK をロックした。
- ボーンプロパティ : インバースキネマティックス (IK) - IK をロック
手のひら CC_Base L/R_Hand の1つ上の親 Forearm
ここはY軸回転はしないのでロックしておいたほうがよいだろう。補助ボーンの影に隠れていて選択しづらいので、
- 手のひらボーンを選択してから、[選択]-[選択の拡大縮小]-[親]
で選択する。
前腕/上腕の捻り Twist にも一応、設定しておく
手のひらの親にも含まれておらず必要かどうかは分からないが、念のため、前腕/上腕の捻り Twist によるキャンディラッパーやエルボー破綻を軽減するために用意されていると思われる補助ボーンたちにも、ロックを設定しておいた。
※後日、別のモデルで IK を設定せずに進めてみたが結果は変わらなかったので、手のひらへの IK 設定は必須ではないのかもしれない。Blender で IK を設定する練習にはなったが。
VRM へエクスポートして VMagicMirror に読み込ませる。
VMagicMirror の設定 Settings で表示を調整
マウスパッドやキーボードの位置合わせは VMagicMirror で簡単に行える。
予想どおり、かなり身体に近い位置に初期配置されていたので遠ざけた。
- モーション > 腕・ひじ - 脇をしめるのスライダで調整
- レイアウト > デバイスのレイアウトの設定で、キーボードを身体から離す
この位置合わせを行うと、ほとんど問題がない表示になった。
右手の位置が左寄りすぎるが、それ以外は問題なし(成功)
この状態から、
この状態になった。
キーボード打鍵時の右手の位置が左寄りすぎるのは少し気になるが、モデルの問題ではないと思われるので深く追求しないことにする。
少し脇下に穴が開いているが、これは衣服に隠れているメッシュを削除すれば治ると分かっているので今回は追求せず、次回作では対応することにする。
ファイルサイズが 150MB なので VRoidHub にはアップできないので、ローカルで VRM モデルのファイルは管理することにする。
*1:PROモードは髪を生成できない