Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

URPの概要についての調査

概要

Unity初心者の私がグラフィクスパイプラインの処理について調査したので、まとめたい。
モバイル端末での表示が関心事なので、ビルトインパイプラインとURP(Universal Render Pipeline)について調べてみた。

Unityでのグラフィクスパイプライン

まずは公式でどのように書かれているか、ということでグラフィクスパイプラインについてUnityの公式マニュアルをみると

レンダーパイプラインは、シーンのコンテンツを取得し、それを画面に表示する一連の操作を行います。簡単に説明すると、以下のような操作です。

使用するレンダリングパイプラインの選択
Unity は以下のレンダリングパイプラインを提供します。

ビルトインレンダーパイプラインは Unity のデフォルトの レンダリングパイプラインです。これは汎用レンダリングパイプラインで、カスタマイズのオプションが限られています。
ユニバーサルレンダーパイプライン (URP) はスクリプタブルレンダーパイプラインの 1 つです。素早く簡単にカスタマイズでき、幅広いプラットフォームで最適化されたグラフィックスを作成できます。
HD レンダーパイプライン (HDRP) はスクリプタブルレンダーパイプラインの 1 つです。ハイエンドプラットフォームで最先端の忠実度の高いグラフィックスを作成できます。
Unity のスクリプタブルレンダーパイプライン API を使って、独自の カスタムレンダーパイプライン を作成することができます。
https://docs.unity3d.com/ja/2021.3/Manual/render-pipelines-overview.html

用語説明
カリング:シーンの内、描画するオブジェクトを選別すること
レンダリングピクセル当たりの色を決めること
ポストプロセッシングレンダリングする画像を作成した後に、その画像を加工すること

引用:https://docs.unity3d.com/ja/2021.3/Manual/BestPracticeLightingPipelines.html

ということで、構造的には

  • ビルトインパイプライン
  • SRP (スクリプタブルレンダーパイプライン)
    • URP (ユニバーサルレンダーパイプライン) (ローエンド向け)
    • HDRP (HDレンダーパイプライン) (ハイエンド向け)

という区分になっている。

SRP (URP)でRenderPassの追加について

色々調べてみたが、この記事が一番わかりやすかったので引用する。
https://shibuya24.info/entry/unity-urp-add-pass

基本的なclassの簡単な相関図は以下のようになっている模様。

Scriptable Render Classes

スクリプトリファレンスに各クラスの簡単な説明があるので抜粋する。

Class 説明 リンク
ScriptableRenderer rendering戦略を決めるもので、どのようにcullingが実行されるかやlightingがされるかを決めるもの Class ScriptableRenderer | Universal RP | 7.1.8
ScriptableRenderPass URP rendererで使用されるrendering passを定義するもの Class ScriptableRenderPass | Universal RP | 7.1.8
ScriptableRendererFeature RenderPassをRendererに追加するもの Class ScriptableRendererFeature | Universal RP | 7.1.8
RenderPipeline Unityがframeを描画する一連のコマンドや設定を定義するもの Rendering.RenderPipeline - Unity スクリプトリファレンス
ScriptableRenderContext custom render pipelineが用いるコマンドや状態を定義するもの Rendering.ScriptableRenderContext - Unity スクリプトリファレンス

Frame Debugとドローコールについて

Unityの機能のFrame Debugを使うと、ドローコールの順が見える。
どの順で何の命令が実行されているかが見えるので、処理の理解と最適化に役立つと思う。
https://docs.unity3d.com/ja/current/Manual/FrameDebugger.html
Frame Debugをみると、実行されているRendererが確認できる。

Frame Debug

終わりに

これからもUnityのグラフィクスについての調査をして、まとめていきたい。
各Classについても詳細に調べたり、Shaderとの関係や処理についても調べてまとめたい。