From 3352e2477138c01672f53ed66e60ec24eb82328f Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Fri, 3 Oct 2025 15:06:48 -0600 Subject: [PATCH] Fractal steel material --- .../materials/shaders/fractal_steel.gdshader | 103 ++++++++++++++++++ .../shaders/fractal_steel.gdshader.uid | 1 + .../materials/shaders/fractal_steel.material | Bin 0 -> 436 bytes .../materials/shaders/megalith_base.material | Bin 0 -> 465 bytes .../shaders/megalith_interior.material | Bin 0 -> 469 bytes 5 files changed, 104 insertions(+) create mode 100644 assets/materials/shaders/fractal_steel.gdshader create mode 100644 assets/materials/shaders/fractal_steel.gdshader.uid create mode 100644 assets/materials/shaders/fractal_steel.material create mode 100644 assets/materials/shaders/megalith_base.material create mode 100644 assets/materials/shaders/megalith_interior.material diff --git a/assets/materials/shaders/fractal_steel.gdshader b/assets/materials/shaders/fractal_steel.gdshader new file mode 100644 index 0000000..9a418a1 --- /dev/null +++ b/assets/materials/shaders/fractal_steel.gdshader @@ -0,0 +1,103 @@ +// Voronoi fractal steel material +// Based on https://www.shadertoy.com/view/4sl3Dr +shader_type spatial; + +uniform vec2 uv_scale = vec2(1.0); +uniform float edge_sharpness = 0.25; + +uniform vec3 base_color: source_color = vec3(1.0); + +uniform int octaves = 3; + +uniform float octave_dropoff = 0.7; +uniform float octave_scale = 3.0; + + +uniform float metallic = 1.0; +uniform float roughness_scale = 1.0; +uniform float bump_strength = 1.0; + +// 1D random numbers +float rand(float n) +{ + return fract(sin(n) * 43758.5453123374897); +} + +// 2D random numbers +vec2 rand2(vec2 p) +{ + return fract(vec2(sin(p.x * 591.32 + p.y * 154.077), cos(p.x * 391.32 + p.y * 49.077))); +} + +// 1D noise +float noise1(float p) +{ + float fl = floor(p); + float fc = fract(p); + return mix(rand(fl), rand(fl + 1.0), fc); +} + +// voronoi distance noise, based on iq's articles +float voronoi(vec2 x) +{ + vec2 p = floor(x); + vec2 f = fract(x); + + vec2 res = vec2(8.0); + for(float j = -1.0; j <= 1.0; j ++) + { + for(float i = -1.0; i <= 1.0; i ++) + { + vec2 b = vec2(i, j); + vec2 r = vec2(b) - f + rand2(p + b); + + // chebyshev distance, one of many ways to do this + float d = max(abs(r.x), abs(r.y)); + + if(d < res.x) + { + res.y = res.x; + res.x = d; + } + else if(d < res.y) + { + res.y = d; + } + } + } + return res.y - res.x; +} + +void fragment() { + vec2 uv = (UV - 0.5) * 2.0 * uv_scale; + + float value = 0.0; + + // Octaves + float a = 0.6; + float f = 1.0; + for(int i = 0; i < octaves; i++) { + float v1 = voronoi(uv * f + 5.0); + float v2 = 0.0; + + // Sharp edges + v1 = 1.0 - smoothstep(0.0, edge_sharpness, v1); + // noise as intensity map + v2 = a * (noise1(v1 * 5.5 + 0.1)); + + value += v2; + + f *= octave_scale; + a *= octave_dropoff; + } + + // Use value as bump map + float dZ = 1.0 / bump_strength; + vec3 nmap = normalize(vec3(dFdx(value), dFdy(value), dZ)); + NORMAL_MAP = nmap / 2.0 + 1.0; + + + ALBEDO = value * base_color; + ROUGHNESS = value * roughness_scale; + METALLIC = metallic; +} \ No newline at end of file diff --git a/assets/materials/shaders/fractal_steel.gdshader.uid b/assets/materials/shaders/fractal_steel.gdshader.uid new file mode 100644 index 0000000..b66e73f --- /dev/null +++ b/assets/materials/shaders/fractal_steel.gdshader.uid @@ -0,0 +1 @@ +uid://c0gt2lo07w7w diff --git a/assets/materials/shaders/fractal_steel.material b/assets/materials/shaders/fractal_steel.material new file mode 100644 index 0000000000000000000000000000000000000000..600534d1358e648acc6d1e702f5061e29f1956d2 GIT binary patch literal 436 zcmV;l0ZaZ;Q$s@n000005C8yL0{{S=0RR9fwJ-f(S^|{}0QS>EHehYi0Wb`C2q@OT zo;6lqD&?a8f0k_0kWF4jh%`yN+!FxU@OFH+!Uiz7+D1CWcCL=1)s7S}05JeH0AEcv z&39YaPtF$=%J>#?Cwuw-=AMm`6qMIN^562P8ShjJUQ032e}w-6{{#MC{t~`z9W}gr zH;xtSx0kgL->9%(siS!3YRbwz&intsyOn$MVz>X8W6X?Y#@yqzwuB_Asn)2T+pQEu z(G&jxKDmq`Hm_}Y_T#i}^nhKR2x{;1Qo~0LiGW%sZOVm{|c4q|Cs)ZrSd;h@pxqHkltG(j@J2|2&*Z2}k@6Em`+;sj08~X{bKe|9`X9DK!8z z0672`Ymb-8Cccc zCi7w$2LgDUsy1Pa{ z`Cp;@kDv(n=2`QKS}jIF06+mJIUrzyF;q7mVJI2{&x#l+05{_)y(2sxXvmwkF(R); zTRPG(YF&+G7TZYH3uxhb!Qt+pKC!@E6_gaFFeU}MV+1ED0cz{m2~A*dng<1c9>NU(|Gh$!oo>F5Dbu4%n+R%(Q6RO9Ezig_R2!(&qFt}Y6WEed=7J1 HQd2`iR=(0y literal 0 HcmV?d00001 diff --git a/assets/materials/shaders/megalith_interior.material b/assets/materials/shaders/megalith_interior.material new file mode 100644 index 0000000000000000000000000000000000000000..57c733a25d785cbee2d672c256f0c7a991691823 GIT binary patch literal 469 zcmV;`0V@7dQ$s@n000005C8yT0{{TM0RR9fwJ-f(Vgj8F0H#$-JwT@@9m52uta8DL zpJTx-mHmCbV;Jw>EGw35Qjtw|NJy;YCIxNHir~HWs&z);QA||VmBhksMNu@`k5V=O zHUK*S+~c)2iLa)c<-0BHC+CX_Wqb>{lfC?Z;+Y25=>P!(ssEEl&3LDV@LGzA{zv>* z_@D5f@(0%IE$M`k;w+{se4-np8xau4(VzwmD5-W=KO zzrz8{jAh0F3p!2%Jhv`Q+@1ZRPN+<(x@xWJx!qb-oaXqC@X2Kiv3YIFvmd8*BMj{7 zBx@XIG3s0mb8!+$a*_idAyMeJR3JVNpbZfQAPFu3{%1a$&8C5&gF>Y|9yn0YsZ@0T zFCNqXG5w(bl!@ejMN;4zmRt6)nMJ);<46z)2sR*K0vR&g4q+Bk=01Zx?_X$Xnzv%( zJFgR4I%;$@kWI!gV$qBkFa~E99`cwCE6Kx#XKE-ZTw#osG{g{if-|auv^K1oM+=Zi z>#X(rqZMmMj