版本:Unity 6 (6000.0)
语言:英语
URP 中渲染图系统中的纹理
将纹理导入 URP 的渲染图系统

在 URP 的渲染图系统中创建纹理

要创建渲染图系统中的纹理,请使用 `UniversalRenderer.CreateRenderGraphTexture` API。

当通用 渲染管线一系列操作,将场景的内容渲染到屏幕上。Unity 允许您从预建的渲染管线中选择,或编写自己的渲染管线。 更多信息
参见 术语表
(URP) 优化渲染图时,如果最终帧没有使用纹理,则可能不会创建纹理,以减少渲染通道使用的内存和带宽。有关 URP 如何优化渲染图的更多信息,请参阅 渲染图系统简介

有关在多个帧或多个 相机一个组件,用于创建场景中特定视点的图像。输出要么绘制到屏幕上,要么作为纹理捕获。 更多信息
参见 术语表
上使用纹理的更多信息,例如您在项目中导入的纹理资源,请参阅 将纹理导入渲染图系统

创建纹理

要创建纹理,请在 `ScriptableRenderPass` 类的 `RecordRenderGraph` 方法中执行以下步骤。

  1. 创建具有所需纹理属性的 `RenderTextureDescriptor` 对象。
  2. 使用 `UniversalRenderer.CreateRenderGraphTexture` 方法创建纹理并返回纹理句柄。

例如,以下代码创建了一个与屏幕大小相同的纹理。

RenderTextureDescriptor textureProperties = new RenderTextureDescriptor(Screen.width, Screen.height, RenderTextureFormat.Default, 0);
TextureHandle textureHandle = UniversalRenderer.CreateRenderGraphTexture(renderGraph, textureProperties, "My texture", false);

然后,您可以在同一个自定义渲染通道中 使用纹理

只有当前相机才能访问该纹理。要从其他地方访问纹理,例如从其他相机或自定义渲染代码访问纹理,请 导入纹理

渲染图系统管理使用 `CreateRenderGraphTexture` 创建的纹理的生命周期,因此您无需在使用完纹理后手动释放其使用的内存。

示例

以下可脚本化的渲染器功能包含一个创建纹理并将其清除为黄色的示例渲染通道。有关将渲染通道添加到渲染管线的更多信息,请参阅 使用可脚本化的渲染器功能注入通道

使用 帧调试器 检查渲染通道添加的纹理。

using UnityEngine;
using UnityEngine.Rendering.Universal;
using UnityEngine.Rendering.RenderGraphModule;
using UnityEngine.Rendering;

public class CreateYellowTextureFeature : ScriptableRendererFeature
{
    CreateYellowTexture customPass;

    public override void Create()
    {
        customPass = new CreateYellowTexture();
        customPass.renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
    }

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
        renderer.EnqueuePass(customPass);
    }

    class CreateYellowTexture : ScriptableRenderPass
    {
        class PassData
        {
            internal TextureHandle cameraColorTexture;
        }

        public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameContext)
        {
            using (var builder = renderGraph.AddRasterRenderPass<PassData>("Create yellow texture", out var passData))
            {
                // Create texture properties that match the screen size
                RenderTextureDescriptor textureProperties = new RenderTextureDescriptor(Screen.width, Screen.height, RenderTextureFormat.Default, 0);

                // Create a temporary texture
                TextureHandle texture = UniversalRenderer.CreateRenderGraphTexture(renderGraph, textureProperties, "My texture", false);

                // Set the texture as the render target
                builder.SetRenderAttachment(texture, 0, AccessFlags.Write);
    
                builder.AllowPassCulling(false);

                builder.SetRenderFunc((PassData data, RasterGraphContext context) => ExecutePass(data, context));
            }
        }

        static void ExecutePass(PassData data, RasterGraphContext context)
        {          
            // Clear the render target to yellow
            context.cmd.ClearRenderTarget(true, true, Color.yellow);            
        }
    }

}

有关另一个示例,请参阅 通用渲染管线 (URP) 包示例 中名为 OutputTexture 的示例。

其他资源

URP 中渲染图系统中的纹理
将纹理导入 URP 的渲染图系统