using System; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; namespace Ilumisoft.Rendering { [Serializable] [DisplayInfo(name = "Outline")] [VolumeComponentMenu("Post-processing/Outline")] [VolumeRequiresRendererFeatures(typeof(OutlineRendererFeature))] public class OutlineVolumeComponent : VolumeComponent { [Header("Outline Settings")] [Tooltip("The width of the outline in pixels. A value of 0 will disable outlines.")] public ClampedIntParameter thickness = new ClampedIntParameter(1, 0, 4); [Tooltip("The color used for the outline.")] public ColorParameter outlineColor = new ColorParameter(Color.black); [Header("Edge Detection Sensitivity")] [Tooltip("Depth sensitivity for edge detection. Defines the lower and upper threshold used in the smoothstep function. Smaller values make the effect more sensitive to depth differences.")] public FloatRangeParameter depthSmoothstep = new FloatRangeParameter(new Vector2(0.1f, 0.2f), 0, 1); [Tooltip("Normal sensitivity for edge detection. Defines the lower and upper threshold used in the smoothstep function. Smaller values make the effect more sensitive to surface angle changes.")] public FloatRangeParameter normalSmoothstep = new FloatRangeParameter(new Vector2(0.2f, 0.7f), 0, 1); [Header("Background Fill (Optional)")] [Tooltip("Enable fill of the background color.")] public BoolParameter backgroundFill = new BoolParameter(false); [Tooltip("Optional background color fill. Only visible if 'Background Fill' is enabled.")] public ColorParameter backgroundColor = new ColorParameter(Color.white); [Tooltip("Controls how much detail from the original images luminance is preserved in the background fill. A value of 0 results in a flat fill, 1 keeps full luminance detail.")] public ClampedFloatParameter luminanceDetail = new ClampedFloatParameter(1, 0, 1); [Tooltip("Applies a contrast adjustment to the luminance before blending with the fill color. Higher values increase the brightness difference between dark and light areas.")] public MinFloatParameter luminanceContrast = new MinFloatParameter(1, 0); [Header("Distance-Based Fading")] [Tooltip("Enable distance-based fading of the outline effect.")] public BoolParameter distanceFade = new BoolParameter(false); [Tooltip("The distance from the camera (in metres) at which outline fading begins. Only used if Distance Fade is enabled.")] public MinFloatParameter fadeStart = new MinFloatParameter(0, 0); [Tooltip("How far from the fade start point (in metres) the outlines will fully fade out. Only used if Distance Fade is enabled.")] public MinFloatParameter fadeDistance = new MinFloatParameter(100, 0); protected override void OnEnable() { base.OnEnable(); } } }