Porta tots els shaders a Vulkan i Metal

This commit is contained in:
2026-05-04 12:35:58 +02:00
parent 8d42d5741f
commit ef37a7a2e6
38 changed files with 2942 additions and 8 deletions

127
shaders/dbz/dbz.frag.msl Normal file
View File

@@ -0,0 +1,127 @@
#include <metal_stdlib>
using namespace metal;
// New Leaked 3I/Atlas NASA Footage — msm01
// MSL port of dbz.vk.glsl.
struct ShadertoyUBO {
float iTime;
float2 iResolution;
};
struct PassthroughVOut {
float4 pos [[position]];
float2 uv;
};
constant float NBCaps = 3.0;
static float2x2 r2d(float a) {
float c = cos(a), s = sin(a);
return float2x2(c, s, -s, c);
}
static float hash12(float2 p) {
float3 p3 = fract(float3(p.xyx) * 0.1031);
p3 += dot(p3, p3.yzx + 33.33);
return fract((p3.x + p3.y) * p3.z);
}
static float fbm(float2 v_p) {
float pvpx = v_p.x;
float2 V1 = float2(floor(pvpx));
float2 V2 = float2(floor(pvpx + 1.0));
return mix(hash12(V1), hash12(V2), smoothstep(0.0, 1.0, fract(pvpx)));
}
#define S(a,b,c) smoothstep(a,b,c)
fragment float4 dbz_fs(PassthroughVOut in [[stage_in]],
constant ShadertoyUBO& U [[buffer(0)]]) {
float2 fragCoord = in.uv * U.iResolution;
float2 p = float2((1.0 / U.iResolution.y) * (fragCoord.x - U.iResolution.x / 2.0),
fragCoord.y / U.iResolution.y - 0.5);
p.x = -p.x;
p *= 150.0;
float4 col = float4(0.05, 0.05, 0.15, 1.0);
float2 save1 = p;
p = p * r2d(-0.05);
col = mix(col, float4(0.2, 0.3, 0.5, 1.0),
smoothstep(75.0, 0.0, abs(p.y - 5.0 * fbm(float2(0.01 * (p.x - 33.333 * U.iTime))) + 3.5)));
p = p * r2d(0.05);
p = p * r2d(-0.05);
p *= 0.35;
p += float2(-5.0 * U.iTime, 0.0);
float2 b = fract(5.0 * p);
p = floor(5.0 * p);
if (fbm(float2(p.x * p.y)) > 0.996) {
col += clamp(1.0 - pow(3.0 * length(b + float2(-0.5)), 0.5), 0.0, 1.0);
}
p = save1;
float2 save3;
float Nb_Capsules = clamp(NBCaps, 0.0, 4.0);
for (float i = 0.0; i < Nb_Capsules; i++) {
p = save1;
p = p * r2d(-0.05);
p *= 2.5;
p *= 1.0 - 0.25 * i;
p += float2(150.0 * fbm(float2(0.15 * U.iTime + i * 54.321)) - 75.0,
50.0 * sin(0.25 * U.iTime + i * 54.321) - 25.0);
save3 = p;
p *= 0.04;
p.y = abs(p.y);
if (p.x > 0.0) {
col += float4(0.0, 1.0, 0.5, 1.0) * smoothstep(0.2, 0.0, abs(p.y - 0.05 * fbm(float2(1.5 * p.x - 40.0 * U.iTime))) - 0.05) * smoothstep(29.0, 0.0, abs(p.x));
col += float4(1.0, 1.0, 1.0, 1.0) * smoothstep(0.1, 0.0, abs(p.y - 0.05 * fbm(float2(1.5 * p.x - 40.0 * U.iTime))) - 0.05) * smoothstep(29.0, 0.0, abs(p.x));
}
p = save3;
p.y = abs(p.y);
p += float2(-10.0, 0.0);
p *= float2(0.75, 1.0);
col += 0.8 * float4(0.0, 1.0, 0.5, 1.0) * S(20.0, 0.0, length(p) - 25.0 + 7.0 * sin(0.30 * length(p) * atan2(p.y, p.x) + 55.0 * U.iTime));
col += 0.8 * float4(1.0, 1.0, 1.0, 1.0) * S(20.0, 0.0, length(p) - 20.0 + 7.0 * sin(0.30 * length(p) * atan2(p.y, p.x) + 55.0 * U.iTime));
p = save3;
col = mix(col, float4(1.0), 0.5 * S(10.0, 0.0, length(p + float2(5.0, 0.0)) - 20.0) * abs(sin(50.0 * U.iTime)));
col = mix(col, float4(1.0), 0.5 * S(20.0, 0.0, length(p + float2(5.0, 0.0)) - 20.0));
col = mix(col, float4(1.0), S(0.01, 0.0, length(p) - 20.0));
if (length(p) - 20.0 < 0.0) {
col = mix(col, float4(0.65, 0.68, 0.68 + 0.1 * (3.0 - i), 1.0), S(0.5, 0.0, length(p - float2(2.0, 0.0)) - 17.0));
if (S(0.0, 1.0, length(float2(3.0, 2.0) * p + float2(33.5, 0.0)) - 23.0) > 0.0) {
col = mix(col, float4(0.45, 0.55, 0.55 + 0.1 * (3.0 - i), 1.0),
0.75 * S(0.5, 0.0, length(p - float2(2.0, 0.0) + 0.5 * fbm(float2(4.5 * atan2(p.y, p.x)))) - 9.0));
}
col = mix(col, float4(0.0), S(0.2, 0.0, abs(length(p) - 19.9) - 0.20));
col = mix(col, float4(0.5, 0.2, 0.3, 1.0)
- S(5.0, 0.0, length(p + float2(-6.0, 15.0)) - 20.0)
- S(0.25, 0.0, abs(length(p + float2(0.0, 3.0)) - 15.0) - 0.4)
- S(0.0, 1.5, p.y - 8.5)
+ 0.25 * float4(1.0, 0.5, 0.0, 1.0) * S(10.0, 0.0, abs(p.y))
,
S(0.5, 0.0, length(float2(3.0, 2.0) * p + float2(35.0, 0.0)) - 19.9));
col = mix(col, float4(0.0, 0.0, 0.0, 1.0), S(1.0, 0.0, abs(length(float2(3.0, 2.0) * p + float2(35.0, 0.0)) - 19.9) - 0.1));
col = mix(col, float4(0.0, 0.0, 0.0, 1.0), S(1.0, 0.0, abs(length(float2(3.0, 2.0) * p + float2(33.5, 0.0)) - 23.0) - 0.1));
if (p.y > 0.0) col = mix(col, float4(0.0, 0.0, 0.0, 1.0), S(1.0, 0.0, abs(length(float2(3.0, 2.0) * p + float2(29.0, 0.0)) - 30.0) - 0.1));
if (p.y < 0.0) col = mix(col, float4(0.0, 0.0, 0.0, 1.0), S(1.0, 0.0, abs(length(float2(3.0, 2.0) * p + float2(-31.0, 0.0)) - 30.0) - 0.1));
}
}
return clamp(col, 0.0, 1.0);
}

