· 

【Unity】既存プロジェクトをURPに変更する

Last Updated  2024.12.12


 既に制作を始めてしまったプロジェクトを途中からURPに変更した際、つまずいた箇所や注意点、具体的に行った作業の覚え書きです。VRMモデルをURPに対応させる、といった内容も含まれています。

 プレーンな状態から新規作成したUnityプロジェクトは、基本的に《ビルトインレンダーパイプライン》という形式なのですが、これを《 URP (Universal Render Pipeline) 》に変更します。  

 

 個人的に、URPに一番魅力を感じたのが描画パフォーマスに優れ、描画負荷の改善が見込めそうな点でした。

URPのインストール

 ビルトインレンダーパイプラインで作成したプロジェクトでURPを使用する場合、パッケージマネージャーからインストールする、といった "お馴染みの作業" が必要になります。

▼ 参考サイト (Unity公式)

 自分の場合、別のScene(キャラクターセレクト画面)をURPのテンプレートから制作したせいなのか、すでに《Assets》直下に作成されていました。

グラフィックス設定へURPアセットの追加

 URPAsset を作成したら、プロジェクトのグラフィック設定を変更します。

 [Edit] > [Project Settings] > [Graphics] 内にある

 [Scriptable Render Pipeline Settings] に、作成したURPアセットを追加します。

 

 これで、プロジェクトがURPを使用する設定に変更できました。  

 

 ですが──このままだと 重大な問題が発生している と思われます。

ピンクになる

 グラフィック設定を、ビルトインレンダーパイプラインを使用している状態からURPを使用する設定に変更すると──

マテリアルがピンクになる問題

 マテリアルがピンク一色になります

 Blenderで制作した背景オブジェクト(FBX)は、一度ゲームを再生したら自動的に修正されたのですが、『MToonを使用しているVRMモデル』や『Effekseerで制作したエフェクト』など、“独自シェーダー”を使っているものに関しては設定の見直しや修正が必須です。

VRMのURP対応問題

 現在、VRMのバージョンには『1.0』系と『0.x』系が存在し、1系モデルがURPに対応しているのですが……
 問題は、まだまだ0系が使われるケースも多いという点です。 

 

 今回の問題をものすごい簡潔にいうと、VRM0.x系のシェーダーである《MToon》は、UnityのURPに『対応していない』 ので、URPのプロジェクトでVRMを扱いたい場合、1.0系のシェーダーである

 

VRM10/Universal Render Pileline/MToon10

 

に設定し直す必要があります。 

最新版のUniVRMパッケージのインポート

 まず、プロジェクトにVRM1.0に対応したUnityPackageをインポートする必要があります。

インポートするUniVRMパッケージの場所

 1系に対応してるのは "VRM~"から始まるPackageになります。

 ※自分が作業を行った際の最新版は《VRM-0.126.0_14f3.unitypackage》でした

▼ 外部サイト (github)

注意点

 なお、既にプロジェクトに0系の ”UniVRM~”から始まるPackageをインポートしている場合、結構面倒なことになるというか、自分はなりました。ので、不安な場合はURPに 変更する前段階 でプロジェクトのバックアップを作成しておくことをお勧めします。 

 ▼ 関連記事

 具体的には、おそらく0系と1系のパッケージは『併用』できないっぽいので、過去に0系のパッケージをインポートしている場合は、インポートしたファイルを(1系のパッケージをインポートする前に)プロジェクトから削除しないといけません。

 細かく書くと本当に長くなるので、自分が実際にやったことを残しておくと……

 Assets直下の

  • UniGLTF
  • VRM10
  • VRMShaders

フォルダを全て削除してから、最新版の《VRM~.unitypackage》をインポートし直しました。


 これでも、"既に0系パッケージで展開されたVRMモデル" をプロジェクトで使用した場合、ボーン関係の黄色警告が物凄い数出るようになってしまいます。ちゃんとエラーの内容も確認してみたのですが……これはもう自分の手に負えないと判断し、キャラクターモデルも最初から導入し直しました。

 BlenderからVRM形式でエクスポートしたファイルをUnityにドラッグ&ドロップしても、1系対応のパッケージをインポートしている場合は、自動展開されません※表示されているアイコンが0系と違うので解ると思います

▼ドロップしたVRMファイルのインスペクター欄で

  1. Model を選択
  2. Migrate To Vrm 1 にチェック
  3. Apply

 これで、展開したモデルがVRM1.0形式として使えるようになります。自分がBlenderで改修したVRMモデルは、この段階でピンクの状態から抜け出して表示されるようになりました。

 ですが、このままだとまだ影や色味の細かい調整が出来ません。

▼マテリアルやテクスチャーがNoneになっているのが原因なので

今度は

  1. Materials を選択
  2. 最下部の Render Pipeline を Universal Render Pipeline に設定してからApply
  3. Extract Materials And Textures … をクリック

 

すると、VRMファイルと同じ階層に……

VRM1.0に対応したMaterialとTextureのフォルダが作成されます。

 続いて、Materials隣のVrmタブを選択し

Extract Meta And Expressions をクリックすると──

同じ階層に、今度はAssetsフォルダが作成されます。

 これでVRoid Studioと同じように、影の面積や境目のぼかし具合、色味やリムライトの調整が行える状態になりました。 

 ですが、このままだと MToonのアウトライン機能がまだ使えない(設定は出来るけど表示されない)ので、追加の設定が必要になります。

MToonのアウトライン機能をURPでも有効にする

 冒頭でプロジェクトをURPに変更した際、グラフィック設定に追加したURPアセットの──

 レンダラーファイル を選択します。名前が《"追加したURPアセット"_Renderer》になってるので、基本的には該当ファイルの真下にあると思います。

 次に、Rendererのインスペクター最下部にある " Renderer Features " に

MToonのアウトライン機能を使用したい場合はレンダラーに追加の設定が必要

  [ Add Renderer Feature ]  から [ M Toon Outline Render Feature ] を選択し、追加すればOKです。
 ※VRM1系に対応したパッケージをインポートしている状態なら表示されると思います

EffekseerのURP対応

 MToonのアウトライン機能を有効化する設定と同じように

EffekseerをURPで使う場合の設定

  レンダラーの [ Add Renderer Feature ]  から [ Effekseer URP Render Pass Feature ] を選択し、追加すればOKです。

▼参考サイト (Effekseer公式)

おわりに

 一連の設定変更や見直しを終え、なんとか無事にプロジェクトをURPに変更することができました。
 画像だと、2P側のキャラはまだ未対応のままですが……

 重さの指標となる、SetPassCallsの値も

URPに移行する前の状態

▲移行前は150を超える状態にまで膨れ上がっていたのですが…

SetPassCallsの値を大幅に改善

 ▲大幅に改善されたのが確認できます

アンチエイリアスの設定問題

 以前、アンチエイリアスの記事で触れていた

カメラにアンチエイリアスを設定する項目がないよ」問題も

URP変更後はアンチエイリアスに関する設定項目が追加される

 プロジェクトが、ビルドイン~で作られているか、URPで作られているかの違い みたいですね。

 ちゃんとメインカメラのインスペクター欄に、項目が追加されていました。

 

 ※アンチエイリアス関係の設定方法が別モノになってしまったため、これも後日まとめたいと思います


 自分の場合、自作モデルは今のところUnity製のプロジェクトでしか使用する予定はないので、今後のVRMモデルは1系で作った方がいいのかなぁ……と。 

 こういった問題は、ある程度開発を進めたり調べてみてから気付く部分なので難しいですね。
 

 

 暫くは、まだまだモデルやグラフィック周りの学習や制作に時間がかかりそうです。