// Shared helpers for the world shaders. // Declares `noise_tex` (a seamless NoiseTexture2D set from terrain.gd) so every // shader samples the same noise, which keeps grass, terrain and rock colour // variation lined up with each other. uniform sampler2D noise_tex : filter_linear_mipmap, repeat_enable; float nz(vec2 p) { return texture(noise_tex, p).r; } // Triplanar noise: samples along all three axes so steep faces (cliffs, rock // sides) don't show the stretched streaks a top-down projection would give. float tri_nz(vec3 p, vec3 n, float s) { vec3 w = pow(abs(n), vec3(4.0)); w /= (w.x + w.y + w.z); return nz(p.zy * s) * w.x + nz(p.xz * s) * w.y + nz(p.xy * s) * w.z; } // Vertex colours are authored as sRGB; lighting needs linear. vec3 to_linear(vec3 c) { return pow(c, vec3(2.2)); }