BIN
shaders/dbz/dbz.frag.spv Normal file

Binary file not shown.

127
shaders/dbz/dbz.vk.glsl Normal file
View File

@@ -0,0 +1,127 @@
#version 450
// Name: New Leaked 3I/Atlas NASA Footage
// Author: msm01
// URL: https://www.shadertoy.com/view/3ftcRr
layout(location = 0) in vec2 vUV;
layout(location = 0) out vec4 FragColor;
layout(set = 3, binding = 0) uniform ShadertoyUBO {
float iTime;
vec2 iResolution;
};
#define s(a,b,c) smoothstep(a,b,c)
#define PI 3.14159
#define NBCaps 3.
mat2 r2d(float a) { float c = cos(a), s = sin(a); return mat2(c, s, -s, c); }
float metaDiamond(vec2 p, vec2 pixel, float r) { vec2 d = abs(p - pixel); return r / (d.x + d.y); }
float hash12(vec2 p) {
vec3 p3 = fract(vec3(p.xyx) * .1031);
p3 += dot(p3, p3.yzx + 33.33);
return fract((p3.x + p3.y) * p3.z);
}
float fbm(in vec2 v_p) {
float pvpx = v_p.x;
vec2 V1 = vec2(floor(pvpx));
vec2 V2 = vec2(floor(pvpx + 1.0));
return mix(hash12(V1), hash12(V2), smoothstep(0.0, 1.0, fract(pvpx)));
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 p = vec2((1.0 / iResolution.y) * (fragCoord.x - iResolution.x / 2.0),
fragCoord.y / iResolution.y - 0.5);
p.x = -p.x;
p *= 150.0;
vec4 col = vec4(0.05, 0.05, 0.15, 1.0);
vec2 save1 = p;
vec2 save2 = p;
p *= r2d(-0.05);
col = mix(col, vec4(0.2, 0.3, 0.5, 1.0),
smoothstep(75.0, 0.0, abs(p.y - 5.0 * fbm(vec2(0.01 * (p.x - 33.333 * iTime))) + 3.5)));
p *= r2d(0.05);
p *= r2d(-0.05);
p *= 0.35;
p += vec2(-5.0 * iTime, 0.0);
vec2 b = fract(5.0 * p);
p = floor(5.0 * p);
if (fbm(vec2(p.x * p.y)) > 0.996) col += clamp(1.0 - pow(3.0 * length(b + vec2(-0.5)), 0.5), 0.0, 1.0);
p = save1;
vec2 save3;
float Nb_Capsules = clamp(NBCaps, 0.0, 4.0);
for (float i = 0.0; i < Nb_Capsules; i++) {
p = save1;
p *= r2d(-0.05);
p *= 2.5;
p *= 1.0 - 0.25 * i;
p += vec2(150.0 * fbm(vec2(0.15 * iTime + i * 54.321)) - 75.0,
50.0 * sin(0.25 * iTime + i * 54.321) - 25.0);
save3 = p;
p *= 0.04;
p.y = abs(p.y);
if (p.x > 0.0) {
col += vec4(0.0, 1.0, 0.5, 1.0) * smoothstep(0.2, 0.0, abs(p.y - 0.05 * fbm(vec2(1.5 * p.x - 40.0 * iTime))) - 0.05) * smoothstep(29.0, 0.0, abs(p.x));
col += vec4(1.0, 1.0, 1.0, 1.0) * smoothstep(0.1, 0.0, abs(p.y - 0.05 * fbm(vec2(1.5 * p.x - 40.0 * iTime))) - 0.05) * smoothstep(29.0, 0.0, abs(p.x));
}
p = save3;
p.y = abs(p.y);
p += vec2(-10.0, 0.0);
p *= vec2(0.75, 1.0);
col += 0.8 * vec4(0.0, 1.0, 0.5, 1.0) * s(20.0, 0.0, length(p) - 25.0 + 7.0 * sin(0.30 * length(p) * atan(p.y, p.x) + 55.0 * iTime));
col += 0.8 * vec4(1.0, 1.0, 1.0, 1.0) * s(20.0, 0.0, length(p) - 20.0 + 7.0 * sin(0.30 * length(p) * atan(p.y, p.x) + 55.0 * iTime));
p = save3;
col = mix(col, vec4(1.0), 0.5 * s(10.0, 0.0, length(p + vec2(5.0, 0.0)) - 20.0) * abs(sin(50.0 * iTime)));
col = mix(col, vec4(1.0), 0.5 * s(20.0, 0.0, length(p + vec2(5.0, 0.0)) - 20.0));
col = mix(col, vec4(1.0), s(0.01, 0.0, length(p) - 20.0));
if (length(p) - 20.0 < 0.0) {
col = mix(col, vec4(0.65, 0.68, 0.68 + 0.1 * (3.0 - i), 1.0), s(0.5, 0.0, length(p - vec2(2.0, 0.0)) - 17.0));
if (s(0.0, 1.0, length(vec2(3.0, 2.0) * p + vec2(33.5, 0.0)) - 23.0) > 0.0)
col = mix(col, vec4(0.45, 0.55, 0.55 + 0.1 * (3.0 - i), 1.0),
0.75 * s(0.5, 0.0, length(p - vec2(2.0, 0.0) + 0.5 * fbm(vec2(4.5 * atan(p.y, p.x)))) - 9.0));
col = mix(col, vec4(0.0), s(0.2, 0.0, abs(length(p) - 19.9) - 0.20));
col = mix(col, vec4(0.5, 0.2, 0.3, 1.0)
- s(5.0, 0.0, length(p + vec2(-6.0, 15.0)) - 20.0)
- s(0.25, 0.0, abs(length(p + vec2(0.0, 3.0)) - 15.0) - 0.4)
- s(0.0, 1.5, p.y - 8.5)
+ 0.25 * vec4(1.0, 0.5, 0.0, 1.0) * s(10.0, 0.0, abs(p.y))
,
s(0.5, 0.0, length(vec2(3.0, 2.0) * p + vec2(35.0, 0.0)) - 19.9));
col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), s(1.0, 0.0, abs(length(vec2(3.0, 2.0) * p + vec2(35.0, 0.0)) - 19.9) - 0.1));
col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), s(1.0, 0.0, abs(length(vec2(3.0, 2.0) * p + vec2(33.5, 0.0)) - 23.0) - 0.1));
if (p.y > 0.0) col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), s(1.0, 0.0, abs(length(vec2(3.0, 2.0) * p + vec2(29.0, 0.0)) - 30.0) - 0.1));
if (p.y < 0.0) col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), s(1.0, 0.0, abs(length(vec2(3.0, 2.0) * p + vec2(-31.0, 0.0)) - 30.0) - 0.1));
}
}
fragColor = clamp(col, 0.0, 1.0);
}
void main() {
vec2 fragCoordPixels = vUV * iResolution;
vec4 outColor;
mainImage(outColor, fragCoordPixels);
FragColor = outColor;
}