float hash(vec2 p) {
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
}
float noise(vec2 p) {
vec2 i = floor(p);
vec2 f = fract(p);
vec2 s = f * f * (3.0 - 2.0 * f);
return mix(mix(hash(i), hash(i + vec2(1.0, 0.0)), s.x),
mix(hash(i + vec2(0.0, 1.0)), hash(i + vec2(1.0)), s.x), s.y);
}
void main() {
float n = noise(vUv * vec2(24.0, 12.0));
if (n < 0.350) discard;
vec3 N = normalize(vNormal);
if (!gl_FrontFacing) N = -N;
float light = 0.25 + 0.75 * max(dot(N, normalize(vec3(-0.6, 0.8, 1.0))), 0.0);
vec3 base = gl_FrontFacing ? vec3(0.96, 0.43, 0.30) : vec3(0.48, 0.83, 0.69) * 0.7;
vec3 color = base * light;
float edge = 1.0 - smoothstep(0.0, 0.06, n - 0.350);
color = mix(color, vec3(1.0, 0.85, 0.4), edge * 0.800);
gl_FragColor = vec4(color, 1.0);
}