つくるの大好き。

つくるのが大好きな人の記録。

SunnySideUp UnityChan を HoloLens2 の既存プロジェクトに入れて動かしてみた

SunnySideUp UnityChanがリリースされたというニュースを見てさっそく試してみました!
PCでは当たり前に動くのでHoloLens2に入れて動作させるまでの手順を書きます。

f:id:peugeot-106-s16:20200712171402p:plain

SunnySideUp UnityChan

unity-chan.com

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で動作します。

github.com

このプロジェクトにSunnySideUp UnityChanのURP版を導入してみましょう。

パッケージのインストール

SunnySideUp UnityChan URPプロジェクトは下記のパッケージを利用しています。 同じバージョンのパッケージをインストールしましょう。

f:id:peugeot-106-s16:20200712162223p:plain

ただし、この中で下記のものはSunnySideUp UnityChan URPプロジェクトのPackagesフォルダ内に含まれているので、そこからコピーしてインストールしました。

  • Unity Chan Spring Bone
  • Universal Toon Shader for URP

ビルドを通すための修正
Unity Chan Spring BoneはUWPプロジェクトを書き出すときに大量のビルドエラーを出します。
これはUnity Editor用のスクリプトがビルド対象に含まれているからです。
パッケージ内のAssemly Definitionの設定を下記のようにEditor限定に変更する必要があります。

f:id:peugeot-106-s16:20200712171848p:plain

なお、このビルドエラーは別プロジェクトでAndroid ARM64(IL2CPP)ビルドをした時にも発生し、同様の対処が必要でした。

Add packages · SystemFriend/HoloLensUnityChan@9caee43 · GitHub

SunnySideUp UnityChanアセットのインストール

依存関係はフォルダ内で完結しているので、UnityChanSSUフォルダを丸ごとインポートすればOKです。

HoloLensUnityChanプロジェクトはURP対応ではないので、ここで UnityChanSSU_DynCol プレファブをシーンに配置しても何もレンダリングされません。
ここから色々ありましたw

URPに切り替える

URPのプロファイルを新規作成します。 f:id:peugeot-106-s16:20200712163650p:plain

設定は軽めに。   f:id:peugeot-106-s16:20200712163823p:plain

[Project Settings]-[Graphics]-[Scriptable Render Pipeline Settings]にアタッチします。   f:id:peugeot-106-s16:20200712164018p:plain

これでSunnySideUp UnityChanがレンダリングされるようになりました。

f:id:peugeot-106-s16:20200712164308p:plain

既存ShaderからURP対応のShaderへ切り替える

プロジェクトのレンダリングがURPに切り替わったところで、レガシーShaderを使っているCandy Rock Star Unityちゃんは悲しみの紫になります。
二股を掛けることは許されないのです。

地道にCandy Rock Star UnityちゃんのShaderを "Universal Render Pipeline/Toon" へ切り替えてゆきます。
このShaderは設定がめちゃくちゃたくさんあります!
マニュアルは読んでいないのですがハイライトが強すぎてエッジが真っ白になってしまっていたのを下記を0にすることで対応しました。

f:id:peugeot-106-s16:20200712165028p:plain

また、髪の毛のシャドウ部分の色がグレーになっておかしいと思いましたので、ここだけ色を設定しました。 f:id:peugeot-106-s16:20200712165148p:plain

また、Directional Lightを使うと光が強すぎて白飛びするので削除してPoint Lightを設置しました。

上記諸々の変更がこちらのコミットです。

Add Unity-chan SSU · SystemFriend/HoloLensUnityChan@949ab70 · GitHub

Unity EditorのGameビューにレンダリングされない

ここでPlayすると、Gameビューに編集中は行われていたレンダリングが行われず真っ黒になります。
これは [Project Settings]-[Player]-[XR Settings]にあるレガシィなシステムでURPを使う場合起こる現象らしいです。

https://forum.unity.com/threads/urp-in-hololens-app-changes-perspective-of-camera-in-game-view.874522/

レガシィを卒業して新しいXR Plug-in Frameworkを使いなさいということなので切り替えます。
そしてMRTKも XRSDK の接頭辞がつくプロファイルへの切り替えが必要です。
大変な大工事になっています!
寝る前にちょっとやてみようと思って始めた作業ですが、既に午前3時ですよ。

Unity - Manual: XR Plug-in Framework

こちらはトライアンドエラーで設定を変えていったので、詳細はGitHub上のプロジェクトをご覧ください。

Using the Unity XR SDK · SystemFriend/HoloLensUnityChan@a7c2d37 · GitHub

なんとか移行できた

というわけで動きました。

下記課題は残りました。
引き続き取り組んでゆきたいので良い情報があればぜひ教えてください。

  • MRTKのShaderがURPに切り替えと全て悲しみの紫になる。
  • HandInputが動いていないっぽい
  • HandMenuが息をしていないっぽい
  • キャラクターの足裏の高さが、Spatial Awareness で認識している床面より高い位置になっているっぽい
  • アプリのパフォーマンスは移行前と比べるとかなり重い

お知らせ

SunnySideUp UnityChan について詳しい説明がCGWORLD (シージーワールド) 2020年 08月号に掲載されているそうなので良かったらぜひ!
amzn.to