Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Rendering;
- using UnityEngine.Rendering.RenderGraphModule;
- using UnityEngine.Rendering.Universal;
- public class RenderToTexturePass : BaseRenderPass
- {
- private readonly RenderObjectsSettings _settings;
- private readonly FilteringSettings _filteringSettings;
- private readonly List<ShaderTagId> _shaderTagIdList = new()
- {
- new ShaderTagId("SRPDefaultUnlit"),
- new ShaderTagId("UniversalForward"),
- new ShaderTagId("UniversalForwardOnly")
- };
- private class PassData
- {
- public RendererListHandle RendererList;
- }
- public RenderToTexturePass(RenderObjectsSettings settings, RenderPassEvent passEvent) : base(passEvent, "Render Objects")
- {
- _filteringSettings = new FilteringSettings(RenderQueueRange.opaque, settings.LayerMask);
- _settings = settings;
- }
- public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData)
- {
- UniversalRenderingData renderingData = frameData.Get<UniversalRenderingData>();
- UniversalResourceData resourceData = frameData.Get<UniversalResourceData>();
- UniversalCameraData cameraData = frameData.Get<UniversalCameraData>();
- UniversalLightData lightData = frameData.Get<UniversalLightData>();
- TransferTexture renderResult = frameData.Create<TransferTexture>();
- using IRasterRenderGraphBuilder builder = renderGraph.AddRasterRenderPass(passName, out PassData passData, profilingSampler);
- TextureHandle destination = CreateDestinationTexture(renderGraph, resourceData.activeColorTexture);
- passData.RendererList = CreateRendererList(renderingData, lightData, cameraData, renderGraph);
- renderResult.Value = destination;
- builder.SetRenderAttachment(destination, 0);
- builder.SetRenderAttachmentDepth(resourceData.activeDepthTexture);
- builder.UseRendererList(passData.RendererList);
- builder.AllowPassCulling(false);
- builder.AllowGlobalStateModification(true);
- builder.SetRenderFunc((PassData data, RasterGraphContext context) =>
- {
- context.cmd.SetGlobalVector("_GlobalOffset", _settings.Offset);
- context.cmd.DrawRendererList(data.RendererList);
- context.cmd.SetGlobalVector("_GlobalOffset", Vector4.zero);
- });
- }
- private TextureHandle CreateDestinationTexture(RenderGraph renderGraph, TextureHandle source)
- {
- TextureDesc destinationDescriptor = renderGraph.GetTextureDesc(source);
- destinationDescriptor.clearBuffer = false;
- destinationDescriptor.name = $"CameraColor {PassName}";
- destinationDescriptor.filterMode = FilterMode.Bilinear;
- return renderGraph.CreateTexture(in destinationDescriptor);
- }
- private RendererListHandle CreateRendererList(UniversalRenderingData renderingData, UniversalLightData lightData, UniversalCameraData cameraData, RenderGraph renderGraph)
- {
- SortingCriteria sortingCriteria = cameraData.defaultOpaqueSortFlags;
- DrawingSettings drawingSettings = RenderingUtils.CreateDrawingSettings(_shaderTagIdList, renderingData, cameraData, lightData, sortingCriteria);
- if (_settings.Material)
- {
- drawingSettings.overrideMaterial = _settings.Material;
- }
- return renderGraph.CreateRendererList(
- new RendererListParams(renderingData.cullResults, drawingSettings, _filteringSettings)
- {
- isPassTagName = false
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement