はじめに
現在はUnity2019.3以上のPackage ManagerからCamera Stacking Systemに対応したUniversalRP7.2以上をインストールできます。
またUniversalRenderingExamplesのCharacter UIと3D SkyboxにCamera Stacking Systemを利用したサンプルプロジェクトがあります。
UnityのLWRPはカメラスタックをサポートしないと明言されていました。
流石に不便だったのかUnity2019.2のロードマップにカメラスタックが追加されました。
2019.2 でCamera Stacking Systemが実装されるので、LWRPでカメラの結果を重ねるのはそこから可能になる感じですね pic.twitter.com/4HoWunmCQv
— h.omae (@pigeon6) April 25, 2019
残念ながら2019.2のリリースに間に合わなかったのですがUniversal/2019.3/backports by phi-lira · Pull Request #5462でrelease/2019.3ブランチにマージされたので試してみます。
Camera Stacking for URP has landed in main code base. This is definitely the longest PR I did in my life (6+ months), but it's finally here. This is target to be released in 7.2.0 package for URP end of this month. https://t.co/5Pi19Lzot3
— Felipe Lira (@phi_lira) January 9, 2020
現在はmasterブランチとrelease/2019.3ブランチにマージされました。以下はそれぞれのブランチに対するPull Requestです。
- Universal Camera Stacking by phi-lira · Pull Request #5260
- Universal/2019.3/backports by phi-lira · Pull Request #5462
またドキュメントはcom.unity.render-pipelines.universal/Documentation~/cameras.mdに用意されています。
Camera Stacking System
環境
- Unity2019.3.0f3
- release/2019.3ブランチのUniversalRP 7.2.0
- Unity Samples: UI (動作確認用)
UniversalRPのダウンロード
zipでダウンロードする方法とgitでcloneする方法、更にgitで対象のフォルダのみcloneする方法がありそれぞれ利点、欠点があるので使いやすい方法を選んでください。
- zipでダウンロード
- 利点: ブラウザからダウンロードできる
- 欠点: zipのサイズが1GB程度ある
- gitでclone
- 利点: git logを辿れる
- 欠点: zipよりもダウンロード時間が長いのでおすすめしない
- gitで対象のフォルダのみclone
- 利点: 必要最小限のフォルダのみダウンロードするので速い
- 欠点: gitといくつかのコマンド操作が必要なので慣れていないと操作が難しい
zipでダウンロードする
以下のリンクからrelease/2019.3ブランチ
を開き、右側のClone or download
> Download ZIP
ボタンからダウンロードします。
gitでcloneする
以下のコマンドでuniversal/camera-stackingブランチをcloneします。
git clone -b release/2019.3 https://github.com/Unity-Technologies/ScriptableRenderPipeline.git
gitで対象のフォルダのみcloneする
以下のコマンドでCore RP Library, Universal RP, Shader Graphのみcloneします。
# 不要なfetchしないためにリモートのみを設定したローカルリポジトリを作る
git init ScriptableRenderPipeline
cd ScriptableRenderPipeline
git remote add origin https://github.com/Unity-Technologies/ScriptableRenderPipeline.git
# sparse checkoutを有効にしてCore RP Library, Universal RP, Shader Graphのみをcheckout対象にする
git config core.sparsecheckout true
echo /com.unity.render-pipelines.core/ > .git/info/sparse-checkout
echo /com.unity.render-pipelines.universal/ >> .git/info/sparse-checkout
echo /com.unity.shadergraph/ >> .git/info/sparse-checkout
# checkoutしたいブランチと同名のローカルブランチを作る
git checkout -b release/2019.3
# shallow cloneで履歴を1つだけpullする
git pull --depth 1 origin release/2019.3
UniversalRPをインストールする
以下のようにcom.unity.render-pipelines.core
, com.unity.render-pipelines.universal
, com.unity.shadergraph
を[Project Folder]/Packages
にコピーします。
正常にインストールできているとPackage ManagerのCore RP Library, Universal RP, Shader Graphのバージョンが7.2.0 (in development)になっています。
従来のRP
まずは確認のためにUnity Samples: UIのMenu 3Dを開いてみます。このシーンは背景用のMainCamera
とUI用のGUI Camera
の2つがあります。
Camera Stacking System未対応のUniversal RP
次にCamera Stacking System未対応のUniversal RP 7.1.2 で確認するとGame ViewはGUI Cameraで背景も上書きされてしまいます。
描画順序は従来のRPと同様にDepthで決まるようですがUniversalRPに切り替えるとInspectorから見えなくなります。
Camera Stacking System対応のUniversal RP
-
まずはUniversalRPのアセットを作り、Opaque Texture
を有効にします。これは1パスしか扱えないUniversalRPでGrabPassと同様の機能でカメラスタックに必要なようです。Opaque Texture
を有効にしなくても描画されるようになりました。
以上の設定でUniversalRPでも従来のRPと同様に複数のカメラを重ねて描画できました。
他の方法でカメラスタックする
こちらは試していませんがLWRPを拡張する方法とPostProcessingとしてオーバーレイする方法もあります。
ですがLWRPの拡張はv3あたりがベースなのでそのまま使えるか分からなかったりPostProcessingは遅かったりとなかなかうまくいかないようです。
- LWRPのパス拡張について
- SRP Post Processing Texture Overlay in Unity
- https://forum.unity.com/threads/glitching-with-multiple-cameras-lwrp.592477/page-2#post-4838468
- https://www.youtube.com/watch?time_continue=413&v=LkP2AHcokxA
- https://assetstore.unity.com/packages/tools/particles-effects/post-processing-texture-overlay-147951
- https://github.com/ditzel/PostProcessingTextureOverlay
- 【Unity】LWRPでポストプロセスを使用しつつUIの手前にパーティクルを表示する
最後に
Unityの中の人によると以下のスレッドでUnity2019.4LTSを目標としていて2019.3リリース直後にパッケージに含まれそうと言っているので期待できそうです。
- https://forum.unity.com/threads/glitching-with-multiple-cameras-lwrp.592477/page-2#post-5125979
- https://youtu.be/mKhSt7og0XY
参考リンク
- Camera Rendering in LWRP
- https://portal.productboard.com/8ufdwj59ehtmsvxenjumxo82/c/31-camera-stacking
- Camera Stacking Systemの動画
- Universal Camera Stacking by phi-lira · Pull Request #5260
- Universal/2019.3/backports by phi-lira · Pull Request #5462
- LWRPのパス拡張について
- SRP Post Processing Texture Overlay in Unity
- https://forum.unity.com/threads/glitching-with-multiple-cameras-lwrp.592477/page-2#post-4838468
- https://www.youtube.com/watch?time_continue=413&v=LkP2AHcokxA
- https://assetstore.unity.com/packages/tools/particles-effects/post-processing-texture-overlay-147951
- https://github.com/ditzel/PostProcessingTextureOverlay
- 【Unity】LWRPでポストプロセスを使用しつつUIの手前にパーティクルを表示する