一些特效
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
public class PixelatePass : ScriptableRenderPass
|
||||
{
|
||||
private Material m_PixelateMaterial;
|
||||
|
||||
// 构造函数,接收材质
|
||||
public PixelatePass(Material pixelateMaterial)
|
||||
{
|
||||
this.m_PixelateMaterial = pixelateMaterial;
|
||||
}
|
||||
|
||||
// 这个方法在每一帧渲染该Pass之前被调用
|
||||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||||
{
|
||||
// 1. 安全检查
|
||||
if (m_PixelateMaterial == null)
|
||||
{
|
||||
Debug.LogError("Pixelate Material not assigned to the pass.");
|
||||
return;
|
||||
}
|
||||
// 如果渲染的不是游戏主相机(例如Scene视图的相机),则直接返回,避免在编辑器里也显示效果
|
||||
if (renderingData.cameraData.cameraType != CameraType.Game)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 获取命令缓冲区
|
||||
CommandBuffer cmd = CommandBufferPool.Get("PixelatePass");
|
||||
|
||||
// 3. 【核心修正】在Execute方法内部,安全地获取当前摄像机的渲染目标
|
||||
// URP 12+ 使用 renderingData.cameraData.renderer.cameraColorTargetHandle
|
||||
RTHandle source = renderingData.cameraData.renderer.cameraColorTargetHandle;
|
||||
|
||||
// 4. 执行Blit操作
|
||||
// 将源纹理(source)通过我们的材质处理后,再写回源纹理(source)
|
||||
Blit(cmd, source, source, m_PixelateMaterial, 0);
|
||||
|
||||
// 5. 执行并释放命令缓冲区
|
||||
context.ExecuteCommandBuffer(cmd);
|
||||
CommandBufferPool.Release(cmd);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user