Skip to main content

3D Model

An interactive 3D model — glTF or GLB — with camera controls, lighting, animation and AR on supported phones.

The block renders through the model_viewer element — the same PHP that runs in the page builder, so the front end is identical either way.

Needs the Animation Engine extension

This element ships with the Animation Engine, which is inactive by default. Activate it under Unyson+ → Extensions and the block appears in the inserter.

With the extension off the block does not register at all — deliberately. A block that appeared but had an empty sidebar and rendered nothing would be indistinguishable from one that is broken.

What the sidebar exposes

OptionWhat it does
model_urlModel URL
model_fileUploaded model file
altWhat a screen reader announces
posterImage shown while the model loads
heightViewer height
camera_controlsLet visitors rotate it
disable_zoomStop the wheel zooming the model
auto_rotateSpin it slowly by itself
rotation_speedHow fast
auto_rotate_delayHow long to wait before spinning
environmentLighting environment
exposureBrightness
shadow_intensityShadow strength
animation_autoplayPlay the model's own animation
animation_nameWhich animation, when it has several
arOffer View in your space on supported devices
ar_placementFloor or wall
hotspotsLabelled points on the model

Anything not listed stays available in the page builder, and round-trips untouched — the block only writes the values you change, so an element styled in the builder keeps every setting this sidebar does not show.

The model is not loaded in the editor

This is the expensive kind of inert: a live viewer would download the model file and spin up WebGL in the editor, and do it again on every re-render. The canvas shows the poster — which is what a visitor sees before the model loads anyway.

Set a poster. Without one, the viewer is a blank box until the file arrives, and model files are not small.

caution
alt is not optional in practice

A 3D viewer is completely opaque to a screen reader. Without alt text, the element conveys nothing at all to someone who cannot see it — describe the object, not the widget.

Camera limits stay in the page builder

min_fov/max_fov, min_orbit/max_orbit and disable_pan are not exposed here. A badly chosen pair can leave a model that cannot be rotated to its own front, and the only way to find that out is to try every angle — which is a page-builder job, not a sidebar one.

variants_show and variant_default are also left out: they depend on what the model file itself defines, so a variant name typed without the file open is a guess.

note
disable_zoom is usually right for a model inside a page

Otherwise the wheel zooms the model when a visitor scrolls past it, and the page stops moving — the same complaint people have about embedded maps.