包含此页的版本:
不含此页的版本:
可以使用渲染图系统 API 将纹理设置为自定义渲染通道的输入或输出,以便可以读取或写入纹理。
不能在渲染通道中同时读取和写入同一纹理。有关更多信息,请参阅在渲染通道期间更改渲染目标。
要将纹理设置为自定义渲染通道的输入,请执行以下步骤:
在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方法,您现在可以使用TextureHandle对象作为 API 的输入,例如Blitter.BlitTexture.
要将纹理设置为命令的输出,例如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方法,您现在可以使用 API 写入纹理,例如Blitter.BlitTexture.
你不需要将纹理添加到通道数据中。渲染图表系统在执行渲染通道之前会自动为您设置纹理。
如果需要将对象绘制到渲染目标,请参阅在渲染通道中绘制对象以获取更多信息。
你无法更改URP在渲染图系统渲染通道期间写入的纹理。
您可以改为执行以下任一作:
builder.SetRenderAttachment在第二个渲染过程中更改渲染目标。UnsafePassAPI,以便您可以使用SetRenderTargetAPI 中的SetRenderFunc方法。有关更多信息和示例,请参阅在渲染图渲染通道中使用兼容模式 API。您可以使用这些方法读取和写入同一纹理,方法是先从纹理复制到您创建的临时纹理,然后复制回来。
如果你blit“位块传输”的简写术语。blit作是将数据块从内存中的一个位置传输到另一个位置的过程。
请参阅术语表在具有不同属性的多个纹理之间,渲染速度可能会很慢,因为 URP 无法将 BLIT 合并到单个原生渲染通道中。使用AddUnSafePassAPI 和SetRenderTarget()方法。
请参阅以下内容: