独自の Scriptable Render Pipeline (スクリプタブルレンダーパイプライン (SRP)) を作成する場合は、プロジェクトに以下が必要です。
CreatePipeline()
メソッドをオーバーライドするスクリプト。このスクリプトはレンダーパイプラインアセットを定義します。Render()
メソッドをオーバーライドするスクリプト。このスクリプトはレンダーパイプラインインスタンスを定義します。これらの要素は密接に関連しているため、同時に作成する必要があります。
次の例は、レンダー パイプラインインスタンスをインスタンス化する基本的なカスタムのレンダーパイプライン アセットのスクリプト、レンダーパイプラインインスタンスを定義するスクリプト、そしてレンダーパイプラインアセット自体を作成する方法を示しています。
ExampleRenderPipelineAsset.cs という C# スクリプトを作成します。
次のコードをコピーして新しいスクリプトに貼り付けます。
using UnityEngine;
using UnityEngine.Rendering;
// CreateAssetMenu 属性によって Unity Editor にこのクラスのインスタンスの作成が可能になります。
[CreateAssetMenu(menuName = "Rendering/ExampleRenderPipelineAsset")]
public class ExampleRenderPipelineAsset : RenderPipelineAsset
{
// 最初のフレームをレンダリングする前に、Unity によってこのメソッドが呼び出されます。
//レンダーパイプラインアセットの設定が変更された場合は、Unity は現在のレンダーパイプラインインスタンスを破棄し、次のフレームをレンダリングする前に再度、このメソッドを呼び出します。
protected override RenderPipeline CreatePipeline() {
// このカスタムの SRP がレンダリングのために使うレンダーパイプラインをインスタンス化します。
return new ExampleRenderPipelineInstance();
}
}
ExampleRenderPipelineInstance.cs という C# スクリプトを作成します。
次のコードをコピーして新しいスクリプトに貼り付けます。
```C# using UnityEngine; using UnityEngine.Rendering;
public class ExampleRenderPipelineInstance : RenderPipeline { public ExampleRenderPipelineInstance() { }
// Unity calls this method once per frame for each現在レンダリングを行っている各 CameraType に対し、フレームごとに 1 回このメソッドを呼び出します。
protected override void Render (ScriptableRenderContext context, Camera[] cameras) {
// ここにカスタムのレンダリングコードを記述します。このメソッドをカスタム化して、SRP をカスタム化します。
}
}
```