diff --git a/README.md b/README.md index 939468b..76c567a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ After moving from Unity to Godot in late 2019, I've felt like there was a lack o - 2D/3D support. - Custom resource type to save preset configurations, "PostProcessPreset". - Ability to dynamically modify effects through code. -- Effects: ## Effects: - ASCII (Monochromatic / Render everything as ASCII text) (for now uses only: `.:-+*=%@#`). @@ -21,11 +20,12 @@ After moving from Unity to Godot in late 2019, I've felt like there was a lack o - Grain (Animated) - Circular Waves / Speed Lines (Low Quality, still being worked on). - Fish eye effect. +- CRT/VHS ## Planned Features: - [x] Effect Presets -- [ ] More Effects like: `Color Grading`, `Dithering`, `Motion Blur`, `VHS`, etc. -- [ ] Smooth transitions between previous and future effect states (ex: 0 blur slowly rising to 100) +- [ ] More Effects like: `Color Grading`, `Dithering`, `Motion Blur`, etc. +- [x] Smooth transitions between previous and future effect states (ex: 0 blur slowly rising to 100) see Section: Changing Effects Through Code. ## Basic Use: @@ -57,19 +57,22 @@ In this example, we enable/disable ScreenShake! extends Node3D func _process(_delta): - # Change the Screen Shake Power by 0.1 each frame - $PostProcess.ScreenShakePower += 0.1 - - # if Screen Shake Power is bigger than 2, change it back to 0! - if $PostProcess.ScreenShakePower >= 2: - $PostProcess.ScreenShakePower = 0 - - - # if key T is pressed, Enable Screen Shake + # Check if Screen Shake is enabled + if $PostProcess.configuration.ScreenShake: + # Change the Screen Shake Power by 0.1 each frame + $PostProcess.configuration.ScreenShakePower += 0.1 + + # if Screen Shake Power is bigger than 2, change it back to 0! + if $PostProcess.configuration.ScreenShakePower >= 2: + $PostProcess.configuration.ScreenShakePower = 0 + + # if key T is pressed, Toggle Screen Shake if Input.is_key_pressed(KEY_T): - $PostProcess.ScreenShake = true - else: - $PostProcess.ScreenShake = false + if $PostProcess.configuration.ScreenShake: + $PostProcess.configuration.ScreenShake = false + else: + $PostProcess.configuration.ScreenShake = true + ``` This also works with other effects like: diff --git a/addons/post_processing/node/post_process.gd b/addons/post_processing/node/post_process.gd index 1178006..9972263 100644 --- a/addons/post_processing/node/post_process.gd +++ b/addons/post_processing/node/post_process.gd @@ -119,7 +119,7 @@ func _check_shader_visibility(_name: String) -> bool: if _name.begins_with("CRT"): return true if configuration.CRT else false - + # get_children() returning all _names leading Always to: push_error("#Undefined type Post Processing addon - verify it has been properly integrated.") return false # bad! diff --git a/addons/post_processing/resource/post_processing_configuration.gd b/addons/post_processing/resource/post_processing_configuration.gd index 26ab149..8bb282d 100644 --- a/addons/post_processing/resource/post_processing_configuration.gd +++ b/addons/post_processing/resource/post_processing_configuration.gd @@ -5,79 +5,226 @@ class_name PostProcessingConfiguration extends Resource @export var reload: bool @export_group("ASCII (No Color)") @export var ASCII: bool -@export var ASCIISize: Vector2 = Vector2(4,9) +@export var ASCIISize: Vector2 = Vector2(4,9): + set(value): + ASCIISize = value + reload = true @export_group("Chromatic Aberration") @export var ChromaticAberration: bool -@export var StrenghtCA: float = 1 +@export var StrenghtCA: float = 1: + set(value): + StrenghtCA = value + reload = true @export_group("Blur") @export var Blur: bool -@export_range(0.0, 5) var L_O_D = 1.0 +@export_range(0.0, 5) var L_O_D = 1.0: + set(value): + L_O_D = value + reload = true @export_group("Fish Eye") @export var FishEye: bool -@export var FishEyeAspect = 1.0 -@export var FishEyeDistortion = 1.0 -@export var FishEyeRadius = 1.0 -@export var FishEyeAlpha = 1.0 -@export var FishEyeCrop = 1.0 -@export var FishEyeCropColor = Color.BLACK +@export var FishEyeAspect = 1.0: + set(value): + FishEyeAspect = value + reload = true +@export var FishEyeDistortion = 1.0: + set(value): + FishEyeDistortion = value + reload = true +@export var FishEyeRadius = 1.0: + set(value): + FishEyeRadius = value + reload = true +@export var FishEyeAlpha = 1.0: + set(value): + FishEyeAlpha = value + reload = true +@export var FishEyeCrop = 1.0: + set(value): + FishEyeCrop = value + reload = true +@export var FishEyeCropColor = Color.BLACK: + set(value): + FishEyeCropColor = value + reload = true @export_group("Vignette") @export var Vignette: bool -@export var VignetteIntensity = 0.4 -@export_range(0.0, 1.0) var VignetteOpacity = 0.5 -@export var VignetteR_G_B: Color = Color(0.0, 0.0, 0.0, 1.0); +@export var VignetteIntensity = 0.4: + set(value): + VignetteIntensity = value + reload = true +@export_range(0.0, 1.0) var VignetteOpacity = 0.5: + set(value): + VignetteOpacity = value + reload = true +@export var VignetteR_G_B: Color = Color(0.0, 0.0, 0.0, 1.0): + set(value): + VignetteR_G_B = value + reload = true @export_group("Glitch") @export var Glitch: bool -@export_range(0.0, 0.1, 0.005) var GlitchRange = 0.05 -@export_range(0.0, 300, 0.1) var GlitchNoiseQuality = 250.0 -@export_range(-0.6, 0.6, 0.0010) var GlitchIntenity = 0.0088 -@export_range(-0.1, 0.1, 0.001) var GlitchOffset = 0.03 -@export_range(0.0, 5.0, 0.001) var GlitchColorOffset = 1.3 +@export_range(0.0, 0.1, 0.005) var GlitchRange = 0.05: + set(value): + GlitchRange = value + reload = true +@export_range(0.0, 300, 0.1) var GlitchNoiseQuality = 250.0: + set(value): + GlitchNoiseQuality = value + reload = true +@export_range(-0.6, 0.6, 0.0010) var GlitchIntenity = 0.0088: + set(value): + GlitchIntenity = value + reload = true +@export_range(-0.1, 0.1, 0.001) var GlitchOffset = 0.03: + set(value): + GlitchOffset = value + reload = true +@export_range(0.0, 5.0, 0.001) var GlitchColorOffset = 1.3: + set(value): + GlitchColorOffset = value + reload = true @export_group("Outline") @export var Outline: bool -@export var OutlineColor: Color = Color(0.0, 0.0, 0.0, 1.0) -@export_range(0.0, 1.0) var OutlineThreshold = 0.0 -@export_range(0.0, 1.0) var OutlineBlend = 0.01 +@export var OutlineColor: Color = Color(0.0, 0.0, 0.0, 1.0): + set(value): + OutlineColor = value + reload = true +@export_range(0.0, 1.0) var OutlineThreshold = 0.0: + set(value): + OutlineThreshold = value + reload = true +@export_range(0.0, 1.0) var OutlineBlend = 0.01: + set(value): + OutlineBlend = value + reload = true @export_group("Screen Shake") @export var ScreenShake: bool -@export var ScreenShakePower = 0.1; +@export var ScreenShakePower = 0.1: + set(value): + ScreenShakePower = value + reload = true @export_group("Analog Monitor") @export var AnalogMonitor: bool -@export var AnalogMonitorResolution = Vector2(256, 256) +@export var AnalogMonitorResolution = Vector2(256, 256): + set(value): + AnalogMonitorResolution = value + reload = true @export_group("Grain") @export var Grain: bool -@export_range(0, 150, 0.1) var GrainPower = 75 +@export_range(0, 150, 0.1) var GrainPower = 75: + set(value): + GrainPower = value + reload = true @export_group("Circular Waves") @export var CircularWaves: bool -@export_range(0,2, 0.01) var CircularWavesAmplitude = 2.0 -@export_range(0, 15, 0.01) var CircularWavesFrequency = 12.69 -@export_range(0.5, 150.0, 0.1) var CircularWavesRippleRate = 9.2 +@export_range(0,2, 0.01) var CircularWavesAmplitude = 2.0: + set(value): + CircularWavesAmplitude = value + reload = true +@export_range(0, 15, 0.01) var CircularWavesFrequency = 12.69: + set(value): + CircularWavesFrequency = value + reload = true +@export_range(0.5, 150.0, 0.1) var CircularWavesRippleRate = 9.2: + set(value): + CircularWavesRippleRate = value + reload = true @export_group("Speed Lines") @export var SpeedLines: bool -@export var SpeedLinesColor: Color = Color.WHITE -@export_range(0,2, 0.05) var SpeedLinesCount = 2 -@export_range(0.0, 1.0) var SpeedLineDensity = 0.072 -@export_range(1.0, 40.0, 1.0) var SpeedLineSpeed = 20; +@export var SpeedLinesColor: Color = Color.WHITE: + set(value): + SpeedLinesColor = value + reload = true +@export_range(0,2, 0.05) var SpeedLinesCount = 2: + set(value): + SpeedLinesCount = value + reload = true +@export_range(0.0, 1.0) var SpeedLineDensity = 0.072: + set(value): + SpeedLineDensity = value + reload = true +@export_range(1.0, 40.0, 1.0) var SpeedLineSpeed = 20: + set(value): + SpeedLineSpeed = value + reload = true @export_group("CRT") @export var CRT: bool -@export var overlay : bool = false; -@export_range(0.0, 1.0) var scanlines_opacity : float = 0.4; -@export_range(0.0, 0.5) var scanlines_width : float = 0.25; -@export_range(0.0, 1.0) var grille_opacity : float = 0.3; -@export var pixelate : bool = true; -@export var roll_speed : float = 8.0; -@export_range(0.0, 100.0) var roll_size : float = 15.0; -@export_range(0.1, 5.0) var roll_variation : float = 1.8; -@export_range(0.0, 0.2) var distort_intensity : float = 0.05; -@export_range(0.0, 1.0) var noise_opacity : float = 0.4; -@export var noise_speed : float = 5.0; -@export_range(0.0, 1.0) var static_noise_intensity : float = 0.06; -@export_range(-1.0, 1.0) var aberration : float = 0.03; -@export var brightness : float = 1.4; -@export var discolor : bool = true; -@export_range(0.0, 5.0) var warp_amount : float = 1.0; -@export var clip_warp : bool = false; -@export var vignette_intensity : float = 0.4; -@export_range(0.0, 1.0) var vignette_opacity : float = 0.5; +@export var overlay : bool = false: + set(value): + overlay = value + reload = true +@export_range(0.0, 1.0) var scanlines_opacity : float = 0.4: + set(value): + scanlines_opacity = value + reload = true +@export_range(0.0, 0.5) var scanlines_width : float = 0.25: + set(value): + scanlines_width = value + reload = true +@export_range(0.0, 1.0) var grille_opacity : float = 0.3: + set(value): + grille_opacity = value + reload = true +@export var pixelate : bool = true: + set(value): + pixelate = value + reload = true +@export var roll_speed : float = 8.0: + set(value): + roll_speed = value + reload = true +@export_range(0.0, 100.0) var roll_size : float = 15.0: + set(value): + roll_size = value + reload = true +@export_range(0.1, 5.0) var roll_variation : float = 1.8: + set(value): + roll_variation = value + reload = true +@export_range(0.0, 0.2) var distort_intensity : float = 0.05: + set(value): + distort_intensity = value + reload = true +@export_range(0.0, 1.0) var noise_opacity : float = 0.4: + set(value): + noise_opacity = value + reload = true +@export var noise_speed : float = 5.0: + set(value): + noise_speed = value + reload = true +@export_range(0.0, 1.0) var static_noise_intensity : float = 0.06: + set(value): + static_noise_intensity = value + reload = true +@export_range(-1.0, 1.0) var aberration : float = 0.03: + set(value): + aberration = value + reload = true +@export var brightness : float = 1.4: + set(value): + brightness = value + reload = true +@export var discolor : bool = true: + set(value): + discolor = value + reload = true +@export_range(0.0, 5.0) var warp_amount : float = 1.0: + set(value): + warp_amount = value + reload = true +@export var clip_warp : bool = false: + set(value): + clip_warp = value + reload = true +@export var vignette_intensity : float = 0.4: + set(value): + vignette_intensity = value + reload = true +@export_range(0.0, 1.0) var vignette_opacity : float = 0.5: + set(value): + vignette_opacity = value + reload = true #@export_category("Bloom")