SubscriberSubscriber
Browse products

Journal

How to build a 3D product scroll site (and keep it fast on phones)

By MOTION/LAB · Published 26 October 2026 · 3 min read

A 3D scroll site can scroll smoothly on a phone, but it costs loading speed. In our 45 Three.js templates, none stuttered during scroll (33 smooth, 12 mostly smooth), yet only 3 reached a Lighthouse mobile score of 90, and the median is 68. Spend the 3D on one hero moment, keep everything else light, and give the page a fallback.

What we measured

We tested all 125 of our templates on 25 October 2026 with Lighthouse (simulated mid-range phone, slow 4G) and with a real-Chrome scroll test (390×844 touch scroll, CPU slowed 4×, 4G, three runs). 45 of the 125 use Three.js. The full method and results are in How fast are animated websites really?. Here is the part that matters for 3D.

Three.js templates versus the rest, measured 25 October 2026
Three.js templates (45)No Three.js (80)
Lighthouse mobile score, median6887.5
Blocking time, median526 ms9 ms
Mobile score of 90 or more335
Mobile score below 60111
Scroll test: smooth / mostly smooth / some stutter33 / 12 / 051 / 27 / 2
Templates with no long task during the scroll36 of 4570 of 80

The pattern is clear. Once a 3D scene is running, scrolling is not the problem: none of the 45 stuttered. The cost comes before that, in downloading the 3D library and models, compiling shaders and building the scene, which shows up as long blocking time and a late largest paint.

The best and the worst of our 3D templates

Three.js templates: some of the best and worst mobile results
TemplateMobile scoreLargest paintBlocking time
Saltmere Pearls (best)962.4 s10 ms
Hverleir geothermal clay masks903.2 s30 ms
Marisal sea salt903.0 s160 ms
Halvard glassworks485.0 s2,400 ms
Stillmere headphones493.9 s6,200 ms
Noctiflore perfume house (a whole 3D world)3826.7 s4,150 ms

The difference is how much the page asks the phone to do before it shows anything. A single product on a quiet background is a different job from a night garden with six modelled flowers. Noctiflore is a deliberate showpiece; the viewer shows its real numbers before you choose it.

A checklist that keeps 3D under control

  1. Use 3D once. Put it in the hero or in one pinned product section, and make the rest of the page plain HTML, CSS and light GSAP.
  2. Show something real immediately. Render the headline, text and a poster image in HTML first, so the page is readable while the scene loads. This is also what helps search engines and AI assistants.
  3. Load the 3D late. Start the scene after the first paint, or when it nears the screen, instead of blocking the page on it.
  4. Keep models and textures small. Compress textures, keep polygon counts low, and test the download on a slow connection. Big downloads are a common reason a 3D page loads late.
  5. Limit the pixel ratio. Rendering at the full ratio of a very sharp phone screen multiplies the work; capping it is the simplest way to save frames.
  6. Pause when you cannot be seen. Stop the render loop when the scene is off screen or the tab is hidden. 185 of our 316 demos react to the page's pause or visibility signals.
  7. Provide a fallback. If WebGL is unavailable or the visitor prefers reduced motion, show a static image or a drawn version with the same content.
  8. Measure on a real phone. Use Lighthouse, then scroll the page on an actual mid-range device.

What a 3D scroll scene is actually doing

In a typical scroll scene, the page scroll position drives a number between 0 and 1. That number moves a camera, turns a model, or changes a material. ScrollTrigger gives you the number and the pinned section; Three.js draws the result. Our camera fly-through effect and pinned product rotate with labels show the two most common versions.

The second effect is marked degraded on mobile in our library, which is honest: a full-quality version may be too much for some phones, and a simplified one is better than a stuttering one. Our library labels each effect as full, degraded or desktop-only so you know before you build.

When to choose a drawn page instead

  • Your visitors mostly come from search or paid ads, where a slow first load costs you visitors.
  • You sell a service, not a physical product people want to rotate.
  • Your audience uses older phones or slow connections.

In our measurements, templates drawn with SVG, CSS and GSAP only have a median mobile score of 88 and a median blocking time of 9 ms. If you want the 3D look anyway, choose a light 3D template, and look at the real numbers first. The Three.js 3D scroll examples and the perfume and skincare templates are good places to compare.

Questions, answered

Does 3D make a website slow?

It makes the first load slower, especially on phones: in our 45 Three.js templates the median Lighthouse mobile score is 68, against 87.5 for the others. After loading, scrolling was smooth in all of them.

How do I keep a Three.js page fast on mobile?

Use 3D once, show HTML content first, load the scene late, keep models and textures small, cap the pixel ratio, pause when off screen, and give a fallback for reduced motion or no WebGL.

Will search engines still read my 3D page?

Yes, if the real text is in the HTML and not only in the canvas. Our templates keep headings and copy as normal HTML.

Do I need to know Three.js?

No. Choose a template, make it yours and paste the prompt into an AI tool, or start from the source files. If you know Three.js, the code is readable and the prompts list the exact values.

Where this comes from

  • MOTION/LAB measurements, 25 October 2026: Lighthouse 13.5.0 on Chrome 155 for 125 templates (45 use Three.js), and a real-Chrome touch-scroll test at 390×844 with the CPU slowed 4× on 4G
  • MOTION/LAB library: counts of demos that react to pause or visibility signals (185 of 316), checked 26 October 2026

Subscribers

Unlock prompts and code

Enter the access key from your subscription. This browser stays signed in for 30 days.

See plans