RenderFeature绘制指定物体

https://www.cnblogs.com/hont/p/14221019.html

在这里插入图片描述

创建RenderFeature

在这里插入图片描述

绘制指定物体

public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
    
    
    CommandBuffer cmd = CommandBufferPool.Get("FogOfWar");

    // Draw tag "FogOfWar" object
    var desc = renderingData.cameraData.cameraTargetDescriptor;
    int tmpRt = Shader.PropertyToID("_FogOfWarMaskTexture");
    desc.height = desc.height >> m_DownSample;
    desc.width = desc.width >> m_DownSample;
    cmd.GetTemporaryRT(tmpRt, desc);
    cmd.SetRenderTarget(tmpRt);
    // Set camera whether clear mode
    cmd.ClearRenderTarget(true, !m_IsDragShadow, Color.clear);
    context.ExecuteCommandBuffer(cmd);
    cmd.Clear();

    var drawSettings =
        CreateDrawingSettings(m_ShaderTagId, ref renderingData, SortingCriteria.CommonOpaque);
    context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref m_FilteringSettings);

    // Box Blur
    if (this.m_Mat != null)
    {
    
    
         this.m_Mat.SetInt("_Width", this.m_Width);
         this.m_Mat.SetFloat("_Scale", this.m_Scale);
         cmd.Blit(m_TempTextureHandle.Identifier(), destination, this.m_Mat);
         context.ExecuteCommandBuffer(cmd);
         cmd.Clear();
     }

    CommandBufferPool.Release(cmd);
}

需要指定rendertexture

public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
{
    
    
    if (!m_FogOfWarMaskTextureRT)
    {
    
    
        // 粒子colorRT 做降采样
        m_FogOfWarMaskTextureRT = new RenderTexture(
            cameraTextureDescriptor.width >> m_DownSample,
            cameraTextureDescriptor.height >> m_DownSample, 0);
        m_FogOfWarMaskTextureRT.Create();
        m_FogOfWarMaskTextureRT.name = "_FogOfWarMaskTexture";
    }

    // 绘制目标
    ConfigureTarget(m_FogOfWarMaskTextureRT);
    //绘制外内容设置为灰,我们为了过滤精度问题将a通道设置为0在pass中使用
    // ConfigureClear(ClearFlag.All, new Color(0f,0f,0f,1f));
}

注意shader内的采样方式

sampler_linear_repeat_FogOfWarMaskTexture
这种才会线性采样,否则的话是point采样

猜你喜欢

转载自blog.csdn.net/A13155283231/article/details/121694497
今日推荐