Skip to content

WireSphere #13

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open
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
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://ctdqncychsdep
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://dhln33jbr2byv
1 change: 1 addition & 0 deletions examples/LabelStepPass.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://0ax0xb1gbjof
File renamed without changes
Original file line number Diff line number Diff line change
Expand Up @@ -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]

Expand Down
102 changes: 102 additions & 0 deletions examples/WireSphere/wireSphere.cpp
Original file line number Diff line number Diff line change
@@ -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);
}
17 changes: 17 additions & 0 deletions examples/WireSphere/wireSphere.tscn
Original file line number Diff line number Diff line change
@@ -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")
1 change: 1 addition & 0 deletions examples/cells/cells.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://cwp31gi5aca3p
4 changes: 2 additions & 2 deletions examples/cells/example_cells.tscn
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions examples/example_1.tscn
Original file line number Diff line number Diff line change
@@ -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"]

Expand Down
4 changes: 2 additions & 2 deletions examples/example_2.tscn
Original file line number Diff line number Diff line change
@@ -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"]

Expand Down
6 changes: 3 additions & 3 deletions examples/example_3.tscn
Original file line number Diff line number Diff line change
@@ -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"]

Expand Down
2 changes: 1 addition & 1 deletion examples/example_4.tscn
Original file line number Diff line number Diff line change
@@ -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"]
Expand Down
2 changes: 1 addition & 1 deletion examples/example_5.tscn
Original file line number Diff line number Diff line change
@@ -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"]

Expand Down
6 changes: 3 additions & 3 deletions examples/example_lenia_test.tscn
Original file line number Diff line number Diff line change
@@ -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"]

Expand Down
1 change: 1 addition & 0 deletions examples/example_mandelbrot.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://b7q2bfveobmmm
6 changes: 3 additions & 3 deletions examples/example_mandelbrot.tscn
Original file line number Diff line number Diff line change
@@ -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")
Expand Down
4 changes: 2 additions & 2 deletions examples/example_psycho_seizure.tscn
Original file line number Diff line number Diff line change
@@ -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"]

Expand Down
4 changes: 2 additions & 2 deletions project.godot
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down