summaryrefslogtreecommitdiff
path: root/workspaces
diff options
context:
space:
mode:
Diffstat (limited to 'workspaces')
-rw-r--r--workspaces/main/beat_test.track44
-rw-r--r--workspaces/main/pop_punk_drums.track2
-rw-r--r--workspaces/main/shaders/scene1.wgsl81
-rw-r--r--workspaces/main/shaders/sdf_test.wgsl9
-rw-r--r--workspaces/main/timeline.seq135
-rw-r--r--workspaces/main/workspace.cfg3
6 files changed, 185 insertions, 89 deletions
diff --git a/workspaces/main/beat_test.track b/workspaces/main/beat_test.track
new file mode 100644
index 0000000..1b7f9b1
--- /dev/null
+++ b/workspaces/main/beat_test.track
@@ -0,0 +1,44 @@
+# Pop-Punk High-Energy Drum Track
+# Converted from track.md drum sequence
+# 4/4 time signature, 16th note resolution
+
+BPM 90
+
+# Drum samples (General MIDI mapping)
+SAMPLE ASSET_KICK_1
+SAMPLE ASSET_SNARE_1
+
+# Pattern A: Main Driving Groove (bars 1-3)
+# 1 unit = 4 beats, 16th notes = 0.0625 units apart
+PATTERN main_groove LENGTH 1.0
+ # Snare: beats 2 and 4 (strong)
+ 0.2500, ASSET_SNARE_1, 1.0, 0.0
+ 0.7500, ASSET_SNARE_1, 1.0, 0.0
+ # Kick: syncopated pattern (galloping)
+ 0.0000, ASSET_KICK_1, 1.0, 0.0
+ 0.5000, ASSET_KICK_1, 1.0, 0.0
+ # Crash on beat 1
+ 0.0000, ASSET_CRASH_1, 0.9, 0.0
+
+
+# Score
+SCORE
+ 0.0, main_groove_crash
+ 1.0, main_groove_crash
+ 2.0, main_groove_crash
+ 3.0, main_groove_crash
+
+ 4.0, main_groove_crash
+ 5.0, main_groove_crash
+ 6.0, main_groove_crash
+ 7.0, main_groove_crash
+
+ 8.0, main_groove_crash
+ 9.0, main_groove_crash
+ 10.0, main_groove_crash
+ 11.0, main_groove_crash
+
+ 12.0, main_groove_crash
+ 13.0, main_groove_crash
+ 14.0, main_groove_crash
+ 15.0, main_groove_crash
diff --git a/workspaces/main/pop_punk_drums.track b/workspaces/main/pop_punk_drums.track
index f54bf9d..236b79f 100644
--- a/workspaces/main/pop_punk_drums.track
+++ b/workspaces/main/pop_punk_drums.track
@@ -1,6 +1,6 @@
# Pop-Punk High-Energy Drum Track
# Converted from track.md drum sequence
-# 165 BPM, 4/4 time signature, 16th note resolution
+# 4/4 time signature, 16th note resolution
BPM 90
diff --git a/workspaces/main/shaders/scene1.wgsl b/workspaces/main/shaders/scene1.wgsl
index 2723b66..8d5d5db 100644
--- a/workspaces/main/shaders/scene1.wgsl
+++ b/workspaces/main/shaders/scene1.wgsl
@@ -50,19 +50,22 @@ fn render0(ro: vec3<f32>, rd: vec3<f32>) -> vec3<f32> {
return clamp(col, vec3<f32>(0.0), vec3<f32>(10.0));
}
+const OBJ_BACKGROUND: f32 = 0.0;
+const OBJ_CUBE: f32 = 1.0;
+const OBJ_SPHERE: f32 = 2.0;
+const OBJ_PLANE: f32 = 3.0;
+
fn df(p_in: vec3<f32>) -> f32 {
var p = p_in;
p.x = p_in.x * g_rot0[0][0] + p_in.z * g_rot0[0][1];
p.z = p_in.x * g_rot0[1][0] + p_in.z * g_rot0[1][1];
// Cube
- var pc = p;
- pc -= vec3<f32>(-1.9, 0.0, 0.0);
+ var pc = p - vec3<f32>(-1.9, 0.0, 0.0);
let dCube = sdBox(pc, vec3<f32>(1.6));
// Sphere
- var ps = p;
- ps -= vec3<f32>(1.3, 0.0, 0.0);
+ var ps = p - vec3<f32>(1.3, 0.0, 0.0);
let dSphere = sdSphere(ps, 1.2);
// Ground plane
@@ -75,6 +78,41 @@ fn df(p_in: vec3<f32>) -> f32 {
return d;
}
+fn dfWithID(p_in: vec3<f32>) -> RayMarchResult {
+ var p = p_in;
+ p.x = p_in.x * g_rot0[0][0] + p_in.z * g_rot0[0][1];
+ p.z = p_in.x * g_rot0[1][0] + p_in.z * g_rot0[1][1];
+
+ // Cube
+ var pc = p - vec3<f32>(-1.9, 0.0, 0.0);
+ let dCube = sdBox(pc, vec3<f32>(1.6));
+
+ // Sphere
+ var ps = p - vec3<f32>(1.3, 0.0, 0.0);
+ let dSphere = sdSphere(ps, 1.2);
+
+ // Ground plane
+ let dPlane = p.y + 1.0;
+
+ // Find closest object
+ var result: RayMarchResult;
+ result.distance = dCube;
+ result.object_id = OBJ_CUBE;
+
+ if (dSphere < result.distance) {
+ result.distance = dSphere;
+ result.object_id = OBJ_SPHERE;
+ }
+
+ if (dPlane < result.distance) {
+ result.distance = dPlane;
+ result.object_id = OBJ_PLANE;
+ }
+
+ result.distance_max = result.distance;
+ return result;
+}
+
fn boxCol(col: vec3<f32>, nsp: vec3<f32>, rd: vec3<f32>, nnor: vec3<f32>, nrcol: vec3<f32>, nshd1: f32, nshd2: f32) -> vec3<f32> {
var nfre = 1.0 + dot(rd, nnor);
nfre *= nfre;
@@ -102,24 +140,35 @@ fn render1(ro: vec3<f32>, rd: vec3<f32>) -> vec3<f32> {
let skyCol_local = render0(ro, rd);
var col = skyCol_local;
- let nt = rayMarch(ro, rd, 0.0);
- if (nt < MAX_RAY_LENGTH) {
- let nsp = ro + rd * nt;
- let nnor = normal(nsp);
+ var init: RayMarchResult;
+ init.distance = 0.0;
+ init.distance_max = 0.0;
+ init.object_id = OBJ_BACKGROUND;
+
+ let result = rayMarchWithID(ro, rd, init);
+ if (result.distance < MAX_RAY_LENGTH) {
+ let nsp = reconstructPosition(ro, rd, result);
+ let nnor = normalWithID(nsp);
let nref = reflect(rd, nnor);
- let nrt = rayMarch(nsp, nref, 0.2);
+ var refl_init: RayMarchResult;
+ refl_init.distance = 0.2;
+ refl_init.distance_max = 0.2;
+ refl_init.object_id = OBJ_BACKGROUND;
+ let nrt_result = rayMarchWithID(nsp, nref, refl_init);
var nrcol = render0(nsp, nref);
- if (nrt < MAX_RAY_LENGTH) {
- let nrsp = nsp + nref * nrt;
- let nrnor = normal(nrsp);
+ if (nrt_result.distance < MAX_RAY_LENGTH) {
+ let nrsp = reconstructPosition(nsp, nref, nrt_result);
+ let nrnor = normalWithID(nrsp);
let nrref = reflect(nref, nrnor);
nrcol = boxCol(nrcol, nrsp, nref, nrnor, render0(nrsp, nrref), 1.0, 1.0);
}
- let nshd1 = mix(0.0, 1.0, shadow(nsp, normalize(lightPos1 - nsp), 0.1, distance(lightPos1, nsp)));
- let nshd2 = mix(0.0, 1.0, shadow(nsp, normalize(lightPos2 - nsp), 0.1, distance(lightPos2, nsp)));
+ let light_dist1 = distance(lightPos1, nsp);
+ let light_dist2 = distance(lightPos2, nsp);
+ let nshd1 = mix(0.0, 1.0, shadowWithStoredDistance(nsp, normalize(lightPos1 - nsp), light_dist1));
+ let nshd2 = mix(0.0, 1.0, shadowWithStoredDistance(nsp, normalize(lightPos2 - nsp), light_dist2));
col = boxCol(col, nsp, rd, nnor, nrcol, nshd1, nshd2);
}
@@ -146,9 +195,7 @@ fn effect(p: vec2<f32>) -> vec3<f32> {
#include "render/fullscreen_vs"
@fragment fn fs_main(@builtin(position) p: vec4<f32>) -> @location(0) vec4<f32> {
- // Flip Y to match ShaderToy convention (origin at bottom-left)
- let flipped = vec2<f32>(p.x, uniforms.resolution.y - p.y);
- let q = flipped / uniforms.resolution;
+ let q = p.xy / uniforms.resolution;
var coord = -1.0 + 2.0 * q;
coord.x *= uniforms.resolution.x / uniforms.resolution.y;
var col = effect(coord);
diff --git a/workspaces/main/shaders/sdf_test.wgsl b/workspaces/main/shaders/sdf_test.wgsl
index 3c97613..71310f2 100644
--- a/workspaces/main/shaders/sdf_test.wgsl
+++ b/workspaces/main/shaders/sdf_test.wgsl
@@ -22,6 +22,15 @@ fn df(p: vec3<f32>) -> f32 {
return min(d_sphere, d_box);
}
+// Two-pass distance function (required by raymarching.wgsl)
+fn dfWithID(p: vec3<f32>) -> RayMarchResult {
+ var result: RayMarchResult;
+ result.distance = df(p);
+ result.distance_max = result.distance;
+ result.object_id = 0.0;
+ return result;
+}
+
// Simple lighting
fn shade(pos: vec3<f32>, rd: vec3<f32>) -> vec3<f32> {
let n = normal(pos);
diff --git a/workspaces/main/timeline.seq b/workspaces/main/timeline.seq
index 3e9052b..05d9026 100644
--- a/workspaces/main/timeline.seq
+++ b/workspaces/main/timeline.seq
@@ -3,100 +3,95 @@
# BPM 90
SEQUENCE 0.00 0
- EFFECT - FlashCubeEffect 0.00 4.88
- EFFECT + FlashEffect 0.00 2.00 color=1.0,0.5,0.5 decay=0.95
- EFFECT + FadeEffect 0.20 2.00
- EFFECT + SolarizeEffect 0.00 4.00
- EFFECT + VignetteEffect 0.00 5.00 radius=0.6 softness=0.1
+ EFFECT - FlashCubeEffect 0.00 4.00
+# EFFECT + FlashEffect 0.00 2.00 color=1.0,0.5,0.5 decay=0.95
+# EFFECT + FadeEffect 2.00 4.00
+# EFFECT + SolarizeEffect 0.00 4.00
+ EFFECT + VignetteEffect 0.00 4.00 radius=0.6 softness=0.1
-SEQUENCE 5.00 0 "rotating cube"
- EFFECT + CircleMaskEffect 0.00 8.00 0.50
- EFFECT + RotatingCubeEffect 0.00 8.00
- EFFECT + GaussianBlurEffect 2.00 4.00 strength=1.0
- EFFECT + GaussianBlurEffect 6.00 8.00 strength=2.0
+SEQUENCE 4.00 0 "rotating cube"
+ EFFECT + CircleMaskEffect 0.00 4.00 0.50
+ EFFECT + RotatingCubeEffect 0.00 4.00
+ EFFECT + GaussianBlurEffect 1.00 4.00 strength=1.0
-SEQUENCE 12.00 0
- EFFECT - FlashCubeEffect 0.22 2.90
+SEQUENCE 8.00 0 "Flash Cube"
+ EFFECT - FlashCubeEffect 0.00 4.02
EFFECT + FlashEffect 0.00 0.40
-SEQUENCE 14.00 1 "spray"
- EFFECT + ParticleSprayEffect 0.00 4.00
- EFFECT + ParticlesEffect 0.00 6.00
+SEQUENCE 12.00 1 "spray"
+ EFFECT + ParticleSprayEffect 0.00 2.00
+ EFFECT + ParticlesEffect 2.00 4.00
EFFECT = GaussianBlurEffect 0.00 4.00 strength=3.0
-SEQUENCE 17.00 2 "Hybrid3D"
+SEQUENCE 16.00 2 "Hybrid3D + CNN"
EFFECT + ThemeModulationEffect 0.00 4.00
- EFFECT + HeptagonEffect 0.40 4.00
- EFFECT + ParticleSprayEffect 0.00 4.00
- EFFECT = ParticlesEffect 0.00 4.00
+ EFFECT + HeptagonEffect 0.00 4.00
+ EFFECT + ParticleSprayEffect 0.00 2.00
+ EFFECT = ParticlesEffect 2.00 4.00
EFFECT + Hybrid3DEffect 0.00 4.00
- EFFECT + GaussianBlurEffect 0.00 4.00
EFFECT + CNNEffect 0.00 4.00 layers=3 blend=.9
-SEQUENCE 21.00 0 "CNN effect"
- EFFECT + HeptagonEffect 0.00 22.00
- EFFECT + Scene1Effect 0.00 24.00
- EFFECT + CNNEffect 2.00 24.00 layers=3 blend=.5
+SEQUENCE 20.00 0 "CNN effect"
+ EFFECT + HeptagonEffect 0.00 8.00
+ EFFECT + Scene1Effect 0.00 8.00
+ EFFECT + CNNEffect 6.00 8.00 layers=3 blend=.5
-SEQUENCE 44.00 0 "buggy"
- EFFECT + HeptagonEffect 0.00 0.40
- EFFECT + FadeEffect 0.22 2.02
+SEQUENCE 28.00 0 "buggy"
+ EFFECT + HeptagonEffect 0.00 2.00
+ EFFECT + FadeEffect 0.00 2.00
-SEQUENCE 44.00 3 "Seq-8"
- EFFECT + ThemeModulationEffect 0.00 8.00
- EFFECT = HeptagonEffect 0.00 8.00
+SEQUENCE 30.00 3 "Seq-8"
+ EFFECT + ThemeModulationEffect 0.00 10.00
+ EFFECT = HeptagonEffect 0.00 10.00
EFFECT + GaussianBlurEffect 0.00 10.00 strength=1.5
EFFECT + ChromaAberrationEffect 0.00 10.00 offset=0.03 angle=0.785
EFFECT + SolarizeEffect 0.00 10.00
-SEQUENCE 46.00 2
- EFFECT - FlashCubeEffect 0.40 3.00
+SEQUENCE 40.00 2
+ EFFECT - FlashCubeEffect 0.00 4.00
EFFECT + HeptagonEffect 0.00 4.00
EFFECT + ParticleSprayEffect 0.00 4.00
- EFFECT + ParticlesEffect 0.00 4.00
-SEQUENCE 46.00 2 "Fade"
- EFFECT - FlashCubeEffect 0.40 3.00
- EFFECT + FlashEffect 0.00 2.00
+SEQUENCE 44.00 2 "Fade"
+ EFFECT - FlashCubeEffect 0.00 2.00
+ EFFECT + FlashEffect 1.00 2.00
-SEQUENCE 48.00 10
- EFFECT - FlashCubeEffect 0.40 3.00
- EFFECT + GaussianBlurEffect 0.00 4.00
- EFFECT + FlashEffect 0.00 0.40
- EFFECT = FlashEffect 1.00 0.40
+SEQUENCE 46.00 10
+ EFFECT - FlashCubeEffect 0.00 3.00
+ EFFECT + GaussianBlurEffect 0.00 3.00
+ EFFECT + FlashEffect 0.00 3.00
-SEQUENCE 51.00 1
- EFFECT + ThemeModulationEffect 0.00 16.00
- EFFECT + HeptagonEffect 0.40 4.00
- EFFECT + ParticleSprayEffect 0.00 16.00
- EFFECT + Hybrid3DEffect 0.00 16.12
- EFFECT + GaussianBlurEffect 0.00 16.00
- EFFECT + ChromaAberrationEffect 0.00 16.28
- EFFECT + SolarizeEffect 0.00 15.76
+SEQUENCE 49.00 1
+ EFFECT + ThemeModulationEffect 0.00 8.00
+ EFFECT + HeptagonEffect 0.00 8.00
+ EFFECT + ParticleSprayEffect 0.00 8.00
+ EFFECT + Hybrid3DEffect 0.00 8.00
+ EFFECT + GaussianBlurEffect 0.00 8.00
+ EFFECT + ChromaAberrationEffect 0.00 8.00
-SEQUENCE 66.00 0
- EFFECT + ThemeModulationEffect 0.00 6.00
- EFFECT + VignetteEffect 0.00 6.00 radius=0.6 softness=0.3
- EFFECT + SolarizeEffect 0.00 6.00
+SEQUENCE 57.00 0
+ EFFECT + ThemeModulationEffect 0.00 7.00
+ EFFECT + VignetteEffect 0.00 7.00 radius=0.6 softness=0.3
+ EFFECT + SolarizeEffect 0.00 7.00
-SEQUENCE 71.00 0
- EFFECT + ThemeModulationEffect 0.00 8.00
- EFFECT + HeptagonEffect 0.40 4.00
- EFFECT + GaussianBlurEffect 0.00 16.00
+SEQUENCE 64.00 0
+ EFFECT + ThemeModulationEffect 0.00 4.00
+ EFFECT + HeptagonEffect 0.00 4.00
+ EFFECT + GaussianBlurEffect 0.00 4.00
EFFECT + SolarizeEffect 0.00 4.00
-SEQUENCE 85.00 0 "double hepta!"
- EFFECT + ThemeModulationEffect 0.00 12.00
- EFFECT = HeptagonEffect 0.40 4.00
- EFFECT + Hybrid3DEffect 0.00 8.00
- EFFECT + ParticleSprayEffect 0.00 11.00
- EFFECT + HeptagonEffect 0.00 16.00
- EFFECT + ChromaAberrationEffect 0.00 15.00
- EFFECT + GaussianBlurEffect 0.00 16.00
+SEQUENCE 68.00 0 "double hepta!"
+ EFFECT + ThemeModulationEffect 0.00 4.00
+ EFFECT = HeptagonEffect 0.00 4.00
+ EFFECT + Hybrid3DEffect 0.00 4.00
+ EFFECT + ParticleSprayEffect 0.00 4.00
+ EFFECT + HeptagonEffect 0.00 4.00
+ EFFECT + ChromaAberrationEffect 0.00 4.00
+ EFFECT + GaussianBlurEffect 0.00 4.00
-SEQUENCE 100.00 0
- EFFECT + ThemeModulationEffect 0.00 8.00
- EFFECT + HeptagonEffect 0.00 19.00
- EFFECT + ChromaAberrationEffect 0.00 18.00
- EFFECT + GaussianBlurEffect 0.00 16.00
+SEQUENCE 72.00 0 "The End"
+ EFFECT + ThemeModulationEffect 0.00 7.00
+ EFFECT + HeptagonEffect 0.00 7.00
+ EFFECT + ChromaAberrationEffect 0.00 7.00
+ EFFECT + GaussianBlurEffect 0.00 7.00
diff --git a/workspaces/main/workspace.cfg b/workspaces/main/workspace.cfg
index 1c2f4c0..5eff423 100644
--- a/workspaces/main/workspace.cfg
+++ b/workspaces/main/workspace.cfg
@@ -6,7 +6,8 @@ version = "1.0"
[build]
target = "demo64k"
timeline = "timeline.seq"
-music = "pop_punk_drums.track"
+# music = "pop_punk_drums.track"
+music = "beat_test.track"
assets = "assets.txt"
asset_dirs = ["music/", "weights/", "obj/"]
shader_dirs = ["shaders/"]