engine v4.5.0
Surface Tension
May 22, 2026
Water you can swim in, and shapes that look like the real thing.
what's new
- Water you can swim in — add ponds, lakes, and oceans to your worlds. Players dive under, float back to the surface, and splash going in, with waves rolling across the top and foam gathering at the shore.
- Shapes that look like real things — the shapes Savi builds by hand can now look like wood, stone, or brick instead of a flat color.
- Patterns fit whatever size you build — stretch a crate and the wood grain spreads across it naturally instead of smearing.
- Recolor one copy without touching the rest — give a single barrel its own shade without making a whole new one.
- Surfaces look cleaner from across the room — detail holds up when you're looking at things from an angle.
›technical notes
Water / Liquids
- New schema-driven liquid system (#6418). Water bodies are configured through liquid-preset controls instead of hardcoded values — gated stylized contact foam and crest foam (with crest-foam texture support), waves, caustics, refraction, all runtime-tunable. Swimming is supported via
onLiquidEnter/onLiquidExitbehavior hooks (liquid.feetPosition, buoyancy, splash). Surface uses non-analytical normals for performance. Newwater-and-swimmingskill;heightmap-terrainskill updated for decorative water placement.
Primitive & geometry textures
- Albedo textures for scripted geometry (#6534). Scripts exporting
geometry()can now apply albedo (and multi-texture) maps to custom geometry. - Per-instance texture tinting + native UV scaling for indirect batched primitives (#6538). Luminance-preserving per-instance tinting via the shared
applyTextureTintmath (lifted torenderer/utils/tint-node.ts, now shared with terrain). UV scaling derives from the entity's transform scale by default (computeUvTransform/inferNativeUvScale) — a 4×2×3 box tiles 4×2 instead of stretching one tile.setUvTransformAtwrites the tint-strength lane in the same call. - Improved primitive texture anisotropy (#6541) — textures stay sharp at grazing angles.