Files
ichni_Creator_Studio/Assets/ThemeBundles/DepartureToMultiverse/Shders/PixelateFeature.cs

47 lines
1.5 KiB
C#
Raw Normal View History

2025-06-28 03:01:03 -04:00
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class PixelateFeature : ScriptableRendererFeature
{
[System.Serializable]
public class Settings
{
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
[Tooltip("用于像素化的材质")]
public Material pixelateMaterial = null;
}
public Settings settings = new Settings();
private PixelatePass m_PixelatePass;
// 当Feature被创建或Inspector中的值被改变时调用
public override void Create()
{
// 检查材质是否存在
if (settings.pixelateMaterial != null)
{
m_PixelatePass = new PixelatePass(settings.pixelateMaterial);
// 将Inspector中设置的事件赋值给Pass
m_PixelatePass.renderPassEvent = settings.renderPassEvent;
}
else
{
// 如果材质为空则不创建Pass避免后续报错
m_PixelatePass = null;
}
}
// 【核心修正】这个方法现在非常干净只负责将创建好的Pass入队
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
if (m_PixelatePass == null)
{
// 如果Pass没有被成功创建因为没材质就直接返回
return;
}
// 将我们的Pass添加到渲染队列中URP会在正确的时间执行它
renderer.EnqueuePass(m_PixelatePass);
}
}