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をインポートする必要があります。
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ファイルのインスペクター欄で
- Model を選択
- Migrate To Vrm 1 にチェック
- Apply
これで、展開したモデルがVRM1.0形式として使えるようになります。自分がBlenderで改修したVRMモデルは、この段階でピンクの状態から抜け出して表示されるようになりました。
ですが、このままだとまだ影や色味の細かい調整が出来ません。
▼マテリアルやテクスチャーがNoneになっているのが原因なので
今度は
- Materials を選択
- 最下部の Render Pipeline を Universal Render Pipeline に設定してからApply
- 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 " に
[ Add Renderer Feature ] から [ M Toon Outline Render Feature ] を選択し、追加すればOKです。
※VRM1系に対応したパッケージをインポートしている状態なら表示されると思います
EffekseerのURP対応
MToonのアウトライン機能を有効化する設定と同じように
レンダラーの [ Add Renderer Feature ] から [ Effekseer URP Render Pass Feature ] を選択し、追加すればOKです。
▼参考サイト (Effekseer公式)
おわりに
一連の設定変更や見直しを終え、なんとか無事にプロジェクトをURPに変更することができました。
画像だと、2P側のキャラはまだ未対応のままですが……
重さの指標となる、SetPassCallsの値も
▲移行前は150を超える状態にまで膨れ上がっていたのですが…
▲大幅に改善されたのが確認できます
アンチエイリアスの設定問題
以前、アンチエイリアスの記事で触れていた
「カメラにアンチエイリアスを設定する項目がないよ」問題も
プロジェクトが、ビルドイン~で作られているか、URPで作られているかの違い みたいですね。
ちゃんとメインカメラのインスペクター欄に、項目が追加されていました。
※アンチエイリアス関係の設定方法が別モノになってしまったため、これも後日まとめたいと思います
自分の場合、自作モデルは今のところUnity製のプロジェクトでしか使用する予定はないので、今後のVRMモデルは1系で作った方がいいのかなぁ……と。
こういった問題は、ある程度開発を進めたり調べてみてから気付く部分なので難しいですね。
暫くは、まだまだモデルやグラフィック周りの学習や制作に時間がかかりそうです。