見出し画像

桔梗ちゃんの頭をUltimateKissMaちゃんに差し替えてみる(1)

keiichiisozaki さん製作の UltimateKissMa ちゃんをお迎え。アバターが二名になったので前から興味のあったアバターの頭挿げ替えをやってみます。具体的には桔梗ちゃんの体にKissMaちゃんの顔(首)を移植します
この改変の条件は襟がついているモデルであることです
Blenderは使いませんが、メッシュの一部削除と頂点位置の編集を伴います
なお今回はモデル製作の話なので、VRC Avatar descripter や animation 関係などVRChat内の動作に関する部分は触れません、ご了承ください
リンク集は最後にあります。目次から飛べます

身もふたもない話

※実のところ桔梗ちゃんは頭部一式が別パーツとして消せる構造になっているので、より簡単に済ませたい場合は顔を消して「桔梗ちゃんの首」に「他の顔を挿す」ほうが楽な気がします
ただ今回は一般的な「素体に他の首を挿す」改変方法をやってみます。なお、どちらの場合でも基本的な流れは下記と同じです

今回の主な内容

  • VRChat用アバターの首の付け替え(素体が襟付きモデル)

  • プロジェクトのバックアップ方法(7-Zip使用)

  • MeshDeleterWithTexture によるメッシュ削除

  • BlendShapeBuilder 同梱の Vertex Tweaker による頂点編集

  • ModelBoneDeleterによるボーン削除

  • VRC Avatar Descriipter の差し替え方法

プロジェクトのバックアップ方法(7-Zip使用)

プロジェクトで取り返しのつかない事態が発生したときに備えて、要所でプロジェクトのバックアップをとるようにします

  1. Unity Hubを開く

  2. 目的のプロジェクトの「…」→Show in Explorer をクリック

  3. エクスプローラ上で選択されているフォルダをコピー&リネーム

これでプロジェクト全体のバックアップが作成されました
しかしUnity Hubに登録されていないため、そのままではバックアップを開くことができません。使用するときが来たら以下のようにします

  1. Hubの「Open」横の下三角マークをクリック

  2. Add project from disk をクリック

  3. バックアップの「フォルダを」選んで Add project をクリック

  4. Hubにプロジェクトが追加される

ただUnityのプロジェクトは軽く1GBを超え、ファイル数も1万超えという大型のものです。そこで容量の節約やバックアップの管理を容易するために、プロジェクトのフォルダを丸ごと圧縮してしまうと便利です
私は7-Zipというソフトを使っています、右クリックから直接7z化できるので扱いやすく、圧縮率も高いため便利な圧縮・解凍ソフトです。インストールは下記公式サイトから

改変の注意点

大きな改変をする前にバックアップをとる
プロジェクト丸ごとの破損や不意のアセット破壊に備えて、要所でプロジェクト丸ごとのバックアップを取っておくようにする

極力「非破壊」や「復旧可能」な方法で改変を進める
余計なメッシュは削除ではなく非表示で対応。メッシュ編集など元データを改変する加工はかならず元データを複製しておいて、元に戻せるようにしておく

軽量化作業は動作テストが終わってから
不要ボーン削除などの軽量化は想定外の不具合を引き起こす可能性がある。一見すると無関係そうな場所でも、動作テストが成功するまでは我慢して残しておくほうが良い。また、これらを削除する前にバックアップを取っておいたほうが良い

モデルの前面だけではなく全周囲、足元も確認する
前面は適切でも、背面や足元で破損していたりする。面倒でもモデルの全身をくまなく見て回ること。これを怠ると完成後にメッシュ破綻を見つけて悲しくなったりする

モデルの読み込み~大まかな位置合わせ

  1. モデル2体を読み込む

  2. 余計なものを非表示にする

  3. とりあえず腕基準で合わせてみる

  4. 体側モデルの襟部分を表示して収まりを見てみる

