URP后处理(二)——Renderer Feature 面板参数传入材质/Shader

最简单的后处理,没有参数,只传入一个Meterial,调节后处理的方式为调节材质

如果需要像其余Renderer Feature 一样在Feature面板调节参数,则需要传递面板参数到材质中

传入方式同Meterial一致,只是需要设置Color到材质中
完整代码:

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

public class MyVolumeFeature : ScriptableRendererFeature
{
    
    
    public Material Material; //UniversalRenderPipelineAsset_Renderer 面板,设置材质
    public Color BlendColor;
    private MyVolumeFeaturePass myPass;
   
    public override void Create()
    {
    
    
        myPass = new MyVolumeFeaturePass();
    }

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
    
    
        renderer.EnqueuePass(myPass);
        myPass.SetValue(renderer.cameraColorTarget, Material,BlendColor); //传递给Pass 处理
    }
}

public class MyVolumeFeaturePass : ScriptableRenderPass
{
    
    
    private Material Material;
    private RenderTargetIdentifier source;
    private Color color;//接受面板颜色
    public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
    {
    
    
        //执行后处理
        if (Material == null)
        {
    
    
            return;
        }
        
        //设置要混合的材质参数
        Material.SetColor("_Color",color);
        
        CommandBuffer cmd = CommandBufferPool.Get();
        //source  //源图像
        var dec = renderingData.cameraData.cameraTargetDescriptor; //目标图像
        RenderTargetHandle tempTargetHandle=new RenderTargetHandle();
        cmd.GetTemporaryRT(tempTargetHandle.id, dec);
       
        cmd.Blit(source, tempTargetHandle.Identifier(), Material);
        //核心命令CommandBuffer
        cmd.Blit(tempTargetHandle.Identifier(), source); //相当于 Graphics.Blit

        context.ExecuteCommandBuffer(cmd);
        CommandBufferPool.Release(cmd);
    }
  
    public void SetValue(RenderTargetIdentifier source, Material material, Color blendColor)
    {
    
    
        Material = material; //接受面板材质
        this.source = source;
        color = blendColor;
    }
}

此时的颜色混合 与BlendColor 一致

file

猜你喜欢

转载自blog.csdn.net/euphorias/article/details/125016720