48 lines
2.2 KiB
C#
48 lines
2.2 KiB
C#
using Echovoid.Runtime.Behavior.Rendering;
|
||
using UnityEngine;
|
||
using UnityEngine.Rendering;
|
||
using UnityEngine.Rendering.Universal;
|
||
|
||
namespace SLSFramework.Rendering.PostProcessing
|
||
{
|
||
[System.Serializable, VolumeComponentMenu("SLS/Postprocessing/Sharpen")]
|
||
public class Sharpen : ScriptablePostProcessorVolume
|
||
{
|
||
// 放在所有后处理之后,对最终画面进行锐化
|
||
public override CustomPostProcessInjectionPoint InjectionPoint => CustomPostProcessInjectionPoint.AfterPostProcess;
|
||
// 排序靠后,确保是最后几步操作之一
|
||
public override int OrderInInjectionPoint => 10;
|
||
|
||
[Header("General Settings")]
|
||
[Tooltip("锐化强度。值越大画面越锋利。建议范围 0.5 - 2.0。过大会导致失真。")]
|
||
public ClampedFloatParameter sharpness = new(0f, 0f, 5f);
|
||
|
||
[Header("Optimizations (Visual Quality)")]
|
||
[Tooltip("对比度阈值(降噪)。\n只有当像素差异大于此值时才锐化。\n增加此值可避免平坦区域(如天空、皮肤)出现噪点。\n建议值:0.01 - 0.05。")]
|
||
public ClampedFloatParameter threshold = new(0.01f, 0f, 0.2f);
|
||
|
||
[Tooltip("最大亮度钳制(防光晕)。\n限制像素亮度的最大变化幅度,防止边缘出现刺眼的白边或黑边。\n减小此值可让锐化更自然。\n建议值:0.1 - 0.3。")]
|
||
public ClampedFloatParameter clamp = new(0.2f, 0f, 1f);
|
||
|
||
public override string GetShaderName() => "SLS/Postprocessing/Sharpen";
|
||
|
||
public override void Render(CommandBuffer cmd, ref RenderingData renderingData, RTHandle source, RTHandle destination)
|
||
{
|
||
if (material == null) return;
|
||
|
||
Vector4 paramsVec = new Vector4(
|
||
sharpness.value,
|
||
threshold.value,
|
||
clamp.value,
|
||
0 // unused
|
||
);
|
||
|
||
material.SetVector(InternalShaderHelpers.ID._SharpnessParams, paramsVec);
|
||
|
||
Blitter.BlitCameraTexture(cmd, source, destination, material, 0);
|
||
}
|
||
|
||
// 只有强度大于 0 时才激活
|
||
public override bool IsActive() => sharpness.value > 0f;
|
||
}
|
||
} |