Unity内での非表示には二種類あり、性質が異なります
ヒエラルキーでの非表示は、Sceneビューでの表示が消えるだけでゲーム内には存在する扱いになります。そのためゲームモードにすると表示されます。カメラやライトのアイコンを消すときに便利です
インスペクタ最上段チェックボックスでの非表示は、ゲーム内にも存在しないものとして扱われます。モデルの服や髪はこちらの方法で非表示にしたほうが動作確認しやすいと思います

頭位置のためのボーン微調整

このあたりは完全にセンスの領域であり、必要かは各自で判断してください。(ちなみに私はセンスないです)今回はKissMaちゃんの頭部が桔梗ちゃんより若干低いため、頭の位置を微調整します

  1. 首の角度を桔梗ちゃんに寄せてNeckボーンを傾ける

  2. 首を傾けた分、逆側にHeadボーンを傾けて視線を水平に戻す

  3. 顔の高さを桔梗ちゃんに寄せるため、Headボーンの高さを微かに上げる

MeshDeleterWithTextureで不要なメッシュ削除 

KissMaちゃん側の胴体削除

KissMaちゃんは首と胴体が一緒のメッシュなので、桔梗ちゃんの体と干渉してしまいます。そこで MeshDeleterWithTexture を使ってKissMaちゃんの首から下を削除します
初めての破壊編集ですが、このツールは自動でバックアップしてくれるので失敗しても元に戻すことができます。復旧方法も説明します

メッシュの削除方法

  1. メニュー → GatoTool → MeshDeleterWithTexture を開く

  2. Render欄で編集したいメッシュを選択

  3. PENモードで適当に線を引いて消したい箇所がどのあたりか特定

  4. Undoボタンで元に戻し、削除部分を塗っていく

  5. Delete Meshボタンで実際に削除する

メッシュのバックアップと復旧方法

MeshDeleterWithTextureはメッシュを改変する際、自動で改変元のバックアップをとり、Scene上のメッシュを改変後のものに差し替えます
実際には Skinned Mesh Renderer のMesh欄が変化しており、ここの参照先を元に戻すことで改変前のメッシュに戻すことが可能です

桔梗ちゃんの首が邪魔になるので、こちらも同様の方法で削除しておきます
(詳細は割愛します)

Vertex Tweaker による襟の調整

首回りのはめあいを確認できるようになったのでパーツを合わせてみました。KissMaちゃんの首だと桔梗ちゃんの襟では幅が足りません
そこで BlendShapeBuilder 同梱の Vertex Tweaker というツールで襟の頂点を移動させて首に埋まらないようにします
既に別記事として公開していますので、下記のリンクからお願いします

ボーンの移動

モデルの準備が整ったので、いよいよボーンの移動を行います。モデル破損の可能性が高いため先にバックアップを取っておくと良いでしょう
ボーン移動が終わったら、DancePackFree 等を入れて動作を確認してみます

  1. 頭部モデルのボーン名を判別できるよう変更(今回は_KissMaを追加)

  2. 体側モデルのボーン名の子ボーンに頭側モデルを追加(たとえばHeadの下にHead_KissMaなど)※目のボーンも忘れないこと

  3. DancePackFree を適用して挙動を確認してみる

そもそもコレは何をやっているのか?

以下の二つの条件がそろうことで、追加したい素体のボーンを入れ子にするという方法がとられるようになりました

  • Humanoid Rig はfbxに紐づけられているので、Unity側で更新できない

  • 子ボーンは親ボーンの回転を100%受け継ぐ

Humanoid Rig の紐づけについて
Humanoid Rig の情報はfbxファイルのほうに紐づけられています。そのためUnity内で追加・移植したボーンはHumanoid扱いされずモーションが適用されません
この仕様のため、体側ボーンの差し替えではなく、体側ボーンを残した状態で、その体側ボーンの回転を追加したボーンに受け継がせる必要があります

子ボーンは親ボーンの回転を100%受け継ぐこと
(大抵は親子でボーン位置が離れているためわかりづらいですが)子ボーンの座標を親ボーンと同じにすると、親ボーンと同じだけ回転していることがわかります

