Drawing Shapes to Render Texture is broken in URP

Avatar
  • updated

Heya!I thought I'd try drawing some animated chibi anime expressions, and then render them to a texture mapped to a face mesh, like so:


Image 918

(static png used here)

What I'm doing is essentially this setup from the Knowledge Base, but in Unity 6.3 with URP.

The basic camera + render texture setup works fine, but as soon as any Shapes element in the scene renders, the URP render pipeline breaks down. On calling camera.Render() I get the following errors:

Render Graph Execution error
UnityEngine.Camera:Render ()

and:

NullReferenceException: Object reference not set to an instance of an object
UnityEngine.Rendering.RenderGraphModule.RenderGraphResourceRegistry.GetRenderTargetInfo (UnityEngine.Rendering.RenderGraphModule.ResourceHandle& res, UnityEngine.Rendering.RenderGraphModule.RenderTargetInfo& outInfo) (at ./Library/PackageCache/com.unity.render-pipelines.core@40aabbb0fdcf/Runtime/RenderGraph/RenderGraphResourceRegistry.cs:686)
UnityEngine.Rendering.RenderGraphModule.RenderGraphBuilders.CheckUseFragment (UnityEngine.Rendering.RenderGraphModule.TextureHandle& tex, System.Boolean isDepth) (at ./Library/PackageCache/com.unity.render-pipelines.core@40aabbb0fdcf/Runtime/RenderGraph/RenderGraphBuilders.cs:389)
UnityEngine.Rendering.RenderGraphModule.RenderGraphBuilders.SetRenderAttachment (UnityEngine.Rendering.RenderGraphModule.TextureHandle tex, System.Int32 index, UnityEngine.Rendering.RenderGraphModule.AccessFlags flags, System.Int32 mipLevel, System.Int32 depthSlice) (at ./Library/PackageCache/com.unity.render-pipelines.core@40aabbb0fdcf/Runtime/RenderGraph/RenderGraphBuilders.cs:472)
UnityEngine.Rendering.RenderGraphModule.IRenderAttachmentRenderGraphBuilder.SetRenderAttachment (UnityEngine.Rendering.RenderGraphModule.TextureHandle tex, System.Int32 index, UnityEngine.Rendering.RenderGraphModule.AccessFlags flags) (at ./Library/PackageCache/com.unity.render-pipelines.core@40aabbb0fdcf/Runtime/RenderGraph/IRenderGraphBuilder.cs:165)
Shapes.ShapesRenderPass.RecordRenderGraph (UnityEngine.Rendering.RenderGraphModule.RenderGraph renderGraph, UnityEngine.Rendering.ContextContainer frameData) (at Assets/Shapes/Scripts/Runtime/Immediate Mode/ShapesRenderPass.cs:40)
UnityEngine.Rendering.Universal.ScriptableRenderer.RecordCustomRenderGraphPassesInEventRange (UnityEngine.Rendering.RenderGraphModule.RenderGraph renderGraph, UnityEngine.Rendering.Universal.RenderPassEvent eventStart, UnityEngine.Rendering.Universal.RenderPassEvent eventEnd) (at ./Library/PackageCache/com.unity.render-pipelines.universal@d10049dfa479/Runtime/ScriptableRenderer.cs:1306)
UnityEngine.Rendering.Universal.ScriptableRenderer.RecordCustomRenderGraphPasses (UnityEngine.Rendering.RenderGraphModule.RenderGraph renderGraph, UnityEngine.Rendering.Universal.RenderPassEvent startInjectionPoint, UnityEngine.Rendering.Universal.RenderPassEvent endInjectionPoint) (at ./Library/PackageCache/com.unity.render-pipelines.universal@d10049dfa479/Runtime/ScriptableRenderer.cs:1325)
UnityEngine.Rendering.Universal.ScriptableRenderer.RecordCustomRenderGraphPasses (UnityEngine.Rendering.RenderGraphModule.RenderGraph renderGraph, UnityEngine.Rendering.Universal.RenderPassEvent injectionPoint) (at ./Library/PackageCache/com.unity.render-pipelines.universal@d10049dfa479/Runtime/ScriptableRenderer.cs:1330)
UnityEngine.Rendering.Universal.UniversalRenderer.OnMainRendering (UnityEngine.Rendering.RenderGraphModule.RenderGraph renderGraph, UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Rendering.Universal.UniversalRenderer+RenderPassInputSummary& renderPassInputs, System.Boolean requiresPrepass, System.Boolean requireDepthTexture) (at ./Library/PackageCache/com.unity.render-pipelines.universal@d10049dfa479/Runtime/UniversalRendererRenderGraph.cs:1260)
UnityEngine.Rendering.Universal.UniversalRenderer.OnRecordRenderGraph (UnityEngine.Rendering.RenderGraphModule.RenderGraph renderGraph, UnityEngine.Rendering.ScriptableRenderContext context) (at ./Library/PackageCache/com.unity.render-pipelines.universal@d10049dfa479/Runtime/UniversalRendererRenderGraph.cs:651)
UnityEngine.Rendering.Universal.ScriptableRenderer.RecordRenderGraph (UnityEngine.Rendering.RenderGraphModule.RenderGraph renderGraph, UnityEngine.Rendering.ScriptableRenderContext context) (at ./Library/PackageCache/com.unity.render-pipelines.universal@d10049dfa479/Runtime/ScriptableRenderer.cs:1259)
UnityEngine.Rendering.Universal.UniversalRenderPipeline.RecordAndExecuteRenderGraph (UnityEngine.Rendering.RenderGraphModule.RenderGraph renderGraph, UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Rendering.Universal.ScriptableRenderer renderer, UnityEngine.Rendering.CommandBuffer cmd, UnityEngine.Camera camera, UnityEngine.Rendering.RenderGraphModule.RenderTextureUVOriginStrategy uvOriginStrategy) (at ./Library/PackageCache/com.unity.render-pipelines.universal@d10049dfa479/Runtime/UniversalRenderPipelineRenderGraph.cs:23)
UnityEngine.Camera:Render()
SlimeFaceRenderer:Awake() (at Assets/Scripts/SlimeFaceRenderer.cs:83)

I can use a different approach for now, but I'm wondering if this trick is still meant to be supported? It'd be really nice to animated the facial features using Shapes. 😄

Reporting a bug? please specify Unity version:
6000.3.4f1
Reporting a bug? please specify Shapes version:
4.5.0
Reporting a bug? please specify Render Pipeline:
URP