Advertisement
_Dunno_

Blur pass

Feb 9th, 2025 (edited)
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.45 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEngine.Rendering;
  3. using UnityEngine.Rendering.RenderGraphModule;
  4. using UnityEngine.Rendering.RenderGraphModule.Util;
  5. using UnityEngine.Rendering.Universal;
  6.  
  7. public class DualFilteringKawaseBlurPass : BaseRenderPass
  8. {
  9.     private readonly TextureHandle[] _textures;
  10.     private readonly BlurSettings _settings;
  11.     private readonly Vector2[] _halfPixels;
  12.  
  13.     public DualFilteringKawaseBlurPass(BlurSettings settings, RenderPassEvent injectionPoint) : base(injectionPoint, "Blur Pass")
  14.     {
  15.         _textures = new TextureHandle[settings.Passes + 1];
  16.         _halfPixels = new Vector2[settings.Passes + 1];
  17.         _settings = settings;
  18.     }
  19.  
  20.     public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData)
  21.     {
  22.         UniversalResourceData data = frameData.Get<UniversalResourceData>();
  23.         TextureHandle destination = frameData.Get<TransferTexture>().Value;
  24.  
  25.         SetupBlurTextures(renderGraph, destination);
  26.         DownSample(renderGraph);
  27.         UpSample(renderGraph);
  28.  
  29.         data.cameraColor = destination;
  30.     }
  31.  
  32.     private void SetupBlurTextures(RenderGraph renderGraph, TextureHandle source)
  33.     {
  34.         TextureDesc descriptor = renderGraph.GetTextureDesc(source);
  35.        
  36.         for (int i = 0; i < _textures.Length; ++i)
  37.         {
  38.             _halfPixels[i] = new Vector2(0.5f, 0.5f) / (new Vector2(descriptor.width, descriptor.height) * 0.5f);
  39.             _textures[i] = i == 0 ? source : renderGraph.CreateTexture(descriptor);
  40.             descriptor.width /= 2;
  41.             descriptor.height /= 2;
  42.         }
  43.     }
  44.  
  45.     private void DownSample(RenderGraph renderGraph)
  46.     {
  47.         for (int i = 0; i < _settings.Passes; ++i)
  48.         {
  49.             Blit(renderGraph, i, i + 1, $"DownSample Pass {i + 1}", 0);
  50.         }
  51.     }
  52.  
  53.     private void UpSample(RenderGraph renderGraph)
  54.     {
  55.         for (int i = _settings.Passes; i > 0; --i)
  56.         {
  57.             Blit(renderGraph, i, i - 1, $"UpSample Pass {i + 1}", 1);
  58.         }
  59.     }
  60.  
  61.     private void Blit(RenderGraph renderGraph, int sourceIndex, int destinationIndex, string name, int passIndex)
  62.     {
  63.         RenderGraphUtils.BlitMaterialParameters parameters = new(_textures[sourceIndex], _textures[destinationIndex], _settings.Material, passIndex);
  64.         Shader.SetGlobalVector("_HalfPixel", _settings.Offset * _halfPixels[sourceIndex]);
  65.         renderGraph.AddBlitPass(parameters, name);
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement