Advertisement
_Dunno_

Render Objects Pass

Feb 9th, 2025
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.56 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using UnityEngine.Rendering;
  4. using UnityEngine.Rendering.RenderGraphModule;
  5. using UnityEngine.Rendering.Universal;
  6.  
  7. public class RenderToTexturePass : BaseRenderPass
  8. {
  9.     private readonly RenderObjectsSettings _settings;
  10.     private readonly FilteringSettings _filteringSettings;
  11.  
  12.     private readonly List<ShaderTagId> _shaderTagIdList = new()
  13.     {
  14.         new ShaderTagId("SRPDefaultUnlit"),
  15.         new ShaderTagId("UniversalForward"),
  16.         new ShaderTagId("UniversalForwardOnly")
  17.     };
  18.  
  19.     private class PassData
  20.     {
  21.         public RendererListHandle RendererList;
  22.     }
  23.  
  24.     public RenderToTexturePass(RenderObjectsSettings settings, RenderPassEvent passEvent) : base(passEvent, "Render Objects")
  25.     {
  26.         _filteringSettings = new FilteringSettings(RenderQueueRange.opaque, settings.LayerMask);
  27.         _settings = settings;
  28.     }
  29.  
  30.     public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData)
  31.     {
  32.         UniversalRenderingData renderingData = frameData.Get<UniversalRenderingData>();
  33.         UniversalResourceData resourceData = frameData.Get<UniversalResourceData>();
  34.         UniversalCameraData cameraData = frameData.Get<UniversalCameraData>();
  35.         UniversalLightData lightData = frameData.Get<UniversalLightData>();
  36.         TransferTexture renderResult = frameData.Create<TransferTexture>();
  37.         using IRasterRenderGraphBuilder builder = renderGraph.AddRasterRenderPass(passName, out PassData passData, profilingSampler);
  38.  
  39.         TextureHandle destination = CreateDestinationTexture(renderGraph, resourceData.activeColorTexture);
  40.         passData.RendererList = CreateRendererList(renderingData, lightData, cameraData, renderGraph);
  41.         renderResult.Value = destination;
  42.  
  43.         builder.SetRenderAttachment(destination, 0);
  44.         builder.SetRenderAttachmentDepth(resourceData.activeDepthTexture);
  45.         builder.UseRendererList(passData.RendererList);
  46.         builder.AllowPassCulling(false);
  47.         builder.AllowGlobalStateModification(true);
  48.         builder.SetRenderFunc((PassData data, RasterGraphContext context) =>
  49.         {
  50.             context.cmd.SetGlobalVector("_GlobalOffset", _settings.Offset);
  51.             context.cmd.DrawRendererList(data.RendererList);
  52.             context.cmd.SetGlobalVector("_GlobalOffset", Vector4.zero);
  53.         });
  54.     }
  55.  
  56.     private TextureHandle CreateDestinationTexture(RenderGraph renderGraph, TextureHandle source)
  57.     {
  58.         TextureDesc destinationDescriptor = renderGraph.GetTextureDesc(source);
  59.         destinationDescriptor.clearBuffer = false;
  60.         destinationDescriptor.name = $"CameraColor {PassName}";
  61.         destinationDescriptor.filterMode = FilterMode.Bilinear;
  62.  
  63.         return renderGraph.CreateTexture(in destinationDescriptor);
  64.     }
  65.  
  66.     private RendererListHandle CreateRendererList(UniversalRenderingData renderingData, UniversalLightData lightData, UniversalCameraData cameraData, RenderGraph renderGraph)
  67.     {
  68.         SortingCriteria sortingCriteria = cameraData.defaultOpaqueSortFlags;
  69.         DrawingSettings drawingSettings = RenderingUtils.CreateDrawingSettings(_shaderTagIdList, renderingData, cameraData, lightData, sortingCriteria);
  70.  
  71.         if (_settings.Material)
  72.         {
  73.             drawingSettings.overrideMaterial = _settings.Material;
  74.         }
  75.  
  76.         return renderGraph.CreateRendererList(
  77.         new RendererListParams(renderingData.cullResults, drawingSettings, _filteringSettings)
  78.         {
  79.             isPassTagName = false
  80.         });
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement