diff --git a/addons/compute_shader_studio/compute_shader_studio_2d.gd.uid b/addons/compute_shader_studio/compute_shader_studio_2d.gd.uid new file mode 100644 index 0000000..3c0c8b9 --- /dev/null +++ b/addons/compute_shader_studio/compute_shader_studio_2d.gd.uid @@ -0,0 +1 @@ +uid://ctdqncychsdep diff --git a/addons/compute_shader_studio/compute_shader_studio_plugin.gd.uid b/addons/compute_shader_studio/compute_shader_studio_plugin.gd.uid new file mode 100644 index 0000000..91b4763 --- /dev/null +++ b/addons/compute_shader_studio/compute_shader_studio_plugin.gd.uid @@ -0,0 +1 @@ +uid://dhln33jbr2byv diff --git a/examples/LabelStepPass.gd.uid b/examples/LabelStepPass.gd.uid new file mode 100644 index 0000000..91652e7 --- /dev/null +++ b/examples/LabelStepPass.gd.uid @@ -0,0 +1 @@ +uid://0ax0xb1gbjof diff --git a/examples/icon.svg b/examples/WireSphere/icon.svg similarity index 100% rename from examples/icon.svg rename to examples/WireSphere/icon.svg diff --git a/examples/icon.svg.import b/examples/WireSphere/icon.svg.import similarity index 75% rename from examples/icon.svg.import rename to examples/WireSphere/icon.svg.import index 5daa621..0af654d 100644 --- a/examples/icon.svg.import +++ b/examples/WireSphere/icon.svg.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://demftcowdd5c6" -path="res://.godot/imported/icon.svg-acd25bcdc80d9b3e751da37b20890fa9.ctex" +path="res://.godot/imported/icon.svg-77bc4927ce52de7de2571412d91961de.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://examples/icon.svg" -dest_files=["res://.godot/imported/icon.svg-acd25bcdc80d9b3e751da37b20890fa9.ctex"] +source_file="res://examples/WireSphere/icon.svg" +dest_files=["res://.godot/imported/icon.svg-77bc4927ce52de7de2571412d91961de.ctex"] [params] diff --git a/examples/WireSphere/wireSphere.cpp b/examples/WireSphere/wireSphere.cpp new file mode 100644 index 0000000..8ec5213 --- /dev/null +++ b/examples/WireSphere/wireSphere.cpp @@ -0,0 +1,102 @@ +/* + * Définition de la constante PI utilisée pour les calculs trigonométriques. + */ +float PI = 3.14159; + +/* + * Fonction qui retourne une matrice de rotation 2D autour de l'origine + * en fonction d'un angle donné en radians. + */ +mat2 rotation(float rad) { + return mat2(cos(rad), sin(rad), -sin(rad), cos(rad)); +} + +/* + * Fonction qui calcule la distance signée d'un point `p` à la surface d'une sphère de rayon `s`. + * La distance est positive à l'extérieur de la sphère et négative à l'intérieur. + */ +float sdSphere(vec3 p, float s) { + return length(p) - s; +} + +/* + * Fonction qui encode une couleur (vec3) en un entier au format ARGB (32 bits). + * Les composantes RGB sont clampées entre 0 et 1, puis converties en valeurs entières (0-255). + */ +int packARGB(vec3 c) { + int R = int(clamp(c.x, 0.0, 1.0) * 255.0); + int G = int(clamp(c.y, 0.0, 1.0) * 255.0); + int B = int(clamp(c.z, 0.0, 1.0) * 255.0); + int A = 255; // Alpha toujours à 255 (opaque) + return (A << 24) | (R << 16) | (G << 8) | B; +} + +void main() { + // Récupération des coordonnées du thread en cours d'exécution + uint x = gl_GlobalInvocationID.x; + uint y = gl_GlobalInvocationID.y; + + // Vérification des limites de l'écran + if(x >= WSX || y >= WSY) return; + + // Calcul de l'index du pixel dans le buffer de sortie + uint index = x + y * WSX; + + // Coordonnées du pixel en espace normalisé (0,0) en bas à gauche + vec2 fragCoord = vec2(float(x), float(y)); + vec2 iResolution = vec2(float(WSX), float(WSY)); + float t = float(step) * 0.01; // Temps écoulé normalisé + + // Normalisation des coordonnées UV (-1 à 1 sur l'axe y) + vec2 uv = (fragCoord - 0.5 * iResolution) / iResolution.y; + + // Calcul du centre de l'écran et de la direction de la souris + vec2 screenCenter = 0.5 * iResolution; + float mouseDir = atan(float(mousey) - screenCenter.y, float(mousex) - screenCenter.x); + + // Application des rotations en fonction du temps et de la souris + float rotAngleXZ = t + mouseDir; // Rotation dans le plan xz + float rotAngleYZ = -t * 1.2 + mouseDir; // Rotation dans le plan yz avec un facteur d'ajustement + + // Initialisation de la couleur de sortie et des paramètres de la caméra + vec3 col = vec3(0.0); + vec3 camPos = vec3(0.0, 0.0, 3.5); // Position de la caméra + vec3 rayDir = normalize(vec3(uv, -1.0)); // Direction du rayon normalisé + float depth = 0.0; // Distance parcourue par le rayon + vec3 p = vec3(0.0); + float d = 0.0; + + // Boucle de lancer de rayon (Raymarching) pour estimer l'intersection avec la sphère + for (int i = 0; i < 50; i++) { + p = camPos + depth * rayDir; // Calcul de la position actuelle du rayon + p.xz = rotation(rotAngleXZ) * p.xz; // Rotation sur l'axe XZ + p.yz = rotation(rotAngleYZ) * p.yz; // Rotation sur l'axe YZ + d = sdSphere(p, 1.25); // Calcul de la distance signée à la sphère + depth += d; // Avancement du rayon + if (d < 0.001 || depth > 10.0) break; // Arrêt si trop proche ou trop loin + } + + // Détermination de la couleur finale selon la profondeur atteinte + if (d > 10.0) { + col = vec3(0.0); // Fond noir si aucune intersection + } else { + // Calcul des coordonnées sphériques de l'intersection + float theta = atan(p.x, p.z); + float phi = acos(p.y / length(p)); + + // Paramètres de l'effet de quadrillage + float wireDelta = PI / 18.0; // Distance entre les lignes du quadrillage + float wireWidth = 0.02; // Largeur des lignes + + // Calcul de la couleur en fonction du quadrillage + float colTheta = smoothstep(wireWidth, 0.0, abs(mod(theta, wireDelta) - wireDelta/2.0)); + float colPhi = smoothstep(wireWidth, 0.0, abs(mod(phi, wireDelta) - wireDelta/2.0)); + col += vec3(max(colTheta, colPhi)); + } + + // Application d'un effet de profondeur pour assombrir avec la distance + col = mix(5.5 * col, vec3(0.0), smoothstep(0.0, 3.6, depth)); + + // Stockage de la couleur dans le buffer de sortie + data_0[index] = packARGB(col); +} diff --git a/examples/WireSphere/wireSphere.tscn b/examples/WireSphere/wireSphere.tscn new file mode 100644 index 0000000..3957193 --- /dev/null +++ b/examples/WireSphere/wireSphere.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=3 format=3 uid="uid://bpmms2lv1wfgk"] + +[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_htga1"] +[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/WireSphere/icon.svg" id="2_l2oj0"] + +[node name="Rainfx" type="Node2D"] + +[node name="ComputeShaderStudio2D" type="Node" parent="." node_paths=PackedStringArray("data")] +script = ExtResource("1_htga1") +glsl_file = "res://examples/WireSphere/wireSphere.cpp" +GLSL_code = "" +data = [NodePath("../Icon")] + +[node name="Icon" type="Sprite2D" parent="."] +position = Vector2(552, 324) +scale = Vector2(5.28736, 4.38342) +texture = ExtResource("2_l2oj0") diff --git a/examples/cells/cells.gd.uid b/examples/cells/cells.gd.uid new file mode 100644 index 0000000..e2b076c --- /dev/null +++ b/examples/cells/cells.gd.uid @@ -0,0 +1 @@ +uid://cwp31gi5aca3p diff --git a/examples/cells/example_cells.tscn b/examples/cells/example_cells.tscn index 6959c31..083951f 100644 --- a/examples/cells/example_cells.tscn +++ b/examples/cells/example_cells.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://cutxgtalwsp6q"] -[ext_resource type="Script" path="res://examples/cells/cells.gd" id="1_dw4h8"] -[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_oji6h"] +[ext_resource type="Script" uid="uid://cwp31gi5aca3p" path="res://examples/cells/cells.gd" id="1_dw4h8"] +[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/circle_project/icon.svg" id="2_oji6h"] [node name="Cells" type="Control" node_paths=PackedStringArray("data")] layout_mode = 3 diff --git a/examples/example_1.tscn b/examples/example_1.tscn index 7d67949..f7c2b98 100644 --- a/examples/example_1.tscn +++ b/examples/example_1.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=5 format=3 uid="uid://ddr6qtwy1pesd"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_6846p"] -[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_s3fct"] +[ext_resource type="Script" uid="uid://ctdqncychsdep" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_6846p"] +[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/circle_project/icon.svg" id="2_s3fct"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_dmk8h"] diff --git a/examples/example_2.tscn b/examples/example_2.tscn index 766e825..5e53a98 100644 --- a/examples/example_2.tscn +++ b/examples/example_2.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://cotswmubn7uvm"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_2cs40"] -[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_j6qu8"] +[ext_resource type="Script" uid="uid://ctdqncychsdep" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_2cs40"] +[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/circle_project/icon.svg" id="2_j6qu8"] [node name="Example2" type="Node2D"] diff --git a/examples/example_3.tscn b/examples/example_3.tscn index df2b8a6..7b7c77e 100644 --- a/examples/example_3.tscn +++ b/examples/example_3.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=4 format=3 uid="uid://cmucgsppcoo5e"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_eimw3"] -[ext_resource type="Script" path="res://examples/LabelStepPass.gd" id="2_4aq4t"] -[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_4upxj"] +[ext_resource type="Script" uid="uid://ctdqncychsdep" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_eimw3"] +[ext_resource type="Script" uid="uid://0ax0xb1gbjof" path="res://examples/LabelStepPass.gd" id="2_4aq4t"] +[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/circle_project/icon.svg" id="2_4upxj"] [node name="CompShadStudioEx3" type="Node2D"] diff --git a/examples/example_4.tscn b/examples/example_4.tscn index c777972..b5bc5ca 100644 --- a/examples/example_4.tscn +++ b/examples/example_4.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://b2ip5eftk3aij"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_ke3fj"] +[ext_resource type="Script" uid="uid://ctdqncychsdep" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_ke3fj"] [ext_resource type="Texture2D" uid="uid://2behgeplwycn" path="res://examples/grid_512x512.png" id="2_flqlh"] [node name="CompShadStudioEx4" type="Node2D"] diff --git a/examples/example_5.tscn b/examples/example_5.tscn index 43aa420..ef11118 100644 --- a/examples/example_5.tscn +++ b/examples/example_5.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=3 uid="uid://cets11mlsd8hb"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_cogap"] +[ext_resource type="Script" uid="uid://ctdqncychsdep" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_cogap"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_pm7bb"] diff --git a/examples/example_lenia_test.tscn b/examples/example_lenia_test.tscn index 6c2caef..a4782f1 100644 --- a/examples/example_lenia_test.tscn +++ b/examples/example_lenia_test.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=4 format=3 uid="uid://cljj33x767odp"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_wci4f"] -[ext_resource type="Script" path="res://examples/LabelStepPass.gd" id="2_ndkd3"] -[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="3_orsvs"] +[ext_resource type="Script" uid="uid://ctdqncychsdep" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_wci4f"] +[ext_resource type="Script" uid="uid://0ax0xb1gbjof" path="res://examples/LabelStepPass.gd" id="2_ndkd3"] +[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/circle_project/icon.svg" id="3_orsvs"] [node name="CompShadStudioEx3" type="Node2D"] diff --git a/examples/example_mandelbrot.gd.uid b/examples/example_mandelbrot.gd.uid new file mode 100644 index 0000000..51bcfa8 --- /dev/null +++ b/examples/example_mandelbrot.gd.uid @@ -0,0 +1 @@ +uid://b7q2bfveobmmm diff --git a/examples/example_mandelbrot.tscn b/examples/example_mandelbrot.tscn index a5e532c..15aa503 100644 --- a/examples/example_mandelbrot.tscn +++ b/examples/example_mandelbrot.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=4 format=3 uid="uid://d1hhshnvrt86e"] -[ext_resource type="Script" path="res://examples/example_mandelbrot.gd" id="1_5gp20"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_t5cx1"] -[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_dyrad"] +[ext_resource type="Script" uid="uid://b7q2bfveobmmm" path="res://examples/example_mandelbrot.gd" id="1_5gp20"] +[ext_resource type="Script" uid="uid://ctdqncychsdep" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_t5cx1"] +[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/circle_project/icon.svg" id="2_dyrad"] [node name="example_mandelbrot" type="Node2D"] script = ExtResource("1_5gp20") diff --git a/examples/example_psycho_seizure.tscn b/examples/example_psycho_seizure.tscn index f1e07d4..5a46685 100644 --- a/examples/example_psycho_seizure.tscn +++ b/examples/example_psycho_seizure.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://cdtqwwdxs783m"] -[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_26wk6"] -[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_urrfs"] +[ext_resource type="Script" uid="uid://ctdqncychsdep" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_26wk6"] +[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/circle_project/icon.svg" id="2_urrfs"] [node name="exeample_psycho_seizure" type="Node2D"] diff --git a/project.godot b/project.godot index 725be9c..e41abd7 100644 --- a/project.godot +++ b/project.godot @@ -11,8 +11,8 @@ config_version=5 [application] config/name="compute_shader_studio" -run/main_scene="res://examples/example_1.tscn" -config/features=PackedStringArray("4.3", "Forward Plus") +run/main_scene="uid://bpmms2lv1wfgk" +config/features=PackedStringArray("4.2", "Forward Plus") config/icon="res://addons/compute_shader_studio/icon.png" [editor_plugins]