Files
Test/Assets/ColbyO/VNTG/Scripts/CRT/CRTSettings.cs
T
2026-11-01 23:39:55 +02:00

186 lines
12 KiB
C#

using System.Security.Cryptography;
using UnityEngine;
using UnityEngine.Rendering;
//-----------------------------------------------------------------------
// Author: Colby-O
// File: CRTSettings.cs
//-----------------------------------------------------------------------
namespace ColbyO.VNTG.CRT
{
[System.Serializable, VolumeComponentMenu("VNTG/CRT Settings")]
public class CRTSettings : VolumeComponent, IPostProcessComponent
{
// Settings
public BoolParameter Enabled = new BoolParameter(true, overrideState: true);
public BoolParameter ShowInSceneView = new BoolParameter(false, overrideState: true);
// Screen
public BoolParameter EnableScreenSettings = new BoolParameter(true, overrideState: true);
public Vector2Parameter ScreenResolution = new Vector2Parameter(new Vector2(640f, 480f), overrideState: true);
public BoolParameter UseMaxFPS = new BoolParameter(false, overrideState: true);
public ClampedIntParameter RefreshRate = new ClampedIntParameter(50, 0, 360, overrideState: true);
public ClampedFloatParameter DecayRate = new ClampedFloatParameter(0.9f, 0f, 1f, overrideState: true);
public BoolParameter EnableInterlacedRendering = new BoolParameter(true, overrideState: true);
// Screen Shape
public BoolParameter EnableScreenBend = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter ScreenBend = new ClampedFloatParameter(4f, 0f, 100f, overrideState: true);
// Vignette
public BoolParameter EnableVignette = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter ScreenRoundness = new ClampedFloatParameter(1f, 0f, 1f, overrideState: true);
public ClampedFloatParameter VignetteOpacity = new ClampedFloatParameter(1f, 0f, 1f, overrideState: true);
// Scanlines
public BoolParameter EnableScanlines = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter ScanLineVerticalOpacity = new ClampedFloatParameter(0f, 0f, 1f, overrideState: true);
public ClampedFloatParameter ScanLineHorizontalOpacity = new ClampedFloatParameter(1f, 0f, 1f, overrideState: true);
public ClampedFloatParameter ScanLineVerticalSpeed = new ClampedFloatParameter(0.1f, -1f, 1f, overrideState: true);
public ClampedFloatParameter ScanLineHorizontalSpeed = new ClampedFloatParameter(-0.2f, -1f, 1f, overrideState: true);
public ClampedFloatParameter ScanLineStrength = new ClampedFloatParameter(0.2f, 0f, 1f, overrideState: true);
// Noise
public BoolParameter EnableNoise = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter NoiseScale = new ClampedFloatParameter(0.9f, 0f, 1f, overrideState: true);
public ClampedFloatParameter NoiseRBGOffsetX = new ClampedFloatParameter(0.4f, 0f, 1f, overrideState: true);
public ClampedFloatParameter NoiseRBGOffsetY = new ClampedFloatParameter(0.7f, 0f, 1f, overrideState: true);
public ClampedFloatParameter NoiseSpeed = new ClampedFloatParameter(0.1f, 0f, 1f, overrideState: true);
public ClampedFloatParameter NoiseFade = new ClampedFloatParameter(0.55f, 0f, 1f, overrideState: true);
// VHS
public BoolParameter EnableVhs = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter VhsSmear = new ClampedFloatParameter(0.95f, 0.01f, 1f, overrideState: true);
// Tracking
public BoolParameter EnableTrackerLine = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter TrackingSpeed = new ClampedFloatParameter(4f, 1f, 20f, overrideState: true);
public ClampedFloatParameter TrackingJitter = new ClampedFloatParameter(4f, 0f, 50f, overrideState: true);
// Glitch
public BoolParameter EnableGlitch = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter GlitchChance = new ClampedFloatParameter(0.2f, 0f, 1f, overrideState: true);
public ClampedFloatParameter GlitchLength = new ClampedFloatParameter(15f, 0f, 30f, overrideState: true);
// Signal Interference
public BoolParameter EnableSignalInterference = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter InterferenceFrequency = new ClampedFloatParameter(70f, 0f, 200f, overrideState: true);
public ClampedFloatParameter InterferenceAmplitude = new ClampedFloatParameter(0.25f, 0f, 1f, overrideState: true);
// Chromatic Aberration
public BoolParameter EnableChromaticAberration = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter ChromaticOffset = new ClampedFloatParameter(0f, 0f, 1f, overrideState: true);
public ClampedFloatParameter ChromaticOffsetSpeed = new ClampedFloatParameter(0.1f, 0f, 1f, overrideState: true);
// Subpixels
public BoolParameter EnableSubPixels = new BoolParameter(true, overrideState: true);
public EnumParameter<CRTSubPixelMode> SubPixelMode = new EnumParameter<CRTSubPixelMode>(CRTSubPixelMode.None, overrideState: true);
public ClampedFloatParameter SubPixelDensity = new ClampedFloatParameter(100f, 100f, 400f, overrideState: true);
// Unsharp
public BoolParameter EnableUnsharp = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter UnsharpAmount = new ClampedFloatParameter(1.5f, 0f, 5f, overrideState: true);
public ClampedFloatParameter UnsharpRadius = new ClampedFloatParameter(1f, 0f, 5f, overrideState: true);
public ClampedFloatParameter UnsharpThreshold = new ClampedFloatParameter(0.02f, 0f, 0.5f, overrideState: true);
// Color Clamp
public BoolParameter EnableClampColor = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter ClampBlack = new ClampedFloatParameter(0.05f, 0f, 1f, overrideState: true);
public ClampedFloatParameter ClampWhite = new ClampedFloatParameter(0.95f, 0f, 1f, overrideState: true);
public ColorParameter ShadowTint = new ColorParameter(new Color(0.7f, 0.6f, 0.9f), overrideState: true);
// Color Adjustment
public BoolParameter EnableColorAdjustment = new BoolParameter(true, overrideState: true);
public ClampedFloatParameter Gamma = new ClampedFloatParameter(0.374f, 0f, 1f, overrideState: true);
public ClampedFloatParameter Brightness = new ClampedFloatParameter(0.5f, 0f, 1f, overrideState: true);
public ClampedFloatParameter Contrast = new ClampedFloatParameter(0.5f, 0f, 1f, overrideState: true);
public ClampedFloatParameter Saturation = new ClampedFloatParameter(0.5f, 0f, 1f, overrideState: true);
public ClampedFloatParameter Hue = new ClampedFloatParameter(0f, 0f, 1f, overrideState: true);
public ClampedFloatParameter RedShift = new ClampedFloatParameter(0f, 0f, 1f, overrideState: true);
public ClampedFloatParameter BlueShift = new ClampedFloatParameter(0f, 0f, 1f, overrideState: true);
public ClampedFloatParameter GreenShift = new ClampedFloatParameter(0f, 0f, 1f, overrideState: true);
public BoolParameter IsMonochrome = new BoolParameter(false, overrideState: true);
public bool IsActive() => Enabled.value;
public bool IsTileCompatible() => false;
private void OnValidate()
{
if (Enabled != null) Enabled.overrideState = true;
if (ShowInSceneView != null) ShowInSceneView.overrideState = true;
if (EnableScreenSettings != null) EnableScreenSettings.overrideState = true;
if (ScreenResolution != null) ScreenResolution.overrideState = true;
if (UseMaxFPS != null) UseMaxFPS.overrideState = true;
if (RefreshRate != null) RefreshRate.overrideState = true;
if (DecayRate != null) DecayRate.overrideState = true;
if (EnableInterlacedRendering != null) EnableInterlacedRendering.overrideState = true;
if (EnableScreenBend != null) EnableScreenBend.overrideState = true;
if (ScreenBend != null) ScreenBend.overrideState = true;
if (EnableVignette != null) EnableVignette.overrideState = true;
if (ScreenRoundness != null) ScreenRoundness.overrideState = true;
if (VignetteOpacity != null) VignetteOpacity.overrideState = true;
if (EnableScanlines != null) EnableScanlines.overrideState = true;
if (ScanLineVerticalOpacity != null) ScanLineVerticalOpacity.overrideState = true;
if (ScanLineHorizontalOpacity != null) ScanLineHorizontalOpacity.overrideState = true;
if (ScanLineVerticalSpeed != null) ScanLineVerticalSpeed.overrideState = true;
if (ScanLineHorizontalSpeed != null) ScanLineHorizontalSpeed.overrideState = true;
if (ScanLineStrength != null) ScanLineStrength.overrideState = true;
if (EnableNoise != null) EnableNoise.overrideState = true;
if (NoiseScale != null) NoiseScale.overrideState = true;
if (NoiseRBGOffsetX != null) NoiseRBGOffsetX.overrideState = true;
if (NoiseRBGOffsetY != null) NoiseRBGOffsetY.overrideState = true;
if (NoiseSpeed != null) NoiseSpeed.overrideState = true;
if (NoiseFade != null) NoiseFade.overrideState = true;
if (EnableVhs != null) EnableVhs.overrideState = true;
if (VhsSmear != null) VhsSmear.overrideState = true;
if (EnableTrackerLine != null) EnableTrackerLine.overrideState = true;
if (TrackingSpeed != null) TrackingSpeed.overrideState = true;
if (TrackingJitter != null) TrackingJitter.overrideState = true;
if (EnableGlitch != null) EnableGlitch.overrideState = true;
if (GlitchChance != null) GlitchChance.overrideState = true;
if (GlitchLength != null) GlitchLength.overrideState = true;
if (EnableSignalInterference != null) EnableSignalInterference.overrideState = true;
if (InterferenceFrequency != null) InterferenceFrequency.overrideState = true;
if (InterferenceAmplitude != null) InterferenceAmplitude.overrideState = true;
if (EnableChromaticAberration != null) EnableChromaticAberration.overrideState = true;
if (ChromaticOffset != null) ChromaticOffset.overrideState = true;
if (ChromaticOffsetSpeed != null) ChromaticOffsetSpeed.overrideState = true;
if (EnableSubPixels != null) EnableSubPixels.overrideState = true;
if (SubPixelMode != null) SubPixelMode.overrideState = true;
if (SubPixelDensity != null) SubPixelDensity.overrideState = true;
if (EnableUnsharp != null) EnableUnsharp.overrideState = true;
if (UnsharpAmount != null) UnsharpAmount.overrideState = true;
if (UnsharpRadius != null) UnsharpRadius.overrideState = true;
if (UnsharpThreshold != null) UnsharpThreshold.overrideState = true;
if (EnableClampColor != null) EnableClampColor.overrideState = true;
if (ClampBlack != null) ClampBlack.overrideState = true;
if (ClampWhite != null) ClampWhite.overrideState = true;
if (ShadowTint != null) ShadowTint.overrideState = true;
if (EnableColorAdjustment != null) EnableColorAdjustment.overrideState = true;
if (Gamma != null) Gamma.overrideState = true;
if (Brightness != null) Brightness.overrideState = true;
if (Contrast != null) Contrast.overrideState = true;
if (Saturation != null) Saturation.overrideState = true;
if (Hue != null) Hue.overrideState = true;
if (RedShift != null) RedShift.overrideState = true;
if (BlueShift != null) BlueShift.overrideState = true;
if (GreenShift != null) GreenShift.overrideState = true;
if (IsMonochrome != null) IsMonochrome.overrideState = true;
}
}
}