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采样