Real liquid in any closed mesh: set the level, tip it, shake it, drink it. 64 liquid styles, 15 glass styles, 12 potion bottles and a Lab scene to tune it in.💬 Join the AnkleBreaker Community! 💬Got a question, feedback, or a feature you'd love to see? Join our Discord, we actively improve our assets based on your input, it's where we drop our latest announcements and run giveaways.👥 Discord: 👉 https://discord.gg/2D36VUmsYN🌐 Website: 👉 https://anklebreaker-studio.com🧪 A Liquid That Behaves Like Liquid 🧪Most potion assets are a coloured lump of glass. This one holds an actual volume.There is a real surface inside the container. It sits at the level you choose, it stays horizontal when the container tips, it sloshes when the container moves and settles again, and it goes down when you drink, leaving a film on the glass. Drag the level in the Scene view and watch it fill: no Play mode needed.🌊 It Is Not Tied To Our Meshes 🌊The liquid works on any closed mesh you own. Select your container, run one menu command, and it is wired: the component finds the liquid renderer, reads the volume off the mesh, and tells you straight away whether the mesh is watertight, drawing the open edges in the Scene view if it is not.Your own bottles, a vat, a beaker, a trough, a Unity cube, a Unity cylinder.A model authored Z-up is one dropdown away.🎨 64 Liquid Styles, Applied In One Click 🎨Every style ships twice: as a preset asset you can open, copy and edit, and as a material you can drag onto a renderer.Core — Health, Mana, Stamina, Poison, Antidote, Nectar, Springwater, Tonic.Radiant — Uranium, Bioluminescent, Emberflame, Voidfire, Frostlight, Plasma, Radium, Moonwell. They gain in the dark, and some of them tremble.Sparkling — Stardust, Fairy Dust, Gold Flake, Nebula, Diamond Dust, Champagne, Seafoam. Real drifting flecks, not a texture.Swirling — Marbled, Duotone, Oil Slick, Galaxy, and a Lava Lamp with actual metaballs.Thick — Blood Clot, Slime, Tar, Honey, Sludge, Quicksilver, Cream, Inkwell. Lumps in the liquid and a lumpy surface to match.States — Boiling, Chilled, Frozen, Dry Ice, Corruption, Smoulder.Special — Witches Brew, Ectoplasm, Liquid Gold, Absinthe, Djinn, Miasma, Layered Elixir, Tricolore.Browse them as a grid of thumbnails rendered on your own container's mesh, so what you see is what you get. Save your own with one button. Crossfade from one style to another at runtime as a brew comes to the boil or a potion freezes.🧊 The Container Is A Second Catalogue 🧊15 glass styles, independent of the liquid — changing the potion no longer changes the bottle, and any glass goes with any liquid.Plain — Clean, Lab, Smoked, and Lantern, which conducts the light of whatever it holds.Old — Antique, Apothecary, Green Bottle, Cellar, Ancient.Worn — Scratched, Cracked, Crazed.Opaque — Frosted, Opaline, Sea Glass.They are built from eleven switchable features: thick tint, blown glass, wall bubbles, scratches, cracks, the dried rings of former levels, patina, grime drips and a hand print, frosting and milk glass.💫 Everything Else Is Opt-In 💫Add a component only when you want the effect. Absent, it costs exactly nothing.Foam and scum — a head with real height that builds when you stir it and settles on its own.Effervescence — columns of bubbles that leave a site, accelerate, spread and break at the surface.Bursting caps — big domes that swell on a boiling surface, burst, throw drops in 3D and leave a ring behind.Embers — sparks born on the liquid's own surface, climbing with the container and thinning as they rise. Seven styles throw them already.Smoke — held in the air pocket above the liquid, or open for a cauldron, where light smoke climbs in volutes and heavy smoke hangs and creeps. It is a volume, so it does not cut through your geometry.Caustics — the net of light the surface folds into the body of the liquid and onto the wall, tilting with the surface and coming down with the level.Glow — emission with a pulse, a halo that needs no bloom in your stack, glass that conducts the liquid's light, and a real Light that throws the liquid's own net onto the floor it stands on.Layers — four colours stacked with soft interfaces, anchored to the container or riding the level.Pour, cork, tap and floaters — pour an amount from one container into another, and let ice cubes or petals ride exactly where the surface is drawn.🍶 Twelve Potion Bottles, Ready To Drop 🍶Three sizes of the classic flask — small, medium and large — for potions that come in strengths, then nine shaped bottles with their own ornament: crystal, donut, fire, heart, mushroom, skull, star, hourglass and triangle. Plus a cauldron.Every prefab arrives finished: glass, cork, metalwork and a liquid style already assigned, with the component wired to the right mesh. 60 transparent inventory icons come with them, already imported as sprites, so a UI slot is a drag away.🔬 Two Scenes That Teach It 🔬The Demo answers what is in this package: the whole catalogue in a lit case, and three plinths in front of it running one liquid through three behaviours. Walk the styles and the bottles with the bar along the bottom, click any bottle to close up on it.The Lab answers what happens when I pull that slider: one bottle, a tap and a cork, with every setting on screen while the bottle is carried, run with, handed over, shaken, thrown or tipped to pour. Fill it from the tap, drink it, press Water, Oil, Syrup or Mercury, then save what you made back into a preset asset.🧰 Built To Ship 🧰No solver. No particles, no grid, no SPH. It is a rendered volume, and that is what makes a hundred of them affordable in one scene.Two motion qualities. Standard by default. Advanced adds a crest that climbs the wall the liquid is thrown against, a circulation that outlives a spin, and it holds the amount of liquid as the container rolls right over.A knock lands by itself — give the container a collider and a rigidbody, and putting a bottle down or hitting it rocks and rings the liquid with no code at all.Gravity is a setting — a bottle on a rolling ship or a small planet still holds its liquid the right way up.The inspector tells you what is wrong and fixes it with a button: a mesh with holes, a material on the wrong shader, a pipeline setting the effect needs.42 pages of documentation inside the editor, searchable, plus a welcome window and a one-click hub.🧩 Render Pipelines 🧩Use the same liquid styles and bottle prefabs in URP or HDRP. URP requires Unity 2022.3 LTS / URP 14 or newer; HDRP requires Unity 6 / HDRP 17 or newer. 📦 What You Get 📦12 potion models — 3 sizes and 9 shaped bottles14 ready-to-use prefabs, fully wired, including a cauldron64 liquid styles, as presets and as materials15 container styles, as presets and as materials60 transparent inventory icons12 shaders and 11 components3 example scenes — the Demo, the Lab, and one with the liquid in plain Unity primitivesA 42-page documentation window inside UnityA briefing file for AI coding assistants, so yours gets the real API instead of inventing a fluid solver🎬 About The Videos 🎬The second video, the alchemist's workshop, is dressed with Stylized Cauldron - 3 Tiers - AAA quality, a separate AnkleBreaker asset that is not included here. Compatibility
Render pipelines: URP 14+ and HDRP 17+, with native passes in the same shaders. Existing presets and prefabs select the active pipeline automatically. The Built-in pipeline is not supported.
Unity: 2022.3 LTS or newer for URP; Unity 6 for HDRP. Developed in Linear colour space.
Tested on Unity 6000.0.68f1 with URP 17.0.4 and HDRP 17.0.4 in separate projects: all 12 shaders carry native passes for both pipelines, the 42 documentation pages build, and rendered fill, camera translation and bottles were checked per pipeline.
No third-party dependencies. The shaders are hand-written HLSL. Install your chosen URP or HDRP package from the Unity registry; the installer recognizes either pipeline.
Mobile is not claimed, because it has not been measured.
Models
12 FBX. 22,043 triangles for the whole set as Unity imports them, from 868 (Triangle) to 3,424 (Time, the hourglass).
Each bottle is 3 to 6 separate meshes so the parts can be addressed independently: Shell (metalwork), Cork, Glass or Glass_Outer plus Glass_Inner, and Liquid.
The Liquid mesh of all twelve bottles is a closed, watertight volume. That is the condition of the technique, not a detail: the fill clips the mesh at the surface and shades the back faces that opens up, so a hole in the mesh is a hole in the liquid.
Bottles are 16 to 22 cm tall, real-world scale, set on the FBX importers as Scale Factor 0.35.
UVs and normals imported from the source. No LODs, no colliders, no rigs, no animation clips, no blend shapes.
Lightmap UVs are not generated. Turn on Generate Lightmap UVs in the FBX importer to bake a static container; the liquid is a dynamic effect and is not lightmapped either way.
Textures and icons
22 PNG at 1024 x 1024: 11 albedo maps (suffix _A, sRGB) and 11 Unity mask maps (suffix _MS, red is metallic, alpha is smoothness, linear). Plus one 256 px example label.
No normal maps. The art is flat-shaded by design.
The glass and the liquid use no texture at all: both are entirely procedural.
60 icons at 256 x 256, straight alpha, imported as Sprite (2D and UI) with Alpha Is Transparency on and mipmaps off: twelve bottles, empty and in four colours.
Shaders
12 shaders, including the hidden caustic-cookie shader. URP procedural passes use shader model 3.0; HDRP uses shader model 4.5.
Liquid: opaque, alpha-clipped, double sided, with ForwardLit, ShadowCaster, DepthOnly and DepthNormals passes, so the fill level is respected by shadows, depth and SSAO as well as by the visible surface.
Glass: transparent, premultiplied, double sided, casting no shadow on purpose — the liquid inside is opaque and casts the real one.
The other nine are placed for you by the components that use them — halo, smoke volume, bursting caps, the drops they throw, embers, the pour jet, the light cookie. You never assign one by hand.
Every effect is a shader keyword: a style that does not use one compiles it out entirely. Measured, with everything switched off, the liquid fragment program is 72,654 bytes and the glass 2,966 bytes.
All material properties live in the UnityPerMaterial buffer, so the shaders are SRP Batcher compatible, and the liquid materials ship with GPU Instancing enabled.
Per-container fill and slosh are fed to the shader through a MaterialPropertyBlock, which takes that renderer out of the SRP Batcher — GPU Instancing is why a hundred containers sharing one material still batch.
HDRP setup
Enable Transparent Backface in the HDRP asset and Refraction in camera Frame Settings.
The example scenes were authored in URP. An HDRP overlay ships inside the package (7-UpgradePackages): on import in an HDRP project a window lists every file it would write and applies them in one click, overwriting the three example scenes and their grades in place, GUIDs kept, so prefabs keep working. Reopen it from Tools > AnkleBreaker > Fluid Volumes and Potions > Render Pipeline Upgrade.
For transparent runtime icons, use the HDRP asset's R16G16B16A16 Color Buffer Format. The default R11G11B10 format discards alpha.
What it asks of your URP asset
Glass refraction and frosted glass read the Opaque Texture, and the glass uses the Depth Texture to tell the background from something standing in front of the bottle. Without them refraction simply stops happening: nothing goes black. The material and container inspectors check for both and offer a button.
Transmission draws at render queue 2950, after URP makes its opaque copy, which also puts it outside the depth prepass. SSAO and screen-space shadows are switched off for it automatically, the way URP does for its own transparents, but post-process depth of field cannot be: it will focus a transmissive bottle at the depth of the wall behind it. Worth knowing if your camera has a shallow focus.
Cast Light needs Light Cookies ticked, which is the default. Nothing is shipped as a picture: the cookie is drawn on the GPU at 128 x 128, once a frame, and no texture exists when the feature is off.
Contained smoke — the moving haze in the air pocket above the liquid — is drawn by this package's glass shader and requires it.
Scripts
Three shipped assembly definitions: AnkleBreaker.FluidVolumesAndPotions, .Editor and .Installer.Editor. The example scenes carry their own code in two further assemblies under 2-Examples/ — delete that folder and none of it compiles into your game.
The base runtime has no URP or Input System assembly dependency. A separate optional HDRP assembly supplies light and preview integration.
11 components you place: FluidVolume, FluidVolumeMotion, FluidCork, FluidEmbers, FluidFaucet, FluidFloater, FluidHalo, FluidLight, FluidPour, FluidSmoke, FluidSurfaceDomes.
Public API on FluidVolume: Fill, AnimateFillTo, Drink, Sip, Refill, Splash, Ripple, Knock, ApplyFeel, ApplyPreset, TransitionTo, SetColors, GravityUp, Quality, Quantity01, Capacity, Volume, SurfaceHeightAt, SurfaceOffsetAt, SurfaceNormalAt, SurfacePlane, and the OnEmptied and OnFillAnimationCompleted events.
A volume profile generated per container (about a thousand weighted cells of its inside) gives the capacity in litres and lets two containers pour amounts into each other. Bottles and cauldron are prepared.
Cost
Whole component step, per container per frame, measured in the editor on a Ryzen 7 5800X: Standard 19 microseconds whatever it is doing. Advanced 26 at rest, about 75 carried or turned slowly, 105 under the hardest gesture of the test bench.
Advanced Slosh is a material feature: the liquid program grows from 72,654 to 76,562 bytes, and on the cauldron at full screen the frame does not move by a measurable amount (+0.03 ms against a noise floor of 0.25 ms, over 400 paired frames).
Limits, stated plainly
URP and HDRP raster rendering. Built-in, path-traced/ray-traced material passes and custom motion-vector passes are not supported. HDRP SSR/SSGI, XR and HDRP GPU performance are unvalidated.
The liquid mesh must be closed. The outer shell does not: a cauldron with a closed puck of liquid inside it works, and that is how the shipped one is built.
No mixing of two liquids in the same volume.
No UI or HUD variant. The same liquid in a health bar is a different product.
A pool of cast light obeys the material it lands on, stone, wood and plaster hold it, polished metal cannot.
Third-party content in the media
The second video is dressed with Stylized Cauldron - 3 Tiers - AAA quality (AnkleBreaker), sold separately, not included here: Asset Store page. The liquid, smoke, embers and bottles in it are this package; the cauldron station and its props are not.
One console message
On Unity 6.1 and newer the liquid shader logs a single deprecation warning about _FORWARD_PLUS. It is deliberate: that keyword carries Forward+ additional lights on 2022.3 and 6.0, and _CLUSTER_LIGHT_LOOP is declared beside it for 6.1 and up. Dropping either would leave a whole Unity generation with no point lights on the liquid.



