diff --git a/addons/post_processing/assets/ascii.png b/addons/post_processing/assets/ascii.png new file mode 100644 index 0000000..f2b6acb Binary files /dev/null and b/addons/post_processing/assets/ascii.png differ diff --git a/addons/post_processing/assets/ascii.png.import b/addons/post_processing/assets/ascii.png.import new file mode 100644 index 0000000..be17bfa --- /dev/null +++ b/addons/post_processing/assets/ascii.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://5rj5tlylm7bt" +path="res://.godot/imported/ascii.png-152231094f5e4e2669cec888e3c259a5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/post_processing/assets/ascii.png" +dest_files=["res://.godot/imported/ascii.png-152231094f5e4e2669cec888e3c259a5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/post_processing/assets/lens_aura.png b/addons/post_processing/assets/lens_aura.png new file mode 100644 index 0000000..e97e394 Binary files /dev/null and b/addons/post_processing/assets/lens_aura.png differ diff --git a/addons/post_processing/assets/lens_aura.png.import b/addons/post_processing/assets/lens_aura.png.import new file mode 100644 index 0000000..c91b123 --- /dev/null +++ b/addons/post_processing/assets/lens_aura.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://3ee7ii2w44gd" +path="res://.godot/imported/lens_aura.png-e27f19e14a0272728e7b44bd21dd8800.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/post_processing/assets/lens_aura.png" +dest_files=["res://.godot/imported/lens_aura.png-e27f19e14a0272728e7b44bd21dd8800.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/post_processing/assets/lens_divine.png b/addons/post_processing/assets/lens_divine.png new file mode 100644 index 0000000..b0f9838 Binary files /dev/null and b/addons/post_processing/assets/lens_divine.png differ diff --git a/addons/post_processing/assets/lens_divine.png.import b/addons/post_processing/assets/lens_divine.png.import new file mode 100644 index 0000000..4dcba9f --- /dev/null +++ b/addons/post_processing/assets/lens_divine.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhlg318yf5dvo" +path="res://.godot/imported/lens_divine.png-f89592ebc844543be1487a3ee051ee93.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/post_processing/assets/lens_divine.png" +dest_files=["res://.godot/imported/lens_divine.png-f89592ebc844543be1487a3ee051ee93.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/post_processing/assets/lens_flare.gd b/addons/post_processing/assets/lens_flare.gd new file mode 100644 index 0000000..ce5c59c --- /dev/null +++ b/addons/post_processing/assets/lens_flare.gd @@ -0,0 +1,35 @@ +extends CanvasLayer + +# In your main scene script + +var camera = null +var light_source = null +var light_pos_world = null +var screen_pos = null +var light_pos_screen = null +var material = null + +func _ready(): + # Get camera node automatically based on type + camera = get_tree().get_root().find_child("Camera3D", true, true) # Searches entire scene tree + if not camera: + print("Warning: No Camera node found in scene!") + return + + # Get first light node (adjust if you need a specific light) + light_source = get_tree().get_root().find_child("Light3D", true, true) # Searches entire scene tree + if not light_source: + print("Warning: No Light node found in scene!") + return + +func _physics_process(delta): + if not camera or not light_source: + return # Skip if camera or light not found + + # Calculate and set light position as before + light_pos_world = light_source.global_transform.origin + screen_pos = camera.project_world_ray(light_pos_world) + light_pos_screen = screen_pos / screen_pos.w + + material = $data.material + material.set_uniform("LightPositionWorldSpace", light_pos_screen) diff --git a/addons/post_processing/node/children/Bloom.tscn b/addons/post_processing/node/children/Bloom.tscn deleted file mode 100644 index c731f15..0000000 --- a/addons/post_processing/node/children/Bloom.tscn +++ /dev/null @@ -1,21 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://c26geci666vfd"] - -[ext_resource type="Shader" path="res://addons/post_processing/shaders/bloom.gdshader" id="1_eorxe"] - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_s3kyv"] -shader = ExtResource("1_eorxe") -shader_parameter/blur_type = 1 -shader_parameter/blur_amount = 16 -shader_parameter/blur_radius = 1.0 -shader_parameter/blur_direction = Vector2(1, 1) - -[node name="Bloom" type="CanvasLayer"] -layer = 100 - -[node name="ColorRect" type="ColorRect" parent="."] -material = SubResource("ShaderMaterial_s3kyv") -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 diff --git a/addons/post_processing/node/children/ChromaticAberration.tscn b/addons/post_processing/node/children/ChromaticAberration.tscn index 07a7c04..8d66993 100644 --- a/addons/post_processing/node/children/ChromaticAberration.tscn +++ b/addons/post_processing/node/children/ChromaticAberration.tscn @@ -4,7 +4,7 @@ [sub_resource type="ShaderMaterial" id="ShaderMaterial_ke5y5"] shader = ExtResource("1_qxjen") -shader_parameter/offset = 1.0 +shader_parameter/offset = 5.23 [node name="ChromaticAberration" type="CanvasLayer"] layer = 102 @@ -16,3 +16,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/analog_monitor.tscn b/addons/post_processing/node/children/analog_monitor.tscn index 8316f71..eacf31a 100644 --- a/addons/post_processing/node/children/analog_monitor.tscn +++ b/addons/post_processing/node/children/analog_monitor.tscn @@ -26,3 +26,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/ascii.tscn b/addons/post_processing/node/children/ascii.tscn new file mode 100644 index 0000000..59f0ff0 --- /dev/null +++ b/addons/post_processing/node/children/ascii.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=4 format=3 uid="uid://k8tnsut5pohj"] + +[ext_resource type="Shader" path="res://addons/post_processing/shaders/ascii.gdshader" id="1_bp3vh"] +[ext_resource type="Texture2D" uid="uid://5rj5tlylm7bt" path="res://addons/post_processing/assets/ascii.png" id="2_qs7p5"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ppj3i"] +shader = ExtResource("1_bp3vh") +shader_parameter/ascii_size = Vector2(5, 10) +shader_parameter/available_columns = 10 +shader_parameter/max_columns = 16 +shader_parameter/ascii_tex = ExtResource("2_qs7p5") + +[node name="Ascii" type="CanvasLayer"] +layer = 99 +visible = false + +[node name="data" type="ColorRect" parent="."] +material = SubResource("ShaderMaterial_ppj3i") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/bloom.tscn b/addons/post_processing/node/children/bloom.tscn new file mode 100644 index 0000000..fe6ab3e --- /dev/null +++ b/addons/post_processing/node/children/bloom.tscn @@ -0,0 +1,38 @@ +[gd_scene load_steps=3 format=3 uid="uid://dvpfe511myfg5"] + +[ext_resource type="Shader" path="res://addons/post_processing/shaders/bloom.gdshader" id="1_qyxdw"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_qv2yl"] +shader = ExtResource("1_qyxdw") +shader_parameter/BlurAmount = null +shader_parameter/FlareThreshold = null +shader_parameter/Flares = null +shader_parameter/FlareSpacing = null +shader_parameter/Intensity = null +shader_parameter/Saturation_ = null +shader_parameter/FalloffStart = null +shader_parameter/FalloffEnd = null + +[node name="Bloom" type="CanvasLayer"] + +[node name="SubViewportContainer" type="SubViewportContainer" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +stretch = true + +[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"] +handle_input_locally = false +size = Vector2i(1152, 648) +render_target_update_mode = 4 + +[node name="TextureRect" type="ColorRect" parent="."] +z_index = 105 +material = SubResource("ShaderMaterial_qv2yl") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/addons/post_processing/node/children/blur.tscn b/addons/post_processing/node/children/blur.tscn index 4d4d138..6b434b2 100644 --- a/addons/post_processing/node/children/blur.tscn +++ b/addons/post_processing/node/children/blur.tscn @@ -4,10 +4,11 @@ [sub_resource type="ShaderMaterial" id="ShaderMaterial_efbmf"] shader = ExtResource("1_6v1pv") -shader_parameter/lod = 1.0 +shader_parameter/lod = 4.615 [node name="Blur" type="CanvasLayer"] layer = 101 +visible = false [node name="data" type="ColorRect" parent="."] material = SubResource("ShaderMaterial_efbmf") @@ -16,3 +17,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/circular_waves.tscn b/addons/post_processing/node/children/circular_waves.tscn index 9921fb6..989a8b8 100644 --- a/addons/post_processing/node/children/circular_waves.tscn +++ b/addons/post_processing/node/children/circular_waves.tscn @@ -27,3 +27,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/fish_eye.tscn b/addons/post_processing/node/children/fish_eye.tscn index 35a2451..bf97bd7 100644 --- a/addons/post_processing/node/children/fish_eye.tscn +++ b/addons/post_processing/node/children/fish_eye.tscn @@ -4,10 +4,16 @@ [sub_resource type="ShaderMaterial" id="ShaderMaterial_v56sw"] shader = ExtResource("1_eks6e") -shader_parameter/effect_amount = 0.0 +shader_parameter/aspect = 1.0 +shader_parameter/distortion = 1.0 +shader_parameter/radius = 1.0 +shader_parameter/alpha = 1.0 +shader_parameter/crop = 1.0 +shader_parameter/crop_color = Color(0, 0, 0, 1) [node name="FishEye" type="CanvasLayer"] layer = 103 +visible = false [node name="data" type="ColorRect" parent="."] material = SubResource("ShaderMaterial_v56sw") @@ -16,3 +22,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/glitch.tscn b/addons/post_processing/node/children/glitch.tscn index 9e4fbba..a4edafd 100644 --- a/addons/post_processing/node/children/glitch.tscn +++ b/addons/post_processing/node/children/glitch.tscn @@ -12,6 +12,7 @@ shader_parameter/colorOffsetIntensity = 1.3 [node name="Glitch" type="CanvasLayer"] layer = 104 +visible = false [node name="data" type="ColorRect" parent="."] material = SubResource("ShaderMaterial_gdr74") @@ -20,3 +21,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/grain.tscn b/addons/post_processing/node/children/grain.tscn index 534942c..670d9ea 100644 --- a/addons/post_processing/node/children/grain.tscn +++ b/addons/post_processing/node/children/grain.tscn @@ -3,8 +3,8 @@ [ext_resource type="Shader" path="res://addons/post_processing/shaders/grain.gdshader" id="1_wos36"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_wb4vw"] +render_priority = 0 shader = ExtResource("1_wos36") -shader_parameter/strength = 75.0 [node name="Grain" type="CanvasLayer"] visible = false @@ -16,3 +16,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/outline.tscn b/addons/post_processing/node/children/outline.tscn index eedbfc2..41833d5 100644 --- a/addons/post_processing/node/children/outline.tscn +++ b/addons/post_processing/node/children/outline.tscn @@ -9,6 +9,7 @@ shader_parameter/threshold = 0.0 shader_parameter/blend = 0.1 [node name="Outline" type="CanvasLayer"] +visible = false [node name="data" type="ColorRect" parent="."] material = SubResource("ShaderMaterial_yuki3") @@ -17,3 +18,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/screen_shake.tscn b/addons/post_processing/node/children/screen_shake.tscn index a4ef448..d7a8f58 100644 --- a/addons/post_processing/node/children/screen_shake.tscn +++ b/addons/post_processing/node/children/screen_shake.tscn @@ -19,3 +19,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/speed_lines.tscn b/addons/post_processing/node/children/speed_lines.tscn index d9385f9..ed52456 100644 --- a/addons/post_processing/node/children/speed_lines.tscn +++ b/addons/post_processing/node/children/speed_lines.tscn @@ -33,3 +33,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/children/vignette.tscn b/addons/post_processing/node/children/vignette.tscn index 96c2940..a6259aa 100644 --- a/addons/post_processing/node/children/vignette.tscn +++ b/addons/post_processing/node/children/vignette.tscn @@ -9,6 +9,7 @@ shader_parameter/vignette_opacity = 1.0 shader_parameter/vignette_rgb = Color(0, 0, 0, 1) [node name="Vignette" type="CanvasLayer"] +visible = false [node name="data" type="ColorRect" parent="."] material = SubResource("ShaderMaterial_jiuwk") @@ -17,3 +18,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 diff --git a/addons/post_processing/node/post_process.gd b/addons/post_processing/node/post_process.gd index f9e6a59..2123278 100644 --- a/addons/post_processing/node/post_process.gd +++ b/addons/post_processing/node/post_process.gd @@ -2,6 +2,10 @@ extends CanvasLayer @export_category("Post Process") +@export var reload: bool +@export_category("ASCII (No Color)") +@export var ASCII: bool +@export var ASCIISize: Vector2 = Vector2(4,9) @export_category("Chromatic Aberration") @export var ChromaticAberration: bool @export var StrenghtCA: float = 1 @@ -10,7 +14,12 @@ extends CanvasLayer @export_range(0.0, 5) var L_O_D = 1.0 @export_category("Fish Eye") @export var FishEye: bool -@export_range(-2.5, 2.5) var FishEyeAmount: float +@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_category("Vignette") @export var Vignette: bool @export var VignetteIntensity = 0.4 @@ -66,7 +75,12 @@ func _update_shaders(): data.material.set_shader_parameter("lod", L_O_D) elif child.name == "FishEye": var data = child.get_child(0) - data.material.set_shader_parameter("effect_amount", FishEyeAmount) + data.material.set_shader_parameter("aspect", FishEyeAspect) + data.material.set_shader_parameter("distortion", FishEyeDistortion) + data.material.set_shader_parameter("radius", FishEyeRadius) + data.material.set_shader_parameter("alpha", FishEyeAlpha) + data.material.set_shader_parameter("crop", FishEyeCrop) + data.material.set_shader_parameter("crop_color", FishEyeCropColor) elif child.name == "Vignette": var data = child.get_child(0) data.material.set_shader_parameter("vignette_intensity", VignetteIntensity) @@ -104,7 +118,9 @@ func _update_shaders(): data.material.set_shader_parameter("line_count", SpeedLinesCount) data.material.set_shader_parameter("line_density", SpeedLineDensity) data.material.set_shader_parameter("animation_speed", SpeedLineSpeed) - + elif child.name == "Ascii": + var data = child.get_child(0) + data.material.set_shader_parameter("ascii_size", ASCIISize) if ChromaticAberration == true: for child in get_children(): @@ -194,7 +210,14 @@ func _update_shaders(): for child in get_children(): if child.name.begins_with("SpeedLines"): child.visible = false - + if ASCII == true: + for child in get_children(): + if child.name.begins_with("Ascii"): + child.visible = true + else: + for child in get_children(): + if child.name.begins_with("Ascii"): + child.visible = false @@ -233,6 +256,9 @@ func _enter_tree(): var spd_lin = load("res://addons/post_processing/node/children/speed_lines.tscn") add_child(spd_lin.instantiate()) print("created SDP_LIN") + var ascii = load("res://addons/post_processing/node/children/ascii.tscn") + add_child(ascii.instantiate()) + print("created ASCII") _update_shaders() @@ -243,3 +269,6 @@ func _enter_tree(): func _process(delta): if Engine.is_editor_hint() or !Engine.is_editor_hint(): _update_shaders() + if reload == true: + _update_shaders() + reload = false diff --git a/addons/post_processing/post_processing.zip b/addons/post_processing/post_processing.zip deleted file mode 100644 index 5c4a005..0000000 Binary files a/addons/post_processing/post_processing.zip and /dev/null differ diff --git a/addons/post_processing/shaders/CLREDIT.gdshaderinc b/addons/post_processing/shaders/CLREDIT.gdshaderinc new file mode 100644 index 0000000..e69de29 diff --git a/addons/post_processing/shaders/LensFlares.gdshader b/addons/post_processing/shaders/LensFlares.gdshader new file mode 100644 index 0000000..e908e46 --- /dev/null +++ b/addons/post_processing/shaders/LensFlares.gdshader @@ -0,0 +1,93 @@ +shader_type canvas_item; +render_mode blend_mix; + +uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; + +uniform vec2 sun_position = vec2(0.0); +uniform vec3 tint = vec3(1.4,1.2,1.0); +uniform sampler2D noise_texture; + +float noise_float(float t, vec2 texResolution) +{ + return texture(noise_texture,vec2(t,0.0)/texResolution).x; +} +float noise_vec2(vec2 t, vec2 texResolution) +{ + return texture(noise_texture,t/texResolution).x; +} + +vec3 lensflare(vec2 uv,vec2 pos, vec2 texResolution) +{ + vec2 main = uv-pos; + vec2 uvd = uv*(length(uv)); + + float ang = atan(main.x,main.y); + float dist = length(main); + dist = pow(dist,0.1); + + float n = noise_vec2(vec2(ang*16.0,dist*32.0), texResolution); + + // Do not need an artificial sun + //float f0 = 1.0/(length(uv-pos)*16.0+1.0); + //f0 = f0 + f0*(sin(noise_float(sin(ang*2.+pos.x)*4.0 - cos(ang*3.+pos.y), texResolution)*16.)*.1 + dist*.1 + .8); + + float f1 = max(0.01-pow(length(uv+1.2*pos),1.9),.0)*7.0; + + float f2 = max(1.0/(1.0+32.0*pow(length(uvd+0.8*pos),2.0)),.0)*00.25; + float f22 = max(1.0/(1.0+32.0*pow(length(uvd+0.85*pos),2.0)),.0)*00.23; + float f23 = max(1.0/(1.0+32.0*pow(length(uvd+0.9*pos),2.0)),.0)*00.21; + + vec2 uvx = mix(uv,uvd,-0.5); + + float f4 = max(0.01-pow(length(uvx+0.4*pos),2.4),.0)*6.0; + float f42 = max(0.01-pow(length(uvx+0.45*pos),2.4),.0)*5.0; + float f43 = max(0.01-pow(length(uvx+0.5*pos),2.4),.0)*3.0; + + uvx = mix(uv,uvd,-.4); + + float f5 = max(0.01-pow(length(uvx+0.2*pos),5.5),.0)*2.0; + float f52 = max(0.01-pow(length(uvx+0.4*pos),5.5),.0)*2.0; + float f53 = max(0.01-pow(length(uvx+0.6*pos),5.5),.0)*2.0; + + uvx = mix(uv,uvd,-0.5); + + float f6 = max(0.01-pow(length(uvx-0.3*pos),1.6),.0)*6.0; + float f62 = max(0.01-pow(length(uvx-0.325*pos),1.6),.0)*3.0; + float f63 = max(0.01-pow(length(uvx-0.35*pos),1.6),.0)*5.0; + + vec3 c = vec3(.0); + + c.r+=f2+f4+f5+f6; c.g+=f22+f42+f52+f62; c.b+=f23+f43+f53+f63; + c = c*1.3 - vec3(length(uvd)*.05); + + // Do not need an artificial sun + //c+=vec3(f0); + + return c; +} + +vec3 cc(vec3 color, float factor,float factor2) // color modifier +{ + float w = color.x+color.y+color.z; + return mix(color,vec3(w)*factor,w*factor2); +} + +void fragment() +{ + vec2 texResolution = 1.0 / TEXTURE_PIXEL_SIZE; + vec2 resolution = 1.0 / SCREEN_PIXEL_SIZE; + + vec2 uv = FRAGCOORD.xy / resolution.xy - 0.5; + uv.x *= resolution.x/resolution.y; //fix aspect ratio + vec2 mouse = (sun_position.xy / resolution.xy) - vec2(0.5, 0.5); + mouse.x *= resolution.x / resolution.y; //fix aspect ratio + + vec4 previousColor = texture(SCREEN_TEXTURE, SCREEN_UV); + + vec3 color = previousColor.rgb; + + color += tint * lensflare(uv, mouse.xy, texResolution); + color -= noise_vec2(FRAGCOORD.xy, texResolution)*.015; + color = cc(color,.5,.1); + COLOR = vec4(color,1.0); +} \ No newline at end of file diff --git a/addons/post_processing/shaders/ascii.gdshader b/addons/post_processing/shaders/ascii.gdshader new file mode 100644 index 0000000..ad2baa1 --- /dev/null +++ b/addons/post_processing/shaders/ascii.gdshader @@ -0,0 +1,37 @@ +/* + アスキー文字エフェクトシェーダー by あるる(きのもと 結衣) @arlez80 + Ascii Effect Shader by Yui Kinomoto @arlez80 + + MIT License +*/ + +shader_type canvas_item; +render_mode unshaded; + +uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; + +const vec3 MONOCHROME_SCALE = vec3( 0.298912, 0.586611, 0.114478 ); + +uniform sampler2D ascii_tex : source_color; +uniform vec2 ascii_size = vec2( 8.0, 16.0 ); +uniform int available_columns = 10; +uniform int max_columns = 16; + +void fragment( ) +{ + vec2 screen_uv = floor( SCREEN_UV / SCREEN_PIXEL_SIZE / ascii_size ) * SCREEN_PIXEL_SIZE * ascii_size; + vec2 diff = ascii_size * SCREEN_PIXEL_SIZE; + vec4 color = ( + textureLod( SCREEN_TEXTURE, screen_uv, 0.0 ) + + textureLod( SCREEN_TEXTURE, screen_uv + vec2( 0.0, diff.y ), 0.0 ) + + textureLod( SCREEN_TEXTURE, screen_uv + vec2( diff.x, 0.0 ), 0.0 ) + + textureLod( SCREEN_TEXTURE, screen_uv + diff, 0.0 ) + ) / 4.0; + + vec2 ascii_uv = fract( SCREEN_UV / SCREEN_PIXEL_SIZE / ascii_size ); + ascii_uv.x = ( 1.0 - ascii_uv.x ) / float( max_columns ); + float col = floor( dot( color.rgb, MONOCHROME_SCALE ) * float( available_columns ) ) / float( available_columns ); + + COLOR = texture( ascii_tex, ascii_uv + vec2( col * ( float( available_columns ) / float( max_columns ) ), 0.0 ) ); +} + diff --git a/addons/post_processing/shaders/bloom.gdshader b/addons/post_processing/shaders/bloom.gdshader index 9e29c94..6139b44 100644 --- a/addons/post_processing/shaders/bloom.gdshader +++ b/addons/post_processing/shaders/bloom.gdshader @@ -1,135 +1,53 @@ shader_type canvas_item; +render_mode blend_add; -uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; +#include "CLREDIT.gdshaderinc" +uniform lowp sampler2D Screen_Sample : hint_screen_texture, filter_linear_mipmap_anisotropic; +uniform lowp sampler2D FlareTex; // Texture for the lens flare -vec4 texture_xorgaussian(sampler2D tex, vec2 uv, vec2 pixel_size, float blurriness, int iterations, int quality){ - float pi = 6.28; - - vec2 radius = blurriness / (1.0 / pixel_size).xy; - vec4 blurred_tex = texture(tex, uv); - - for(float d = 0.0; d < pi; d += pi / float(iterations)){ - for( float i = 1.0 / float(quality); i <= 1.0; i += 1.0 / float(quality) ){ - vec2 directions = uv + vec2(cos(d), sin(d)) * radius * i; - blurred_tex += texture(tex, directions); - } - } - blurred_tex /= float(quality) * float(iterations) + 1.0; - - return blurred_tex; -} +uniform float BlurAmount; // Adjust blur intensity +uniform float FlareThreshold; // Threshold for brightness to consider flare +uniform int Flares; // Number of lens flares +uniform float FlareSpacing; // Separation between flares +uniform float Intensity; // Overall intensity of the effect +uniform float Saturation_; // Adjust color saturation (optional) +uniform float FalloffStart; // Controls falloff start distance from center (0-1) +uniform float FalloffEnd; // Controls falloff end distance from center (0-1) -// Experience-Monks' fast gaussian blur function -// Link: https://github.com/Experience-Monks/glsl-fast-gaussian-blur/ -// -// BLUR ITERATIONS (Default 16.0 - More is better but slower) -// BLUR DIRECTION (Direction in which the blur is apllied, use vec2(1, 0) for first pass and vec2(0, 1) for second pass) -// -// Desc.: ACTUALLY PRETTY SLOW but still pretty good for custom cinematic -// bloom effects, since this needs render 2 passes -vec4 texture_monksgaussian_multipass(sampler2D tex, vec2 uv, vec2 pixel_size, int iterations, vec2 direction){ - vec4 blurred_tex = vec4(0.0); - vec2 resolution = 1.0 / pixel_size; - - for (int i=0; i < iterations; i++){ - float size = float(iterations - i); - - vec2 off1 = vec2(1.3846153846) * (direction * size); - vec2 off2 = vec2(3.2307692308) * (direction * size); +void fragment() { + //UV = SCREEN_UV; - blurred_tex += texture(tex, uv) * 0.2270270270; - blurred_tex += texture(tex, uv + (off1 / resolution)) * 0.3162162162; - blurred_tex += texture(tex, uv - (off1 / resolution)) * 0.3162162162; - blurred_tex += texture(tex, uv + (off2 / resolution)) * 0.0702702703; - blurred_tex += texture(tex, uv - (off2 / resolution)) * 0.0702702703; - } - - blurred_tex /= float(iterations) + 1.0; - - return blurred_tex; -} + // Sample the scene color + vec3 SceneColor = texture(Screen_Sample, UV).rgb; -// u/_NoDev_'s gaussian blur function -// Discussion Link: https://www.reddit.com/r/godot/comments/klgfo9/help_with_shaders_in_gles2/ -// Code Link: https://postimg.cc/7JDJw80d -// -// BLUR BLURRINESS (Default 8.0 - More is better but slower) -// BLUR RADIUS (Default 1.5) -// BLUR DIRECTION (Direction in which the blur is apllied, use vec2(1, 0) for first pass and vec2(0, 1) for second pass) -// -// Desc.: Really fast and GOOD FOR MOST CASES, but might NOT RUN IN THE WEB! -// use 'texture_xorgaussian' instead if you found any issues. -vec4 texture_nodevgaussian_singlepass(sampler2D tex, vec2 uv, vec2 pixel_size, float blurriness, float radius){ - float pi = 3.14; - float n = 0.0015; - - vec4 blurred_tex = vec4(0); - - float weight; - for (float i = -blurriness; i <= blurriness; i++){ - float d = i / pi; - vec2 anchor = vec2(cos(d), sin(d)) * radius * i; - vec2 directions = uv + pixel_size * anchor; - blurred_tex += texture(tex, directions) * n; - if (i <= 0.0) {n += 0.0015; } - if (i > 0.0) {n -= 0.0015; } - weight += n; - } - - float norm = 1.0 / weight; - blurred_tex *= norm; - return blurred_tex; -} -vec4 texture_nodevgaussian_multipass(sampler2D tex, vec2 uv, vec2 pixel_size, float blurriness, vec2 direction){ - float n = 0.0015; - - vec4 blurred_tex = vec4(0); - - float weight; - for (float i = -blurriness; i <= blurriness; i++){ - vec2 directions = uv + pixel_size * (direction * i); - blurred_tex += texture(tex, directions) * n; - if (i <= 0.0) {n += 0.0015; } - if (i > 0.0) {n -= 0.0015; } - weight += n; - } - - float norm = 1.0 / weight; - blurred_tex *= norm; - return blurred_tex; -} + // Calculate direction vector from screen center (static) + vec2 FlareDir = vec2(0.5) - UV; + + // Accumulate flare color with falloff + vec3 FinalFlare = vec3(0.0); + for (int i = 0; i < Flares; ++i) { + // Offset UV based on flare direction and index + vec2 SampleUV = fract(UV + FlareDir * (BlurAmount + vec2(float(i) * FlareSpacing))); + // Sample the scene with blur in flare direction + vec3 BlurredScene = texture(Screen_Sample, SampleUV, BlurAmount).rgb; -uniform int blur_type = 1; -uniform int blur_amount = 16; -uniform float blur_radius = 1; -uniform vec2 blur_direction = vec2(1, 1); -void fragment(){ - vec2 uv = FRAGCOORD.xy / (1.0 / SCREEN_PIXEL_SIZE).xy; - - if (blur_type == 0) - { - vec4 xorgaussian = texture_xorgaussian(SCREEN_TEXTURE, uv, SCREEN_PIXEL_SIZE, float(blur_amount), 16, 4); - COLOR = xorgaussian; - } - else if (blur_type == 1) - { - vec4 monksgaussian_multipass = texture_monksgaussian_multipass(SCREEN_TEXTURE, uv, SCREEN_PIXEL_SIZE, blur_amount, blur_direction); - COLOR = monksgaussian_multipass; - } - else if (blur_type == 2) - { - vec4 nodevgaussian_singlepass = texture_nodevgaussian_singlepass(SCREEN_TEXTURE, uv, SCREEN_PIXEL_SIZE, float(blur_amount), blur_radius); - COLOR = nodevgaussian_singlepass; - } - else if (blur_type == 3) - { - vec4 nodevgaussian_multipass = texture_nodevgaussian_multipass(SCREEN_TEXTURE, uv, SCREEN_PIXEL_SIZE, float(blur_amount), blur_direction); - COLOR = nodevgaussian_multipass; - } - else - { - COLOR = texture(SCREEN_TEXTURE, uv); - } -} \ No newline at end of file + // Apply threshold to filter out dark areas + BlurredScene = ApplyThreshold(BlurredScene, FlareThreshold); // Adjust threshold as needed (optional) + + // Calculate distance from center for falloff + float Dist = distance(SampleUV, vec2(0.5)); + float Falloff = smoothstep(FalloffStart, FalloffEnd, Dist); + + // Apply weight and accumulate flare color + FinalFlare += BlurredScene * Falloff; + } + + // Apply lens flare texture + FinalFlare *= texture(FlareTex, UV).rgb; + + // Apply intensity and optional saturation adjustment + COLOR.rgb = FinalFlare * Intensity; + COLOR.rgb = Saturation(COLOR.rgb, Saturation_); // Adjust saturation as needed (optional) +} diff --git a/addons/post_processing/shaders/fish_eye.gdshader b/addons/post_processing/shaders/fish_eye.gdshader index cdb6b9f..8ccfe15 100644 --- a/addons/post_processing/shaders/fish_eye.gdshader +++ b/addons/post_processing/shaders/fish_eye.gdshader @@ -1,49 +1,49 @@ +///////////////////////////////// +// 2D Radial Distortion Shader // +///////////////////////////////// + +// Screen space shader for Godot, based on: https://gist.github.com/aggregate1166877/a889083801d67917c26c12a98e7f57a7 + shader_type canvas_item; + +uniform float aspect = 1.0; +uniform float distortion = 1.0; +uniform float radius = 1.0; +uniform float alpha = 1.0; +uniform float crop = 1.0; +uniform vec4 crop_color : source_color = vec4(0,0,0,1); uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; +vec2 distort(vec2 p) +{ + float d = length(p); + float z = sqrt(distortion + d * d * -distortion); + float r = atan(d, z) / 3.1415926535; + float phi = atan(p.y, p.x); + return vec2(r * cos(phi) * (1.0 / aspect) + 0.5, r * sin(phi) + 0.5); +} + +void fragment() +{ + vec2 xy = (SCREEN_UV * 2.0 - 1.0); // move origin of UV coordinates to center of screen + + xy = vec2(xy.x * aspect, xy.y); // adjust aspect ratio + + float d = length(xy); // distance from center + + vec4 tex; + + if (d < radius) + { + xy = distort(xy); + tex = texture(SCREEN_TEXTURE, xy); + COLOR = tex; + COLOR.a = alpha; + } -uniform float effect_amount : hint_range(-2.5, 2.2) = 1.0; - -void fragment(){ - vec2 iResolution = 1.0 / SCREEN_PIXEL_SIZE; - vec4 fragCoord = FRAGCOORD; - - vec2 p = fragCoord.xy / iResolution.x; - - float prop = iResolution.x / iResolution.y; - - vec2 m = vec2(0.5, 0.5 / prop); - - vec2 d = p - m; - - float r = sqrt(dot(d, d)); - - float power = effect_amount; - - float bind; - - if (power > 0.0) - bind = sqrt(dot(m, m)); - else{ - if (prop < 1.0) - bind = m.x; - else - bind = m.y; + // radial crop + if (d > crop) + { + COLOR = crop_color; } - - vec2 uv; - - //fisheye - if (power > 0.0) - uv = m + normalize(d) * tan(r * power) * bind / tan(bind * power); - else if (power < 0.0) - uv = m + normalize(d) * atan(r * -power, 10.0) * bind / atan(-power * bind * 10.0); - //no effect for power = 1.0 - else - uv = p; - uv.y *= prop; - - vec3 col = texture(SCREEN_TEXTURE, uv).rgb; - - COLOR = vec4(col, 1.0); } \ No newline at end of file diff --git a/addons/post_processing/shaders/water.gdshader b/addons/post_processing/shaders/water.gdshader new file mode 100644 index 0000000..6c4a921 --- /dev/null +++ b/addons/post_processing/shaders/water.gdshader @@ -0,0 +1,48 @@ +shader_type canvas_item; + +uniform float first_stage : hint_range(0.0, 1.0) = 0.5; +uniform float first_smooth : hint_range(0.0, 1.0) = 0.0; // Lengthens the color transition +uniform float second_stage : hint_range(0.0, 1.0) = 0.0; // If left at 0, only level 1 is used. +uniform float second_smooth : hint_range(0.0, 1.0) = 0.0; +uniform float min_light : hint_range(0.0, 1.0) = 0.0; +uniform float mid_light : hint_range(0.0, 1.0) = 0.0; +uniform float max_light : hint_range(0.0, 1.0) = 1.0; +uniform float obj_light_add : hint_range(0.0, 1.0) = 0.0; + +float light_calc(float light_strength, float would_be_strength) { + float target_strength = light_strength + would_be_strength * obj_light_add; + if (target_strength == 0.0) {target_strength = 0.000001;} + if (would_be_strength == 0.0) {would_be_strength = 1.0;} + return(target_strength / would_be_strength); +} + +void light() { + float level_1 = first_stage; + float level_1_smooth = first_smooth; + float level_2 = second_stage; + float level_2_smooth = second_smooth; + + float mid_range_light = mid_light; + if (mid_light == 0.0) { mid_range_light = max_light * 0.5; } + vec3 light_normal = normalize(vec3(LIGHT_VEC, -LIGHT_HEIGHT)); + float would_be_strength = max(dot(-light_normal, NORMAL), 0.0); + if (would_be_strength > level_1 && level_2 == 0.0 ) { + float diff = smoothstep(level_1, (level_1 + level_1_smooth), would_be_strength) + min_light; + if (diff >= max_light) {diff = max_light;} + LIGHT *= light_calc(diff, would_be_strength); + } else if (would_be_strength > level_1 && would_be_strength < level_2 && level_2 != 0.0 ) { + float diff = smoothstep(level_1, (level_1 + level_1_smooth), would_be_strength) + min_light; + if (diff >= mid_range_light ) {diff = mid_range_light;} + LIGHT *= light_calc(diff, would_be_strength); + } else if (would_be_strength >= level_2 && level_2 != 0.0 ) { + float diff = smoothstep(level_2, (level_2 + level_2_smooth), would_be_strength) + mid_range_light; + if (diff < mid_range_light ) {diff = mid_range_light;} + if (diff >= max_light) {diff = max_light;} + LIGHT *= light_calc(diff, would_be_strength); + } else { + if (min_light != 0.0) { + LIGHT_VEC = -NORMAL.xy*length(LIGHT_VEC); + } + LIGHT *= min_light; + } +} \ No newline at end of file