DEV Community

KOGA Mitsuhiro
KOGA Mitsuhiro

Posted on • Originally published at qiita.com

UnityのUniversalRPで開発中のCamera Stacking Systemを試す

はじめに

現在はUnity2019.3以上のPackage ManagerからCamera Stacking Systemに対応したUniversalRP7.2以上をインストールできます。
またUniversalRenderingExamplesCharacter UI3D SkyboxにCamera Stacking Systemを利用したサンプルプロジェクトがあります。

Character UI
Main.gif
3D Skybox
Main.gif


UnityのLWRPはカメラスタックをサポートしないと明言されていました。
流石に不便だったのかUnity2019.2のロードマップにカメラスタックが追加されました。

Camera Rendering in LWRP

残念ながら2019.2のリリースに間に合わなかったのですがUniversal/2019.3/backports by phi-lira · Pull Request #5462release/2019.3ブランチにマージされたので試してみます。

現在はmasterブランチとrelease/2019.3ブランチにマージされました。以下はそれぞれのブランチに対するPull Requestです。

またドキュメントはcom.unity.render-pipelines.universal/Documentation~/cameras.mdに用意されています。

Camera Stacking System

環境

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ボタンからダウンロードします。

https://github.com/Unity-Technologies/ScriptableRenderPipeline/tree/release/2019.3

image.png

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にコピーします。

image.png

正常にインストールできているとPackage ManagerのCore RP Library, Universal RP, Shader Graphのバージョンが7.2.0 (in development)になっています。
image.png

従来のRP

まずは確認のためにUnity Samples: UIのMenu 3Dを開いてみます。このシーンは背景用のMainCameraとUI用のGUI Cameraの2つがあります。

image.png

Camera Stacking System未対応のUniversal RP

次にCamera Stacking System未対応のUniversal RP 7.1.2 で確認するとGame ViewはGUI Cameraで背景も上書きされてしまいます。
描画順序は従来のRPと同様にDepthで決まるようですがUniversalRPに切り替えるとInspectorから見えなくなります。

image.png

Camera Stacking System対応のUniversal RP

  1. まずはUniversalRPのアセットを作り、Opaque Textureを有効にします。これは1パスしか扱えないUniversalRPでGrabPassと同様の機能でカメラスタックに必要なようです。 Opaque Textureを有効にしなくても描画されるようになりました。UniversalRPアセット image.png
  2. 後から描画するカメラ(GUI Camera)のBackground TypeUninitializedSolid Colorに変更してRender ModeOverlayに変更します。 Render Modeを変えるとBackground Typeが見えなくなるので必ずBackground Typeを先に変更します。 事前にBackground Typeを変更しなくても背景が上書きされなくなりました。
    • image.png
  3. 先に描画するカメラ(Main Camera)のStackGUI Cameraを追加します。
    • image.png

以上の設定でUniversalRPでも従来のRPと同様に複数のカメラを重ねて描画できました。
image.png

他の方法でカメラスタックする

こちらは試していませんがLWRPを拡張する方法とPostProcessingとしてオーバーレイする方法もあります。
ですがLWRPの拡張はv3あたりがベースなのでそのまま使えるか分からなかったりPostProcessingは遅かったりとなかなかうまくいかないようです。

最後に

Unityの中の人によると以下のスレッドでUnity2019.4LTSを目標としていて2019.3リリース直後にパッケージに含まれそうと言っているので期待できそうです。

参考リンク

Discussion (0)