Skip to content

Instantly share code, notes, and snippets.

@CustomPhase
Last active October 2, 2023 19:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CustomPhase/7eaf4f4f16168155ef07cbb4962ebbe2 to your computer and use it in GitHub Desktop.
Save CustomPhase/7eaf4f4f16168155ef07cbb4962ebbe2 to your computer and use it in GitHub Desktop.
How to get GBuffers in a custom render pass when using deferred path
class YourRenderPass : ScriptableRenderPass
{
private FieldInfo _deferredLightsGetter = typeof(UniversalRenderer).GetField("m_DeferredLights", BindingFlags.NonPublic | BindingFlags.Instance);
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
var renderer = renderingData.cameraData.renderer as UniversalRenderer;
object deferredLights = _deferredLightsGetter.GetValue(renderer);
FieldInfo gBufferRTsGetter = deferredLights.GetType().GetField("GbufferRTHandles", BindingFlags.NonPublic | BindingFlags.Instance);
var gBuffers = gBufferRTsGetter.GetValue(deferredLights) as RTHandle[];
...
//Do whatever you need with the gBuffers array, for example:
//Copy albedo buffer
cmd.Blit(gBuffers[0], _myAlbedoCopyRT);
//Blit into normals buffer
cmd.Blit(_myCoolNormals, gBuffers[2]);
//etc.
...
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment