What 3D file formats are supported?
GLB (binary glTF) and GLTF. GLB is recommended because it bundles geometry, materials, and textures into a single file.
Where can I get GLB models from?
You can scan real products with Polycam, Scaniverse, or KIRI Engine on a phone. Designers can export from Blender, Maya, 3ds Max, SketchUp, or any GLB-capable tool.
Does AR work on iPhone and Android?
Yes. The plugin uses standard <model-viewer> AR modes: WebXR and Scene Viewer on Android (ARCore), Quick Look on iOS (ARKit). On unsupported devices the customer sees the regular 3D viewer instead.
Is the 3D model file protected from direct download?
The plugin applies several layers to make casual download and reuse hard:
- Models are served only through a signed proxy URL (HMAC token) — the ID cannot be guessed or enumerated. The real /wp-content/uploads/…glb path is blocked from direct web access (an Apache .htaccess / IIS web.config rule is added automatically on activation).
- Cross-site hotlinking is blocked — the proxy only serves the model when the request comes from your own site.
- Opening a model URL directly in the address bar is blocked; only the viewer can fetch it.
- Right-click “save” and drag-save are disabled on the viewer.
- If a link ever leaks, WooCommerce → 3D Viewer → Settings → Rotate model links invalidates every URL issued so far in one click.
Please note: any 3D model rendered in a browser must send its data to the visitor’s device, so a determined user with developer tools can still capture it. This is friction against casual copying, not unbreakable DRM.
I use Nginx — how do I block direct model downloads?
The automatic .htaccess / web.config rules only apply to Apache and IIS. On Nginx, add this to your server block and reload:
location ~* /wp-content/uploads/.*\.(glb|gltf)$ { deny all; }
The plugin shows an admin notice with this snippet when it detects Nginx.
Does it support HPOS (High-Performance Order Storage)?
Yes. The plugin only touches product post meta and options, and declares HPOS compatibility.
Does it support the new block-based product editor?
Not in v1.0.0. The classic product data tab is supported. Block-editor support is planned for a future release.
Can I turn the AR button off for the whole store?
Yes. WooCommerce → 3D Viewer → Settings → General → AR Button → Disabled for all models . That hides AR everywhere: the “View in Your Room” button, the AR button inside the gallery / shortcode / block viewer, the QR pop-up, and the mobile AR link.
An individual model can override it in either direction. Open the model’s 3D editor, go to Presentation → AR Button , and choose “Always on” to keep AR for that one model even while the store-wide switch is off, or “Always off” to hide it for that model only. The default, “Use global setting”, follows the store-wide switch. The per-model choice always wins over the global one.
Can I show the 3D viewer inside the product gallery instead of a button?
Yes. Go to WooCommerce → 3D Viewer → Display Mode and choose “Product gallery” — the model becomes the first gallery image and the “View in 3D” button is hidden. This uses the standard WooCommerce gallery; some themes or page builders that replace the gallery may not support it, in which case use Modal mode or the shortcode/block instead.
Can I embed a 3D model on any page or post?
Yes. Use the shortcode [bss3dv_viewer id="123"] (the product ID is shown in the product’s 3D editor, on the Output tab), or add the “BSS 3D Viewer” block and enter the product ID. Both accept width , height , and ar options, e.g. [bss3dv_viewer id="123" width="100%" height="480px" ar="yes"] .
Does it work with caching and speed-optimization plugins?
Yes, out of the box — no exclusions to configure. Tested against SiteGround Optimizer, WP Rocket, LiteSpeed Cache, W3 Total Cache, Autoptimize, Perfmatters, and Cloudflare.
Two things make this work. Signed model URLs are stable, so they keep working no matter how long a page sits in a full-page cache. And the plugin marks its own scripts as “do not optimize”, because the <model-viewer> library is an ES module: combining or minifying it into a regular script breaks it. The plugin registers the official exclusion filters for the major optimization plugins and adds the standard opt-out attributes ( data-no-optimize , data-noptimize , data-no-minify , data-no-defer , data-cfasync , data-wpfc-render , data-pagespeed-no-defer , nowprocket ) to every script it loads.
If a viewer still fails to load, open your browser console and look for a [BSS 3D Viewer] message — it names the cause. The plugin also tries to reload the library by itself when it detects that something stripped it. As a manual fix, exclude model-viewer.min.js from your optimizer’s JavaScript combine, minify and defer settings.
I rotated the model links and now the viewer is broken.
Rotating invalidates every model URL issued so far, but pages already sitting in a full-page cache still contain the old ones. Clear your page cache and the new links go out with the next page view.