diff options
Diffstat (limited to 'workspaces')
| -rw-r--r-- | workspaces/main/beat_test.track | 44 | ||||
| -rw-r--r-- | workspaces/main/pop_punk_drums.track | 2 | ||||
| -rw-r--r-- | workspaces/main/shaders/scene1.wgsl | 81 | ||||
| -rw-r--r-- | workspaces/main/shaders/sdf_test.wgsl | 9 | ||||
| -rw-r--r-- | workspaces/main/timeline.seq | 135 | ||||
| -rw-r--r-- | workspaces/main/workspace.cfg | 3 |
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/"] |
