レンダーグラフシステム API を使用して、カスタムレンダーパスの入力または出力としてテクスチャを設定し、そのテクスチャに対して読み込みまたは書き込みを行うことができます。
1 つのレンダーパス内で、同じテクスチャに対して読み込みと書き込みの両方を実行することはできません。詳細は、レンダーパスでレンダーターゲットを変更するを参照してください。
カスタムレンダーパスの入力としてテクスチャを設定するには、以下の手順に従います。
RecordRenderGraph メソッドで、パスが使用するデータにテクスチャハンドルのフィールドを追加します。
例:
// Create the data your pass uses
public class MyPassData
{
// Add a texture handle
public TextureHandle textureToUse;
}
テクスチャハンドルを、使用したいテクスチャに設定します。
例:
// Add the texture handle to the data
RenderTextureDescriptor textureProperties = new RenderTextureDescriptor(Screen.width, Screen.height, RenderTextureFormat.Default, 0);
TextureHandle textureHandle = UniversalRenderer.CreateRenderGraphTexture(renderGraph, textureProperties, "My texture", false);
passData.textureToUse = textureHandle;
UseTexture メソッドを呼び出して、テクスチャを入力として設定します。
例:
builder.UseTexture(passData.textureToUse, AccessFlags.Read);
SetRenderFunc メソッドでは、Blitter.BlitTexture などの API の入力として、パスデータの TextureHandle オブジェクトを使用できるようになりました。
Blit などのコマンドの出力としてテクスチャを設定するには、 RecordRenderGraph メソッドで SetRenderAttachment メソッドを使用します。SetRenderAttachment メソッドは、デフォルトでテクスチャを書き込み専用に設定します。
例えば、以下のコマンドは一次的なテクスチャを作成し、それをレンダーパスのレンダーターゲットとして設定します。
// Create texture properties
RenderTextureDescriptor textureProperties = new RenderTextureDescriptor(Screen.width, Screen.height, RenderTextureFormat.Default, 0);
// Create the texture
TextureHandle targetTexture = UniversalRenderer.CreateRenderGraphTexture(renderGraph, textureProperties, "My texture", false);
// Set the texture as the render target
// The second parameter is the index the shader uses to access the texture
builder.SetRenderAttachment(targetTexture, 0);
SetRenderFunc メソッドで、Blitter.BlitTexture などの API を使用してテクスチャに書き込むことができるようになりました。
データにテクスチャを追加する必要はありません。レンダーグラフシステムは、レンダーパスを実行する前に自動的にテクスチャを設定します。
レンダーターゲットにオブジェクトを描画する必要がある場合は、追加情報としてレンダーパス内のオブジェクトを描画するを参照してください。
レンダーグラフシステムのレンダーパス中に、URP が書き込むテクスチャを変更することはできません。
代わりに以下のいずれかを実行できます。
builder.SetRenderAttachment を使用してレンダーターゲットを変更します。UnsafePass API を使用して、SetRenderFunc メソッド内で SetRenderTarget API を使用できるようにします。詳細と例については、レンダーグラフのレンダーパスに互換性モード API を使用するを参照してください。これらのメソッドを使用して、最初にテクスチャから作成した一時的なテクスチャにコピーし、それからコピーして戻すことで、同じテクスチャに対して読み取りと書き込みを行うことができます。
異なるプロパティを持つ複数のテクスチャ間で blit (転送) を使用すると、URP は blit を 1 つのネイティブレンダーパスにマージできないため、レンダリングが遅くなる場合があります。代わりに AddUnSafePass API と SetRenderTarget() メソッドを使用してください。
以下の例を参照してください。