URPの勉強をする。概要
趣旨
Unityが従来の固定レンダリングパイプライン(BuiltIn RP)の後継にURPを指名した
ので、早急にURPを調査する必要がある
UNITYのレンダリングパイプライン
SRP
UNITYのレンダリングは下記のようなパイプラインで行われる
- カリング
- オブジェクトのレンダリング
- ポストプロセッシング
それらのパイプラインは、UNITYエンジンでハードコーディングされており、BuiltIn RPと呼ばれる
UNITY2018より、PreviewとしてScriptable Render Pipeline(SRP)がテスト実装された
SRPでは、レンダリングパイプラインをプログラマが自由に変更できるようになった
LWRP, HDRP, URP
レンダリングパイプラインを変更すると、シェーダーも全部作り直す必要があり
非常にコストが高いため
ある程度汎用的な2つのパイプラインをUNITY社は用意をした
ハイクオリティーなレンダリング用途のHDRP(High Definition Render Pipeline)と
低スペック端末用のLWRP(Light Wait Render Pipeline)
そして、従来LWRPと呼んでいたものを、UNITY2020からURP(Universal Render Pipeline)と改名し
BuiltIn RPの後継に指名した
コードリポジトリ
BuiltIn Shaderのコードリポジトリは見つけられなかったが、下記でバージョンごとにダウンロードできる
ダウンロードタブを押すと、ビルトインシェーダーを選択できる
unity3d.com
レンダーパイプラインはリポジトリが公開されているので、対象のバージョンをTagで指定してダウンロードできる
github.com
使っているUNITYのRenderPipelineのバージョンを調べるには、UnityPackageManagerでRP等で検索してバージョンを調べる
例えば、Unity2020.2.1 だと、v10.2.2である
シェーダーの書き方
UNITYのシェーダーはHLSLベースの、ShaderLabという言語で書く
テキストエディタで作る
シェーダーのフル機能を使う事が出来る
私の知る限りだが、ビジュアルスクリプティングでは一部の表現が出来ない
ビジュアルスクリプティング
以前より優良アセットとして、ShaderForge、Amplify Shader Editorがある(あった)
ShaderForgeは開発中止されたが、Amplifyは今でも使われていて、URPにも対応しているらしい
UNITY社はShaderGraphを無料で提供し、当然URPにも対応している
一部出来ないことはあるかもしれないが、ノードベースでシェーダーを書きたい人の選択肢になればと
URP プロジェクトを作ってみる
プロジェクトの作成は簡単
UnityHubで新規プロジェクト作成時にURPプロジェクトのテンプレートがあるので作成する
そこに、仮に独自シェーダーのモデルをImportすると
URPに対応していないシェーダーなのか、シェーダーエラーになる
仮に、URP/Unlitシェーダーを適用すれば、テクスチャがはられたのみのモデルが表示される
URP/Unlitシェーダーを覗く
チラ見で気になるのが、SRP batching
軽くみたかんじ、BuiltIn RPでは同じマテリアルでしかBatchingが出来なかったが
SRP(URP)では、異なるマテリアルであっても、シェーダーが同じであればInstancing出来るようだ
そのため、他のシェーダーとも共通化してあるのかな
// SRP batching compatibility for Clear Coat (Not used in Lit) [HideInInspector] _ClearCoatMask("_ClearCoatMask", Float) = 0.0 [HideInInspector] _ClearCoatSmoothness("_ClearCoatSmoothness", Float) = 0.0
URPには、 "RenderPipeline" = "UniversalPipeline" Tagが必要そう
独自のシェーダーパスも簡単に作れそうだ
qiita.com
今度は簡単なURP対応シェーダーを作ろうと思う