Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEngine.Rendering;
- using UnityEngine.Rendering.RenderGraphModule;
- using UnityEngine.Rendering.RenderGraphModule.Util;
- using UnityEngine.Rendering.Universal;
- public class DualFilteringKawaseBlurPass : BaseRenderPass
- {
- private readonly TextureHandle[] _textures;
- private readonly BlurSettings _settings;
- private readonly Vector2[] _halfPixels;
- public DualFilteringKawaseBlurPass(BlurSettings settings, RenderPassEvent injectionPoint) : base(injectionPoint, "Blur Pass")
- {
- _textures = new TextureHandle[settings.Passes + 1];
- _halfPixels = new Vector2[settings.Passes + 1];
- _settings = settings;
- }
- public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData)
- {
- UniversalResourceData data = frameData.Get<UniversalResourceData>();
- TextureHandle destination = frameData.Get<TransferTexture>().Value;
- SetupBlurTextures(renderGraph, destination);
- DownSample(renderGraph);
- UpSample(renderGraph);
- data.cameraColor = destination;
- }
- private void SetupBlurTextures(RenderGraph renderGraph, TextureHandle source)
- {
- TextureDesc descriptor = renderGraph.GetTextureDesc(source);
- for (int i = 0; i < _textures.Length; ++i)
- {
- _halfPixels[i] = new Vector2(0.5f, 0.5f) / (new Vector2(descriptor.width, descriptor.height) * 0.5f);
- _textures[i] = i == 0 ? source : renderGraph.CreateTexture(descriptor);
- descriptor.width /= 2;
- descriptor.height /= 2;
- }
- }
- private void DownSample(RenderGraph renderGraph)
- {
- for (int i = 0; i < _settings.Passes; ++i)
- {
- Blit(renderGraph, i, i + 1, $"DownSample Pass {i + 1}", 0);
- }
- }
- private void UpSample(RenderGraph renderGraph)
- {
- for (int i = _settings.Passes; i > 0; --i)
- {
- Blit(renderGraph, i, i - 1, $"UpSample Pass {i + 1}", 1);
- }
- }
- private void Blit(RenderGraph renderGraph, int sourceIndex, int destinationIndex, string name, int passIndex)
- {
- RenderGraphUtils.BlitMaterialParameters parameters = new(_textures[sourceIndex], _textures[destinationIndex], _settings.Material, passIndex);
- Shader.SetGlobalVector("_HalfPixel", _settings.Offset * _halfPixels[sourceIndex]);
- renderGraph.AddBlitPass(parameters, name);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement