[gd_resource type="ShaderMaterial" format=3 uid="uid://bincx38n8hupa"]
[ext_resource type="Shader" uid="uid://dajae1870kijp" path="res://blender/mountain_voronoi3.Mountain.meshbake.gdshader" id="1_pfa3r"]
[ext_resource type="Shader" uid="uid://bbkvm5uk2ixcy" path="res://blender/mountain_voronoi3.Mountain.gdshader" id="2_80hhj"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_1k5xf"]
render_priority = 0
shader = ExtResource("1_pfa3r")
shader_parameter/bb_aa_strength = 1.0
shader_parameter/bb_gen_min = Vector3(-6000, -300, -6000)
shader_parameter/bb_gen_size = Vector3(12000, 600, 12000)
shader_parameter/bb_gen_from_uv = 0.0
shader_parameter/bb_coord_scale = 1.0
shader_parameter/bb_world_to_object = Projection(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
shader_parameter/bb_world_to_object_on = 0.0
[resource]
render_priority = 0
shader = ExtResource("2_80hhj")
shader_parameter/bb_aa_strength = 1.0
shader_parameter/bb_gen_min = Vector3(-6000, -300, -6000)
shader_parameter/bb_gen_size = Vector3(12000, 600, 12000)
shader_parameter/bb_gen_from_uv = 0.0
shader_parameter/bb_coord_scale = 1.0
shader_parameter/bb_world_to_object = Projection(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
shader_parameter/bb_world_to_object_on = 0.0
metadata/bb_mesh_bake = {
"kernel": "uint bb_rotl(uint x, uint k) { return (x << k) | (x >> (32u - k)); }
void bb_final(inout uint a, inout uint b, inout uint c) {
c ^= b; c -= bb_rotl(b, 14u);
a ^= c; a -= bb_rotl(c, 11u);
b ^= a; b -= bb_rotl(a, 25u);
c ^= b; c -= bb_rotl(b, 16u);
a ^= c; a -= bb_rotl(c, 4u);
b ^= a; b -= bb_rotl(a, 14u);
c ^= b; c -= bb_rotl(b, 24u);
}
uint bb_hash_uint2(uint kx, uint ky) {
uint a, b, c;
a = b = c = 0xdeadbeefu + (2u << 2u) + 13u;
b += ky; a += kx;
bb_final(a, b, c);
return c;
}
uint bb_hash_uint3(uint kx, uint ky, uint kz) {
uint a, b, c;
a = b = c = 0xdeadbeefu + (3u << 2u) + 13u;
c += kz; b += ky; a += kx;
bb_final(a, b, c);
return c;
}
float bb_hash_float2_to_float(vec2 k) {
return float(bb_hash_uint2(floatBitsToUint(k.x), floatBitsToUint(k.y)))
* (1.0 / 4294967295.0);
}
vec3 bb_random_offset(float seed) {
return vec3(100.0 + bb_hash_float2_to_float(vec2(seed, 0.0)) * 100.0,
100.0 + bb_hash_float2_to_float(vec2(seed, 1.0)) * 100.0,
100.0 + bb_hash_float2_to_float(vec2(seed, 2.0)) * 100.0);
}
float bb_fade(float t) { return t * t * t * (t * (t * 6.0 - 15.0) + 10.0); }
float bb_negate_if(float val, bool cond) { return cond ? -val : val; }
float bb_grad3(uint hash, float x, float y, float z) {
uint h = hash & 15u;
float u = h < 8u ? x : y;
float vt = ((h == 12u) || (h == 14u)) ? x : z;
float v = h < 4u ? y : vt;
return bb_negate_if(u, (h & 1u) != 0u) + bb_negate_if(v, (h & 2u) != 0u);
}
float bb_tri_mix(float v0, float v1, float v2, float v3,
float v4, float v5, float v6, float v7,
float x, float y, float z) {
float x1 = 1.0 - x;
float y1 = 1.0 - y;
float z1 = 1.0 - z;
return z1 * (y1 * (v0 * x1 + v1 * x) + y * (v2 * x1 + v3 * x)) +
z * (y1 * (v4 * x1 + v5 * x) + y * (v6 * x1 + v7 * x));
}
float bb_perlin_3d(vec3 p) {
vec3 fl = floor(p);
vec3 f = p - fl;
ivec3 I = ivec3(fl);
uint X = uint(I.x); uint Y = uint(I.y); uint Z = uint(I.z);
uint X1 = X + 1u; uint Y1 = Y + 1u; uint Z1 = Z + 1u;
float u = bb_fade(f.x);
float v = bb_fade(f.y);
float w = bb_fade(f.z);
return bb_tri_mix(
bb_grad3(bb_hash_uint3(X , Y , Z ), f.x , f.y , f.z ),
bb_grad3(bb_hash_uint3(X1, Y , Z ), f.x - 1.0, f.y , f.z ),
bb_grad3(bb_hash_uint3(X , Y1, Z ), f.x , f.y - 1.0, f.z ),
bb_grad3(bb_hash_uint3(X1, Y1, Z ), f.x - 1.0, f.y - 1.0, f.z ),
bb_grad3(bb_hash_uint3(X , Y , Z1), f.x , f.y , f.z - 1.0),
bb_grad3(bb_hash_uint3(X1, Y , Z1), f.x - 1.0, f.y , f.z - 1.0),
bb_grad3(bb_hash_uint3(X , Y1, Z1), f.x , f.y - 1.0, f.z - 1.0),
bb_grad3(bb_hash_uint3(X1, Y1, Z1), f.x - 1.0, f.y - 1.0, f.z - 1.0),
u, v, w);
}
// C fmod truncates toward zero. GLSL mod() floors. Not interchangeable.
float bb_fmod1(float x, float y) { return x - y * trunc(x / y); }
vec3 bb_fmod3(vec3 p, float y) {
return vec3(bb_fmod1(p.x, y), bb_fmod1(p.y, y), bb_fmod1(p.z, y));
}
float bb_snoise_3d(vec3 p) {
vec3 corr = 0.5 * vec3(greaterThanEqual(abs(p), vec3(1000000.0)));
p = bb_fmod3(p, 100000.0) + corr;
return 0.9820 * bb_perlin_3d(p); // noise_scale3
}
float bb_noise_3d(vec3 p) { return 0.5 * bb_snoise_3d(p) + 0.5; }
float bb_noise_fbm(vec3 p, float detail, float roughness, float lacunarity,
bool normalize_) {
float fscale = 1.0;
float amp = 1.0;
float maxamp = 0.0;
float sum = 0.0;
int n = int(detail);
for (int i = 0; i <= n && i < 16; i++) {
float t = bb_snoise_3d(fscale * p);
sum += t * amp;
maxamp += amp;
amp *= roughness;
fscale *= lacunarity;
}
float rmd = detail - floor(detail);
if (rmd != 0.0) {
float t = bb_snoise_3d(fscale * p);
float sum2 = sum + t * amp;
return normalize_
? mix(0.5 * sum / maxamp + 0.5, 0.5 * sum2 / (maxamp + amp) + 0.5, rmd)
: mix(sum, sum2, rmd);
}
return normalize_ ? 0.5 * sum / maxamp + 0.5 : sum;
}
vec3 bb_noise_distort(vec3 p, float distortion) {
if (distortion == 0.0) { return p; }
return p + vec3(bb_snoise_3d(p + bb_random_offset(0.0)) * distortion,
bb_snoise_3d(p + bb_random_offset(1.0)) * distortion,
bb_snoise_3d(p + bb_random_offset(2.0)) * distortion);
}
float bb_octave_w(float x) { return 1.0 - smoothstep(0.7, 1.4, x); }
float bb_noise_fbm_aa(vec3 p, float fw, float detail, float roughness, float lacunarity,
bool normalize_) {
float fscale = 1.0;
float amp = 1.0;
float maxamp = 0.0;
float sum = 0.0;
int n = int(detail);
for (int i = 0; i <= n && i < 16; i++) {
float w = bb_octave_w(fw * fscale);
float t = (w > 0.0) ? bb_snoise_3d(fscale * p) : 0.0;
sum += t * amp * w;
maxamp += amp;
amp *= roughness;
fscale *= lacunarity;
}
float rmd = detail - floor(detail);
if (rmd != 0.0) {
float w = bb_octave_w(fw * fscale);
float t = (w > 0.0) ? bb_snoise_3d(fscale * p) : 0.0;
float sum2 = sum + t * amp * w;
return normalize_
? mix(0.5 * sum / maxamp + 0.5, 0.5 * sum2 / (maxamp + amp) + 0.5, rmd)
: mix(sum, sum2, rmd);
}
return normalize_ ? 0.5 * sum / maxamp + 0.5 : sum;
}
float bb_fade_d(float t) { return 30.0 * t * t * (t - 1.0) * (t - 1.0); }
vec3 bb_grad3_vec(uint hash) {
return vec3(bb_grad3(hash, 1.0, 0.0, 0.0), bb_grad3(hash, 0.0, 1.0, 0.0),
bb_grad3(hash, 0.0, 0.0, 1.0));
}
float bb_perlin_3d_g(vec3 p, out vec3 grad) {
vec3 fl = floor(p);
vec3 f = p - fl;
ivec3 I = ivec3(fl);
uint X = uint(I.x); uint Y = uint(I.y); uint Z = uint(I.z);
uint X1 = X + 1u; uint Y1 = Y + 1u; uint Z1 = Z + 1u;
uint h0 = bb_hash_uint3(X , Y , Z ); uint h1 = bb_hash_uint3(X1, Y , Z );
uint h2 = bb_hash_uint3(X , Y1, Z ); uint h3 = bb_hash_uint3(X1, Y1, Z );
uint h4 = bb_hash_uint3(X , Y , Z1); uint h5 = bb_hash_uint3(X1, Y , Z1);
uint h6 = bb_hash_uint3(X , Y1, Z1); uint h7 = bb_hash_uint3(X1, Y1, Z1);
float c0 = bb_grad3(h0, f.x , f.y , f.z );
float c1 = bb_grad3(h1, f.x - 1.0, f.y , f.z );
float c2 = bb_grad3(h2, f.x , f.y - 1.0, f.z );
float c3 = bb_grad3(h3, f.x - 1.0, f.y - 1.0, f.z );
float c4 = bb_grad3(h4, f.x , f.y , f.z - 1.0);
float c5 = bb_grad3(h5, f.x - 1.0, f.y , f.z - 1.0);
float c6 = bb_grad3(h6, f.x , f.y - 1.0, f.z - 1.0);
float c7 = bb_grad3(h7, f.x - 1.0, f.y - 1.0, f.z - 1.0);
float u = bb_fade(f.x);
float v = bb_fade(f.y);
float w = bb_fade(f.z);
float x1 = 1.0 - u; float y1 = 1.0 - v; float z1 = 1.0 - w;
vec3 lat = z1 * (y1 * (bb_grad3_vec(h0) * x1 + bb_grad3_vec(h1) * u)
+ v * (bb_grad3_vec(h2) * x1 + bb_grad3_vec(h3) * u))
+ w * (y1 * (bb_grad3_vec(h4) * x1 + bb_grad3_vec(h5) * u)
+ v * (bb_grad3_vec(h6) * x1 + bb_grad3_vec(h7) * u));
float e0 = c0 * x1 + c1 * u; float e1 = c2 * x1 + c3 * u;
float e2 = c4 * x1 + c5 * u; float e3 = c6 * x1 + c7 * u;
float du = z1 * (y1 * (c1 - c0) + v * (c3 - c2)) + w * (y1 * (c5 - c4) + v * (c7 - c6));
float dv = z1 * (e1 - e0) + w * (e3 - e2);
float dw = (y1 * e2 + v * e3) - (y1 * e0 + v * e1);
grad = lat + vec3(du * bb_fade_d(f.x), dv * bb_fade_d(f.y), dw * bb_fade_d(f.z));
return bb_tri_mix(c0, c1, c2, c3, c4, c5, c6, c7, u, v, w);
}
float bb_snoise_3d_g(vec3 p, out vec3 grad) {
vec3 corr = 0.5 * vec3(greaterThanEqual(abs(p), vec3(1000000.0)));
p = bb_fmod3(p, 100000.0) + corr;
vec3 g;
float r = 0.9820 * bb_perlin_3d_g(p, g);
grad = 0.9820 * g;
return r;
}
// fw: the noise coordinate's screen footprint (NOISE_AA_HELPERS_GLSL). The
// octave weights are bb_noise_fbm_aa's, so value and gradient describe the SAME
// faded function; a weight is treated as locally constant (it varies with the
// footprint, not with p). At fw = 0 every weight is exactly 1.
float bb_noise_fbm_g(vec3 p, float fw, float detail, float roughness, float lacunarity,
bool normalize_, out vec3 grad) {
float fscale = 1.0;
float amp = 1.0;
float maxamp = 0.0;
float sum = 0.0;
vec3 gsum = vec3(0.0);
int n = int(detail);
for (int i = 0; i <= n && i < 16; i++) {
float w = bb_octave_w(fw * fscale);
vec3 g = vec3(0.0);
float t = (w > 0.0) ? bb_snoise_3d_g(fscale * p, g) : 0.0;
sum += t * amp * w;
gsum += g * (amp * w * fscale);
maxamp += amp;
amp *= roughness;
fscale *= lacunarity;
}
float rmd = detail - floor(detail);
if (rmd != 0.0) {
float w = bb_octave_w(fw * fscale);
vec3 g = vec3(0.0);
float t = (w > 0.0) ? bb_snoise_3d_g(fscale * p, g) : 0.0;
float sum2 = sum + t * amp * w;
vec3 gsum2 = gsum + g * (amp * w * fscale);
if (normalize_) {
grad = mix(0.5 * gsum / maxamp, 0.5 * gsum2 / (maxamp + amp), rmd);
return mix(0.5 * sum / maxamp + 0.5, 0.5 * sum2 / (maxamp + amp) + 0.5, rmd);
}
grad = mix(gsum, gsum2, rmd);
return mix(sum, sum2, rmd);
}
grad = normalize_ ? 0.5 * gsum / maxamp : gsum;
return normalize_ ? 0.5 * sum / maxamp + 0.5 : sum;
}
float bb_fade_dd(float t) { return 60.0 * t * (t - 1.0) * (2.0 * t - 1.0); }
float bb_perlin_3d_h(vec3 p, out vec3 grad, out mat3 hess) {
vec3 fl = floor(p);
vec3 f = p - fl;
ivec3 I = ivec3(fl);
uint X = uint(I.x); uint Y = uint(I.y); uint Z = uint(I.z);
uint X1 = X + 1u; uint Y1 = Y + 1u; uint Z1 = Z + 1u;
uint h0 = bb_hash_uint3(X , Y , Z ); uint h1 = bb_hash_uint3(X1, Y , Z );
uint h2 = bb_hash_uint3(X , Y1, Z ); uint h3 = bb_hash_uint3(X1, Y1, Z );
uint h4 = bb_hash_uint3(X , Y , Z1); uint h5 = bb_hash_uint3(X1, Y , Z1);
uint h6 = bb_hash_uint3(X , Y1, Z1); uint h7 = bb_hash_uint3(X1, Y1, Z1);
float c0 = bb_grad3(h0, f.x , f.y , f.z );
float c1 = bb_grad3(h1, f.x - 1.0, f.y , f.z );
float c2 = bb_grad3(h2, f.x , f.y - 1.0, f.z );
float c3 = bb_grad3(h3, f.x - 1.0, f.y - 1.0, f.z );
float c4 = bb_grad3(h4, f.x , f.y , f.z - 1.0);
float c5 = bb_grad3(h5, f.x - 1.0, f.y , f.z - 1.0);
float c6 = bb_grad3(h6, f.x , f.y - 1.0, f.z - 1.0);
float c7 = bb_grad3(h7, f.x - 1.0, f.y - 1.0, f.z - 1.0);
float u = bb_fade(f.x);
float v = bb_fade(f.y);
float w = bb_fade(f.z);
float x1 = 1.0 - u; float y1 = 1.0 - v; float z1 = 1.0 - w;
vec3 G0 = bb_grad3_vec(h0); vec3 G1 = bb_grad3_vec(h1);
vec3 G2 = bb_grad3_vec(h2); vec3 G3 = bb_grad3_vec(h3);
vec3 G4 = bb_grad3_vec(h4); vec3 G5 = bb_grad3_vec(h5);
vec3 G6 = bb_grad3_vec(h6); vec3 G7 = bb_grad3_vec(h7);
vec3 lat = z1 * (y1 * (G0 * x1 + G1 * u) + v * (G2 * x1 + G3 * u))
+ w * (y1 * (G4 * x1 + G5 * u) + v * (G6 * x1 + G7 * u));
float e0 = c0 * x1 + c1 * u; float e1 = c2 * x1 + c3 * u;
float e2 = c4 * x1 + c5 * u; float e3 = c6 * x1 + c7 * u;
float du = z1 * (y1 * (c1 - c0) + v * (c3 - c2)) + w * (y1 * (c5 - c4) + v * (c7 - c6));
float dv = z1 * (e1 - e0) + w * (e3 - e2);
float dw = (y1 * e2 + v * e3) - (y1 * e0 + v * e1);
vec3 s1 = vec3(bb_fade_d(f.x), bb_fade_d(f.y), bb_fade_d(f.z));
vec3 s2 = vec3(bb_fade_dd(f.x), bb_fade_dd(f.y), bb_fade_dd(f.z));
grad = lat + vec3(du, dv, dw) * s1;
vec4 A0 = vec4(G0, c0); vec4 A1 = vec4(G1, c1); vec4 A2 = vec4(G2, c2); vec4 A3 = vec4(G3, c3);
vec4 A4 = vec4(G4, c4); vec4 A5 = vec4(G5, c5); vec4 A6 = vec4(G6, c6); vec4 A7 = vec4(G7, c7);
vec4 a00 = A0 * x1 + A1 * u; vec4 a10 = A2 * x1 + A3 * u;
vec4 a01 = A4 * x1 + A5 * u; vec4 a11 = A6 * x1 + A7 * u;
vec4 d00 = A1 - A0; vec4 d10 = A3 - A2; vec4 d01 = A5 - A4; vec4 d11 = A7 - A6;
vec4 Tu = z1 * (y1 * d00 + v * d10) + w * (y1 * d01 + v * d11);
vec4 Tv = z1 * (a10 - a00) + w * (a11 - a01);
vec4 Tw = (y1 * a01 + v * a11) - (y1 * a00 + v * a10);
float Tuv = z1 * (d10.w - d00.w) + w * (d11.w - d01.w);
float Tuw = (y1 * d01.w + v * d11.w) - (y1 * d00.w + v * d10.w);
float Tvw = (a11.w - a01.w) - (a10.w - a00.w);
float hxx = 2.0 * Tu.x * s1.x + Tu.w * s2.x;
float hyy = 2.0 * Tv.y * s1.y + Tv.w * s2.y;
float hzz = 2.0 * Tw.z * s1.z + Tw.w * s2.z;
float hxy = Tv.x * s1.y + Tu.y * s1.x + Tuv * s1.x * s1.y;
float hxz = Tw.x * s1.z + Tu.z * s1.x + Tuw * s1.x * s1.z;
float hyz = Tw.y * s1.z + Tv.z * s1.y + Tvw * s1.y * s1.z;
hess = mat3(vec3(hxx, hxy, hxz), vec3(hxy, hyy, hyz), vec3(hxz, hyz, hzz));
return bb_tri_mix(c0, c1, c2, c3, c4, c5, c6, c7, u, v, w);
}
float bb_snoise_3d_h(vec3 p, out vec3 grad, out mat3 hess) {
vec3 corr = 0.5 * vec3(greaterThanEqual(abs(p), vec3(1000000.0)));
p = bb_fmod3(p, 100000.0) + corr;
vec3 g;
mat3 H;
float r = 0.9820 * bb_perlin_3d_h(p, g, H);
grad = 0.9820 * g;
hess = 0.9820 * H;
return r;
}
float bb_noise_fbm_h(vec3 p, float fw, float detail, float roughness, float lacunarity,
bool normalize_, out vec3 grad, out mat3 hess) {
float fscale = 1.0;
float amp = 1.0;
float maxamp = 0.0;
float sum = 0.0;
vec3 gsum = vec3(0.0);
mat3 hsum = mat3(0.0);
int n = int(detail);
for (int i = 0; i <= n && i < 16; i++) {
float w = bb_octave_w(fw * fscale);
vec3 g = vec3(0.0);
mat3 H = mat3(0.0);
float t = (w > 0.0) ? bb_snoise_3d_h(fscale * p, g, H) : 0.0;
sum += t * amp * w;
gsum += g * (amp * w * fscale);
hsum += H * (amp * w * fscale * fscale);
maxamp += amp;
amp *= roughness;
fscale *= lacunarity;
}
float rmd = detail - floor(detail);
if (rmd != 0.0) {
float w = bb_octave_w(fw * fscale);
vec3 g = vec3(0.0);
mat3 H = mat3(0.0);
float t = (w > 0.0) ? bb_snoise_3d_h(fscale * p, g, H) : 0.0;
float sum2 = sum + t * amp * w;
vec3 gsum2 = gsum + g * (amp * w * fscale);
mat3 hsum2 = hsum + H * (amp * w * fscale * fscale);
if (normalize_) {
grad = mix(0.5 * gsum / maxamp, 0.5 * gsum2 / (maxamp + amp), rmd);
hess = (0.5 * (1.0 - rmd) / maxamp) * hsum + (0.5 * rmd / (maxamp + amp)) * hsum2;
return mix(0.5 * sum / maxamp + 0.5, 0.5 * sum2 / (maxamp + amp) + 0.5, rmd);
}
grad = mix(gsum, gsum2, rmd);
hess = (1.0 - rmd) * hsum + rmd * hsum2;
return mix(sum, sum2, rmd);
}
grad = normalize_ ? 0.5 * gsum / maxamp : gsum;
hess = normalize_ ? (0.5 / maxamp) * hsum : hsum;
return normalize_ ? 0.5 * sum / maxamp + 0.5 : sum;
}
void bb_mtn_fields(vec3 q, vec3 N, vec3 dq0, vec3 dq1, vec3 dq2,
float stretch, float turb, float coupling, float micro_s, float micro_d,
float trans_scale, float trans_amt, float snow_scale,
out vec3 gR, out vec3 gDiff, out vec3 G1, out vec3 gSlope, out float T, out float D) {
const float QPM = 0.01;
N = normalize(N);
float k = stretch * 0.10000000149011612;
vec3 x = q * k;
vec3 g0, g1, g2;
mat3 H0, H1, H2;
float n0 = bb_snoise_3d_h(x + bb_random_offset(0.0), g0, H0);
float n1 = bb_snoise_3d_h(x + bb_random_offset(1.0), g1, H1);
float n2 = bb_snoise_3d_h(x + bb_random_offset(2.0), g2, H2);
vec3 y = x + turb * vec3(n0, n1, n2);
mat3 J = mat3(1.0) + turb * transpose(mat3(g0, g1, g2));
float fw_y = bb_aa_strength * max(max(length(J * (dq0 * k)), length(J * (dq1 * k))), length(J * (dq2 * k)));
vec3 gF;
mat3 HF;
float rock = bb_noise_fbm_h(y, fw_y, 5.700000286102295, 0.643696665763855, 1.7000000476837158, true, gF, HF);
vec3 gx = transpose(J) * gF;
mat3 Hx = transpose(J) * HF * J + turb * (gF.x * H0 + gF.y * H1 + gF.z * H2);
float sw = k * QPM;
gR = gx * sw;
mat3 HR = Hx * (sw * sw);
float ms = max(micro_s, 0.0);
vec3 m = N - micro_d * (gR - N * dot(gR, N));
float ml = max(length(m), 1e-20);
vec3 nr = m / ml;
vec3 w = N + ms * (nr - N);
float wl = max(length(w), 1e-20);
vec3 n1w = w / wl;
float slope = n1w.z;
vec3 qv = (vec3(0.0, 0.0, 1.0) - slope * n1w) / wl;
vec3 v = (qv - nr * dot(nr, qv)) / ml;
gSlope = -micro_d * ms * (HR * (v - N * dot(v, N)));
float fq = bb_aa_strength * max(max(length(dq0), length(dq1)), length(dq2));
vec3 gs_y;
float snow = bb_noise_fbm_g(q * snow_scale, fq * snow_scale, 2.0, 0.3499999940395355, 2.0, true, gs_y);
vec3 gSnow = gs_y * (snow_scale * QPM);
vec3 gt_y;
float trans = bb_noise_fbm_g(q * trans_scale, fq * trans_scale, 4.0, 0.5, 2.0, true, gt_y);
vec3 gTrans = gt_y * (trans_scale * QPM);
gDiff = gSnow - gR;
G1 = trans_amt * gTrans + coupling * gR;
T = (trans - 0.5) * trans_amt + (rock - 0.5) * coupling;
D = snow - rock;
}
void bb_mk_in_0(vec3 p, out vec3 vector, out float w, out float scale, out float detail, out float roughness, out float lacunarity, out float offset_in, out float gain, out float distortion) {
vec3 mb_n7_generated_out;
vec3 mb_n7_normal_out;
vec3 mb_n7_uv_out;
vec3 mb_n7_object_out;
{ vec3 _lp = p * bb_coord_scale; mb_n7_object_out = vec3(-_lp.x, _lp.z, _lp.y); }
vec3 mb_n9_vec_out;
{
vec3 vec_in = mb_n7_object_out;
vec3 vec_unused_b = vec3(0.0, 0.0, 0.0);
vec3 vec_unused_c = vec3(0.0, 0.0, 0.0);
float scale = 0.009999999776482582;
vec3 vec_out = vec3(0.0);
vec_out = vec_in * scale;
mb_n9_vec_out = vec_out;
}
float mb_n52_v;
{
float v = float(0.0);
v = 0.18000000715255737;
mb_n52_v = v;
}
vec3 mb_n39_vec_out;
{
vec3 vec_in = mb_n9_vec_out;
vec3 vec_unused_b = vec3(0.0, 0.0, 0.0);
vec3 vec_unused_c = vec3(0.0, 0.0, 0.0);
float scale = mb_n52_v;
vec3 vec_out = vec3(0.0);
vec_out = vec_in * scale;
mb_n39_vec_out = vec_out;
}
vector = mb_n39_vec_out;
w = 0.0;
scale = 1.0;
detail = 4.0;
roughness = 0.5;
lacunarity = 2.0;
offset_in = 0.0;
gain = 1.0;
distortion = 0.0;
}
float bb_mk_0(vec3 p, float spacing) {
vec3 vector;
float w;
float scale;
float detail;
float roughness;
float lacunarity;
float offset_in;
float gain;
float distortion;
bb_mk_in_0(p, vector, w, scale, detail, roughness, lacunarity, offset_in, gain, distortion);
vec3 _np0 = vector * scale;
float _k_fp = 0.0;
vec3 _s_vector;
float _s_w;
float _s_scale;
float _s_detail;
float _s_roughness;
float _s_lacunarity;
float _s_offset_in;
float _s_gain;
float _s_distortion;
bb_mk_in_0(p + vec3(spacing, 0.0, 0.0), _s_vector, _s_w, _s_scale, _s_detail, _s_roughness, _s_lacunarity, _s_offset_in, _s_gain, _s_distortion); _k_fp = max(_k_fp, length(_s_vector * _s_scale - _np0));
bb_mk_in_0(p + vec3(0.0, spacing, 0.0), _s_vector, _s_w, _s_scale, _s_detail, _s_roughness, _s_lacunarity, _s_offset_in, _s_gain, _s_distortion); _k_fp = max(_k_fp, length(_s_vector * _s_scale - _np0));
bb_mk_in_0(p + vec3(0.0, 0.0, spacing), _s_vector, _s_w, _s_scale, _s_detail, _s_roughness, _s_lacunarity, _s_offset_in, _s_gain, _s_distortion); _k_fp = max(_k_fp, length(_s_vector * _s_scale - _np0));
float fac = 0.0;
vec3 color = vec3(0.0);
{
vec3 _np = bb_noise_distort(vector * scale, distortion);
float _fw = bb_aa_strength * _k_fp;
fac = bb_noise_fbm_aa(_np, _fw, detail, roughness, lacunarity, true);
// Cycles builds Color from three fBMs at decorrelated offsets, not from fac.
color = vec3(fac,
bb_noise_fbm_aa(_np + bb_random_offset(3.0), _fw, detail, roughness, lacunarity, true),
bb_noise_fbm_aa(_np + bb_random_offset(4.0), _fw, detail, roughness, lacunarity, true));
}
return fac;
}
void bb_mk_in_1(vec3 p, out vec3 vector, out float w, out float scale, out float detail, out float roughness, out float lacunarity, out float offset_in, out float gain, out float distortion) {
vec3 mb_n7_generated_out;
vec3 mb_n7_normal_out;
vec3 mb_n7_uv_out;
vec3 mb_n7_object_out;
{ vec3 _lp = p * bb_coord_scale; mb_n7_object_out = vec3(-_lp.x, _lp.z, _lp.y); }
vec3 mb_n9_vec_out;
{
vec3 vec_in = mb_n7_object_out;
vec3 vec_unused_b = vec3(0.0, 0.0, 0.0);
vec3 vec_unused_c = vec3(0.0, 0.0, 0.0);
float scale = 0.009999999776482582;
vec3 vec_out = vec3(0.0);
vec_out = vec_in * scale;
mb_n9_vec_out = vec_out;
}
float mb_n72_v;
{
float v = float(0.0);
v = 0.30000001192092896;
mb_n72_v = v;
}
vec3 mb_n59_vec_out;
{
vec3 vec_in = mb_n9_vec_out;
vec3 vec_unused_b = vec3(0.0, 0.0, 0.0);
vec3 vec_unused_c = vec3(0.0, 0.0, 0.0);
float scale = mb_n72_v;
vec3 vec_out = vec3(0.0);
vec_out = vec_in * scale;
mb_n59_vec_out = vec_out;
}
vector = mb_n59_vec_out;
w = 0.0;
scale = 1.0;
detail = 4.0;
roughness = 0.5;
lacunarity = 2.0;
offset_in = 0.0;
gain = 1.0;
distortion = 0.0;
}
float bb_mk_1(vec3 p, float spacing) {
vec3 vector;
float w;
float scale;
float detail;
float roughness;
float lacunarity;
float offset_in;
float gain;
float distortion;
bb_mk_in_1(p, vector, w, scale, detail, roughness, lacunarity, offset_in, gain, distortion);
vec3 _np0 = vector * scale;
float _k_fp = 0.0;
vec3 _s_vector;
float _s_w;
float _s_scale;
float _s_detail;
float _s_roughness;
float _s_lacunarity;
float _s_offset_in;
float _s_gain;
float _s_distortion;
bb_mk_in_1(p + vec3(spacing, 0.0, 0.0), _s_vector, _s_w, _s_scale, _s_detail, _s_roughness, _s_lacunarity, _s_offset_in, _s_gain, _s_distortion); _k_fp = max(_k_fp, length(_s_vector * _s_scale - _np0));
bb_mk_in_1(p + vec3(0.0, spacing, 0.0), _s_vector, _s_w, _s_scale, _s_detail, _s_roughness, _s_lacunarity, _s_offset_in, _s_gain, _s_distortion); _k_fp = max(_k_fp, length(_s_vector * _s_scale - _np0));
bb_mk_in_1(p + vec3(0.0, 0.0, spacing), _s_vector, _s_w, _s_scale, _s_detail, _s_roughness, _s_lacunarity, _s_offset_in, _s_gain, _s_distortion); _k_fp = max(_k_fp, length(_s_vector * _s_scale - _np0));
float fac = 0.0;
vec3 color = vec3(0.0);
{
vec3 _np = bb_noise_distort(vector * scale, distortion);
float _fw = bb_aa_strength * _k_fp;
fac = bb_noise_fbm_aa(_np, _fw, detail, roughness, lacunarity, true);
// Cycles builds Color from three fBMs at decorrelated offsets, not from fac.
color = vec3(fac,
bb_noise_fbm_aa(_np + bb_random_offset(3.0), _fw, detail, roughness, lacunarity, true),
bb_noise_fbm_aa(_np + bb_random_offset(4.0), _fw, detail, roughness, lacunarity, true));
}
return fac;
}
void bb_mk_nin(vec3 p, out vec3 q_in, out float rock_stretch, out float rock_turb, out float detail_coupling, out float micro_strength, out float micro_distance, out float trans_scale, out float trans_amount, out float snow_noise_scale) {
vec3 mb_n7_generated_out;
vec3 mb_n7_normal_out;
vec3 mb_n7_uv_out;
vec3 mb_n7_object_out;
{ vec3 _lp = p * bb_coord_scale; mb_n7_object_out = vec3(-_lp.x, _lp.z, _lp.y); }
vec3 mb_n9_vec_out;
{
vec3 vec_in = mb_n7_object_out;
vec3 vec_unused_b = vec3(0.0, 0.0, 0.0);
vec3 vec_unused_c = vec3(0.0, 0.0, 0.0);
float scale = 0.009999999776482582;
vec3 vec_out = vec3(0.0);
vec_out = vec_in * scale;
mb_n9_vec_out = vec_out;
}
float mb_n18_v;
{
float v = float(0.0);
v = 2.9700000286102295;
mb_n18_v = v;
}
float mb_n19_v;
{
float v = float(0.0);
v = 1.7799999713897705;
mb_n19_v = v;
}
float mb_n20_v;
{
float v = float(0.0);
v = 0.6100000143051147;
mb_n20_v = v;
}
float mb_n21_v;
{
float v = float(0.0);
v = 2.3399999141693115;
mb_n21_v = v;
}
float mb_n22_v;
{
float v = float(0.0);
v = 35.0;
mb_n22_v = v;
}
float mb_n28_v;
{
float v = float(0.0);
v = 0.15000000596046448;
mb_n28_v = v;
}
float mb_n29_v;
{
float v = float(0.0);
v = 0.4899999797344208;
mb_n29_v = v;
}
float mb_n30_v;
{
float v = float(0.0);
v = 0.800000011920929;
mb_n30_v = v;
}
q_in = mb_n9_vec_out;
rock_stretch = mb_n18_v;
rock_turb = mb_n19_v;
detail_coupling = mb_n20_v;
micro_strength = mb_n21_v;
micro_distance = mb_n22_v;
trans_scale = mb_n28_v;
trans_amount = mb_n29_v;
snow_noise_scale = mb_n30_v;
}
void dc_material_kernel(vec3 p, vec3 n, float spacing,
out vec4 c0, out vec4 c1, out vec4 c2, out vec4 c3) {
float m0 = bb_mk_0(p, spacing);
float m1 = bb_mk_1(p, spacing);
vec3 gR = vec3(0.0), gDiff = vec3(0.0), G1 = vec3(0.0), gSlope = vec3(0.0);
float T = 0.0, D = 0.0;
{
vec3 q_in; vec3 _s_q_in;
float rock_stretch; float _s_rock_stretch;
float rock_turb; float _s_rock_turb;
float detail_coupling; float _s_detail_coupling;
float micro_strength; float _s_micro_strength;
float micro_distance; float _s_micro_distance;
float trans_scale; float _s_trans_scale;
float trans_amount; float _s_trans_amount;
float snow_noise_scale; float _s_snow_noise_scale;
bb_mk_nin(p, q_in, rock_stretch, rock_turb, detail_coupling, micro_strength, micro_distance, trans_scale, trans_amount, snow_noise_scale);
bb_mk_nin(p + vec3(spacing, 0.0, 0.0), _s_q_in, _s_rock_stretch, _s_rock_turb, _s_detail_coupling, _s_micro_strength, _s_micro_distance, _s_trans_scale, _s_trans_amount, _s_snow_noise_scale);
vec3 dq0 = _s_q_in - q_in;
bb_mk_nin(p + vec3(0.0, spacing, 0.0), _s_q_in, _s_rock_stretch, _s_rock_turb, _s_detail_coupling, _s_micro_strength, _s_micro_distance, _s_trans_scale, _s_trans_amount, _s_snow_noise_scale);
vec3 dq1 = _s_q_in - q_in;
bb_mk_nin(p + vec3(0.0, 0.0, spacing), _s_q_in, _s_rock_stretch, _s_rock_turb, _s_detail_coupling, _s_micro_strength, _s_micro_distance, _s_trans_scale, _s_trans_amount, _s_snow_noise_scale);
vec3 dq2 = _s_q_in - q_in;
// the vertex normal, Godot -> Blender axes as the fragment's _wn
bb_mtn_fields(q_in, vec3(-n.x, n.z, n.y), dq0, dq1, dq2,
rock_stretch, rock_turb, detail_coupling, micro_strength, micro_distance,
trans_scale, trans_amount, snow_noise_scale, gR, gDiff, G1, gSlope, T, D);
}
// c0.x carries mask 0 + 2.0: the BAKED FLAG (all 16 slots are in use, and
// a chunk the kernel never ran on reads zeros: c0.x < 1.5 = not baked).
c0 = vec4(m0 + 2.0, m1, T, D);
c1 = vec4(gR, gDiff.x);
c2 = vec4(gDiff.y, gDiff.z, G1.x, G1.y);
c3 = vec4(G1.z, gSlope);
}
",
"material": SubResource("ShaderMaterial_1k5xf"),
"slots": [{
"node": 40.0,
"output": "fac",
"slot": "c0.x",
"type": "TEX_NOISE"
}, {
"node": 60.0,
"output": "fac",
"slot": "c0.y",
"type": "TEX_NOISE"
}, {
"node": 12.0,
"output": "T D gR gDiff G1 gSlope",
"slot": "c0.zw c1 c2 c3",
"type": "__MTN_NORMALS__"
}],
"uniforms": ["bb_coord_scale", "bb_aa_strength"],
"version": 2.0
}