mirror of
https://github.com/marinho/godot-visual-effects.git
synced 2025-09-19 04:06:15 +08:00
Fish Eye
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=24 format=3 uid="uid://c051w6upl0t16"]
|
[gd_scene load_steps=25 format=3 uid="uid://c051w6upl0t16"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bydyult2k5rcb" path="res://addons/kenney_prototype_tools/scenes/green/green_01.tscn" id="1_61jfr"]
|
[ext_resource type="PackedScene" uid="uid://bydyult2k5rcb" path="res://addons/kenney_prototype_tools/scenes/green/green_01.tscn" id="1_61jfr"]
|
||||||
[ext_resource type="Script" path="res://camera-effects/camera-effects-scene.gd" id="1_ct3xk"]
|
[ext_resource type="Script" path="res://camera-effects/camera-effects-scene.gd" id="1_ct3xk"]
|
||||||
@ -16,6 +16,7 @@
|
|||||||
[ext_resource type="PackedScene" path="res://camera-effects/camera_shake.tscn" id="14_qhoe5"]
|
[ext_resource type="PackedScene" path="res://camera-effects/camera_shake.tscn" id="14_qhoe5"]
|
||||||
[ext_resource type="Texture2D" uid="uid://etnwfy334jt" path="res://addons/kenney_particle_pack/window_03.png" id="14_ydbvf"]
|
[ext_resource type="Texture2D" uid="uid://etnwfy334jt" path="res://addons/kenney_particle_pack/window_03.png" id="14_ydbvf"]
|
||||||
[ext_resource type="PackedScene" uid="uid://kli822acdl5m" path="res://camera-effects/blur.tscn" id="15_kmr3r"]
|
[ext_resource type="PackedScene" uid="uid://kli822acdl5m" path="res://camera-effects/blur.tscn" id="15_kmr3r"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://pm0p6yeqy50d" path="res://camera-effects/fish_eye.tscn" id="16_nmfpv"]
|
||||||
[ext_resource type="ButtonGroup" uid="uid://2yjsq45hqgit" path="res://camera-effects/camera_button_group.tres" id="16_r0ag1"]
|
[ext_resource type="ButtonGroup" uid="uid://2yjsq45hqgit" path="res://camera-effects/camera_button_group.tres" id="16_r0ag1"]
|
||||||
|
|
||||||
[sub_resource type="Environment" id="Environment_tln01"]
|
[sub_resource type="Environment" id="Environment_tln01"]
|
||||||
@ -326,6 +327,9 @@ visible = false
|
|||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="Blur" parent="Effects" instance=ExtResource("15_kmr3r")]
|
[node name="Blur" parent="Effects" instance=ExtResource("15_kmr3r")]
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="Fish Eye" parent="Effects" instance=ExtResource("16_nmfpv")]
|
||||||
|
|
||||||
[node name="CanvasLayer UI" type="CanvasLayer" parent="."]
|
[node name="CanvasLayer UI" type="CanvasLayer" parent="."]
|
||||||
|
|
||||||
@ -367,7 +371,6 @@ button_group = ExtResource("16_r0ag1")
|
|||||||
text = "No Effect"
|
text = "No Effect"
|
||||||
|
|
||||||
[node name="ButtonChromaticAberration" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
[node name="ButtonChromaticAberration" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 24
|
theme_override_font_sizes/font_size = 24
|
||||||
toggle_mode = true
|
toggle_mode = true
|
||||||
@ -383,7 +386,6 @@ button_group = ExtResource("16_r0ag1")
|
|||||||
text = "Pixelate"
|
text = "Pixelate"
|
||||||
|
|
||||||
[node name="ButtonVignette" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
[node name="ButtonVignette" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 24
|
theme_override_font_sizes/font_size = 24
|
||||||
toggle_mode = true
|
toggle_mode = true
|
||||||
@ -391,7 +393,6 @@ button_group = ExtResource("16_r0ag1")
|
|||||||
text = "Vignette"
|
text = "Vignette"
|
||||||
|
|
||||||
[node name="ButtonSepia" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
[node name="ButtonSepia" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 24
|
theme_override_font_sizes/font_size = 24
|
||||||
toggle_mode = true
|
toggle_mode = true
|
||||||
@ -399,7 +400,6 @@ button_group = ExtResource("16_r0ag1")
|
|||||||
text = "Sepia"
|
text = "Sepia"
|
||||||
|
|
||||||
[node name="ButtonGrainNoise" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
[node name="ButtonGrainNoise" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 24
|
theme_override_font_sizes/font_size = 24
|
||||||
toggle_mode = true
|
toggle_mode = true
|
||||||
@ -407,7 +407,6 @@ button_group = ExtResource("16_r0ag1")
|
|||||||
text = "Grain Noise"
|
text = "Grain Noise"
|
||||||
|
|
||||||
[node name="ButtonHexagonMosaic" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
[node name="ButtonHexagonMosaic" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 24
|
theme_override_font_sizes/font_size = 24
|
||||||
toggle_mode = true
|
toggle_mode = true
|
||||||
@ -415,7 +414,6 @@ button_group = ExtResource("16_r0ag1")
|
|||||||
text = "Hexagon Mosaic"
|
text = "Hexagon Mosaic"
|
||||||
|
|
||||||
[node name="ButtonCameraShake" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
[node name="ButtonCameraShake" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 24
|
theme_override_font_sizes/font_size = 24
|
||||||
toggle_mode = true
|
toggle_mode = true
|
||||||
@ -423,13 +421,19 @@ button_group = ExtResource("16_r0ag1")
|
|||||||
text = "Camera Shake"
|
text = "Camera Shake"
|
||||||
|
|
||||||
[node name="ButtonBlur" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
[node name="ButtonBlur" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 24
|
theme_override_font_sizes/font_size = 24
|
||||||
toggle_mode = true
|
toggle_mode = true
|
||||||
button_group = ExtResource("16_r0ag1")
|
button_group = ExtResource("16_r0ag1")
|
||||||
text = "Blur"
|
text = "Blur"
|
||||||
|
|
||||||
|
[node name="Button Fish Eye" type="Button" parent="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_font_sizes/font_size = 24
|
||||||
|
toggle_mode = true
|
||||||
|
button_group = ExtResource("16_r0ag1")
|
||||||
|
text = "Fish Eye"
|
||||||
|
|
||||||
[node name="ToggleButton" type="TextureButton" parent="CanvasLayer UI/SideBar"]
|
[node name="ToggleButton" type="TextureButton" parent="CanvasLayer UI/SideBar"]
|
||||||
custom_minimum_size = Vector2(64, 2.08165e-12)
|
custom_minimum_size = Vector2(64, 2.08165e-12)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
@ -472,4 +476,5 @@ libraries = {
|
|||||||
[connection signal="toggled" from="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer/ButtonHexagonMosaic" to="." method="updateVisibleEffects"]
|
[connection signal="toggled" from="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer/ButtonHexagonMosaic" to="." method="updateVisibleEffects"]
|
||||||
[connection signal="toggled" from="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer/ButtonCameraShake" to="." method="updateVisibleEffects"]
|
[connection signal="toggled" from="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer/ButtonCameraShake" to="." method="updateVisibleEffects"]
|
||||||
[connection signal="toggled" from="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer/ButtonBlur" to="." method="updateVisibleEffects"]
|
[connection signal="toggled" from="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer/ButtonBlur" to="." method="updateVisibleEffects"]
|
||||||
|
[connection signal="toggled" from="CanvasLayer UI/SideBar/SideBar Menu/MarginContainer/VBoxContainer/Button Fish Eye" to="." method="updateVisibleEffects"]
|
||||||
[connection signal="pressed" from="CanvasLayer UI/SideBar/ToggleButton" to="." method="toggleSideBar"]
|
[connection signal="pressed" from="CanvasLayer UI/SideBar/ToggleButton" to="." method="toggleSideBar"]
|
||||||
|
54
camera-effects/fish-eye.gdshader
Normal file
54
camera-effects/fish-eye.gdshader
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
shader_type canvas_item;
|
||||||
|
|
||||||
|
#include "res://shaders/trigonometry.gdshaderinc"
|
||||||
|
|
||||||
|
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
|
||||||
|
|
||||||
|
// source: https://godotshaders.com/shader/2d-radial-distortion-fisheye-barrel/
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
// 2D Radial Distortion Shader //
|
||||||
|
/////////////////////////////////
|
||||||
|
|
||||||
|
// Screen space shader for Godot, based on: https://gist.github.com/aggregate1166877/a889083801d67917c26c12a98e7f57a7
|
||||||
|
|
||||||
|
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.0);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
// radial crop
|
||||||
|
if (d > crop)
|
||||||
|
{
|
||||||
|
COLOR = crop_color;
|
||||||
|
}
|
||||||
|
}
|
20
camera-effects/fish_eye.tscn
Normal file
20
camera-effects/fish_eye.tscn
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://pm0p6yeqy50d"]
|
||||||
|
|
||||||
|
[ext_resource type="Shader" path="res://camera-effects/fish-eye.gdshader" id="1_otmae"]
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_2hpfy"]
|
||||||
|
shader = ExtResource("1_otmae")
|
||||||
|
shader_parameter/aspect = 1.5
|
||||||
|
shader_parameter/distortion = 0.1
|
||||||
|
shader_parameter/radius = 0.7
|
||||||
|
shader_parameter/alpha = 1.0
|
||||||
|
shader_parameter/crop = 0.71
|
||||||
|
shader_parameter/crop_color = Color(1, 1, 1, 0.364706)
|
||||||
|
|
||||||
|
[node name="Fish Eye" type="ColorRect"]
|
||||||
|
material = SubResource("ShaderMaterial_2hpfy")
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
Reference in New Issue
Block a user