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 0000000..600534d Binary files /dev/null and b/assets/materials/shaders/fractal_steel.material differ diff --git a/assets/materials/shaders/megalith_base.material b/assets/materials/shaders/megalith_base.material new file mode 100644 index 0000000..d520db2 Binary files /dev/null and b/assets/materials/shaders/megalith_base.material differ diff --git a/assets/materials/shaders/megalith_interior.material b/assets/materials/shaders/megalith_interior.material new file mode 100644 index 0000000..57c733a Binary files /dev/null and b/assets/materials/shaders/megalith_interior.material differ