[unity]推しをゲームのヒロインにする
VRChat(VRC)等のモデルを最新URPに対応させ、ポーズをフィットさせる。
自分の作品に、気に入ったモデルを使いたいというのは、あたりまえのことです。
たとえば、Boothで販売されているモデルとか。それをアセットでも販売されているモデルとか。
しかしそれらはVRCのいささか古いUnity環境を前提としているため、最新のUnityで使おうとするとエラーが発生する場合があります。
今回は、それを修正し、URP非対応の子も、おそれずにゲームのヒロインに仕立ててみせましょうという動機のnoteです。
また、ついでに推しの子に銃をもたせたりとゲームのシステムに適応するため、情熱を注ぎこんでみましょう。
モデルのゲームへの組み込みの判断は、必ず各モデルのライセンスに従ってください。
今回対象のモデルは、USTおよびUST2(Unity-chan Toon Shader/2)を適用しているモデルが対象になります。
この記事は、Unity Toon Shaderを使用します。
モデルが対応しているのであれば、DynamicBoneやMagicaClothはそのまま使用できます。(ただし、アセットの購入は必須です)
また、ポーズの調整にはVeryAnimation(有料アセット)を利用します。
VRC(VRChat)対応のモデルを最新のUnity/URPプロジェクト(今回はUnity2022.2.14)に読み込むと、以下の不具合がある場合があります。それを解消します。
1) Burstのエラー。Burstのバージョンが古いことによる。
2) マテリアルのエラー。UTS2が最新のURPに対応していないことによる。
1. 対象アセットを読み込む
今回は、Sabao3179さんのアセット、Humanoid 3D Charactor_P08_Federicaをヒロインにしてみます。普通にPackage Managerから読み込みます。
2. Burstのエラーを解消する。
Consoleに「Library\PackageCache\com.unity.jobs~~」のエラーが出ているのは、VRCモデルにアタッチされているMagica Clothに使われる JobsのバージョンがUnityに対応していないからです。
エディタ右上の 「Experimental Package In Use」をクリックして Show Experimental Package を開くとPackage Manager が開きますので、Jobsのバージョンをあげます。
これでJobsに起因するエラーは解消されるはずです。



ログにエラーが残っている場合は、Console の Clearボタンを押して消しておきます。
3. マテリアルのエラーを解消する。
マテリアルのエラーを解消するために、Unity Toon Shaderを使い、Unityのバージョンにあったマテリアルにコンバートします。

1) Unity Toon Shaderを導入します。
(1) Package Manager ウィンドウを開きます。
(2) + ボタンをクリックし、 Add package from git URL を選択します。
(3) com.unity.toonshader と入力し、Add ボタンをクリックします。
(コピペ推奨です)
2) UTS2を削除します。
フレデリカモデルの場合、Assets > P08_Federica_v1.1 > Toon フォルダを削除します。
3) トゥーンシェーダーのマテリアルを Unity Toon Shader materials に変換します。
(1) メニューからコンバータを起動します。
Window -> Rendering -> Unity Toon Shader Converter


(2) Scan the project をクリックするとマテリアルの一覧が表示され、Convert Material ボタンが有効になるので、それを押してコンバートを実行します。
上の操作でマテリアルの一覧が表示されない場合、Unity-chan Toon Shader2 をクリックして、プルダウンメニューからUniversal Toon Shaderなど該当のシェーダーを選択するとよい場合があります。

4. 銃のアセットを読み込む
エラー修正が終わったので、銃を持たせてみます。
今回は、Ishikawa1116さんのアセット、ローポリゴン調 銃パッケージのなかのFN P90っぽいサブマシンガンをヒロインに持たせてみます。
1) 普通にPackage Managerから読み込みます。
2) マテリアルのエラーを解消します。
このアセットはBuilt-inマテリアルしかないため、URPのプロジェクトではエラーになっています。
マテリアルをみてみます。場所は Assets > Ishikawa1116 > LOW-POLY GUNS PACK > Materials です。

(1) マテリアルをSHIFTやCTRLキーを推しながらクリックしすべて選びます。
(2) Edit > Rendering > Materials > Convert Selected Built-un Materials to URPを実行します。
※レティクルは変換失敗しますが、今回はこのまま進めます。



3) P90っぽいサブマシンガンをフレデリカにアタッチします。
(1) フレデリカ本体をシーンに設置します。衣装・カラーバリエーションの Prefab のなかから好きなものを選び、Hierarchyに移しておきます。
(2) Assets > Ishikawa1116 > LOW-POLY GUNS PACK > Prefab > Submachinegun から、Submachinegun_01を選びます。

※状況によってはProject内の表示はマゼンタのままですが、問題ありません。
(3) hand_R にドラッグ&ドラッグしてアタッチします。


(4) Submachinegun_01のtransformを変更し、およその向きと位置をあわせます。

Rotation X=270、Y=90、Z=180としてみました。
Scaleも0.8~0.9に調整するとよいようです。
5. アニメーションクリップの修正
アニメーションさせながら銃の位置を修正します。
1) フレデリカモデルにアニメーションを適用します。
フレデリカのInspectorから、Animator の Controller に、フレデリカのアセットに含まれるテスト用のモーション「MoveTest」をアタッチします。

2) VeryAnimationをインポートし、設定します。
普通にPackage Managerから読み込みます。
日本人のかたが作者らしく、日本語のマニュアルも充実しています。詳細はマニュアルも併せて確認します。
(1) Wundow > Very Animation > Main でVeryAnimation のメイン画面を開きます。

(2) Herarchyよりフレデリカを選び、Open Animation Windowを選ぶと、走行アニメーションのアニメーションウィンドウが開きます。

Very Animationのマニュアルには「編集を始める前に最初に一度だけ回転補間の統一をすることを推奨します」とあります。方法は以下です。
・Very Animation のToolsモジュール のプルダウンメニュー(標準でCopy) から Rotation Curve Interpolation を選び、コンバートツールを開く
・Interpolution を Quaternion に設定し、Convert を押下する
(3) Edit AnimationをクリックしてVA ControllとVA Editorを開きます。

(4) 右手のIKをクリックします。

(5) IKにより選択されたアンカーポイントをドラッグで選び、DELキーを押して削除します。これで右手を振るアニメーションが消えます。

(6) 同様に左手のIKも選び、アンカーポイントを消します。

(7) 手を振るアニメーションを消したところで、0フレーム目にて銃を構えるポーズを編集します。
IKで銃の大まかな位置を決め、IKを解除して手首や腕を回転して調整する、またIKで位置を調整……ということになると思います。


IKがあるとはいえ、手首の角度は自由度の関係で、上腕のねじれも関係してきます。FKも使い、腕全体を調整していくことになると思います。

3) ポーズ・アニメーションの上半身だけを他のポーズに適用する
(1) VA Editorでこのポーズをテンプレートにセーブします。
名前をつけてセーブになります。

(2) ポーズのロードを選択した部位だけに適用するには、VA EditorのSelectionモードでロードするとよいようです。


必要に応じて Left / Right Handも呼び出しましょう。
ゲームに使う移動や待機のモーションには、このようにすれば銃を持ったポーズを合成していくことができそうです。剣と盾などでも同じことができそうですね。
今回は以上となります。
モーション調整は沼ですね。3Dゲームを作るのは、ほんとうに大変ですね。
有料アセットに頼りまくって、ようやくできるかというところではないでしょうか。
個人的にも、ようやくほしかったモーションが揃ってきてようやくゲームのアウトプットができる目処がたちました。それでも、まだまだ時間がかかるとは思いますが。
ではまた。ゲーム制作者魂がともにあらんことを。(k1t)