Files
ichni_Official/Assets/Shaders/ScriptablePostProcessor/Volumes/Sharpen.cs
SoulliesOfficial 7580c4d87c 大更
2026-03-14 03:13:10 -04:00

48 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Echovoid.Runtime.Behavior.Rendering;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace SLSUtilities.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;
}
}