Skip to content
All work
01Creative Development · WebGLConcept build

Interactive 3D Packaging Experience

A packaging and print studio site built around one continuous 3D world. A single procedural rigid box carries the entire page — the camera, the lid hinge and the dieline unfold all interpolate from the same scroll journey.

Built for
The Pack Style
Scene
One camera, five waypoints
Geometry
Procedural — no model files
Finishes
Four, switched live
web3d-alpha-five.vercel.app
Interactive 3D Packaging Experience — screenshot of the live deployment
Screenshot of the live deployment.Open in a new tab

Overview

A premium corporate site concept for a packaging and print studio. Rather than dropping a 3D widget into one section, the whole page is directed as a single camera move: one scene, one box, five waypoints. Scrolling advances a journey that simultaneously drives camera position, look-at target, the lid hinge, a dieline unfold and a set of satellite packaging pieces.

Objective

Show a physical, tactile product category on a screen — where a visitor cannot pick anything up — without falling back on a gallery of stock photography.

Problem and opportunity

Packaging is bought on how it feels in the hand: board weight, foil, the resistance when a rigid box opens. A static image flattens all of that. Real-time 3D can restore the material read, but only if it is directed rather than left as a free-floating object spinning in a box.

Solution

One WebGL world spans the full page. The box geometry, its lid and its finishes are generated procedurally in code — no imported model — so finish switching is a material change rather than an asset swap. Scroll position maps onto a journey value that every part of the scene reads from, which is what makes the page feel like a single directed shot instead of five disconnected widgets.

Technology

Framework
Next.js 16React 19TypeScript
3D
Three.jsReact Three Fiber 9drei
Motion
GSAP + ScrollTriggerFramer MotionLenisSplitType
Styling
Tailwind CSS 4Lightning CSS

Key features

What is actually in the build.

  • 01

    One continuous 3D world

    A single camera and a single box serve the entire page. Five waypoints — hero, intro, services, craft and capabilities — define camera position, look-at, lid angle, unfold amount and satellite count, and the scene interpolates between them as you scroll.

  • 02

    Live finish and foil switching

    Gold leaf foil, kraft eco, silver metallic and matte minimal are rendered on the box in real time. Because the box is procedural, a finish is a change of material parameters rather than a second model to download.

  • 03

    Procedural box geometry

    The rigid box, its lid, the ribbon and the surrounding satellite pieces are all constructed in code. There is no GLB or texture set to fetch, which is why the scene loads without a model-loading step.

  • 04

    Pointer presence

    The camera drifts a fraction of a world unit with the pointer — deliberately small, so the object reads as having presence rather than as something being steered.

  • 05

    Craft detail tabs

    Foil and emboss, material, structure and finishing each get their own panel with animated figures, so the production vocabulary of the business is on the page and not just implied by the 3D.

Try it

The box, rebuilt here.

Interactive 3D

The rigid box viewer runs on desktop, where there is enough headroom for it. Open the live project for the full scroll-directed scene.

The packaging site running on a phone

The same 3D world, reframed for a narrow viewport.

UX and interface decisions

UX and interface decisions
  • Copy left, object right

    Every section keeps its text in the left column so the canvas can be inset to the right on desktop and the camera can simply aim at the box. The layout and the 3D framing are designed as one decision.

  • Aspect-compensated framing

    Field of view is vertical, so a narrow viewport shows less horizontally and the box would overflow. Each waypoint pushes the camera back along its own view axis in proportion to the aspect ratio, which keeps the composition intact from desktop down to phone.

  • Restraint in the palette

    A near-black ground with a single warm gold accent. The 3D object is the only thing in the page allowed to be bright.

Technical approach

Technical approach
  • Scroll as a single source of truth

    GSAP ScrollTrigger maps document scroll onto one journey value. Camera, lid hinge, unfold and satellites all read from it, so the scene can never fall out of sync with the page.

  • Deferred scene loading

    The world scene is a dynamic import with SSR disabled, so the WebGL bundle is never part of the server render or the initial payload.

  • Capability flags without hydration mismatch

    Browser capability reads go through useSyncExternalStore rather than a state-plus-effect pair, so the client gets the real value on first render and the server still has a stable snapshot to render against.

Challenges

The parts that needed a second attempt.

  • Keeping one object legible across five compositions

    A box framed for a hero shot is the wrong size for a services grid. Waypoints had to be tuned as a set rather than individually, with the aspect pullback applied on top, so no single viewport breaks the sequence.

  • Material identity without an environment map budget

    Foil, kraft, metallic and matte have to be distinguishable at a glance on a dark page. The finishes are separated by roughness and metalness response rather than by colour alone.

Next project

Smart Cash & Carry

Smart Cash & Carry · Interactive demo