@firecms/neat 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/math.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export declare class Matrix4 {
2
2
  elements: Float32Array;
3
3
  constructor();
4
+ identity(): this;
4
5
  translate(tx: number, ty: number, tz: number): this;
5
6
  rotateX(angle: number): this;
6
7
  rotateY(angle: number): this;
package/dist/math.js CHANGED
@@ -8,6 +8,26 @@ export class Matrix4 {
8
8
  0, 0, 0, 1
9
9
  ]);
10
10
  }
11
+ identity() {
12
+ const e = this.elements;
13
+ e[0] = 1;
14
+ e[1] = 0;
15
+ e[2] = 0;
16
+ e[3] = 0;
17
+ e[4] = 0;
18
+ e[5] = 1;
19
+ e[6] = 0;
20
+ e[7] = 0;
21
+ e[8] = 0;
22
+ e[9] = 0;
23
+ e[10] = 1;
24
+ e[11] = 0;
25
+ e[12] = 0;
26
+ e[13] = 0;
27
+ e[14] = 0;
28
+ e[15] = 1;
29
+ return this;
30
+ }
11
31
  translate(tx, ty, tz) {
12
32
  this.elements[12] += this.elements[0] * tx + this.elements[4] * ty + this.elements[8] * tz;
13
33
  this.elements[13] += this.elements[1] * tx + this.elements[5] * ty + this.elements[9] * tz;
package/dist/math.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
package/dist/shaders.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export declare const vertexShaderSource = "void main() {\n vUv = uv;\n vPosition = position;\n\n // SCROLLING LOGIC\n // Separate multipliers for wave, color, and flow offsets\n float waveOffset = -u_y_offset * u_y_offset_wave_multiplier;\n float colorOffset = -u_y_offset * u_y_offset_color_multiplier;\n float flowOffset = -u_y_offset * u_y_offset_flow_multiplier;\n\n // 1. DISPLACEMENT (WAVES)\n // We add waveOffset to Y to scroll the wave pattern\n v_displacement_amount = cnoise( vec3(\n u_wave_frequency_x * position.x + u_time,\n u_wave_frequency_y * (position.y + waveOffset) + u_time,\n u_time\n ));\n\n // 2. FLOW FIELD\n // Apply flow offset to scroll the flow field mask\n vec2 baseUv = vUv;\n baseUv.y += flowOffset / u_plane_height; // Scale to match wave speed\n vec2 flowUv = baseUv;\n\n if (u_flow_enabled > 0.5) {\n if (u_flow_ease > 0.0 || u_flow_distortion_a > 0.0) {\n vec2 ppp = -1.0 + 2.0 * baseUv;\n ppp += 0.1 * cos((1.5 * u_flow_scale) * ppp.yx + 1.1 * u_time + vec2(0.1, 1.1));\n ppp += 0.1 * cos((2.3 * u_flow_scale) * ppp.yx + 1.3 * u_time + vec2(3.2, 3.4));\n ppp += 0.1 * cos((2.2 * u_flow_scale) * ppp.yx + 1.7 * u_time + vec2(1.8, 5.2));\n ppp += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.yx + 1.4 * u_time + vec2(6.3, 3.9));\n\n float r = length(ppp);\n flowUv = mix(baseUv, vec2(baseUv.x * (1.0 - u_flow_ease) + r * u_flow_ease, baseUv.y), u_flow_ease);\n }\n }\n\n // Pass the standard flow UV to fragment shader (for texture)\n vFlowUv = flowUv;\n\n // 3. COLOR MIXING\n // We take the computed flow UVs and apply the color offset\n // Scale by plane height to match wave offset speed (world space vs UV space)\n vec3 color = u_colors[0].color;\n\n vec3 distortedPos = position;\n if (u_shape_type > 0.5) {\n if (u_flow_enabled > 0.5) {\n if (u_flow_ease > 0.0 || u_flow_distortion_a > 0.0) {\n vec3 ppp = position / 25.0;\n ppp.xyz += 0.1 * cos((1.5 * u_flow_scale) * ppp.yxz + 1.1 * u_time + vec3(0.1, 1.1, 2.1));\n ppp.xyz += 0.1 * cos((2.3 * u_flow_scale) * ppp.zxy + 1.3 * u_time + vec3(3.2, 3.4, 1.2));\n ppp.xyz += 0.1 * cos((2.2 * u_flow_scale) * ppp.yxz + 1.7 * u_time + vec3(1.8, 5.2, 3.1));\n ppp.xyz += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.zxy + 1.4 * u_time + vec3(6.3, 3.9, 4.5));\n\n float r = length(ppp);\n distortedPos = mix(position, vec3(\n position.x * (1.0 - u_flow_ease) + r * u_flow_ease * 25.0,\n position.y,\n position.z * (1.0 - u_flow_ease) + r * u_flow_ease * 25.0\n ), u_flow_ease);\n }\n }\n }\n\n vec3 noise_cord;\n if (u_shape_type > 0.5) {\n noise_cord = vec3(distortedPos.x / 50.0, (distortedPos.y + colorOffset) / 50.0, distortedPos.z / 50.0);\n } else {\n vec2 adjustedUv = flowUv;\n adjustedUv.y += colorOffset / u_plane_height;\n noise_cord = vec3(adjustedUv, 0.0);\n }\n\n const float minNoise = .0;\n const float maxNoise = .9;\n\n for (int i = 1; i < 6; i++) {\n if (i < u_colors_count) {\n if (u_colors[i].is_active > 0.5) {\n float noiseFlow = (1. + float(i)) / 30.;\n float noiseSpeed = (1. + float(i)) * 0.11;\n float noiseSeed = 13. + float(i) * 7.;\n\n float noise_z = u_time * noiseSpeed;\n if (u_shape_type > 0.5) {\n noise_z = noise_cord.z * u_color_pressure.x * u_color_pressure.x + u_time * noiseSpeed;\n }\n\n float noise = snoise(\n vec3(\n noise_cord.x * u_color_pressure.x * u_color_pressure.x + u_time * noiseFlow * 2.,\n noise_cord.y * u_color_pressure.y * u_color_pressure.y,\n noise_z\n ) + noiseSeed\n ) - (.1 * float(i)) + (.5 * u_color_blending);\n\n noise = clamp(noise, minNoise, maxNoise + float(i) * 0.02);\n color = mix(color, u_colors[i].color, smoothstep(0.0, u_color_blending, noise));\n }\n }\n }\n\n v_color = color;\n\n // 4. FRESNEL (rim glow)\n // (Calculated in fragment shader using displacement slope approximation)\n\n // 5. VERTEX POSITION\n vec3 newPosition = position + normal * v_displacement_amount * u_wave_amplitude;\n vec4 mvPosition = modelViewMatrix * vec4(newPosition, 1.0);\n vViewPosition = mvPosition.xyz;\n vNormal = normalize((modelViewMatrix * vec4(normal, 0.0)).xyz);\n gl_Position = projectionMatrix * mvPosition;\n v_new_position = gl_Position;\n}\n";
2
- export declare const fragmentShaderSource = "float random(vec2 p) {\n return fract(sin(dot(p, vec2(12.9898,78.233))) * 43758.5453);\n}\n\nfloat fbm(vec3 x) {\n float value = 0.0;\n float amplitude = 0.5;\n float frequency = 1.0;\n for (int i = 0; i < 4; i++) {\n value += amplitude * snoise(x * frequency);\n frequency *= 2.0;\n amplitude *= 0.5;\n }\n return value;\n}\n\n// Branchless HSL to RGB for iridescence\nvec3 hsl2rgb(float h, float s, float l) {\n vec3 rgb = clamp(abs(mod(h * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0);\n return l + s * (rgb - 0.5) * (1.0 - abs(2.0 * l - 1.0));\n}\n\nvoid main() {\n vec2 finalUv = vFlowUv;\n \n vec3 baseColor;\n float texAlpha = 1.0;\n\n if (u_enable_procedural_texture > 0.5) {\n if (u_shape_type > 0.5) {\n float parallaxFactor = 0.25;\n float scrollOffset = (u_y_offset * u_y_offset_color_multiplier) * parallaxFactor;\n vec3 scrolledPos = vPosition;\n scrolledPos.y -= scrollOffset;\n \n vec3 p = (scrolledPos * 1.5) / 50.0;\n vec2 uvX = p.yz + vec2(0.5);\n vec2 uvY = p.zx + vec2(0.5);\n vec2 uvZ = p.xy + vec2(0.5);\n \n vec4 colX = texture2D(u_procedural_texture, fract(uvX));\n vec4 colY = texture2D(u_procedural_texture, fract(uvY));\n vec4 colZ = texture2D(u_procedural_texture, fract(uvZ));\n \n vec3 n = normalize(vNormal);\n vec3 blendWeights = abs(n);\n blendWeights = blendWeights / (blendWeights.x + blendWeights.y + blendWeights.z + 0.0001);\n \n vec4 texSample = colX * blendWeights.x + colY * blendWeights.y + colZ * blendWeights.z;\n baseColor = texSample.rgb;\n if (u_transparent_texture_void > 0.5) {\n texAlpha = texSample.a;\n }\n } else {\n vec2 ppp = -1.0 + 2.0 * finalUv;\n ppp += 0.1 * cos((1.5 * u_flow_scale) * ppp.yx + 1.1 * u_time + vec2(0.1, 1.1));\n ppp += 0.1 * cos((2.3 * u_flow_scale) * ppp.yx + 1.3 * u_time + vec2(3.2, 3.4));\n ppp += 0.1 * cos((2.2 * u_flow_scale) * ppp.yx + 1.7 * u_time + vec2(1.8, 5.2));\n ppp += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.yx + 1.4 * u_time + vec2(6.3, 3.9));\n float r = length(ppp);\n \n float vx = (finalUv.x * u_texture_ease) + (r * (1.0 - u_texture_ease));\n float vy = (finalUv.y * u_texture_ease) + (0.0 * (1.0 - u_texture_ease));\n vec2 texUv = vec2(vx, vy);\n\n float parallaxFactor = 0.25;\n texUv.y -= (u_y_offset * u_y_offset_color_multiplier / u_plane_height) * parallaxFactor;\n texUv *= 1.5;\n\n vec4 texSample = texture2D(u_procedural_texture, fract(texUv));\n baseColor = texSample.rgb;\n if (u_transparent_texture_void > 0.5) {\n texAlpha = texSample.a;\n }\n }\n } else {\n baseColor = v_color;\n }\n\n vec3 color = baseColor;\n\n // === DOMAIN WARPING (simplified: 3 fbm calls instead of 5) ===\n if (u_domain_warp_enabled > 0.5) {\n vec3 p;\n if (u_shape_type > 0.5) {\n p = vec3((vPosition / 50.0 + vec3(0.5)) * u_domain_warp_scale);\n p.z += u_time * 0.15;\n } else {\n p = vec3(finalUv * u_domain_warp_scale, u_time * 0.15);\n }\n vec2 q = vec2(fbm(p), fbm(p + vec3(5.2, 1.3, 0.0)));\n float f = fbm(p + vec3(4.0 * q, 0.0));\n vec3 warpColor = color * (1.0 + f * 0.8 * u_domain_warp_intensity);\n float pattern = clamp(f * f * f + 0.6 * f * f + 0.5 * f, 0.0, 1.0);\n color = mix(color, warpColor * (0.6 + pattern * 0.8), u_domain_warp_intensity * 0.7);\n }\n\n // Post-processing\n // Compute dynamic pixel-perfect normal using smooth normal\n vec3 normal = normalize(vNormal);\n vec3 viewDir = vec3(0.0, 0.0, 1.0);\n float ndotv = dot(normal, viewDir);\n \n // Cull back-faces for closed 3D shapes (Sphere=1, Torus=2, Cylinder=3)\n if (u_shape_type > 0.5 && u_shape_type < 3.5) {\n if (ndotv < 0.0) {\n discard;\n }\n } else {\n // Double-sided shapes (Plane, Ribbon): flip normal if back-facing\n if (ndotv < 0.0) {\n normal = -normal;\n ndotv = -ndotv;\n }\n }\n vec3 lightDir = normalize(vec3(1.0, 1.0, 1.0));\n float diffuse = max(dot(normal, lightDir), 0.0);\n vec3 halfDir = normalize(lightDir + viewDir);\n float specular = pow(max(dot(normal, halfDir), 0.0), 32.0);\n\n // Blend smooth 3D shading with smooth height-based wave shading\n if (u_shape_type <= 0.5) {\n // Original height-based wave shading\n color += v_displacement_amount * u_highlights;\n float heightShadow = 1.0 - v_displacement_amount;\n color -= heightShadow * heightShadow * u_shadows;\n } else {\n // 3D shading\n color += specular * u_highlights;\n color += v_displacement_amount * u_highlights * 0.5;\n float heightShadow = 1.0 - v_displacement_amount;\n color -= heightShadow * heightShadow * u_shadows * 0.5;\n color -= (1.0 - diffuse) * u_shadows * 0.5;\n }\n color = saturation(color, 1.0 + u_saturation);\n color = color * u_brightness;\n\n // === IRIDESCENCE ===\n if (u_iridescence_enabled > 0.5) {\n float hue = fract(v_displacement_amount * 0.5 + 0.5 + u_time * u_iridescence_speed * 0.05);\n vec3 iriColor = hsl2rgb(hue, 0.8, 0.6);\n color = mix(color, iriColor, u_iridescence_intensity * abs(v_displacement_amount) * 0.6);\n }\n\n // === FRESNEL (Rim glow) ===\n if (u_fresnel_enabled > 0.5) {\n float slope = 1.0 - abs(v_displacement_amount);\n float fresnel = pow(max(slope, 0.0), u_fresnel_power);\n color += u_fresnel_color * fresnel * u_fresnel_intensity;\n }\n\n // === VIGNETTE ===\n if (u_vignette_intensity > 0.0) {\n vec2 vigUv = vUv;\n if (u_shape_type > 0.5) {\n vigUv = (v_new_position.xy / v_new_position.w) * 0.5 + vec2(0.5);\n }\n float dist = length(vigUv - vec2(0.5));\n float vig = smoothstep(u_vignette_radius, u_vignette_radius * 0.3, dist);\n color *= mix(1.0, vig, u_vignette_intensity);\n }\n\n // === FAKE BLOOM ===\n if (u_bloom_intensity > 0.0) {\n float luma = dot(color, vec3(0.2126, 0.7152, 0.0722));\n float bloomMask = smoothstep(u_bloom_threshold, 1.0, luma);\n color += color * bloomMask * u_bloom_intensity;\n }\n\n // === CHROMATIC ABERRATION ===\n if (u_chromatic_aberration > 0.0) {\n float caAmount = u_chromatic_aberration * 0.008;\n vec2 caUv = vUv;\n if (u_shape_type > 0.5) {\n caUv = (v_new_position.xy / v_new_position.w) * 0.5 + vec2(0.5);\n }\n float dist = length(caUv - vec2(0.5));\n float rShift = v_displacement_amount + caAmount * dist;\n float bShift = v_displacement_amount - caAmount * dist;\n color.r *= 1.0 + rShift * caAmount * 10.0;\n color.b *= 1.0 - bShift * caAmount * 10.0;\n }\n\n // Grain (use cheap hash noise instead of expensive fbm when static)\n float grain = 0.0;\n if (u_grain_intensity > 0.0) {\n vec2 noiseCoords = gl_FragCoord.xy / u_grain_scale;\n if (u_grain_speed != 0.0 || u_shape_type <= 0.5) {\n grain = fbm(vec3(noiseCoords, u_time * u_grain_speed));\n } else {\n // Static grain: use cheap hash instead of fbm\n grain = random(noiseCoords) - 0.5;\n }\n\n grain = grain * 0.5 + 0.5;\n grain -= 0.5;\n grain = (grain > u_grain_sparsity) ? grain : 0.0;\n grain *= u_grain_intensity;\n }\n\n color += vec3(grain);\n\n float edgeAlpha = 1.0;\n \n // Silhouette falloff for 3D shapes\n if (u_shape_type > 0.5) {\n edgeAlpha = smoothstep(0.0, u_silhouette_fade, ndotv);\n }\n \n // UV boundary falloff for open shapes\n if (u_shape_type == 3.0) { // Cylinder: fade top/bottom ends\n float vFade = smoothstep(0.0, u_cylinder_fade, vUv.y) * smoothstep(1.0, 1.0 - u_cylinder_fade, vUv.y);\n edgeAlpha *= vFade;\n } else if (u_shape_type == 4.0) { // Ribbon: fade all 4 borders\n float uFade = smoothstep(0.0, u_ribbon_fade, vUv.x) * smoothstep(1.0, 1.0 - u_ribbon_fade, vUv.x);\n float vFade = smoothstep(0.0, u_ribbon_fade, vUv.y) * smoothstep(1.0, 1.0 - u_ribbon_fade, vUv.y);\n edgeAlpha *= uFade * vFade;\n }\n\n edgeAlpha *= texAlpha;\n gl_FragColor = vec4(color, edgeAlpha);\n}\n";
1
+ export declare const vertexShaderSource = "void main() {\n vUv = uv;\n vPosition = position;\n\n // SCROLLING LOGIC\n // Separate multipliers for wave, color, and flow offsets\n float waveOffset = -u_y_offset * u_y_offset_wave_multiplier;\n float colorOffset = -u_y_offset * u_y_offset_color_multiplier;\n float flowOffset = -u_y_offset * u_y_offset_flow_multiplier;\n\n // 1. DISPLACEMENT (WAVES)\n // We add waveOffset to Y to scroll the wave pattern\n v_displacement_amount = cnoise( vec3(\n u_wave_frequency_x * position.x + u_time,\n u_wave_frequency_y * (position.y + waveOffset) + u_time,\n u_time\n ));\n\n // 2. FLOW FIELD\n // Apply flow offset to scroll the flow field mask\n vec2 baseUv = vUv;\n baseUv.y += flowOffset / u_plane_height; // Scale to match wave speed\n vec2 flowUv = baseUv;\n\n if (u_flow_enabled > 0.5) {\n if (u_flow_ease > 0.0 || u_flow_distortion_a > 0.0) {\n vec2 ppp = -1.0 + 2.0 * baseUv;\n ppp += 0.1 * cos((1.5 * u_flow_scale) * ppp.yx + 1.1 * u_time + vec2(0.1, 1.1));\n ppp += 0.1 * cos((2.3 * u_flow_scale) * ppp.yx + 1.3 * u_time + vec2(3.2, 3.4));\n ppp += 0.1 * cos((2.2 * u_flow_scale) * ppp.yx + 1.7 * u_time + vec2(1.8, 5.2));\n ppp += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.yx + 1.4 * u_time + vec2(6.3, 3.9));\n\n float r = length(ppp);\n flowUv = mix(baseUv, vec2(baseUv.x * (1.0 - u_flow_ease) + r * u_flow_ease, baseUv.y), u_flow_ease);\n }\n }\n\n // Pass the standard flow UV to fragment shader (for texture)\n vFlowUv = flowUv;\n\n // 3. COLOR MIXING\n // We take the computed flow UVs and apply the color offset\n // Scale by plane height to match wave offset speed (world space vs UV space)\n vec3 color = u_colors[0].color;\n\n vec3 distortedPos = position;\n if (u_flat_shading < 0.5) {\n if (u_flow_enabled > 0.5) {\n if (u_flow_ease > 0.0 || u_flow_distortion_a > 0.0) {\n vec3 ppp = position / 25.0;\n ppp.xyz += 0.1 * cos((1.5 * u_flow_scale) * ppp.yxz + 1.1 * u_time + vec3(0.1, 1.1, 2.1));\n ppp.xyz += 0.1 * cos((2.3 * u_flow_scale) * ppp.zxy + 1.3 * u_time + vec3(3.2, 3.4, 1.2));\n ppp.xyz += 0.1 * cos((2.2 * u_flow_scale) * ppp.yxz + 1.7 * u_time + vec3(1.8, 5.2, 3.1));\n ppp.xyz += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.zxy + 1.4 * u_time + vec3(6.3, 3.9, 4.5));\n\n float r = length(ppp);\n distortedPos = mix(position, vec3(\n position.x * (1.0 - u_flow_ease) + r * u_flow_ease * 25.0,\n position.y,\n position.z * (1.0 - u_flow_ease) + r * u_flow_ease * 25.0\n ), u_flow_ease);\n }\n }\n }\n\n vec3 noise_cord;\n if (u_flat_shading < 0.5) {\n noise_cord = vec3(distortedPos.x / 50.0, (distortedPos.y + colorOffset) / 50.0, distortedPos.z / 50.0);\n } else {\n vec2 adjustedUv = flowUv;\n adjustedUv.y += colorOffset / u_plane_height;\n noise_cord = vec3(adjustedUv, 0.0);\n }\n\n const float minNoise = .0;\n const float maxNoise = .9;\n\n for (int i = 1; i < 6; i++) {\n if (i < u_colors_count) {\n if (u_colors[i].is_active > 0.5) {\n float noiseFlow = (1. + float(i)) / 30.;\n float noiseSpeed = (1. + float(i)) * 0.11;\n float noiseSeed = 13. + float(i) * 7.;\n\n float noise_z = u_time * noiseSpeed;\n if (u_flat_shading < 0.5) {\n noise_z = noise_cord.z * u_color_pressure.x * u_color_pressure.x + u_time * noiseSpeed;\n }\n\n float noise = snoise(\n vec3(\n noise_cord.x * u_color_pressure.x * u_color_pressure.x + u_time * noiseFlow * 2.,\n noise_cord.y * u_color_pressure.y * u_color_pressure.y,\n noise_z\n ) + noiseSeed\n ) - (.1 * float(i)) + (.5 * u_color_blending);\n\n noise = clamp(noise, minNoise, maxNoise + float(i) * 0.02);\n color = mix(color, u_colors[i].color, smoothstep(0.0, u_color_blending, noise));\n }\n }\n }\n\n v_color = color;\n\n // 4. FRESNEL (rim glow)\n // (Calculated in fragment shader using displacement slope approximation)\n\n // 5. VERTEX POSITION\n vec3 newPosition = position + normal * v_displacement_amount * u_wave_amplitude;\n vec4 mvPosition = modelViewMatrix * vec4(newPosition, 1.0);\n vViewPosition = mvPosition.xyz;\n vNormal = normalize((modelViewMatrix * vec4(normal, 0.0)).xyz);\n gl_Position = projectionMatrix * mvPosition;\n v_new_position = gl_Position;\n}\n";
2
+ export declare const fragmentShaderSource = "float random(vec2 p) {\n return fract(sin(dot(p, vec2(12.9898,78.233))) * 43758.5453);\n}\n\nfloat fbm(vec3 x) {\n float value = 0.0;\n float amplitude = 0.5;\n float frequency = 1.0;\n for (int i = 0; i < 2; i++) {\n value += amplitude * snoise(x * frequency);\n frequency *= 2.0;\n amplitude *= 0.5;\n }\n return value;\n}\n\n// Branchless HSL to RGB for iridescence\nvec3 hsl2rgb(float h, float s, float l) {\n vec3 rgb = clamp(abs(mod(h * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0);\n return l + s * (rgb - 0.5) * (1.0 - abs(2.0 * l - 1.0));\n}\n\nvoid main() {\n vec2 finalUv = vFlowUv;\n \n vec3 baseColor;\n float texAlpha = 1.0;\n\n if (u_enable_procedural_texture > 0.5) {\n if (u_flat_shading < 0.5) {\n float parallaxFactor = 0.25;\n float scrollOffset = (u_y_offset * u_y_offset_color_multiplier) * parallaxFactor;\n vec3 scrolledPos = vPosition;\n scrolledPos.y -= scrollOffset;\n \n vec3 p = (scrolledPos * 1.5) / 50.0;\n vec2 uvX = p.yz + vec2(0.5);\n vec2 uvY = p.zx + vec2(0.5);\n vec2 uvZ = p.xy + vec2(0.5);\n \n vec4 colX = texture2D(u_procedural_texture, uvX);\n vec4 colY = texture2D(u_procedural_texture, uvY);\n vec4 colZ = texture2D(u_procedural_texture, uvZ);\n \n vec3 n = normalize(vNormal);\n vec3 blendWeights = abs(n);\n blendWeights = blendWeights / (blendWeights.x + blendWeights.y + blendWeights.z + 0.0001);\n \n vec4 texSample = colX * blendWeights.x + colY * blendWeights.y + colZ * blendWeights.z;\n baseColor = texSample.rgb;\n if (u_transparent_texture_void > 0.5) {\n texAlpha = texSample.a;\n }\n } else {\n vec2 ppp = -1.0 + 2.0 * finalUv;\n ppp += 0.1 * cos((1.5 * u_flow_scale) * ppp.yx + 1.1 * u_time + vec2(0.1, 1.1));\n ppp += 0.1 * cos((2.3 * u_flow_scale) * ppp.yx + 1.3 * u_time + vec2(3.2, 3.4));\n ppp += 0.1 * cos((2.2 * u_flow_scale) * ppp.yx + 1.7 * u_time + vec2(1.8, 5.2));\n ppp += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.yx + 1.4 * u_time + vec2(6.3, 3.9));\n float r = length(ppp);\n \n float vx = (finalUv.x * u_texture_ease) + (r * (1.0 - u_texture_ease));\n float vy = (finalUv.y * u_texture_ease) + (0.0 * (1.0 - u_texture_ease));\n vec2 texUv = vec2(vx, vy);\n\n float parallaxFactor = 0.25;\n texUv.y -= (u_y_offset * u_y_offset_color_multiplier / u_plane_height) * parallaxFactor;\n texUv *= 1.5;\n\n vec4 texSample = texture2D(u_procedural_texture, texUv);\n baseColor = texSample.rgb;\n if (u_transparent_texture_void > 0.5) {\n texAlpha = texSample.a;\n }\n }\n } else {\n baseColor = v_color;\n }\n\n vec3 color = baseColor;\n\n // === DOMAIN WARPING (simplified: 3 fbm calls instead of 5) ===\n if (u_domain_warp_enabled > 0.5) {\n vec3 p;\n if (u_flat_shading < 0.5) {\n p = vec3((vPosition / 50.0 + vec3(0.5)) * u_domain_warp_scale);\n p.z += u_time * 0.15;\n } else {\n p = vec3(finalUv * u_domain_warp_scale, u_time * 0.15);\n }\n vec2 q = vec2(fbm(p), fbm(p + vec3(5.2, 1.3, 0.0)));\n float f = fbm(p + vec3(4.0 * q, 0.0));\n vec3 warpColor = color * (1.0 + f * 0.8 * u_domain_warp_intensity);\n float pattern = clamp(f * f * f + 0.6 * f * f + 0.5 * f, 0.0, 1.0);\n color = mix(color, warpColor * (0.6 + pattern * 0.8), u_domain_warp_intensity * 0.7);\n }\n\n // Post-processing\n // Compute dynamic pixel-perfect normal using smooth normal\n vec3 normal = normalize(vNormal);\n vec3 viewDir = vec3(0.0, 0.0, 1.0);\n float ndotv = dot(normal, viewDir);\n \n // Cull back-faces for closed 3D shapes (Sphere=1, Torus=2, Cylinder=3)\n if (u_shape_type > 0.5 && u_shape_type < 3.5) {\n if (ndotv < 0.0) {\n discard;\n }\n } else {\n // Double-sided shapes (Plane, Ribbon): flip normal if back-facing\n if (ndotv < 0.0) {\n normal = -normal;\n ndotv = -ndotv;\n }\n }\n vec3 lightDir = normalize(vec3(1.0, 1.0, 1.0));\n float diffuse = max(dot(normal, lightDir), 0.0);\n vec3 halfDir = normalize(lightDir + viewDir);\n float specular = pow(max(dot(normal, halfDir), 0.0), 32.0);\n\n // Blend smooth 3D shading with smooth height-based wave shading\n if (u_flat_shading > 0.5) {\n // Flat / height-based wave shading (plane style)\n color += v_displacement_amount * u_highlights;\n float heightShadow = 1.0 - v_displacement_amount;\n color -= heightShadow * heightShadow * u_shadows;\n } else {\n // 3D shading\n color += specular * u_highlights;\n color += v_displacement_amount * u_highlights * 0.5;\n float heightShadow = 1.0 - v_displacement_amount;\n color -= heightShadow * heightShadow * u_shadows * 0.5;\n color -= (1.0 - diffuse) * u_shadows * 0.5;\n }\n color = saturation(color, 1.0 + u_saturation);\n color = color * u_brightness;\n\n // === IRIDESCENCE ===\n if (u_iridescence_enabled > 0.5) {\n float hue = fract(v_displacement_amount * 0.5 + 0.5 + u_time * u_iridescence_speed * 0.05);\n vec3 iriColor = hsl2rgb(hue, 0.8, 0.6);\n color = mix(color, iriColor, u_iridescence_intensity * abs(v_displacement_amount) * 0.6);\n }\n\n // === FRESNEL (Rim glow) ===\n if (u_fresnel_enabled > 0.5) {\n float slope = 1.0 - abs(v_displacement_amount);\n float fresnel = pow(max(slope, 0.0), u_fresnel_power);\n color += u_fresnel_color * fresnel * u_fresnel_intensity;\n }\n\n // === VIGNETTE ===\n if (u_vignette_intensity > 0.0) {\n vec2 vigUv = vUv;\n if (u_flat_shading < 0.5) {\n vigUv = (v_new_position.xy / v_new_position.w) * 0.5 + vec2(0.5);\n }\n float dist = length(vigUv - vec2(0.5));\n float vig = smoothstep(u_vignette_radius, u_vignette_radius * 0.3, dist);\n color *= mix(1.0, vig, u_vignette_intensity);\n }\n\n // === FAKE BLOOM ===\n if (u_bloom_intensity > 0.0) {\n float luma = dot(color, vec3(0.2126, 0.7152, 0.0722));\n float bloomMask = smoothstep(u_bloom_threshold, 1.0, luma);\n color += color * bloomMask * u_bloom_intensity;\n }\n\n // === CHROMATIC ABERRATION ===\n if (u_chromatic_aberration > 0.0) {\n float caAmount = u_chromatic_aberration * 0.008;\n vec2 caUv = vUv;\n if (u_flat_shading < 0.5) {\n caUv = (v_new_position.xy / v_new_position.w) * 0.5 + vec2(0.5);\n }\n float dist = length(caUv - vec2(0.5));\n float rShift = v_displacement_amount + caAmount * dist;\n float bShift = v_displacement_amount - caAmount * dist;\n color.r *= 1.0 + rShift * caAmount * 10.0;\n color.b *= 1.0 - bShift * caAmount * 10.0;\n }\n\n // Grain (use cheap hash noise instead of expensive fbm when static)\n float grain = 0.0;\n if (u_grain_intensity > 0.0) {\n vec2 noiseCoords = gl_FragCoord.xy / u_grain_scale;\n if (u_grain_speed != 0.0 || u_flat_shading > 0.5) {\n grain = fbm(vec3(noiseCoords, u_time * u_grain_speed));\n } else {\n // Static grain: use cheap hash instead of fbm\n grain = random(noiseCoords) - 0.5;\n }\n\n grain = grain * 0.5 + 0.5;\n grain -= 0.5;\n grain = (grain > u_grain_sparsity) ? grain : 0.0;\n grain *= u_grain_intensity;\n }\n\n color += vec3(grain);\n\n float edgeAlpha = 1.0;\n \n // Silhouette falloff for 3D shapes (skip when flat shading or fade is zero)\n if (u_silhouette_fade > 0.0 && u_flat_shading < 0.5) {\n edgeAlpha = smoothstep(0.0, u_silhouette_fade, ndotv);\n }\n \n // UV boundary falloff for open shapes\n if (u_shape_type == 3.0) { // Cylinder: fade top/bottom ends\n float vFade = smoothstep(0.0, u_cylinder_fade, vUv.y) * smoothstep(1.0, 1.0 - u_cylinder_fade, vUv.y);\n edgeAlpha *= vFade;\n } else if (u_shape_type == 4.0) { // Ribbon: fade all 4 borders\n float uFade = smoothstep(0.0, u_ribbon_fade, vUv.x) * smoothstep(1.0, 1.0 - u_ribbon_fade, vUv.x);\n float vFade = smoothstep(0.0, u_ribbon_fade, vUv.y) * smoothstep(1.0, 1.0 - u_ribbon_fade, vUv.y);\n edgeAlpha *= uFade * vFade;\n }\n\n edgeAlpha *= texAlpha;\n gl_FragColor = vec4(color, edgeAlpha);\n}\n";
3
3
  export declare function buildVertUniforms(): string;
4
4
  export declare function buildFragUniforms(): string;
5
5
  export declare function buildNoise(): string;
package/dist/shaders.js CHANGED
@@ -44,7 +44,7 @@ export const vertexShaderSource = `void main() {
44
44
  vec3 color = u_colors[0].color;
45
45
 
46
46
  vec3 distortedPos = position;
47
- if (u_shape_type > 0.5) {
47
+ if (u_flat_shading < 0.5) {
48
48
  if (u_flow_enabled > 0.5) {
49
49
  if (u_flow_ease > 0.0 || u_flow_distortion_a > 0.0) {
50
50
  vec3 ppp = position / 25.0;
@@ -64,7 +64,7 @@ export const vertexShaderSource = `void main() {
64
64
  }
65
65
 
66
66
  vec3 noise_cord;
67
- if (u_shape_type > 0.5) {
67
+ if (u_flat_shading < 0.5) {
68
68
  noise_cord = vec3(distortedPos.x / 50.0, (distortedPos.y + colorOffset) / 50.0, distortedPos.z / 50.0);
69
69
  } else {
70
70
  vec2 adjustedUv = flowUv;
@@ -83,7 +83,7 @@ export const vertexShaderSource = `void main() {
83
83
  float noiseSeed = 13. + float(i) * 7.;
84
84
 
85
85
  float noise_z = u_time * noiseSpeed;
86
- if (u_shape_type > 0.5) {
86
+ if (u_flat_shading < 0.5) {
87
87
  noise_z = noise_cord.z * u_color_pressure.x * u_color_pressure.x + u_time * noiseSpeed;
88
88
  }
89
89
 
@@ -123,7 +123,7 @@ float fbm(vec3 x) {
123
123
  float value = 0.0;
124
124
  float amplitude = 0.5;
125
125
  float frequency = 1.0;
126
- for (int i = 0; i < 4; i++) {
126
+ for (int i = 0; i < 2; i++) {
127
127
  value += amplitude * snoise(x * frequency);
128
128
  frequency *= 2.0;
129
129
  amplitude *= 0.5;
@@ -144,7 +144,7 @@ void main() {
144
144
  float texAlpha = 1.0;
145
145
 
146
146
  if (u_enable_procedural_texture > 0.5) {
147
- if (u_shape_type > 0.5) {
147
+ if (u_flat_shading < 0.5) {
148
148
  float parallaxFactor = 0.25;
149
149
  float scrollOffset = (u_y_offset * u_y_offset_color_multiplier) * parallaxFactor;
150
150
  vec3 scrolledPos = vPosition;
@@ -155,9 +155,9 @@ void main() {
155
155
  vec2 uvY = p.zx + vec2(0.5);
156
156
  vec2 uvZ = p.xy + vec2(0.5);
157
157
 
158
- vec4 colX = texture2D(u_procedural_texture, fract(uvX));
159
- vec4 colY = texture2D(u_procedural_texture, fract(uvY));
160
- vec4 colZ = texture2D(u_procedural_texture, fract(uvZ));
158
+ vec4 colX = texture2D(u_procedural_texture, uvX);
159
+ vec4 colY = texture2D(u_procedural_texture, uvY);
160
+ vec4 colZ = texture2D(u_procedural_texture, uvZ);
161
161
 
162
162
  vec3 n = normalize(vNormal);
163
163
  vec3 blendWeights = abs(n);
@@ -184,7 +184,7 @@ void main() {
184
184
  texUv.y -= (u_y_offset * u_y_offset_color_multiplier / u_plane_height) * parallaxFactor;
185
185
  texUv *= 1.5;
186
186
 
187
- vec4 texSample = texture2D(u_procedural_texture, fract(texUv));
187
+ vec4 texSample = texture2D(u_procedural_texture, texUv);
188
188
  baseColor = texSample.rgb;
189
189
  if (u_transparent_texture_void > 0.5) {
190
190
  texAlpha = texSample.a;
@@ -199,7 +199,7 @@ void main() {
199
199
  // === DOMAIN WARPING (simplified: 3 fbm calls instead of 5) ===
200
200
  if (u_domain_warp_enabled > 0.5) {
201
201
  vec3 p;
202
- if (u_shape_type > 0.5) {
202
+ if (u_flat_shading < 0.5) {
203
203
  p = vec3((vPosition / 50.0 + vec3(0.5)) * u_domain_warp_scale);
204
204
  p.z += u_time * 0.15;
205
205
  } else {
@@ -236,8 +236,8 @@ void main() {
236
236
  float specular = pow(max(dot(normal, halfDir), 0.0), 32.0);
237
237
 
238
238
  // Blend smooth 3D shading with smooth height-based wave shading
239
- if (u_shape_type <= 0.5) {
240
- // Original height-based wave shading
239
+ if (u_flat_shading > 0.5) {
240
+ // Flat / height-based wave shading (plane style)
241
241
  color += v_displacement_amount * u_highlights;
242
242
  float heightShadow = 1.0 - v_displacement_amount;
243
243
  color -= heightShadow * heightShadow * u_shadows;
@@ -269,7 +269,7 @@ void main() {
269
269
  // === VIGNETTE ===
270
270
  if (u_vignette_intensity > 0.0) {
271
271
  vec2 vigUv = vUv;
272
- if (u_shape_type > 0.5) {
272
+ if (u_flat_shading < 0.5) {
273
273
  vigUv = (v_new_position.xy / v_new_position.w) * 0.5 + vec2(0.5);
274
274
  }
275
275
  float dist = length(vigUv - vec2(0.5));
@@ -288,7 +288,7 @@ void main() {
288
288
  if (u_chromatic_aberration > 0.0) {
289
289
  float caAmount = u_chromatic_aberration * 0.008;
290
290
  vec2 caUv = vUv;
291
- if (u_shape_type > 0.5) {
291
+ if (u_flat_shading < 0.5) {
292
292
  caUv = (v_new_position.xy / v_new_position.w) * 0.5 + vec2(0.5);
293
293
  }
294
294
  float dist = length(caUv - vec2(0.5));
@@ -302,7 +302,7 @@ void main() {
302
302
  float grain = 0.0;
303
303
  if (u_grain_intensity > 0.0) {
304
304
  vec2 noiseCoords = gl_FragCoord.xy / u_grain_scale;
305
- if (u_grain_speed != 0.0 || u_shape_type <= 0.5) {
305
+ if (u_grain_speed != 0.0 || u_flat_shading > 0.5) {
306
306
  grain = fbm(vec3(noiseCoords, u_time * u_grain_speed));
307
307
  } else {
308
308
  // Static grain: use cheap hash instead of fbm
@@ -319,8 +319,8 @@ void main() {
319
319
 
320
320
  float edgeAlpha = 1.0;
321
321
 
322
- // Silhouette falloff for 3D shapes
323
- if (u_shape_type > 0.5) {
322
+ // Silhouette falloff for 3D shapes (skip when flat shading or fade is zero)
323
+ if (u_silhouette_fade > 0.0 && u_flat_shading < 0.5) {
324
324
  edgeAlpha = smoothstep(0.0, u_silhouette_fade, ndotv);
325
325
  }
326
326
 
@@ -394,6 +394,7 @@ uniform float u_fresnel_intensity;
394
394
  uniform vec3 u_fresnel_color;
395
395
 
396
396
  uniform float u_shape_type;
397
+ uniform float u_flat_shading;
397
398
  `;
398
399
  }
399
400
  export function buildFragUniforms() {
@@ -467,6 +468,7 @@ uniform float u_transparent_texture_void;
467
468
  uniform float u_silhouette_fade;
468
469
  uniform float u_cylinder_fade;
469
470
  uniform float u_ribbon_fade;
471
+ uniform float u_flat_shading;
470
472
  `;
471
473
  }
472
474
  export function buildNoise() {
@@ -1 +1 @@
1
- {"version":3,"file":"shaders.js","sourceRoot":"","sources":["../src/shaders.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoHjC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8NnC,CAAC;AAEF,MAAM,UAAU,iBAAiB;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,UAAU;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwJV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,OAAO;;;;;;CAMV,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"shaders.js","sourceRoot":"","sources":["../src/shaders.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoHjC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8NnC,CAAC;AAEF,MAAM,UAAU,iBAAiB;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,UAAU;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwJV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,OAAO;;;;;;CAMV,CAAC;AACF,CAAC"}
package/dist/types.d.ts CHANGED
@@ -70,6 +70,7 @@ export type NeatConfig = {
70
70
  planeBend?: number;
71
71
  planeTwist?: number;
72
72
  transparentTextureVoid?: boolean;
73
+ flatShading?: boolean;
73
74
  silhouetteFade?: number;
74
75
  cylinderFade?: number;
75
76
  ribbonFade?: number;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@firecms/neat",
3
3
  "description": "Beautiful 3D gradients for your website",
4
4
  "access": "public",
5
- "version": "0.9.0",
5
+ "version": "0.9.1",
6
6
  "main": "./dist/index.umd.js",
7
7
  "module": "./dist/index.es.js",
8
8
  "types": "dist/index.d.ts",
@@ -47,6 +47,9 @@
47
47
  "url": "https://github.com/FireCMSco/neat/issues"
48
48
  },
49
49
  "homepage": "https://github.com/FireCMSco/neat#readme",
50
+ "pnpm": {
51
+ "onlyBuiltDependencies": ["esbuild"]
52
+ },
50
53
  "publishConfig": {
51
54
  "access": "public"
52
55
  }
@@ -114,6 +114,7 @@ export class NeatGradient implements NeatController {
114
114
  private _silhouetteFade: number = 0.25;
115
115
  private _cylinderFade: number = 0.08;
116
116
  private _ribbonFade: number = 0.05;
117
+ private _flatShading: boolean = true;
117
118
 
118
119
  // 3D Shapes config
119
120
  private _shapeType: 'plane' | 'sphere' | 'torus' | 'cylinder' | 'ribbon' = 'plane';
@@ -173,6 +174,11 @@ export class NeatGradient implements NeatController {
173
174
  private _colorsChanged: boolean = true;
174
175
  private _uniformsDirty: boolean = true;
175
176
  private _textureDirty: boolean = true;
177
+ private _yOffsetDirty: boolean = false;
178
+ private _modelViewMatrix: Matrix4 = new Matrix4();
179
+ private _isVisible: boolean = true;
180
+ private _visibilityObserver: IntersectionObserver | null = null;
181
+ private _visibilityHandler: (() => void) | null = null;
176
182
 
177
183
  constructor(config: NeatConfig & { ref: HTMLCanvasElement, resolution?: number, seed?: number }) {
178
184
 
@@ -244,6 +250,7 @@ export class NeatGradient implements NeatController {
244
250
  silhouetteFade = 0.25,
245
251
  cylinderFade = 0.08,
246
252
  ribbonFade = 0.05,
253
+ flatShading = true,
247
254
 
248
255
  // Camera configuration
249
256
  cameraLock = false,
@@ -346,6 +353,7 @@ export class NeatGradient implements NeatController {
346
353
  this.silhouetteFade = silhouetteFade;
347
354
  this.cylinderFade = cylinderFade;
348
355
  this.ribbonFade = ribbonFade;
356
+ this._flatShading = flatShading;
349
357
 
350
358
  this._cameraLock = cameraLock;
351
359
  this._cameraX = cameraX;
@@ -401,7 +409,8 @@ export class NeatGradient implements NeatController {
401
409
 
402
410
  // Update modelViewMatrix in every frame to support dynamic rotation and auto-rotation
403
411
  const camera = this.glState.camera;
404
- const modelViewMatrix = new Matrix4();
412
+ const modelViewMatrix = this._modelViewMatrix;
413
+ modelViewMatrix.identity();
405
414
 
406
415
  // 1. Camera translation (default camera distance + displacement)
407
416
  modelViewMatrix.translate(
@@ -438,6 +447,12 @@ export class NeatGradient implements NeatController {
438
447
  const mvLoc = locations.uniforms["modelViewMatrix"];
439
448
  if (mvLoc) gl.uniformMatrix4fv(mvLoc, false, modelViewMatrix.elements);
440
449
 
450
+ // Fast path: only upload yOffset when it changed (scroll)
451
+ if (this._yOffsetDirty && !this._uniformsDirty) {
452
+ gl.uniform1f(locations.uniforms['u_y_offset'], this._yOffset);
453
+ this._yOffsetDirty = false;
454
+ }
455
+
441
456
  // Only upload static uniforms when they've been modified
442
457
  if (this._uniformsDirty) {
443
458
  gl.uniform2f(locations.uniforms['u_resolution'], this._ref.clientWidth, this._ref.clientHeight);
@@ -498,8 +513,10 @@ export class NeatGradient implements NeatController {
498
513
  gl.uniform1f(locations.uniforms['u_silhouette_fade'], this._silhouetteFade);
499
514
  gl.uniform1f(locations.uniforms['u_cylinder_fade'], this._cylinderFade);
500
515
  gl.uniform1f(locations.uniforms['u_ribbon_fade'], this._ribbonFade);
516
+ gl.uniform1f(locations.uniforms['u_flat_shading'], this._flatShading ? 1.0 : 0.0);
501
517
 
502
518
  this._uniformsDirty = false;
519
+ this._yOffsetDirty = false;
503
520
  }
504
521
 
505
522
  // Only regenerate procedural texture when needed
@@ -558,8 +575,35 @@ export class NeatGradient implements NeatController {
558
575
  gl.drawElements(gl.TRIANGLES, indexCount, indexType, 0);
559
576
  }
560
577
 
561
- this.requestRef = requestAnimationFrame(render);
578
+ if (this._isVisible) {
579
+ this.requestRef = requestAnimationFrame(render);
580
+ }
581
+ };
582
+
583
+ // Visibility optimization: pause rendering when off-screen or tab hidden
584
+ this._visibilityObserver = new IntersectionObserver((entries) => {
585
+ const wasVisible = this._isVisible;
586
+ this._isVisible = entries[0].isIntersecting && document.visibilityState !== 'hidden';
587
+ if (this._isVisible && !wasVisible) {
588
+ lastTime = performance.now(); // Avoid time jump after resume
589
+ this.requestRef = requestAnimationFrame(render);
590
+ }
591
+ }, { threshold: 0 });
592
+ this._visibilityObserver.observe(ref);
593
+
594
+ this._visibilityHandler = () => {
595
+ const wasVisible = this._isVisible;
596
+ if (document.visibilityState === 'hidden') {
597
+ this._isVisible = false;
598
+ } else {
599
+ this._isVisible = true;
600
+ if (!wasVisible) {
601
+ lastTime = performance.now();
602
+ this.requestRef = requestAnimationFrame(render);
603
+ }
604
+ }
562
605
  };
606
+ document.addEventListener('visibilitychange', this._visibilityHandler);
563
607
 
564
608
  const setSize = () => {
565
609
 
@@ -604,6 +648,16 @@ export class NeatGradient implements NeatController {
604
648
  cancelAnimationFrame(this.requestRef);
605
649
  this.sizeObserver.disconnect();
606
650
 
651
+ // Cleanup visibility observers
652
+ if (this._visibilityObserver) {
653
+ this._visibilityObserver.disconnect();
654
+ this._visibilityObserver = null;
655
+ }
656
+ if (this._visibilityHandler) {
657
+ document.removeEventListener('visibilitychange', this._visibilityHandler);
658
+ this._visibilityHandler = null;
659
+ }
660
+
607
661
  // Clear resize timeout
608
662
  if (this._resizeTimeoutId !== null) {
609
663
  clearTimeout(this._resizeTimeoutId);
@@ -973,8 +1027,10 @@ export class NeatGradient implements NeatController {
973
1027
  return this._yOffset;
974
1028
  }
975
1029
  set yOffset(yOffset: number) {
976
- this._uniformsDirty = true;
977
- this._yOffset = yOffset;
1030
+ if (this._yOffset !== yOffset) {
1031
+ this._yOffsetDirty = true;
1032
+ this._yOffset = yOffset;
1033
+ }
978
1034
  }
979
1035
 
980
1036
  get yOffsetWaveMultiplier(): number {
@@ -1397,7 +1453,7 @@ export class NeatGradient implements NeatController {
1397
1453
  "u_fresnel_enabled", "u_fresnel_power", "u_fresnel_intensity", "u_fresnel_color",
1398
1454
  "u_iridescence_enabled", "u_iridescence_intensity", "u_iridescence_speed",
1399
1455
  "u_bloom_intensity", "u_bloom_threshold", "u_chromatic_aberration",
1400
- "u_shape_type", "u_silhouette_fade", "u_cylinder_fade", "u_ribbon_fade"
1456
+ "u_shape_type", "u_silhouette_fade", "u_cylinder_fade", "u_ribbon_fade", "u_flat_shading"
1401
1457
  ];
1402
1458
 
1403
1459
  const locations: WebGLState["locations"] = {
@@ -1739,6 +1795,16 @@ export class NeatGradient implements NeatController {
1739
1795
  }
1740
1796
  }
1741
1797
 
1798
+ get flatShading(): boolean {
1799
+ return this._flatShading;
1800
+ }
1801
+ set flatShading(value: boolean) {
1802
+ if (this._flatShading !== value) {
1803
+ this._flatShading = value;
1804
+ this._uniformsDirty = true;
1805
+ }
1806
+ }
1807
+
1742
1808
  get domainWarpEnabled(): boolean {
1743
1809
  return this._domainWarpEnabled;
1744
1810
  }
package/src/math.ts CHANGED
@@ -8,6 +8,14 @@ export class Matrix4 {
8
8
  0, 0, 0, 1
9
9
  ]);
10
10
  }
11
+ identity() {
12
+ const e = this.elements;
13
+ e[0] = 1; e[1] = 0; e[2] = 0; e[3] = 0;
14
+ e[4] = 0; e[5] = 1; e[6] = 0; e[7] = 0;
15
+ e[8] = 0; e[9] = 0; e[10] = 1; e[11] = 0;
16
+ e[12] = 0; e[13] = 0; e[14] = 0; e[15] = 1;
17
+ return this;
18
+ }
11
19
  translate(tx: number, ty: number, tz: number) {
12
20
  this.elements[12] += this.elements[0] * tx + this.elements[4] * ty + this.elements[8] * tz;
13
21
  this.elements[13] += this.elements[1] * tx + this.elements[5] * ty + this.elements[9] * tz;