{
  "schemaVersion": 1,
  "id": "frozen-splash",
  "version": "1.0.0",
  "status": "published",
  "kind": "object",
  "title": "Frozen Splash",
  "summary": "A glass-clear splash frozen in mid-air: a crown of points, a central jet and flying beads, with the camera circling it. Loops perfectly.",
  "description": "A splash caught in mid-air: the crown of a drop that has just landed, its scalloped wall thrown up into sharp points each tipped with a bead, a central jet topped by a drop and a scatter of beads flung out around it. The liquid is rendered as glass, so it catches the studio light like ice. Time is stopped but not quite: every bead bobs by a hair and the crown breathes while the camera makes one full circle per loop. Choose the liquid (ice, milk, coral or honey), the number of crown points, the number of beads, the height, the seed, the backdrop colour and whether the camera circles.",
  "role": "Object (3D, three.js): a crisp, high-speed-photography look for drinks, water and cosmetics content.",
  "collections": [
    "chrome-glass",
    "product-reveals",
    "satisfying"
  ],
  "tags": [
    "splash",
    "water splash",
    "milk crown",
    "frozen",
    "droplets",
    "liquid",
    "high speed",
    "glass",
    "studio",
    "loop",
    "3d"
  ],
  "synonyms": [
    "milk crown",
    "liquid splash",
    "frozen liquid",
    "water drop",
    "splash photography",
    "droplet crown"
  ],
  "useCases": [
    "A drink, water or dairy brand scene",
    "A cosmetics or skincare hero",
    "A \"freeze the moment\" title"
  ],
  "featured": null,
  "publishedAt": "2026-10-05",
  "implementation": {
    "target": "three",
    "runtime": "browser",
    "language": "javascript",
    "module": "esm",
    "entry": "src/frozen-splash.js",
    "exports": [
      {
        "name": "createSplash",
        "signature": "createSplash({ liquid?, points?, beads?, height?, seed? }) => { group, setProgress(progress), dispose() }",
        "description": "The splash (pool, crown, jet and beads) as a group about 9 across and 5 tall, resting on y = 0; needs an environment map."
      },
      {
        "name": "LIQUIDS",
        "signature": "LIQUIDS: { ice, milk, coral, honey }",
        "description": "Liquid colours, opacities and roughness."
      }
    ],
    "reusable": [
      "src/frozen-splash.js"
    ],
    "demo": "demo.js",
    "harness": "index.html"
  },
  "dependencies": [
    {
      "id": "three",
      "version": "0.185.1",
      "reason": "Renderer, geometry and shader materials."
    },
    {
      "id": "chrome-material",
      "version": "1.1.0",
      "scope": "demo",
      "reason": "Studio environment light, backdrop and contact shadow."
    },
    {
      "id": "apw-runtime",
      "version": "1.0.0",
      "scope": "demo",
      "reason": "Demo harness."
    }
  ],
  "params": [
    {
      "key": "liquid",
      "label": "Liquid",
      "type": "select",
      "default": "ice",
      "options": [
        {
          "value": "ice",
          "label": "Ice"
        },
        {
          "value": "milk",
          "label": "Milk"
        },
        {
          "value": "coral",
          "label": "Coral"
        },
        {
          "value": "honey",
          "label": "Honey"
        }
      ]
    },
    {
      "key": "points",
      "label": "Crown points",
      "type": "integer",
      "min": 8,
      "max": 32,
      "step": 1,
      "default": 18
    },
    {
      "key": "beads",
      "label": "Beads",
      "type": "integer",
      "min": 0,
      "max": 160,
      "step": 5,
      "default": 60
    },
    {
      "key": "height",
      "label": "Height",
      "type": "number",
      "min": 0.6,
      "max": 1.6,
      "step": 0.1,
      "default": 1
    },
    {
      "key": "seed",
      "label": "Seed",
      "type": "integer",
      "min": 1,
      "max": 999,
      "step": 1,
      "default": 6
    },
    {
      "key": "background",
      "label": "Backdrop",
      "type": "color",
      "default": "#141c2a"
    },
    {
      "key": "orbit",
      "label": "Camera circles",
      "type": "boolean",
      "default": true
    }
  ],
  "presets": [
    {
      "id": "default",
      "label": "Ice, eighteen points",
      "params": {}
    },
    {
      "id": "milk",
      "label": "Milk crown",
      "params": {
        "liquid": "milk",
        "points": 14,
        "beads": 40,
        "background": "#2a2a34"
      }
    },
    {
      "id": "coral",
      "label": "Coral, tall",
      "params": {
        "liquid": "coral",
        "height": 1.5,
        "beads": 100,
        "background": "#1c1218"
      }
    },
    {
      "id": "honey",
      "label": "Honey, few beads",
      "params": {
        "liquid": "honey",
        "beads": 25,
        "points": 24,
        "background": "#1c140c"
      }
    }
  ],
  "output": {
    "width": 1080,
    "height": 1080,
    "fps": 30,
    "durationSeconds": 16,
    "posterSeconds": 2,
    "alpha": false,
    "motion": "procedural",
    "loop": {
      "seamless": true,
      "cycleSeconds": 16,
      "method": "The camera makes one full circle per loop, each bead bobs by whole cycles and the crown breathes by one cycle, so the last frame meets the first."
    },
    "seed": {
      "param": "seed",
      "behavior": "Seed places the flying beads and varies the crown tips: same seed, same splash."
    }
  },
  "composition": {
    "inputs": "Time within the loop; the liquid, crown points, beads, height, seed, backdrop and camera.",
    "outputs": "A full frame rendered in 3D with a studio environment.",
    "coordinates": "The splash is centred on the y axis on a floor at y = 0; the crown's base radius is 1.55 and it flares to about 2.5; the jet rises to about 1.9; beads fly out to a radius of about 5.",
    "lighting": "A warm key light with a shadow map and the studio environment; the liquid is glass-like with clearcoat.",
    "timing": "setProgress(progress) rewrites the crown and positions the beads; frames render in any order.",
    "compatibleWith": [
      "chrome-material",
      "orbit-camera",
      "kinetic-title",
      "number-reveal"
    ],
    "notes": [
      "The crown wall is a flared surface of revolution whose top edge follows |cos(points·θ/2)|³."
    ]
  },
  "reuse": [
    "Water brand: Ice, eighteen points.",
    "Dairy: Milk crown.",
    "Treat: Honey, few beads."
  ],
  "integration": {
    "newProject": "Create a WebGLRenderer with a studio environment and a shadow-casting light, add createSplash().group and call splash.setProgress(progress) each frame.",
    "existingProject": "Copy src/frozen-splash.js; add the group to your scene with an environment map."
  },
  "performance": {
    "notes": "About 4 500 crown vertices rewritten each frame, one instanced draw of up to 160 beads, a shadow map: a couple of milliseconds a frame on an integrated Intel GPU.",
    "limits": "Software WebGL renders in about two seconds a frame."
  },
  "limitations": [
    "The splash is a stylised shape, not a fluid simulation.",
    "The liquid is transparent without true refraction."
  ],
  "license": {
    "spdx": "MIT",
    "notice": "Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder.",
    "thirdParty": []
  },
  "provenance": "Adapted from the owner's threejs-sketches/objects-scenes/frozen-splash (MIT) and rebuilt for AI Pixel Wizard in October 2026 as an original studio object: a scalloped crown wall with bead-tipped points, a central jet and flung beads in glass, with a full camera circle on an exact loop.",
  "changelog": [
    {
      "version": "1.0.0",
      "date": "2026-10-05",
      "notes": "Initial release."
    }
  ]
}
