版本:Unity 6 (6000.0)
语言:英语
在 URP 中的渲染通道中运行计算着色器
分析 URP 中的渲染图

在 URP 中为计算着色器创建输入数据

当您在渲染通道中运行计算着色器时,您可以分配一个缓冲区来为计算着色器在 GPU 上运行的程序。 更多信息
参见 术语表
提供输入数据。

按照以下步骤操作

  1. 创建图形缓冲区,然后在通道数据中添加对它的句柄。例如

    // Declare an input buffer
    public GraphicsBuffer inputBuffer;
    
    // Add a handle to the input buffer in your pass data
    class PassData
    {
        ...
        public BufferHandle input;
    }
    
    // Create the buffer in the render pass constructor
    public ComputePass(ComputeShader computeShader)
    {
        // Create the input buffer as a structured buffer
        // Create the buffer with a length of 5 integers, so you can input 5 values.
        inputBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 5, sizeof(int));
    }
    
  2. 设置缓冲区中的数据。例如

    var inputValues = new List<int> { 1, 2, 3, 4, 5 };
    inputBuffer.SetData(inputValues);
    
  3. 使用ImportBuffer渲染图 API 将缓冲区转换为渲染图系统可以使用的句柄,然后设置通道数据中的BufferHandle字段。例如

    BufferHandle inputHandleRG = renderGraph.ImportBuffer(inputBuffer);
    passData.input = inputHandleRG;
    
  4. 使用UseBuffer方法将缓冲区设置为渲染图系统中的可读缓冲区。例如

    builder.UseBuffer(passData.input, AccessFlags.Read);
    
  5. 在您的SetRenderFunc方法中,使用SetComputeBufferParam API 将缓冲区附加到计算着色器。例如

    // The first parameter is the compute shader
    // The second parameter is the function that uses the buffer
    // The third parameter is the RWStructuredBuffer input variable to attach the buffer to
    // The fourth parameter is the handle to the input buffer
    context.cmd.SetComputeBufferParam(passData.computeShader, passData.computeShader.FindKernel("Main"), "inputData", passData.input);
    

示例

有关完整示例,请参阅通用渲染管线 (URP) 包示例中的名为Compute的示例。

其他资源

在 URP 中的渲染通道中运行计算着色器
分析 URP 中的渲染图