Unity - DrawRenderers не работает с пользовательскими рендер таргетами (SRP)
Пытаюсь создать свой пайплайн с отложенным освещением. Пока что хочу отрисовать сцену в GBuffer и скопировать одну из текстур в бек буфер. Но в результате отображается пустая текстура, с тем цветом, которым я ее очищал. Рендеринг происходит только если вместо моих рендер текстур выбрать BuiltinRenderTextureType.CameraTarget.
Пробовал только с одним рендер таргет, без и с депсом. Так же пробовал отрисовать треугольник с CommandBuffer::DrawMesh, но это почему то не работает и с CameraTarget.
Так же пробовал устанавливать вьюпорт, но судя по докам Юнити, он автоматически ставиться на весь размер рендер таргета.
Что я упускаю?
public class ExampleRenderPipeline : RenderPipeline
{
RenderTexture m_GBuffer0;
RenderTexture m_GBuffer1;
RenderTexture m_Depth;
RenderTargetIdentifier m_GBuffer0_id;
RenderTargetIdentifier m_GBuffer1_id;
RenderTargetIdentifier m_Depth_id;
int width = 0, height = 0;
protected override void Render(ScriptableRenderContext context, Camera[] cameras)
{
Camera camera = cameras[0];
if (width != camera.pixelWidth || height != camera.pixelHeight)
{
m_GBuffer0 = new RenderTexture(camera.pixelWidth, camera.pixelHeight, 1, RenderTextureFormat.Default);
m_GBuffer1 = new RenderTexture(camera.pixelWidth, camera.pixelHeight, 1, RenderTextureFormat.Default);
m_Depth = new RenderTexture(camera.pixelWidth, camera.pixelHeight, 1, RenderTextureFormat.Depth);
m_GBuffer0_id = new RenderTargetIdentifier(m_GBuffer0);
m_GBuffer1_id = new RenderTargetIdentifier(m_GBuffer1);
m_Depth_id = new RenderTargetIdentifier(m_Depth);
width = camera.pixelWidth;
height = camera.pixelHeight;
}
// Clearing render targets with different colors (for debug)
var cmd = new CommandBuffer();
// Clear the first RT with blue
cmd.SetRenderTarget(m_GBuffer0_id);
cmd.ClearRenderTarget(true, true, Color.blue);
// Clear the second RT with green
cmd.SetRenderTarget(m_GBuffer1_id);
cmd.ClearRenderTarget(true, true, Color.green);
// Select both RTs and Depth buffer, clear only depth
cmd.SetRenderTarget(new[] { m_GBuffer0_id, m_GBuffer1_id }, m_Depth);
cmd.ClearRenderTarget(true, false, Color.clear, 1);
context.ExecuteCommandBuffer(cmd);
cmd.Release();
// Drawing renderers
...
context.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings);
//Blit to back buffer
CommandBuffer cmdBlit = new CommandBuffer();
cmdBlit.Blit(m_GBuffer0_id, BuiltinRenderTextureType.CameraTarget);
context.ExecuteCommandBuffer(cmdBlit);
cmdBlit.Release();
context.Submit();
}
}