52 lines
1.8 KiB
C#
52 lines
1.8 KiB
C#
![]() |
using UnityEngine;
|
|||
|
using UnityEngine.Rendering;
|
|||
|
using UnityEngine.Rendering.Universal;
|
|||
|
|
|||
|
public class RenderPassFeature : ScriptableRendererFeature
|
|||
|
{
|
|||
|
public enum Target
|
|||
|
{
|
|||
|
Color,
|
|||
|
Texture
|
|||
|
}
|
|||
|
[System.Serializable]
|
|||
|
public class HLSettings
|
|||
|
{
|
|||
|
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingSkybox;
|
|||
|
public Material mMat;
|
|||
|
public Target destination = Target.Color;
|
|||
|
public int blitMaterialPassIndex = -1;
|
|||
|
public string textureId = "_ScreenTexture";
|
|||
|
public float contrast = 0.5f;
|
|||
|
}
|
|||
|
|
|||
|
public HLSettings settings = new HLSettings();
|
|||
|
RenderTargetHandle m_renderTargetHandle;
|
|||
|
|
|||
|
HLRenderPass m_ScriptablePass;
|
|||
|
|
|||
|
public override void Create()
|
|||
|
{
|
|||
|
int passIndex = settings.mMat != null ? settings.mMat.passCount - 1 : 1;
|
|||
|
settings.blitMaterialPassIndex = Mathf.Clamp(settings.blitMaterialPassIndex, -1, passIndex);
|
|||
|
m_ScriptablePass = new HLRenderPass("HLPostEffectRender", settings.renderPassEvent, settings.mMat, settings.contrast);
|
|||
|
m_renderTargetHandle.Init(settings.textureId);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
|
|||
|
{
|
|||
|
var src = renderer.cameraColorTarget;
|
|||
|
var dest = (settings.destination == Target.Color) ? RenderTargetHandle.CameraTarget : m_renderTargetHandle;
|
|||
|
if (settings.mMat == null)
|
|||
|
{
|
|||
|
Debug.LogWarningFormat("丢失blit材质");
|
|||
|
return;
|
|||
|
}
|
|||
|
m_ScriptablePass.Setup(src,dest);
|
|||
|
renderer.EnqueuePass(m_ScriptablePass);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|