Phaser AE

Procedural 3D shapes

Free packv3.0.0-33DLook

Crystals, boulders, pillars and spires as generated meshes, and the composites they build into: a tree and a cluster of crystals. A 3D scene can be dressed before there is a single model file.

This is a Free pack. Every phaser.io account can use it in their games.

Released October 14, 2026 · updated October 19, 2026

Procedural 3D shapes: a screenshot of its demo
A note about these graphics

Expansion packs don't come with graphics. This screenshot is one way of drawing what the pack does, made for its demo: none of the sprites, tiles or backgrounds in it are in the pack.

That's by design. A pack is a game's logic, mechanics and effects, and it works with whatever art you give it. Some packs draw effects, backdrops or 3D scenes of their own, but none carries a game's sprites.

So the look is yours. Make the art on phaser.io, bring your own, or let your agent draw it in code: the same pack can look like anything.

The pack

art3d

function art3d(): Pack<{ art3d: Art3dApi }>

The art-3d pack: procedural crystals, rocks, pillars and spires, and the composites they build into. Requires a 3D world; the shapes are defined once as meshes, so every crystal in a scene is one draw.

Functions

crystalVerts

function crystalVerts(): Float32Array

Hexagonal bipyramid — the classic game crystal (flat facets).

pillarVerts

function pillarVerts(): Float32Array

A ruined column: square plinth, octagonal fluted shaft, square cap.

rockVerts

function rockVerts(): Float32Array

A low-poly boulder: jittered sphere with flat facets (deterministic).

spireVerts

function spireVerts(): Float32Array

A tapering four-sided obelisk with a pyramidal tip.

Types

Art3dApi

interface Art3dApi

game.art3d.

  • crystal(spec?: Spec): Handle — A six-sided crystal shard. Glossy light blue by default.
  • rock(spec?: Spec): Handle — An irregular boulder. Matte grey by default.
  • pillar(spec?: Spec): Handle — A fluted column with a plinth and a cap.
  • spire(spec?: Spec): Handle — A tapering four-sided obelisk with a pyramidal tip.
  • tree(opts?: { x?: number; z?: number; scale?: number; leaf?: string; trunk?: string }): Handle[] — A trunk and two canopy cones. Returns the three objects, so the game can move them together.
  • crystalCluster(opts?: { x?: number; z?: number; count?: number; color?: string; seed?: number }): Handle[] — A deterministic scatter of tilted crystals around a point.