SunnySideUp UnityChan を HoloLens2 の既存プロジェクトに入れて動かしてみた
SunnySideUp UnityChanがリリースされたというニュースを見てさっそく試してみました!
PCでは当たり前に動くのでHoloLens2に入れて動作させるまでの手順を書きます。
SunnySideUp UnityChan
UnityのHDRP (High Definition Render Pipeline)とURP(Universal Render Pipeline)によるレンダリングに対応した新世代のUnityちゃんアセットです。
HDRPはPC等のハイパフォーマンスな環境用、URPは様々なデバイスで動作できる高い互換性とクオリティを併せ持つレンダリングシステムです。
新世代というのも、HDRPやURPに切り替えると既存のシェーダーはそのまま使えません。全部悲しみの紫になります。
移行するには清水の舞台から飛び降りる覚悟が要りそうですが、魅力的なアセットが使えるとなれば飛べる気がする方も多いのではないでしょうか!
既存プロジェクトの更新作業
ベースプロジェクトはこちら。Candy Rock Star Unityちゃんが現実世界に出現するというぼくが始めてHoloLensで作ったアプリです。
4年以上前に作ったものですが、地道に最新環境にあわせてアップデートされており、MRTK2.4+HoloLens2で動作します。
このプロジェクトにSunnySideUp UnityChanのURP版を導入してみましょう。
パッケージのインストール
SunnySideUp UnityChan URPプロジェクトは下記のパッケージを利用しています。 同じバージョンのパッケージをインストールしましょう。
ただし、この中で下記のものはSunnySideUp UnityChan URPプロジェクトのPackagesフォルダ内に含まれているので、そこからコピーしてインストールしました。
- Unity Chan Spring Bone
- Universal Toon Shader for URP
ビルドを通すための修正
Unity Chan Spring BoneはUWPプロジェクトを書き出すときに大量のビルドエラーを出します。
これはUnity Editor用のスクリプトがビルド対象に含まれているからです。
パッケージ内のAssemly Definitionの設定を下記のようにEditor限定に変更する必要があります。
なお、このビルドエラーは別プロジェクトでAndroid ARM64(IL2CPP)ビルドをした時にも発生し、同様の対処が必要でした。
Add packages · SystemFriend/HoloLensUnityChan@9caee43 · GitHub
SunnySideUp UnityChanアセットのインストール
依存関係はフォルダ内で完結しているので、UnityChanSSUフォルダを丸ごとインポートすればOKです。
HoloLensUnityChanプロジェクトはURP対応ではないので、ここで UnityChanSSU_DynCol プレファブをシーンに配置しても何もレンダリングされません。
ここから色々ありましたw
URPに切り替える
URPのプロファイルを新規作成します。
設定は軽めに。
[Project Settings]-[Graphics]-[Scriptable Render Pipeline Settings]にアタッチします。
これでSunnySideUp UnityChanがレンダリングされるようになりました。
既存ShaderからURP対応のShaderへ切り替える
プロジェクトのレンダリングがURPに切り替わったところで、レガシーShaderを使っているCandy Rock Star Unityちゃんは悲しみの紫になります。
二股を掛けることは許されないのです。
地道にCandy Rock Star UnityちゃんのShaderを "Universal Render Pipeline/Toon" へ切り替えてゆきます。
このShaderは設定がめちゃくちゃたくさんあります!
マニュアルは読んでいないのですがハイライトが強すぎてエッジが真っ白になってしまっていたのを下記を0にすることで対応しました。
また、髪の毛のシャドウ部分の色がグレーになっておかしいと思いましたので、ここだけ色を設定しました。
また、Directional Lightを使うと光が強すぎて白飛びするので削除してPoint Lightを設置しました。
上記諸々の変更がこちらのコミットです。
Add Unity-chan SSU · SystemFriend/HoloLensUnityChan@949ab70 · GitHub
Unity EditorのGameビューにレンダリングされない
ここでPlayすると、Gameビューに編集中は行われていたレンダリングが行われず真っ黒になります。
これは [Project Settings]-[Player]-[XR Settings]にあるレガシィなシステムでURPを使う場合起こる現象らしいです。
レガシィを卒業して新しいXR Plug-in Frameworkを使いなさいということなので切り替えます。
そしてMRTKも XRSDK の接頭辞がつくプロファイルへの切り替えが必要です。
大変な大工事になっています!
寝る前にちょっとやてみようと思って始めた作業ですが、既に午前3時ですよ。
Unity - Manual: XR Plug-in Framework
こちらはトライアンドエラーで設定を変えていったので、詳細はGitHub上のプロジェクトをご覧ください。
Using the Unity XR SDK · SystemFriend/HoloLensUnityChan@a7c2d37 · GitHub
なんとか移行できた
というわけで動きました。
URPの設定見直しでパフォーマンスは少し良くなった。#HoloLens2 #unitychan pic.twitter.com/emMLNAkvZp
— Satoshi Maemoto (@peugeot106s16) 2020年7月12日
下記課題は残りました。
引き続き取り組んでゆきたいので良い情報があればぜひ教えてください。
- MRTKのShaderがURPに切り替えと全て悲しみの紫になる。
- HandInputが動いていないっぽい
- HandMenuが息をしていないっぽい
- キャラクターの足裏の高さが、Spatial Awareness で認識している床面より高い位置になっているっぽい
- アプリのパフォーマンスは移行前と比べるとかなり重い
お知らせ
SunnySideUp UnityChan について詳しい説明がCGWORLD (シージーワールド) 2020年 08月号に掲載されているそうなので良かったらぜひ!
amzn.to