本日はUnity枠です。
今回はUnityの[スクリプタブルレンダーパイプライン(SRP)]に関して調べてまとめていきます。
〇Unity SRPとは?
Unity(をふくむすべての3Dエンジン)ではオブジェクトを描画するプログラムとしてShaderを使用します。
[Shader]にもいくつかの機能がありそれらを組み合わせてオブジェクトを描画します。
簡単な例を以下に示します。
①3Dオブジェクトの頂点情報を受け取る
②頂点情報を頂点シェーダーでUnityの座標系に変換する。
③フラグメントシェーダーにデータを渡す。
④フラグメントシェーダーで1ピクセル単位の色の計算を行う
⑤描画する。
これらShaderではデータの型(ルール)が決まっており、そのルールに従いデータのやり取りを行います。
このルールを[レンダリングパイプライン]と呼ぶようです。
従来Unityではこのレンダリングパイプラインは固定でどのようなプロジェクトでも同じルールを使用していました。 このレンダリングパイプラインを[ビルドインレンダーパイプライン]と呼ぶようです。
しかし様々なデバイスの登場と高度なグラフィックの実現のためにUnity2018年以降のバージョンではC#でスクリプト可能な(スクリプタブル)レンダーパイプラインが実装され、これを[SRP]と呼ぶようです。
開発者側でC#を用いてルール(レンダリングパイプライン以下RP)を変更できるようになったとはいえ、専門的な知識が必要です。
そのためUnity側でおもに2つのSRPテンプレートが提供されたようです。
・HDRP(High Definition RP)
ハイエンドなPCおよびゲーム向けの最高品質なRP 現実の物理原則に基づいたレンダリングが行われる。
2021年現在[Valkan]に依存しておりすべてのプラットフォームに対応しているわけではないようです。
・URP(Universal RP)
すべてのプラットフォームに対応し、高品質なグラフィックを提供するRP
HoloLensを含むほとんどの環境下で動作可能、Unityでは将来的に従来のビルドインレンダリングパイプラインを廃止してSRPに移行する可能性を示唆しています。
従来のPRとURPで同様の描画を行った場合URPのほうが描画コストが安く良いグラフィックのレンダリングが行えるようです。
2021年現在SRPはバージョンごとの新機能を含む変更が激しくUnityバージョン全体を通した機能としては不安定ですが、ロードマップでは今後1Unityバージョンにつき1回のバージョンアップで安定させるといっています。
〇SRPで追加される機能
SRPを使用したプロジェクトではShaderの[UnityCG.cginc]などの一部の参照ファイルの名称が被っており、[SurfaceShader]など対応しておらずエラーを吐くようです。
そのため従来のビルドインレンダーパイプラインで使用できていたShaderがエラーとなることがあります。
代わりにSRPを導入したプロジェクトでは[ShaderGraph]を使用することができます。
[ShaderGraph]では従来のShaderと異なりノードベースにShaderを作成することができクリエイターやデザイナーなどShaderの専門知識が無くても基礎的な知識があればShaderを作成することができます。
また、[VFXGraph]と呼ばれる従来の[PerticleSystem]の後継に当たる機能が使用できます。
これはノードベースでビジュアルエフェクトを作成できる機能です。
本ブログではオーブを作成しています。
HoloLensでHDRPが動かせるかはまだ試していませんが今後SRPプロジェクトの様々な機能を試していきたいと思います。