以上の要素から、モデルの実際の動きは Humanoid Rig が受けもつ体側のボーンに行わせ、追加モデルを子ボーンにすることで実質的に体側と同じ動作をさせるというのが現在の方法です
実の所Unityだけの改変では正確にボーンの位置が合いません。よって追加モデルの動きは微かに破綻していますが、通常の使用で気付くことはないと思います。PV撮影でドアップでなめ回すようにカメラで映す場合は気付くかもしれません

入れ子にするべきボーンは何か

体側でHumanoid Rigに登録されているボーンが、アニメーションを受けて「動く」ボーンなので、追加する側の同名ボーンをその子ボーンに入れ子にしていきます。今回の改変で頭のボーンだと、Headの子ボーンにHead_KissMaが入ります
逆に言えば Humanoid Rig に登録されていないボーンは特に入れ子を意識する必要はなく、単純に元となる親ボーンにぶら下がっていれば大丈夫です

動作テスト

動くかどうかを確認してから次に進みましょう。見た目は最後に設定すればいいので、まずはモデルとしての破綻が無いかを確認しておきます
他の変換、たとえばVRMファイルにする場合も、まずはこの状態で変換できるかを確認しておきましょう、この段階で躓く場合は後工程に進んでも結局躓いたままで時間を無駄にしてしまいます(した)

首まわりの作業を完了させる

(安全のために後回しにしても良いです)
現時点でKissMaちゃんの首まわりは雑に切り抜いた状態なので、MeshDeleter~で綺麗に首を切り抜いていきます。といっても切断面は桔梗ちゃんのブラウスで隠れるのでそこまで神経質になる必要はないでしょう

不要メッシュ&ボーン削除

軽量化作業なので、モデルが動きさえすればいい場合は不要です
ModelBoneDeleterを使って不要ボーンを削除していきます。作業前にバックアップをとっておきましょう。不具合が起きる可能性が高い部分です

ボーンを消す場合はこのツールを使うことをおすすめします
単純にヒエラルキーでボーンを削除すると、そのボーンに対して塗られている頂点が有った場合、行き場を失いワールド原点へ集まって以下のような光景となります
ModelBoneDeleterはボーン削除時、頂点ウェイトを自動修正してくれるのでこうした事態を防いでくれます

失敗例:ワールド原点に向かって伸びる首のメッシュ

というわけで桔梗ちゃんの髪ボーンや、KissMaちゃんの胴体より下のボーンは使わないので削除していきます。ただし Humanoid Rig に登録されているボーンは残しておきます。これは桔梗ちゃんもKissMaちゃん両方ともです

  1. メニュー → GatoTool → ModelBoneDeleter

  2. Avatar欄で対象モデルを選択

  3. 削除したいボーンにチェックを入れる

  4. (Copy Avatar にチェックを入れると別モデルになるので安全)

  5. Delete Bones を押してボーン削除

  6. メッシュが破綻していないか確認

  7. ゲームモードでちゃんと動くか、揺れ物が正常か確認

使用したパッケージ類(作者略)

  • Unity 2019.4.31f1

  • VRCSDK3-AVATAR

  • lilToon(桔梗ちゃん用)

  • オリジナル3Dモデル「桔梗」

  • PoiyomiToon7.0.100(UltimateKissMaちゃん用 ※2022/4/29 ver)

  • UltimateKissMa

  • MeshDeleterWithTexture beta

  • ModelBoneDeleter

  • Blend Shape Builder & Vertex Tweaker

  • Dance Animations FREE

  • 7Zip

パッケージリンク集

VRCSDK3-AVATAR インストール方法の記事
インストール方法は過去記事参照

lilToon(桔梗ちゃん用)

オリジナル3Dモデル「桔梗」

PoiyomiToon7.0.100(UltimateKissMaちゃん用 ※2022/4/29Ver)

UltimateKissMa

MeshDeleterWithTexture beta

ModelBoneDeleter

Blend Shape Builder & Vertex Tweaker

Dance Animations FREE
マイアセットに追加 → Unity内の Package Manager → My Assets から選択

この記事が気に入ったらサポートをしてみませんか?