Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 18 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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: `.:-+*=%@#`).
Expand All @@ -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:
Expand Down Expand Up @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion addons/post_processing/node/post_process.gd
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error is being triggered every reload due to the get_children() method returning more than expected.

push_error("#Undefined type Post Processing addon - verify it has been properly integrated.")
return false # bad!

Expand Down
245 changes: 196 additions & 49 deletions addons/post_processing/resource/post_processing_configuration.gd
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down