# iJewel3D Documentation (Full)
> Complete developer documentation for iJewel3D. Source: https://developer.ijewel3d.com
---
# What is iJewel?

iJewel3D is a suite of tools for creating, rendering, and hosting 3D models of jewelry and fashion accessories. It is designed to be easy to use and to provide high-quality results in realtime across all devices and platforms.
iJewel3D includes a fully customizable web SDK for rendering 3D models in the browser, a cloud service and APIs for model hosting and management, augmented reality virtual try-on toolkit for interactive shopping experiences, tools for quick batch rendering and a viewer and editor for 3D models that can be embedded in websites or apps.
Check out https://ijewel3d.com for more details and our complete suite of products and services.
::: tip
You can now [Book a Free Demo](https://ijewel3d.zohobookings.in/#/209816000000031082) for any of iJewel products.
:::
This portal is aimed at developers and designers who want to integrate iJewel3D into their projects. It provides detailed documentation on how to use the SDK, APIs, and tools, along with examples and best practices for creating interactive 3D experiences for jewelry and fashion accessories.
Read on to learn more about the features and capabilities of iJewel3D.
::: tip
Email us at [dev@ijewel3d.com](mailto:dev@ijewel3d.com) to quickly get answers to any technical queries, or get connected for support.
:::
## Rendering

All the iJewel3D tools and services are built on top of a high-performance rendering engine that is optimized for jewelry and fashion accessories. The engine is based on WebGL(threejs/threepipe) and provides realistic lighting, reflections, shadows and post-processing effects to create a lifelike experience for the user. It is designed to be fast and efficient, so that even complex models can be rendered in realtime on any device.
For Diamonds and Gemstones, we use custom pipelines and algorithms to optimise the models and simulate the refraction and dispersion of light through the stones(All at runtime).
This creates a realistic and accurate representation of the stones. Along with careful attention to the environment maps, materials and textures, this ensures that the jewelry looks as close to real life as possible.
For metals like Gold, Silver, Platinum, etc, we use fast PBR rendering with tonemapping and LUT color correction to create a realistic and accurate representation of the metals. Out playground and editor provides carefully designed material presets for precious metals, to get the best results with just a few clicks.
In most cases, it won't be required to preprocess the 3d models using any special software, as the SDK can handle most of the rendering and optimisation at runtime. PBR materials from any software can be used directly in iJewel, and the SDK provides a way to create custom materials and shaders for advanced use-cases.
Using the SDK, it's possible to render 100s of diamonds in at once, even on mobile devices, while maintaining a smooth and interactive experience. This makes it easy to create interactive shopping experiences that allow customers to view and customize jewelry in realtime.
While the rendering engine is based on three.js for web browsers, we have several ports custom custom shaders that can be used to elevate the jewelery rendering capabilities for engines like [Unity](https://unity.com/), [PlayCanvas](https://playcanvas.com/), and more.
> The core of the Web SDK is completely open source as [Threepipe](https://threepipe.org), and can be used for free in any project(even commercially).
iJewel SDK provides several modules and plugins over threepipe for luxury products, and can be licensed for commercial use.
## Configurators

One of the key features of iJewel3D is the ability to create custom configurators for jewelry and fashion accessories. Configurators allow customers to customize the design of a piece of jewelry by selecting different options for the metal, stones, engraving and other details.
The configurator then generates a 3D model of the customized piece in realtime, allowing the customer to see exactly what the finished product will look like.
The iJewel3D SDK includes tools for creating and embedding custom configurators in websites and apps. The models and configurators can be created using both code and no-code methods, making it easy for both designers and developers to experiment, prototype and automate the creation of new experiences.
Along with object and material configurators, ijewel editor components provide a way to create custom UIs for editing and manipulating 3D models. These components can be used to create custom workflows for designers, customers and sales teams to interact with the models and create new designs.

## Hosting

iJewel SDK is an open platform which is fully configurable. It can be added to projects using NPM packages or directly from the our CDN. The SDK is designed to be easy to integrate with existing websites and apps, and can be completely hosted on your own servers or any cloud service. For web rendering, since it's frontend only, it can be hosted on any static hosting service like AWS S3, GCS, Github Pages, etc.
The 3D models and assets used by the SDK can be hosted on any server or cloud service, and are loaded dynamically by the SDK as needed by URLs. We recommend using a block storage service like Amazon S3 or Google Cloud Storage to host the models, connected to a CDN as this provides fast and reliable access to the files.
::: info HTTP Protocol
Note that HTTP(S) is required for loading the models on websites, so the server must support this protocol.
:::
::: warning
When using AWS S3, or GCS for hosting the models, check the egress costs for the region where the models are being loaded. Cloudflare R2 can also be considered to reduce the costs, but it might have its own limitations.
:::
It is also possible to host the models directly in the git repository of the project, and use the SDK to load the models by relative paths. While this is useful for projects with just a couple models or for quick prototyping, is not recommended for apps with many models.
## Hosting on iJewel Drive

iJewel Drive, our cloud service, provides a simple way to upload, manage and share 3D models and assets. It works similar to other content management systems, like Dropbox or Google Drive, but is optimized for 3D models. Models can be uploaded in bulk, previewed in realtime, and shared with team members or customers. Along with bundled iJewel Playground and Editor, the models can be edited, configured and finally embedded on the website or app.
## License and Pricing
Using the iJewel SDK, TryOn, Drive, all included assets, templates, and plugins in commercial projects requires a license. We offer licenses for individual products, as well as bundles for multiple products.
License Keys for SDK, BatchX, TryOn can be purchased directly through [iJewel License Portal](https://license.ijewel3d.com/)
Email us at [sales@ijewel3d.com](mailto:sales@ijewel3d.com) or [book a call](https://ijewel3d.zohobookings.in/#/209816000000031082) for bulk licenses, discounts, and to get access to complete pricing documents.
Get more details and learn about license terms for different products on the [License Page](./license)
---
# iJewel Products
iJewel3D is a suite of tools for creating, rendering, and hosting 3D models of jewelry and fashion accessories. It is designed to be easy to use and to provide high-quality results in realtime across all devices and platforms.

Check out the different sections below to learn about developing state of the art applications with iJewel3D products.
## iJewel Viewer

iJewel Viewer is a standalone web component that allows you to easily embed and render 3D models directly within your web pages.
It includes a built-in material configurator and quick 3d actions.
It's possible to create a ready-to-use viewer/configurator for your e-commerce website with just a few lines of code.
Check out the [iJewel Viewer documentation](../viewer/introduction), or [contact us](mailto:dev@ijewel3d.com) to learn more.
The viewer comes with a compatible editor that can be used to create configurators, setup model lighting and other settings etc. The iJewel Editor is also fully embeddable and can be used on your websites.
For advanced usage of embedding 3d models, rendering plugins and full playground customisation, checkout the [full Web SDK below](#web-3d-sdk).
## iJewel Drive

iJewel Drive is a cloud service for hosting, managing and sharing 3D jewelery models. It allows you to upload, catalog, and collaborate on 3D models with your team.
The files can then be shared with retailers, customers as links or embedded on custom websites or apps using the iJewel Viewer.
Check out the [iJewel Drive documentation](../viewer/connect-to-drive), or [contact us](mailto:dev@ijewel3d.com) to learn more.
::: tip
If you are looking for uploading and sharing jewelery 3d models as an individual or a small team, check out [iJewel Design](https://ijewel.design) to quickly create your personal 3d portfolio and connect with fellow designers and jewelers.
:::
## iJewel Playground

[iJewel3D Playground](https://playground.ijewel3d.com) is a free to use online tool for editing, configuring and rendering 3D models of jewelry and fashion accessories. It includes a library of materials, environment maps, and presets to quickly create realistic renders of your models. Playground serves as a companion tool to the iJewel Viewer and Editor, and can be used to quickly create and test new models and configurations.
::: info License
Using the presets and outputs generated from the playground can be used commercially, but it requires a license to any other iJewel3D product.
:::
## iJewel BatchX

BatchX is a downloadable app for Windows and MacOS, to quickly render images and models 3D models in bulk, applying various combinations of materials, camera views, models etc. All rendering happens on your local machine, using state of the art rendering algorithms to reduce render-times by 100-500x. With BatchX, it's possible to render a `2048x2048` size, `10 sec` turn-table video in under `20 sec` on simple laptop. With a GPU desktop, it's realtime.
You can try BatchX with a free 30 Day trial on every device (with no credit card or commitments) - [iJewel BatchX](https://batchx.ijewel3d.com/).
## iJewel TryOn AR

iJewel TryOn AR (VTO) is a toolkit for creating augmented reality virtual try-on experiences for jewelry and fashion accessories. It allows customers to see how a piece of jewelry looks on them in realtime using their smartphone or tablet.
TryOn works across iOS, Android, MacOS and Windows, with real-time 3d rendering, depth-estimation and hand, face tracking for accurate placement of the jewelry on the user.
## Web 3D SDK

iJewel provides a full frontend SDK(built on [threepipe](https://threepipe.org) and [three.js](https://threejs.org)) that can be used to create advanced interactive applications for custom use-cases like
- Advanced configurators with custom UIs
- Deep Integrations with e-commerce platforms like shopify, magento etc
- Creating Interactive 3D walk-through and tours
- Custom 3D rendering pipelines and shaders
- 3D Interactive Scrollable Landing pages (like Apple)
- Advanced customisations of lighting, materials and environment maps.
## Unity 3D
Diamond Rendering Module for Unity for custom apps and websites. [Contact us](mailto:dev@ijewel3d.com) to learn more.
## PlayCanvas
Diamond Rendering Module for PlayCanvas for custom apps and websites. [Contact us](mailto:dev@ijewel3d.com) to learn more.
## iJewel Design

[iJewel Design](https://ijewel.design) is a platform for designers to showcase their 3D models, connect with other designers and jewelers, and get feedback on their designs. Its a great place to get started with 3D rendering and showcase, and to learn about the latest trends in the industry. iJewel Design is completely start and connect with other designers and jewelers.
## HDR Editor

We provide a free to use HDR Editor for quickly creating and editing HDR environment maps for your 3D models and web rendering. Check out live in our editor how light maps interact with your diamonds and gemstones to create accurate cuts and realistic reflections and refractions.
[Know more](https://hdrmap.com/), or just get started at [HDR Editor](https://editor.hdrmap.com/).
---
# License and Pricing
Using the iJewel SDK, TryOn, Drive, all included assets, templates, and plugins in commercial projects requires a license. We offer licenses for individual products, as well as bundles for multiple products.
::: details Contact
Email us at [sales@ijewel3d.com](mailto:sales@ijewel3d.com) or [book a call](https://ijewel3d.zohobookings.in/#/209816000000031082) to get access to any pricing document.
:::
::: tip
License Keys for SDK, BatchX, TryOn can now be purchased directly through [iJewel License Portal](https://license.ijewel3d.com/)
:::
## SDK

The SDK is available under a per-project(and per-domain) license, which allows you to use the SDK in a single project and production domain. One license can only be used by one organization or individual, and cannot be transferred to another party. By default, the license is locked to one production domain (and unlimited development) but can be extended to multiple domains depending on requirements. Checkout the [pricing page](https://webgi.dev/pricing#jewellery-rendering-plugins) for more details.
## TryOn

iJewel AR TryOn is is a separate package along with the SDK, and requires a separate license. It allows you to use the TryOn toolkit in a single project and production domain. The license is locked to one production domain (and unlimited development) but can be extended to multiple domains depending on requirements.
::: info
With the SDK and TryOn license, there are no restrictions on the number or size of models that can be used. Anything that's technically possible with the SDK can be done with the license. (there are exceptions like reverse-engineering, check the terms).
:::
## Drive

For products that are hosted or managed by iJewel3D, like Drive, that provide embeddable configurators/viewers, the license is already included in the subscription. The subscription is based on the number of models, storage, and usage of the service, and can be upgraded or downgraded at any time.
All the assets like models, materials, scene settings(other than those provided as templates by iJewel3d) etc are owned by the user, and can be downloaded and used in other projects. No license is required to use the files generated/exported with the tools.
::: info
We do not use AI to generate images/videos or user-provided data to train any AI models.
:::
## Editor, Playground, BatchX

iJewel Editor and Playground are free to use(and openly accessible) tools for designers and developers. They can be used for any purpose for free.
BatchX is a paid app for MacOS and Windows, with a free 30 day trial and yearly license.
The assets(3D models, environment maps, materials, presets etc), and other resources provided by iJewel3D in the editor are not free to use, and require a license or subscription to any iJewel3d product for commercial use. This also applies to any images, videos, assets exported with the editor/playground/batchx-trial that use iJewel3D assets/presets.
Any images, videos, other assets exported with the editor/playground/batchx-trial can be used commercially if none of the iJewel3D assets are used while creating the content.
## iJewel Design (ijewel.design)

iJewel Design is a separate platform for designers and jewelers to create and share 3D models. It is free to use for individuals and small teams, and does not require any license.
Checkout the pricing plans on [ijewel.design/pricing](https://ijewel.design/pricing) for more details.
Any files uploaded by you on ijewel.design should belong to you and will be shown under your profile. It's not allowed to upload any files that you don't own or have the rights to use. Any images, videos exported of these files from ijewel.design can be used commercially without any restrictions.
---
# YouTube Tutorials
Welcome! Here you'll find tutorials categorized by product for easy navigation.
---
## iJewel3D
- ▶ [Intro | Professional 3D Jewelry Visualization & Sharing](https://youtu.be/r3VK5tX14VA?si=7pfVBeWZn9keaevd)
- ▶ [How to Upload 3D Jewelry Models](https://youtu.be/Fsdk1LirFDY?si=lgI-KRPQeZfMPe_i)
- ▶ [Editor Tutorial | Materials, Lighting, Scenes & Sharing](https://youtu.be/_r-LYQCx8fw?si=KWutTm9xtolR2_IC)
## Playground
- ▶ [QuickStart](https://www.youtube.com/watch?v=P0R38Y2S-b0)
- ▶ [Resolution & Export](https://www.youtube.com/watch?v=FAqfTMBAaBA)
- ▶ [Export and import materials](https://www.youtube.com/watch?v=59dNYczASqU)
- ▶ [Fixing brushed textures](https://www.youtube.com/watch?v=4zqofmJTq64)
- ▶ [How to Create Custom Materials](https://youtu.be/VJOqR2cY8lc?si=4N14kUE5Itzfo5vF)
- ▶ [Fixing Diamond Rendering Issues](https://www.youtube.com/watch?v=UT4p-IFrbjI)
- ▶ [Video Rendering](https://www.youtube.com/watch?v=O1HE_Tu3RZw)
- ▶ [Creating a camera path](https://www.youtube.com/watch?v=9-e0PZaU4ls)
- ▶ [Perfect 360° Turntable in 2 mins](https://www.youtube.com/watch?v=304Hzog-7bg)
- ▶ [Instant soft edges - SSBevel](https://www.youtube.com/watch?v=4VxhYAJTJQk)
- ▶ [Auto Pose Ring in a Laid Position](https://www.youtube.com/watch?v=tTYhANCgepo)
- ▶ [Changing background and ground color](https://www.youtube.com/watch?v=q989o_dq7yo)
- ▶ [How to make pure white and transparent background](https://www.youtube.com/watch?v=GCJIOmcEaPo)
- ▶ [How to Create Custom Shadows](https://youtu.be/269LnNYZDh0?si=WSeTh83g1kXecN6Z)
- ▶ [VJSON Scene Setup](https://www.youtube.com/watch?v=WqCdMken924)
- ▶ [Interactive 3D Configurator](https://www.youtube.com/watch?v=8sfDdlF4F9I)
- ▶ [Transfer Your Configurator](https://www.youtube.com/watch?v=c_cph8q_vA8)
- ▶ [How to Create and Apply Custom LUTs](https://youtu.be/2_AlgEg_Q74?si=5kAPjwGPiJfF4Lc3)
- ▶ [How to Create Custom Engraving](https://youtu.be/SIZOhaCpqKk?si=RnHImVWzJG_SlaDj)
- ▶ [UV Mapping for Engraving](https://youtu.be/9-tDRhu4HK0?si=WG34Dd81w-nGflQ4)
## Drive
- ▶ [QuickStart](https://www.youtube.com/watch?v=W-jdD5n3pOU)
- ▶ [Complete Tutorial](https://youtu.be/JEqP6jij0h8?si=GgKarfaeu8C_ZxC9)
## Design
- ▶ [QuickStart](https://www.youtube.com/watch?v=9xpptNYtgzs)
- ▶ [3 Ways to Secure Your 3D Projects](https://www.youtube.com/watch?v=t7-NxhL6z-w)
- ▶ [AR Try-On](https://www.youtube.com/watch?v=bZ5ZQQyvPoI)
- ▶ [Project Visibility](https://www.youtube.com/watch?v=ZTYrM2BaqH8)
- ▶ [How to Export Images](https://youtu.be/v059v9oyW20?si=r0NqJRH0lr_NbyaO)
- ▶ [AR Try-On](https://youtu.be/bZ5ZQQyvPoI?si=sMaIcVFesutNTuZZ)
## BatchX
- ▶ [BatchX Tutorial 1 | introduction](https://youtu.be/o1TSttCXonI?si=Uefx3ztlj3IyaX4q)
- ▶ [BatchX Tutorial 2 | Organizing Models, Applying Materials & Export Settings](https://youtu.be/i1ikwtPEPrA?si=AmbZbWowrKj0BBjJ)
- ▶ [BatchX Tutorial 3 | Scene Settings & Smart Naming](https://youtu.be/svb9uetnzJE?si=nyMwjQyNGwXKGNSk)
## Tutorial Animation
- ▶ [How to Create Beautiful Pendant Swing Animation | Blender + iJewel Playground Tutorial](https://youtu.be/VQa6D33y8IA?si=9SZ02zwT3ygVU-RD)
- ▶ [Professional Diamond Ring Animation | Blender + iJewel Playground Tutorial](https://youtu.be/RiOxKTiDtQI?si=0MP7znClAp8Ht9em)
## iJewel3D Webinar 2025
- ▶ [Episode 1: Real-Time Brilliance](https://youtu.be/V4rHK9ntqUk?si=Rb8VcF5jQe2BUJaU)
- ▶ [Episode 2: Mastering Materials](https://youtu.be/WnI1nud2xtk?si=u2YLL7KctQsNBMtQ)
- ▶ [Episode 3: Scene Crafting](https://youtu.be/TV4v0OpV2DE?si=iyD88UyIzWfyRKh5)
- ▶ [Episode 4: Post-Processing Magic](https://youtu.be/bTzMlF1toYw?si=d5Pg9NtAlsdasbdN)
- ▶ [Episode 5: Content Creation](https://youtu.be/ogdN3WIMwx8?si=vwmX1wmTQjh3nndt)
- ▶ [Episode 6: Animations in Jewellery](https://youtu.be/oTNLUwrkWK8?si=T0849zV5dkTC1GsP)
- ▶ [Episode 7: TryOn and On body Jewelry experience](https://youtu.be/AHjwzKnNPBY?si=KdhYGDukmK1oi9Se)
- ▶ [Episode 8: Designer Spotlight](https://youtu.be/8arHiW2LePs?si=aweAxDEGo-bUJ4WH)
---
# Introduction to iJewel Viewer

`ijewelViewer` allows you to easily embed and render 3D models directly within your web pages. This guide will help you get started with integrating the viewer into your project, configuring it, and displaying 3D content.
## Getting Started
To get started with the iJewel3D Viewer, you'll need to include the necessary scripts and create an HTML container for the viewer. Let's dive into the setup process!
### Including the Viewer Script
First, include the iJewel3D Viewer script in your HTML file. You can use the following link:
```html
```
::: info
We regularly update the version numbers of the packages. Make sure to check the latest version back on this page when updating.
Latest version: [0.6.18](https://releases.ijewel3d.com/libs/mini-viewer/0.6.18/bundle.nowebgi.iife.js)
:::
### Creating the HTML Container
Next, create a container element in your HTML where the viewer will be rendered. Here's a basic HTML structure:
```html
```
### Initializing the Viewer
With the container set up, you can now initialize the Viewer and render your 3D project. Here’s an example of how to do it:
```html
```
:::tip
For more details on how to connect to iJewel Drive and retrieve the model URL and base path, check out our [Connect to iJewel Drive](./connect-to-drive.html) section.
:::
## Standalone Model Embedding
In addition to connecting to iJewel Drive, you can also directly load models into the Viewer without needing a base path. This is useful if you have a 3D model file that you want to embed directly into your webpage without configuration files or additional assets.
### Embedding a Standalone Model
Check out this sample of embedding a model from any source directly into the Viewer:
---
# Add an iJewel3D Drive Viewer to Your Website

::: details Docs for old iJewel Drive
The documentation for iJewel Drive instances created before March 2025 is available [here](deprecated/connect-to-drive).
:::
## Choose an integration method
| Requirement | Recommended method |
| --- | --- |
| Add a self-contained viewer with minimal code | Iframe embed |
| Select public models by a product tag or file name | Tag or name iframe embed |
| Control the viewer from your page or application | Mini Viewer SDK |
## Option 1: Iframe embed
An iframe is the quickest way to add a model with its configured viewer settings. Replace `{MODEL_ID}` with the model's iJewel Drive file ID.
```html
```
The base URL in the example is for the standard iJewel3D instance. Enterprise customers must use their instance URL.
::: tip
For more control over the embedded viewer's appearance, open the model in the editor, select the **Embed (`>`)** tool, choose the available branding and control settings, preview the viewer, and copy the generated iframe. See [Create an iJewel Viewer Embed](../integrations/embedding.md) for the complete flow.
:::
## Option 2: Embed by tag or name
Use this method when your website identifies products by a stable tag or file name. The viewer resolves the matching public file.
Tag and name embeds do not send an authentication token. The selected file must be public.
### Prepare the file and scope
1. Open the folder that contains the model in iJewel3D.
2. Make sure that the model file is public.
3. For a tag embed, right-click the model and select **Edit Tags**.
4. Add a unique product tag, such as `pid-12345`.
5. Copy the folder ID from the address bar.
The folder URL has the format `https://ijewel3d.com/drive/folders/FOLDER_ID`. Copy the value after `/folders/`.
Use a folder ID that contains only one matching public file. The lookup returns the first matching file in that folder tree.
### Embed by tag
Replace `{TAG}` and `{FOLDER_ID}` in this example:
```html
```
For example, a product tagged `pid-12345` can use this URL:
```text
https://ijewel3d.com/drive/files/embedded?tag=pid-12345&scope=FOLDER_ID
```
### Embed by name
Use the exact file name, including its extension. Replace `{FILE_NAME}` and `{FOLDER_ID}` in this example:
```html
```
For example, a file named `wedding-ring.glb` can use this URL:
```text
https://ijewel3d.com/drive/files/embedded?name=wedding-ring.glb&scope=FOLDER_ID
```
You can add material parameters after `scope`. For example, add `&Metal=Gold` to select the Gold variation.
## Option 3: Mini Viewer SDK
Use the Mini Viewer SDK when your page needs to control the viewer, respond to viewer events, or coordinate it with other UI.
- Standard iJewel Drive users should keep the basename as `drive`.
- Enterprise customers should use the basename supplied by iJewel3D.
- Give the viewer container an explicit width and height.
- See [Connect to iJewel Drive](./connect-to-drive.md) for the complete API.
```html
iJewel3D Viewer
```
::: info Domain authorization
Iframe embeds from Options 1 and 2 generally work without authorizing every destination domain.
The Mini Viewer SDK requires each hosting domain to be authorized by iJewel3D. See [Host and domain setup](#host-and-domain-setup).
:::
## Find the model ID
Option 1 and ID-based SDK calls require the model's unique **Model ID**, also called its **File ID**:
1. Open your iJewel Drive and find the model.
2. Right-click the model and select **Share**.
3. Find the viewer link, which has a format similar to `https://.../files/MODEL_ID/view`.
4. Copy the value between `/files/` and `/view`.
::: tip
A store with many models can use a tag embed instead of an ID. Tag each file with its product ID, then build every URL from one pattern. See [Option 2: Embed by tag or name](#option-2-embed-by-tag-or-name).
:::
## Applying Materials via URL
Apply specific materials automatically when the viewer loads by adding parameters to the URL. This works for both the iframe `src` and the direct link.
Use either query parameters (`?`) or hash parameters (`#?`). The format is `key=value` where:
- `key` is the **Layer Name** (e.g., `Metal`, `Gem Stone`).
- `value` is the **Variation Name** (e.g., `White Gold`, `ruby`).
**Examples:**
- `https://ijewel3d.com/drive/files/{MODEL_ID}/embedded?Metal=Gold`
- `https://ijewel3d.com/drive/files/{MODEL_ID}/embedded#?Band=Rose-Gold&Gem=Ruby`
- `https://ijewel3d.com/drive/files/embedded?tag=pid-12345&scope=FOLDER_ID&Metal=Gold`
- `https://ijewel.design/embedded?slug=d8c22bf&Metal=Gold`
### Finding Layer and Option Names
To find the correct names to use in the URL:
1. Layer Name is the left side (key) of query parameter. It is same as the tab's name at the bottom of the configurator. Right click on the name at the bottom of the editor and select `Edit`.

2. For variation names, hovering over the variation icon will show the variation name with an edit icon next to it, click on the edit icon to edit the variation name.

::: tip
Use `#?` to apply materials via URL in runtime without the need to reload the page. e.g. `https://ijewel3d.com/drive/files/{MODEL_ID}/embedded#?Band=Rose-Gold&Gem=Ruby`\
Alternatively, this can be used to implement custom UI for the material configurator:
```html
```
:::
## Host and domain setup
For the Mini Viewer SDK, add the hosting domain in iJewel3D Platform:
1. Host the HTML and JavaScript code on your website server.
2. Open **Settings → Domains**.
3. Select **Add Domain**.
4. Enter the production hostname, such as `www.example.com`.
5. Under **Domain Type**, select **Self-Hosted Domain**.
6. Select **Add Domain**.
Enter only the hostname. Do not include `https://`, a port, or a page path.
---
# iJewel3D Viewer SDK

The iJewel Viewer library loads 3D models from your iJewel3D account by ID, exact name, or tag.
::: tip Tutorial
Check out [Embed iJewel3D Models on Your Website](./tutorial-embed-drive.md) for a step-by-step guide on how to use these functions.
To learn how to apply materials via URL parameters, see [Apply Materials via URL](./tutorial-embed-drive.md#applying-materials-via-url).
:::
::: details Docs for older iJewel Drive instances
The documentation for iJewel Drive instances created before March 2025 is available [here](deprecated/connect-to-drive).
:::
## Loading a Specific Model by ID (`loadModelById`)
The primary function currently available for loading a single model directly from Drive is `loadModelById`. This is the recommended approach when you know the specific model file you want to display.
```javascript
// Example: Load a model into a div with id="viewer-container"
// Ensure the viewer library script is loaded first
//
//
const driveBasename = 'drive'; // for enterprise clients contact us to get your basename, otherwise keep it unchanged
const modelFileId = 'xyz789abc123'; // Replace with the actual Model ID
const containerElement = document.getElementById('viewer-container');
ijewelViewer.loadModelById(
modelFileId,
driveBasename,
containerElement,
{ // Optional ViewerOptions
showCard: true,
showLogo: true,
// Add other options as needed
}
);
// Optional: Listen for the ready event
window.addEventListener("ijewel-viewer-ready", (event) => {
console.log("Viewer is ready:", event.detail.viewer);
const viewerInstance = event.detail.viewer;
// You can interact with the viewer instance here
});
```
### Parameters
| Parameter | Type | Required | Description |
|:------------|:--------------|:---------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `modelId` | string | Yes | The unique File ID of the 3D model file within your Drive. |
| `basename` | string | Yes | The unique identifier for your iJewel Drive instance (e.g., 'yourcompany-drive'). Defaults to 'drive'. You don't need to change this one unless you are an enterprise client. Contact support if you don't know yours. |
| `container` | HTMLElement | Yes | The HTML element where the viewer canvas will be rendered. |
| `options` | ViewerOptions | No | An optional object containing viewer configuration options to customize appearance and behavior. See [Viewer Class](./viewer-class.md#vieweroptions) for details. |
## Loading a Model by Name (`loadModelByName`)
`loadModelByName` searches a folder tree for an exact file name. Public files do not require an authentication token.
For private files, provide a valid token. Contact iJewel3D support if your application does not have one.
```typescript
// Example: Load a model named "ring_model.glb" from folder with ID "folder456"
// Ensure the viewer library script is loaded first
//
//
const modelName = 'ring_model.glb'; // Replace with the exact model filename
const parentFolderId = 'folder456'; // Replace with the ID of the parent folder
const driveBasename = 'drive'; // Or your enterprise basename
const authToken = undefined; // Public files do not need a token
const containerElement = document.getElementById('viewer-container');
const viewerInstance = await ijewelViewer.loadModelByName(
modelName,
parentFolderId,
driveBasename,
authToken,
containerElement,
{ // Optional ViewerOptions
showCard: true,
// Add other options as needed
}
);
```
### Parameters (`loadModelByName`)
| Parameter | Type | Required | Description |
|:------------|:--------------|:---------|:------------|
| `modelName` | string | Yes | The exact file name, including its extension. |
| `parentId` | string | Yes | The folder ID that scopes the search. The search includes nested folders. |
| `basename` | string | Yes | The iJewel3D instance identifier. Standard accounts use `drive`. |
| `token` | string | No | An authentication token for a private file. Public files do not need one. |
| `container` | HTMLElement | Yes | The HTML element that contains the viewer canvas. |
| `options` | ViewerOptions | No | The viewer configuration. See [Viewer Class](./viewer-class.md#vieweroptions). |
## Loading a Model by Tag (`loadModelByTag`)
`loadModelByTag` searches a folder tree for a matching public file. Use a unique tag within that folder tree.
This function does not accept an authentication token. The selected file must be public.
```typescript
// Example: Load the public model tagged "pid-12345"
// Make sure that the viewer library scripts are loaded first
//
//
const tag = 'pid-12345';
const scope = 'folder456';
const driveBasename = 'drive';
const containerElement = document.getElementById('viewer-container');
const viewerInstance = await ijewelViewer.loadModelByTag(
tag,
scope,
driveBasename,
containerElement,
{
showCard: true,
}
);
```
### Parameters (`loadModelByTag`)
| Parameter | Type | Required | Description |
|:------------|:--------------|:---------|:------------|
| `tag` | string | Yes | The exact tag assigned to the public file. |
| `scope` | string | Yes | The folder ID that scopes the search. The search includes nested folders. |
| `basename` | string | Yes | The iJewel3D instance identifier. Standard accounts use `drive`. |
| `container` | HTMLElement | Yes | The HTML element that contains the viewer canvas. |
| `options` | ViewerOptions | No | The viewer configuration. See [Viewer Class](./viewer-class.md#vieweroptions). |
## Cross-Origin Resource Sharing (CORS)
CORS settings restrict Mini Viewer SDK requests to authorized domains.
If the console shows a CORS error, ask iJewel3D support to authorize your hosting domain.
## React (`ViewerComponent`)
A complete, runnable example project containing this component is available on GitHub: https://github.com/maanHimself/ijewel-viewer-react-example
### 1. Update `package.json`
Add the following lines to your `dependencies`:
``` json
{
"dependencies": {
// ... other dependencies
"@ijewel3d/mini-viewer": "https://releases.ijewel3d.com/libs/web/ijewel3d-mini-viewer-0.6.17.tgz",
"@types/webgi": "https://releases.ijewel3d.com/libs/webgi-v0/bundle-types-0.22.0.tgz"
}
}
```
### 2. Install Dependencies
``` Bash
npm install
```
### 3. Add WebGI Script
Add the WebGI script before your React app bundle loads.
```html
```
### 4. Usage
Import the `ViewerComponent` from the library and use it in your React application. Provide the necessary props to load your model.
``` typescript
import { ViewerComponent } from "@ijewel3d/mini-viewer";
import { useEffect, useState } from "react";
import type { ViewerApp } from "webgi";
function App() {
const [modelId,] = useState("Ep9bWZIlTSG6_8DH7QDc1w"); // Replace with your actual model ID
const [viewer , setViewer] = useState(null);
useEffect(() => {
//optionally, you can use the viewer for further customization
if (viewer) {
// Example: Set background color
const Color = (window as any).Color;
viewer.scene.backgroundColor = new Color("#232721");
}
}, [viewer]);
return (
setViewer(v)}
viewerOptions={{
showCard: false,
//add other viewer options here
}}
basename="drive" //optional for enterprise users
/>
);
}
export default App;
```
## Next.js
The viewer relies on window, WebGL, and other browser‑only APIs, therefore server‑side rendering (SSR) for the component must be disabled when using Next.js.
Add the WebGI script once in your root layout, then load the viewer component with `next/dynamic`.
```tsx
import Script from "next/script";
import type { ReactNode } from "react";
export default function RootLayout({ children }: { children: ReactNode }) {
return (
{children}
);
}
```
```tsx
"use client";
import dynamic from "next/dynamic";
// Dynamically import the Viewer component to avoid SSR issues
const ViewerComponent = dynamic(() => import("@ijewel3d/mini-viewer").then((mod) => mod.ViewerComponent), {
ssr: false,
});
const myModelId = "ThWX3yXbSqygIcRbS2ODGw"; // Replace with your actual model ID
export default function Home() {
return (
);
}
```
:::tip
This page will be updated as additional functions for interacting with iJewel Drive are introduced
:::
### Component Props (`ViewerComponent`)
The `ViewerComponent` accepts the following props to configure its behavior and appearance:
| Prop | Type | Optional/Required | Description |
|:----------------|:------------------------------|:---------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `project` | `Project` | Optional | A full project configuration object. If provided, this takes precedence over `modelId` and `modelName`/`parentId`. You can use this to load local 3d files. See [Viewer Class](./viewer-class.md#project-configuration) |
| `modelId` | `string` | Optional | The unique File ID of a specific model in iJewel Drive. Used if `project` is not provided. This is the simplest way to load a single model. |
| `modelName` | `string` | Optional | The exact file name. Use it with `parentId`. Public files do not require `token`. |
| `parentId` | `string` | Optional | The folder ID for a `modelName` search. |
| `tag` | `string` | Optional | The exact tag for a public-file search. |
| `scope` | `string` | Required with `tag` | The folder ID for a `tag` search. |
| `basename` | `string` | Optional | The basename identifier for your iJewel Drive instance. Only change this if you are an enterprise client with a custom basename. |
| `token` | `string` | Optional | An authentication token for a private file selected by `modelName` and `parentId`. |
| `viewerOptions` | `ViewerOptions` | Optional | An object containing options to customize the viewer's appearance and behavior (e.g., `showCard`, `showLogo` ). See [Viewer Class](./viewer-class.md#vieweroptions) documentation for details. |
| `onError` | `(err: Error) => void` | Optional | A callback function that gets executed if an error occurs during model loading or viewer initialization. Receives the `Error` object as an argument. |
| `onLoad` | `(viewer: Viewer ) => void` | Optional | A callback function executed when the iJewel Viewer helper class instance (which manages loading and wrapping WebGi) is successfully initialized or updated after loading a model. Receives the `IjewelViewerClass` instance. Note: This is distinct from `onViewerReady`. |
| `onViewerReady` | `(viewer: ViewerApp) => void` | Optional | A callback function executed when the underlying WebGi `ViewerApp` instance is fully initialized and ready for interaction (e.g., scene manipulation, adding plugins). Receives the `ViewerApp` instance. This often fires shortly after `onLoad`. |
| `className` | `string` | Optional | A standard React prop to apply a CSS class to the root `div` element rendered by the component. |
| `style` | `React.CSSProperties` | Optional | A standard React prop to apply inline CSS styles to the root `div` element. Default styles ensure the viewer attempts to fill its container. |
::: info To load a model, you must provide *one* of the following combinations:
1. The `project` prop.
2. The `modelId` prop.
3. The `modelName` and `parentId` props together. Add `token` for a private file.
4. The `tag` and `scope` props together.
:::
---
# Viewer API Reference

The `Viewer` class is responsible for initializing and rendering the iJewelMiniViewer in a specified container.
## Constructor
#### `constructor(container: HTMLElement, project: Project, options?: ViewerOptions)`
- **Parameters**:
- `container`: The HTML element in which the viewer will be rendered.
- `project`: An object containing the project configuration details.
- `options`: An optional object containing various viewer options.
## Methods
#### `render(project: any)`
- **Parameters**:
- `project`: The project configuration to be rendered.
- **Description**: Renders the viewer with the given project configuration. This method sets up the viewer with the specified options and displays the UI components. To update the project and the 3D model, call `viewer.render(project)`. This will clear the previous project and render the new one.
:::tip
You can call `viewer.render(newProject)` to load new models and clear the previous scene on the same `Viewer` instance.
:::
## Configurator Try-On Helpers
Mini Viewer's standard Try-On button prepares the current configured ring
automatically. Use these helpers only when your integration supplies its own
Try-On button and calls `RingTryonPlugin.start()` directly.
| Export | Returns | Description |
| --- | --- | --- |
| `getConfiguratorTryonRingChoices(viewerApp)` | `{ id: string; label: string }[]` | Lists the visible Ring Configurator or Wedding Band Builder rings available for Try-On. |
| `prepareConfiguratorTryon(viewerApp, tryon, { ringId? })` | `{ ringId?: string; restore(): void }` | Prepares one configured ring for the plugin and returns an idempotent restore handle. Without `ringId`, it uses the current ring. |
Both functions are exported from `@ijewel3d/mini-viewer` and are available on
`window.ijewelViewer` in the IIFE bundle.
`prepareConfiguratorTryon()` throws a `RangeError` for a `ringId` that
`getConfiguratorTryonRingChoices()` does not list, so always take the id from
that call rather than from storage. It throws a `TypeError` for a viewer or
plugin it cannot use. For a plain model it prepares nothing and returns a
restore handle that does nothing, because a plain model needs no preparation.
```javascript
import {
getConfiguratorTryonRingChoices,
prepareConfiguratorTryon
} from "@ijewel3d/mini-viewer";
```
### Start Try-On from a custom button
This IIFE example assumes that Mini Viewer has created `viewerApp`, the
`ijewel-scene-ready` event has fired, Web VTO is loaded, and `tryonConfig`
contains the saved fit. If more than one ring is returned, provide a picker in
your interface.
```html
```
```javascript
const tryonButton = document.getElementById("tryon-button");
async function startConfiguratorTryon() {
const tryon = await viewerApp.getOrAddPlugin(
ij_vto.RingTryonPlugin
);
const ringChoices = ijewelViewer.getConfiguratorTryonRingChoices(viewerApp);
const selectedRing = ringChoices.length > 1
? await showRingPicker(ringChoices) // Implement this in your interface.
: ringChoices[0];
if (!selectedRing) {
throw new Error("The customer did not select a ring.");
}
await tryon.fromJSON({
...tryonConfig,
type: ij_vto.RingTryonPlugin.PluginType
});
const session = ijewelViewer.prepareConfiguratorTryon(
viewerApp,
tryon,
{ ringId: selectedRing.id }
);
try {
await tryon.start();
} catch (error) {
session.restore();
throw error;
}
}
tryonButton.addEventListener("click", () => {
startConfiguratorTryon().catch(console.error);
});
```
Call the example from a customer click or tap so the browser can request camera
permission. The session restores the complete configurator after Try-On stops,
setup mode exits, startup fails, camera permission is denied, or the device is
unsupported. Do not call `restore()` immediately after a successful start. If
your integration cancels before `start()`, call it explicitly.
::: tip Check `tryon.running` after `start()`
On a device with no camera, `start()` can resolve without an error and leave
`tryon.running` as `false`. The session still restores the configurator on its
own, so the scene is safe. Read `tryon.running` to decide whether to show your
Try-On interface or a fallback message.
:::
See [RingTryonPlugin](../tryon/ring-tryon-plugin) for configuration and lifecycle
methods.
## ViewerOptions
The `ViewerOptions` interface provides several optional properties to control the appearance and behavior of the viewer.
| Property | Type | Description | Default |
|-------------------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|
| viewer | `ViewerApp` | An existing viewer instance to be used for rendering. If not provided, a new viewer will be created. | `undefined` |
| showLogo | `boolean` | Determines whether the logo is displayed in the viewer. | `true` |
| showCard | `boolean` | Controls the visibility of the floating card that displays model details. | `true` |
| showSwitchNode | `boolean` | Show or hide swich nodes from the configurator. | `false` |
| splitMaterialTabs | `boolean` | Determines if material options are displayed in separate tabs. | `undefined` |
| hideQuality | `boolean` | Controls the visibility of quality settings in the UI. | `false` |
| logoScale | `number` | Specifies the scale of the logo. | `1` |
| logoPositionX | `number` | Determines the horizontal position of the logo on the screen. The value ranges from 0 to 1, where 0 positions the logo at the far left and 1 positions the logo at the far right. | `1` |
| logoPositionY | `number` | Similar to `logoPositionX` but vertically | `0` |
| showZoomButtons | `boolean` | Determines whether zoom buttons are displayed in the viewer. | `false` |
| showUiButtons | `boolean` | Determines whether ui buttons bar is displayed in the viewer. | `true` |
| enableZoom | `boolean` | Enables or disables zoom functionality. | `true` |
| enableScrollWheel | `boolean` | Enables or disables zooming with the scroll wheel. | `true` |
| hideCameraViews | `boolean` | Hides the UI button for switching between defined camera views. | `false` |
| hideRotateCamera | `boolean` | Hides the UI button for toggling automatic camera rotation. | `false` |
| hideGltfAnimations | `boolean` | Hides the UI controls for playing embedded GLTF animations. | `false` |
| hideFitScene | `boolean` | Hides the UI button used to reset the camera and fit the model to the view. | `false` |
| hideFullScreen | `boolean` | Hides the UI button for toggling fullscreen mode. | `false` |
| showProfile | `boolean` | Displays a profile section using `profileName`, `profileUrl`, etc., from the `Project` config. | `false` |
| shareUrl | `string` | Overrides the default URL used by the share button. | `window.location.href` |
| autoGroundTonemap | `boolean` | Automatically applies tonemapping to the ground plane, to match the background tonemaping. | `false` |
| showShareButton | `boolean` | Controls the visibility of the share button in the UI. | `false` |
| showConfigurator | `boolean` | Controls the visibility of the entire configurator UI panel. | `true` |
| showPosterInLoadingScreen | `boolean` | Determines if the `posterUrl` from the `Project` config should be displayed while the 3D model is loading. | `true` |
| disableInteractionPrompt | `boolean` | Disables the initial overlay hand prompt that instructs users how to interact with the model. | `false` |
| runRotateCamera | `boolean` | Starts the turntable camera rotation immediately after the model loads. | `false` |
| headerComponent | `React.ReactNode` | Allows injecting a custom React component into the viewer's header area. | `undefined` |
| transparentBg | `boolean` | Makes the background of the viewer's canvas transparent instead of using a scene background. identical to `clipBackground`. | `false` |
| isModal | `boolean` | Indicates if the viewer is being rendered within a modal context, potentially altering some UI behavior or layout. | `false` |
| hideNameNumbers | `boolean` | Hides automatically generated numerical suffixes from option names displayed in the configurator. | `false` |
| configuratorBottomOffsetPx | `number` | Adds a specified pixel offset to the bottom of the configurator UI, useful for avoiding overlap with other fixed elements. | `undefined` |
| useDefaultVJSON | `boolean` | If `true`, attempts to load a default scene configuration (vjson) if one isn't explicitly provided in the project config. | `false` |
| hideTryOn | `boolean` | Hides the virtual Try-On button. The button appears only for projects that enable Try-On. See [Direct Integration](../tryon/demo.md#option-2-load-the-model-with-mini-viewer). | `false` |
| tryonPath | `string` | URL of the `web-vto` script that Mini Viewer loads when the customer starts Try-On. Set it to pin a specific Web VTO release, or when iJewel3D supplies a different bundle URL. | The release bundled with this Mini Viewer |
| wbbDesignHost | `object` | Persists saved Wedding Band designs in the project instead of the browser. See [The project design catalogue](../wedding-band-builder/api-reference.md#the-project-design-catalogue). | `undefined` |
| wbbShareBaseUrl | `string` | Storefront address that a Wedding Band design link is built on. Set it when the builder runs in a cross-origin iframe. Same effect as `setShareBaseUrl()`. | The page address |
## Project Configuration
When initializing the iJewel Viewer, you need to provide a project configuration object that includes various settings for your 3D model, environment, materials, and more. Below is a detailed explanation of the properties that can be included in the project configuration object.
### Project Properties
| Property | Type | Description |
|--------------------|------------|------------------------------------------------------------------------------------|
| modelUrl | `string` | URL of the 3D model file (e.g., a `.glb` file). |
| basePath | `string` | Base URL path where your assets are stored. Can be an empty string if not needed. |
| posterUrl | `string` | URL of the poster image. |
| logo | `string` | URL of the logo to be displayed in the viewer. |
| name | `string` | Name of the project. |
| description | `string` | Description of the project. |
| sceneConfig | `object` | Configuration for the scene environment, including background and ground settings. |
| cameraConfig | `object` | Configuration for the camera settings. |
| materialConfig | `object` | Configuration for the materials used in the model. |
| configuratorConfig | `array` | **[Deprecated]** Use plugins["MaterialConfiguratorPlugin"] instead. Configuration for the configurator options available in the viewer. |
| plugins | `object` | Configuration for the plugins used in the viewer. |
| tryonConfig | `object` | Virtual Try-On settings for a model or configurator project. Requires `enabled: true` for the viewer to offer Try-On. See [Prepare a Try-On Project](../tryon/prepare-model.md). |
| category | `string` | Specify the category of the model, e.g. Ring, Necklace or Watch. |
| tags | `string[]` | An array of strings containing tags for the model. |
| profileName | `string` | The name to be displayed on the profile card (used when `ViewerOptions.showProfile` is true). |
| profileUrl | `string` | A URL associated with the profile (e.g., website, portfolio link), used in the profile card. |
| profileDescription | `string` | Descriptive text for the profile card. |
| profileImage | `string` | URL for the image to be displayed on the profile card. |
| version | `string` | A version identifier for the assets and configurator format (e.g., "v6"). |
| currentPose | `{ position: number[]; rotation: [number, number, number, EulerOrder] } \| null` | Specifies an initial pose (position and rotation of the 3d model) to set when the viewer loads. Set to `null` to disable. |
| shouldApplyModelStageConfig | `boolean`| Indicates whether the viewer settings included with the specifed model stage in sceneConfig (like background color or related configs) should be applied on load. |
### Detailed Explanation
- **modelUrl**: The URL pointing to the 3D model file you want to load.
- **basePath**: The base path for your assets, which can be left empty if not needed.
- **posterUrl**: The URL of the poster image to be displayed before the model loads.
- **logo**: The URL of the logo image to be displayed within the viewer.
- **name**: name of the model to be displayed in the floating card.
- **description**: A brief description of the model to be displayed in the floating card.
- **presetLib**: The library of presets for the `sceneConfig`.
- **materialLib**: The library of materials used in `materialConfig` and `configuratorConfig` .
- **sceneConfig**:
- `Environment`: Path to the environment HDR file.
- `GemEnvironment`: Path to the gem environment EXR file.
- `Ground`: Path to the ground configuration JSON file.
- `Background` : Path to the background image for the 3d scene.
- **cameraConfig**: Configuration for the camera settings.
- **materialConfig**: The materials that are going to be applied to the model on load
- `materials`: An array of material objects, each with a `name` and a `path` to the material file.
- `type`: The type of material configuration, typically `MaterialPresetPlugin`.
- **configuratorConfig**: An array of configurator option objects used in the material configurator ui, each with:
- `name`: The name of the material layer in the 3d file.
- `title`: The display title for the option.
- `options`: An array of available options for this configurator, each with:
- `name`: The name of the material or gem file.
- `type`: The type of option, e.g., `metal` or `gem`.
- **plugins**:
- `SimpleBackgroundEnvUiPlugin2`: Configuration for the background and environment UI plugin, including:
- `sceneEnvironmentRotation`: Rotation of the environment.
- `sceneEnvironmentIntensity`: Intensity of the environment lighting.
- `sceneEnvironmentFixedDirection`: Boolean indicating if the environment direction is fixed.
- `tonemapBackground`: Boolean indicating if background tonemapping is enabled.
- `tonemapGround`: Boolean indicating if ground tonemapping is enabled.
- `type`: The type of the plugin, typically `SimpleBackgroundEnvUiPlugin2`.
- `MaterialConfiguratorPlugin`: Defines the materials available within the configurator UI.
- `type`: Must be set to `"MaterialConfiguratorPlugin"`.
- `resources`: An object containing various resource such as materials and textures.
- `materials`: A key-value store where each key is a unique identifier (UUID) for a material, and the value is an object defining the material's properties.
- `variations`: An array of objects defining the structure and options presented in the configurator UI. Each object represents a layer of the model:
- `uuid`: An identifier corresponding to the layer group (e.g., Metal01 Gem04).
- `title`: The display name for this section in the UI (e.g., "Head", "Gemstone").
- `preview`: Specifies how the options under this variation should be previewed (e.g., `"color"`).
- `materials`: An array listing the available material choices for this variation. Each item links to a material defined in `resources.materials`:
- `uuid`: The UUID of the material from `resources.materials`.
- `resource`: The type of resource, typically `"materials"`.
::: tip
The paths for the scene presets and materials can either be absolute URLs or relative to the `basePath` specified in your project configuration. This flexibility allows you to organize and reference your assets in a way that best fits your project structure.
:::
## Event Listener
The `Viewer` class emits custom events on `window` as it starts up:
| Event | `event.detail` | Fired when |
| --- | --- | --- |
| `ijewel-viewer-ready` | `{ viewer }` | The WebGi viewer is initialized. The project may still be loading. |
| `ijewel-scene-ready` | `{ sceneReady: true }` | The project configuration and scene have finished loading. Read configurator ring choices after this event. |
| `ijewel-file-data` | `{ iJewelFileData }` | A model loaded with `loadModelById` has had its Drive record resolved. |
`iJewelFileData` is the Drive record for the file, not the 3D scene. Its `config` holds the settings saved on the file itself and `defaultConfig` the ones inherited from its folder; either can arrive as a JSON string, so parse defensively. This is how per-model settings such as [`tryonConfig`](#project-properties) reach your page - see [Advanced Integration](../tryon/advanced.md#apply-the-saved-model-configuration) for a worked example.
Register both listeners *before* calling `loadModelById`, or you will miss them.
## Example Usage
```javascript
const project = {
modelUrl: "https://example.com/model.glb",
basePath: "https://example.com/assets/",
logo: "https://example.com/logo.png",
sceneConfig: { /* scene configuration */ },
materialConfig: { /* material configuration */ },
configuratorConfig: [/* configurator configuration */],
};
const viewerOptions = {
showLogo: true,
showCard: true,
showSwitchNode: false,
splitMaterialTabs: true,
useIjewelLogo: false,
hideQuality: true,
logoScale: 1.5,
};
const viewer = new ijewelViewer.Viewer(document.getElementById("root"), project, viewerOptions);
// To update the project and the 3D model
viewer.render(newProject);
// Event listener for viewer ready event
window.addEventListener("ijewel-viewer-ready", async (ev) => {
const viewer = ev.detail.viewer;
// Additional actions to perform with the viewer instance
//Example
//set the max and min zoom for mobile and desktop
viewer.scene.activeCamera.addEventListener('update', (ev)=>{
if(window.innerWidth < window.innerHeight){
(viewer.scene.activeCamera.getControls()).minDistance = 14;
(viewer.scene.activeCamera.getControls()).maxDistance = 9;
}else{
(viewer.scene.activeCamera.getControls()).maxDistance = 12;
(viewer.scene.activeCamera.getControls()).minDistance = 7;
}
});
});
```
---
# Changelog for @ijewel3d/mini-viewer
## [0.6.18] - 2026-09-02
### Added
- Try-On now opens a Ring Configurator or Wedding Band Builder project. Mini Viewer sends the ring assembled by the configurator plugin to AR, so the project does not need a separate model file.
- A linked pair of wedding bands asks which ring to try on before AR starts. Every other project opens the selected ring.
- Custom integrations can use `getConfiguratorTryonRingChoices()` and `prepareConfiguratorTryon()` from the Mini Viewer module or IIFE bundle to start and safely restore a configured ring with `RingTryonPlugin`.
- A wedding band design can travel in a link. The restorable part of a configuration is compressed into the URL fragment, so a shopper can open their design on another device and a storefront can deep-link one. Nothing is stored on a server.
- `getDesignCode()` returns the encoded design on its own, for a product field or an order record. `getShareUrl()` returns a ready link, and `setShareBaseUrl()` overrides the host inside a cross-origin iframe.
- `applyDesignLink()` restores a design from a code, a `?design=` URL, or a `#?design=` URL. It also gives a cross-origin host the restore path the postMessage bridge was missing, which could call `toJSON()` but never `fromJSON()`.
- Saved designs can live in the project instead of the browser. A host supplies `save(designs)` through `viewerOptions.wbbDesignHost`, and the catalogue becomes one public JSON file in the project's folder, so a design saved once appears in every embed of that project. Without a host, saving falls back to browser storage.
- `exportConfig()` and `getMaterials()` now report each material slot's base, variant, and finish. An unchanged slot reports the material's default variant.
- `importConfig()` now reads an `exportConfig()` record with slot variants, inlays, overlays, and the sleeve.
- Manufacturing export can select an alloy from the material variant. The specification sheet now names the variant beside the metal.
### Changed
- Tracking reports visible session time rather than wall-clock time, and reports a model that fails to load.
- The material configurator icon is smaller, which takes about 61 KB out of every bundle.
### Fixed
- Changing a profile, width, or thickness during Try-On no longer freezes the session.
- A ring edited during Try-On no longer returns as a second ring on the finger, and the other rings of a compilation stay on their own slots.
- A share link keeps the host page's own route, so a storefront path survives being shared. Re-sharing an edited design no longer restores the earlier one.
- A malformed design code is reported instead of throwing. A design the project cannot build is refused rather than applied in part.
- A saved-design catalogue that cannot be read is never replaced with an empty one.
- A project with Try-On enabled but no saved fit now uses plugin defaults until the fit is calibrated.
- The loading screen now closes when AR fails to start or the customer cancels it.
- The Boutique layout now labels the Beveled and Comfort profiles correctly.
- `setDivisionParams` now accepts the documented object form and the existing positional form.
- Wedding Band settings now reject non-numeric values instead of storing `NaN` and failing to build the geometry.
## [0.6.17] - 2026-08-18
### Added
- Outside features on a wedding band: up to three inlays — free-floating stripes across the band width — and one overlay per rim, each in its own material. An overlay covers all, part, or none of the ring's flat side face.
- An inside sleeve lines the bore in a second material, across the whole width or a centred part of it.
- A base, variant and finish material schema. A manifest declares each material once with its own variants (karats, species, shades) and only the finishes it has files for, and states where it is allowed: band, inlay, overlay or sleeve. Manifests with the old flat metal and finish lists still load unchanged.
- Modern Metals, a third Wedding Band Builder layout, selectable at runtime like Boutique.
- SDK: `setInlay`, `removeInlay`, `getInlays`, `getInlayBounds`, `setOverlay`, `removeOverlay`, `getOverlays`, `getOverlayWidthMax`, `setSleeve` and `getSleeve`. `setOutsideFeatures` changes the whole set in one rebuild. `areOutsideFeaturesAvailable` and `outsideFeaturesFit` report what the current division and band width allow.
- SDK: `getAvailableMaterials`, `getAvailableVariants`, `getAvailableFinishesFor` and `setMaterialRef` address the new material tree. The `inlays:changed`, `overlays:changed` and `sleeve:changed` events also arrive over postMessage.
### Changed
- Every profile in the catalogue is offered. A profile with no layout glyph falls back to the manifest icon instead of disappearing from the row.
- The metal and finish rows read the material catalogue. The finish row hides for a material that has no finishes, such as wood.
- Groove and edge names match the trade: Dome (was Convex U), Bevel (was Edge) and Double Milgrain (was Milgrain x2).
- The groove position bar numbers the partition sections and carries a value chip. Drag the chip, click it to centre the groove, or use the nudge buttons.
- The Boutique balance bar labels each block by its metal slot, so the bar reads in the same order as the ring.
- Theme variables also apply to the layout root, so a layout can paint the canvas area around the ring.
- A root-relative asset path resolves against the base URL's origin, so a project can serve its assets from its own domain.
### Fixed
- A material file that fails to load no longer aborts the ring. Its region stays unpainted and every other segment keeps its own colour.
## [0.6.16] - 2026-08-11
### Added
- Boutique, a second Wedding Band Builder layout, selectable at runtime through the SDK or the project manifest. Any of the 12 themes works in either layout.
- Layouts now own their assets, labels, controls and sections, so a layout can bundle its own glyphs, swatches and imagery and override any section without forking the panel.
- Boutique covers the full workflow in four steps, with a ring-size wizard (bank-card screen calibration, then measure against a ring you own) and a free-stone editor offering curated patterns, per-stone type and colour, and drag placement.
- Boutique diamonds gain Placement and Eye orientation rows; a boutique step can declare dividers between sections.
- Stone colours can be set per stone, and grooves carry their own interior finish.
### Changed
- The builder stylesheet is split into a shared base sheet and per-layout sheets, each scoped to the panel running that layout, so two builders in one document no longer style each other.
- Undo and redo perform exactly one history step per press and serialize, instead of collapsing rapid presses into a single step.
- Ring Width and Ring Thickness take their millimetre range from the engine or the manifest rather than a fixed preset cap, so wider bands are reachable and read their true size.
### Fixed
- Wave-band stones, per-stone colour, groove finishes and milgrain.
- Boutique menu actions never fired inside a shadow root; boutique steps could not scroll on mobile.
- Cross-section preview now draws from the manifest cut vector, holds a fixed millimetre scale and reserves its height; free-stone strip follows the reference metrics.
- Slider scales match the reference, and whole-number scales label without decimals.
- Glyph tones follow the segment, option tiles size uniformly, and the balance bar matches the reference while throttling its mesh rebuilds.
- Ring tabs scroll again when a compilation adds rings; the price/export row honours its own hidden attribute.
- Profile options resolve against the catalogue index, so a filtered glyph set no longer selects the wrong profile or leaves none selected.
- An undo landing inside the engraving debounce window is no longer overwritten by the queued keystroke.
- Stone colour swatches share one frame with the metal and finish rows, so catalogue artwork and generated swatches no longer differ in size.
- A wedding band project that fails to load, or is reset before it becomes ready, no longer leaves callers waiting on the builder forever, and no longer strands the viewer on its loading screen.
- The ring-size wizard survives a sandboxed iframe or blocked site data, and the price bar clears its pending timer when the footer unmounts.
## [0.6.15] - 2026-08-06
### Changed
- Embed watermark simplified — removed the wordmark reveal and the hover flip; the logo mark now fades from 30% to 80% opacity on hover.
## [0.6.14] - 2026-08-06
### Changed
- Tryon attribution logo
## [0.6.13] - 2026-08-06
### Added
- Domain-based license verification for TryOn/AR
- `enableTryonForDomain` prop in UiButtons to control TryOn attritubution visibility based on domain license
- Listen for `ijewel-domain-verified` event for late domain verification
## [0.6.12] - 2026-08-04
### Added
- Wedding Band Builder Phase 2 runtime with multi-ring wedding, memoire, and engagement compilations; ring add, remove, reorder, swap, visibility, and metal controls.
- Custom band paths and shapes, profile-aware dimensions, multi-metal partitions and divisions, independent edges, design grooves, and wavy separation.
- Expanded gem settings including independent top and side stones, cross, tension, eye, free placement, diamond colours, and hidden bore stones.
- Styled engraving, undo/redo history, saved configurations, pricing, spec-sheet data, and manufacturing-data export APIs.
### Changed
- Wedding Band controls are organized into profile, dimensions, materials, gems, joints, and engraving panels, with manifest-driven catalogs, limits, compatibility rules, and themes.
- Wedding Band state and APIs remain compatible with Drive and Mini Editor while supporting the extended Phase 2 schema.
### Fixed
- Corrected material-slot application, polished-material loading, side-stone placement and spacing, touching-bezel cavities, wavy material divisions, and per-ring engraving isolation.
- Fixed ring switching, compiled-ring persistence, restored-ring sizing, hidden-stone engraving, zoom-scale dragging, and horizontal overflow in the ring tabs.
- Improved geometry, material, texture, and ring lifecycle disposal across rebuilds, project reloads, and viewer teardown.
- Hardened iframe API readiness, command replies, event forwarding, validation reporting, and cleanup for embedded integrations.
## [0.6.11] - 2026-07-24
### Fixed
- Wedding Band Builder: clearing the viewer or reloading a project now disposes the builder (controller, UI, message listeners), so stale state no longer leaks between projects. Hardened the cross-origin postMessage API and `ready` event.
## [0.6.10] - 2026-07-17
### Fixed
- Ring configurator component placement: each component now seats on its own placeholder anchor, aligned by geometry (centre in X/Z, base resting in Y), so heads no longer float above the anchor.
### Changed
- Ring configurator now unregisters a swapped-out component's materials from the material manager registry when the component is disposed.
## [0.6.9] - 2026-07-15
### Added
- Wedding Band Builder (beta): parametric wedding band configurator (profiles, dimensions, materials, diamond settings, grooves, engraving, pricing and spec-sheet export) with its own themeable UI.
- Viewer modal support for wedding band projects: loads without a model URL and mounts the builder UI (`wbbRenderUI`, `showWbbUi` / `hideWbbUi` embed options).
## [0.6.8] - 2026-05-12
### Fixed
- Bundle error.
## [0.6.7] - 2026-05-12
### Fixed
- Webgi bundle error when using tgz version.
## [0.6.6] - 2026-05-06
### Changed
- Upgrade webgi to 0.21.5
## [0.6.5] - 2026-05-04
### Changed
- Upgrade webgi to 0.21.3
## [0.6.4] - 2026-05-04
### Changed
- Upgrade webgi to 0.21.2
## [0.6.3] - 2026-04-16
### Changed
- Upgrade webgi to 0.20.0
- `DiamondPlugin.setKey()` call removed (licensing now uses automatic domain verification in webgi 0.20.0)
## [0.6.2] - 2026-04-12
### Added
- `resolveFile` utility to resolve file URLs from iJewel Drive
- `loadModelByTag` method to load models by tag and optional scope
- `tag` and `scope` props to ViewerComponent for tag-based model loading
- Token is now optional in ViewerComponent
### Changed
- `loadModelById` and `loadModelByName` now use `resolveFile` internally
### Fixed
- Silent failure in ViewerComponent when loading errors occur
- Event listener leak in ViewerComponent cleanup
- Zoom + button Icon fixed
## [0.6.1] - 2026-03-30
### Added
- Added tracking of mini-viewer events
## [0.6.0] - 2026-03-14
### Changed
- Migrated to monorepo (ijewel-mono) with shared packages (common, ui)
- Moved OverlayTabs and EditorOption to shared @ijewel3d/ui package
- GitHub Actions deployment updated with package-scoped tags (mini-viewer-v*)
- Updated rclone path for monorepo workspace hoisting
- Reset Icon in UI buttons changed
### Fixed
- Tooltip styling in Shadow DOM (portal rendering + CSS regeneration)
- Added readOnly mode to OverlayTabs (disables editing in viewer)
## [0.5.10] - 2026-02-16
### Added
- Ring Configurator Plugin Release
## [0.5.9] - 2025-01-23
### Changed
- Updated webgi to 0.19.1
## [0.5.8] - 2025-12-29
### Changed
- Increased camera zoom speed for AR
- Minor css fixes for zoom buttons
## [0.5.7] - 2025-12-29
### Changed
- Updated webgi to 0.19.0
### Added
- Zoom buttons in AR mode.
## [0.5.6] - 2025-12-15
### Changed
- Release apply materials through url feature.
## [0.5.5] - 2025-12-01
### Fixed
- Overflow in some containers.
## [0.5.4] - 2025-12-01
### Fixed
- Tooltip styles.
## [0.5.3] - 2025-11-28
### Fixed
- Remove BatchExportPlugin.
## [0.5.2] - 2025-11-27
### Fixed
- Race condition in loading camera config.
## [0.5.1] - 2025-11-24
### Fixed
- Prompt component css issue.
## [0.5.0] - 2025-11-17
### Changed
- Migrated env map rotation to webgi 0.18.0.
## [0.4.6] - 2025-11-14
### Changed
- Use vjson preset loading settings.
## [0.4.5] - 2025-11-14
### Changed
- Update webgi to 0.18.0
## [0.4.4] - 2025-11-04
### Added
- Release css conflict fixes
## [0.4.3] - 2025-10-30
### Added
- A flip camera button in AR mode.
## [0.4.3-dev.1] - 2025-10-13
### Changed
-fix some css conflicts.
## [0.4.2] - 2025-09-23
### Changed
- Change AR icon to AR beta icon.
- Remove Domain based checking to enable AR.
## [0.4.1] - 2025-08-22
### Fixed
- Configurator, add max-width to labels in material configurator.
- Change the Configurator tab background to complement the white canvas.
## [0.4.0] - 2025-08-12
### Fixed
- Update material exist check for configurator to account for regexes
- Don't load material configurator if it has no variations.
- Event listeners added ijewel-file-data, ijewel-model-loaded and ijewel-scene-ready.
## [0.3.33] - 2025-08-04
### Fixed
- A build issue caused by tryon
- Domain check for SDK and Iframe for Tryon. Drive, Design and local are allowed allowed to show/hide Tryon button.
## [0.3.32] - 2025-07-24
### Changed
- Set applyOnLoad and applyOnLoadForce to true in material configurator plugin, this will apply selected material configurator options on load.
## [0.3.31] - 2025-07-18
### Added
- Added a default camera configuration to ensure the reset view gets applied.
- Only load inclusions plugin in webgi 0.14.2 and above.
## [0.3.30] - 2025-07-17
### Added
- Enable inclusions on unsupported sub-domains
## [0.3.29] - 2025-07-15
### Added
- Support for inclusion materials.
## [0.3.29] - 2025-07-15
### Added
- Support for inclusion materials.
## [0.3.28] - 2025-07-15
### Added
- Use the project's brandingSettings if available; these can be overridden by the viewer options' brandingSettings property.
- Move Embedding Setting business logic to mapping inside viewer.
### Fixed
- To maintain backward compatibility, legacy logo-related options are internally mapped to the new brandingSettings structure.
- Changed the Configurator background, it was quite not visible on white background.
## [0.3.27] - 2025-06-25
### Fixed
- check for cameraConfig along with hideResetView, if no button is enabled in RHS control.
## [0.3.26] - 2025-06-25
### Fixed
- Added hideResetView flag to hide reset view button.
- Remove empty div if no button is enabled in RHS control.
## [0.3.25] - 2025-06-16
### Changed
- Update webgi to 0.12.3.
- Use model url and basepat from drive in loadModelById.
## [0.3.25-dev.2] - 2025-06-04
### Fixed
- To maintain backward compatibility, legacy logo-related options are internally mapped to the new brandingSettings structure.
## [0.3.25-dev.1] - 2025-05-27
### Fixed
- Ui not showing in Tryon.
- Better error handling for Tryon.
## [0.3.25-dev.1] - 2025-05-27
### Fixed
- Ui not showing in Tryon.
- Better error handling for Tryon.
## [0.3.24] - 2025-05-23
### Added
- Branding Logo, changed field name, and behaviour to show loading screen logo.
## [0.3.24-dev.2] - 2025-05-24
### Fixed
- Use instore Tryon library.
## [0.3.24-dev.1] - 2025-05-24
### Fixed
- A bug in tryon ui
## [0.3.23] - 2025-05-21
### Added
- Branding logo re-position on initial load.
## [0.3.23-dev.2] - 2025-05-22
### Fixed
- A bug in iffe build
## [0.3.23-dev.1] - 2025-05-22
### Added
- Web tryon integration
## [0.3.22] - 2025-05-21
### Added
-A new feature to Branding logo. With logo layout Setting.
## [0.3.22-dev.3] - 2025-05-21
### Added
-Branding logo, re-position on runtime fixed.
## [0.3.22-dev.2] - 2025-05-20
### Added
-Branding logo, fix css override issue.
## [0.3.22-dev.1] - 2025-05-20
### Added
- Show logo of Branding based on logo layout setting.
## [0.3.21] - 2025-05-01
### Added
- Deploy CHANGELOG.md to releases.ijewel3d.com
## [0.3.20] - 2025-04-17
### Added
- onViewerReady to `ViewerComponent`.
- viewerApp (webgi viewer) to Viewer class.
## [0.3.19] - 2025-04-17
### Added
- `ViewerComponent` for react.
## [0.3.18] - 2025-04-15
### Added
- add viewer parameter to `loadModelByName` and `loadModelById`
## [0.3.17] - 2025-04-15
### Added
- loadModelByName method, to load models from the ijewel drive using name and parent id.
## [0.3.16] - 2025-04-10
### Fixed
- A bug in svg backgrounds on Windows.
## [0.3.15] - 2025-03-28
### Fixed
- Load a default env map if there is none in the file or project.
- Use semver for version comparsion.
- Use window.devicePixelRatio instead of displayCanvasScaling for dpr.
- set loopAnimations to true on animation button click.
## [0.3.15-dev.1] - 2025-03-22
### Added
- added loadModelById method, to load any file from drive with id.
## [0.3.14] - 2025-03-22
### Fixed
- Hanlde loading model stage vjson config.
## [0.3.13] - 2025-03-21
### Fixed
- Handle a bug in materials mapping for old projects.
## [0.3.12] - 2025-03-12
### Fixed
- fix selected material configurator options not applied on load.
- In Dark mode, svg color fixed.
## [0.3.11] - 2025-03-07
### Fixed
- Minor issue when loading presets
## [0.3.10] - 2025-02-27
### Fixed
- Issues in React cycle, refactored shadow root
## [0.3.9] - 2025-02-25
### Added
- useDefaultVJSON parameter, to load a default vjson file from basepath
## [0.3.8] - 2025-02-20
### Changed
- Use white color when clearing background
## [0.3.7] - 2025-02-20
### Fixed
- A bug in iife build
## [0.3.6] - 2025-02-18
### Changed
- Anable interaction plugin even after the user refreshes the page
## [0.3.5] - 2025-02-13
### Fixed
- A bug in nowebgi build
## [0.3.4] - 2025-02-13
### Changed
- Update webgi to 0.10.5
## [0.3.3] - 2025-02-13
### Changed
- Update rclone path for deployment.
## [0.3.2] - 2025-02-13
### Added
- Hanlde currentPose in project.
### Changed
- Update SimpleBackgroundEnvUiPlugin2 to load ssbevel from project.
## [0.3.0-temp.1] - YYYY-MM-DD
### Added
- Description of new features
### Changed
- Details of modifications
### Fixed
- Bug fixes and corrections
### Removed
- Deprecated or deleted features
---
# Connect to iJewel Drive
::: danger Warning
This page is exclusively for iJewel Drive instances created before March 2025.
For new accounts and instances, check the page at [Connect to iJewel Drive](../connect-to-drive.md).
:::

The `setupIjewelDriveViewer` function is a convenient way to set up the iJewel3D Viewer by connecting it to your iJewel drive. This allows you to load a 3D model directly from a specified path inside your ijewel drive and render it within your web application. Here's how to use it.
::: tip Tutorial
Check out [Embed iJewel3D Drive in your website](./tutorial-embed-drive) for a step-by-step guide on how to embed the iJewel3D Viewer in your website.
:::
## Getting Started
To get started quickly, go to your iJewel drive and navigate to the `viewer` folder. Inside this folder, you will find an `index.html` file that is pre-configured to work with your drive. This file serves as an example of how to embed the iJewel3D Viewer and connect it to your drive. You can open this file in your browser to see the viewer in action and refer to its setup when integrating the viewer into your own web application.
:::tip
You can download the source code of the above demo from the link bellow
```
view-source:https://releases.ijewel3d.com/libs/mini-viewer/index.html?path=L3Rlc3QvcmluZy5nbGI%3D
```
:::
## Usage
To initialize the viewer, call the `setupIjewelDriveViewer` function with the necessary configuration. Here's an example:
```javascript
ijewelViewer.setupIjewelDriveViewer({
basePath: "https://assets.example.ijewel3d.com",
ijewelViewerOptions: {
showLogo: true,
logoScale: 1,
// Additional options...
},
});
```
:::details NextJS Example
```typescript
useEffect(() => {
const webgiScript = document.createElement("script");
webgiScript.src = "https://releases.ijewel3d.com/libs/webgi-v0/bundle-0.22.0.js";
webgiScript.async = true;
webgiScript.onload = () => {
const script = document.createElement("script");
script.src = "https://releases.ijewel3d.com/libs/mini-viewer/0.6.8/bundle.nowebgi.iife.js";
script.async = true;
script.onload = () => {
//set it to true during development to bypass cors.
const useProxy = false;
const baseName = 'yourBaseName';
const basePath = "https://assets." + baseName + ".ijewel3d.com";
const proxyUrl = useProxy ? "https://cors-proxy.r2cache.com/" : "";
// @ts-ignore
ijewelViewer.setupIjewelDriveViewer({
basePath: proxyUrl + basePath,
ijewelViewerOptions: {
showCard: true,
showLogo: true,
},
}, document.getElementById("wrapper"));
};
document.body.appendChild(script);
};
document.body.appendChild(webgiScript);
}, []);
```
:::
## Parameters
| Parameter | Type | Description | Default |
|--------------------------|--------------|-------------------------------------------------------------------------------------------------------------------------------------|---------------|
| `basePath` | string | The base URL path where your assets are stored. | N/A |
| `model` (Optional) | string | The relative path to the 3D model file inside your iJewel Drive. For instance, if your model is located in a folder named `3dFolder` and the file is called `model.glb`, you would specify the path as `/3dFolder/model.glb`. This path is relative to the `basePath` provided in the configuration. It can be left undefined and the model will be taken from the query parameter `path` inside your iJewel Drive. | N/A |
| `target` | HTMLElement | (Optional) The HTML element where the viewer will be rendered. | null |
| `ijewelViewerOptions` | object | An object with viewer options such as showLogo, logoScale, etc. | N/A |
| `useMetaConfig` | boolean | Whether to use the saved meta configuration file for the 3d model. | true |
| `useFolderConfig` | boolean | Whether to use the parent folder configuration file. | false |
| `useDefaultConfig` | boolean | Whether to use the main default configuration file. | true |
## Setting the Model Path via URL Query Parameter
You can use the query parameter `path` to tell the viewer which model to load. The path to the model should be in Base64 format and relative to the root folder in your iJewel Drive.
For example:
```
www.yourwebsite.com/?path=L3Rlc3QvcmluZy5nbGI
```
In this example, the Base64-encoded string `L3Rlc3QvcmluZy5nbGI` decodes to `/test/ring.glb`, which is the path to the 3D model, once you initilize iJewel Viewer, it will refer to this path to know which model to load.
:::details
Alternatively, you can directly set the model path using the model property in the `setupIjewelDriveViewer` method. This provides a flexible way to specify the model path either through the URL or within your JavaScript code.
:::
:::info
Once you call `setupIjewelDriveViewer` with the correct model path, it will take care of loading the specified 3D model along with all its associated settings. This includes any predefined configurations, materials, and environment settings that have been saved with the model. This seamless integration ensures consistency and ease of access to your models. You can edit your models directly in the drive, save your changes, and see those updates reflected instantly on your website.
:::
## Cross-Origin Resource Sharing (CORS)
CORS is setup on the iJewel Drive to make sure only you can host the models on your domain.
When connecting to your iJewel Drive and loading models, you may encounter Cross-Origin Resource Sharing (CORS) errors in the console. These issues arise because your domain hadn't been whitelisted, please reach to us so we can configure our servers to allow CORS for your domain.
::: tip
For development and staging, a CORS-proxy can be used. Check the pre-configured sample in your iJewel Drive instance on how to use it. Note that this would disable the caching of the files on the CDN and adds a rate limit to the number of requests along with some other checks. Therefore, make sure to disable the flag when using in production to make the viewer running smoothly.
:::
---
# Tutorial - Embed iJewel3D Drive in your website
::: danger Warning
This page is exclusively for iJewel Drive instances created before March 2025.
For new accounts and instances, check the page at [Connect to iJewel Drive](../tutorial-embed-drive.md).
:::

A step by step tutorial on how to embed 3D Models hosting in your iJewel Drive instance to your website.
## Step 1: Set the Base Path and Container Element
Use the following HTML code to embed the 3D viewer:
- Replace `baseName` with your actual base name in the code.
- Identify where to specify the container HTML element. Set this element to embed the viewer correctly.
for more information about the code refer [Connect to iJewel Drive](./connect-to-drive)
```html
iJewel3D Viewer
```
## Step 2: Select and Load a 3D Model
- **Access** your iJewel drive with the 3D models.
- **Right-click** a model and select "Open in 3D Viewer."

- **Copy** the entire query parameter starting with `path=`.

- **Paste** this query parameter into the URL on your website where you've embedded the viewer code. This tells the viewer which 3D model to display.
Your website url should look something like this:
```
https://www.yourwebsite.com/?path=base64_path
```
:::info
The path is the base64 representation of the actual path to your 3D file in the drive. It starts from the root, followed by folder names, and ends with the 3D file name.
:::
## Step 3: Host and Domain Setup
- **Host** the viewer code on your website.
- **Inform us** of the domain where the viewer is hosted for authorization.
---
# Introduction
Welcome to the iJewel Playground documentation. Playground is a web-based 3D visualization platform designed for jewelry professionals — import your 3D models, apply realistic materials, set up lighting, and share stunning renders with clients.
## Quick Access
---
# What is iJewel Playground?
iJewel Playground is a web based 3D platform built specifically for the luxury industry. It enables designers, brands, and creators to present their products in highly photorealistic quality, all in real time, without the long waiting times of traditional rendering.
With iJewel Playground, users can import 3D models, assign materials, set up lighting, apply advanced post processing effects, and create interactive configurators.
Today, thousands of professionals across 60+ countries rely on it daily to visualize, customize, and share their creations with clients.

## Key Features
### Real-time Photorealistic 3D Visualization
One of the most important features of iJewel Playground is that it is purpose built for real time visualization of luxury products. High-end categories such as jewelry, watches, premium accessories, and automobiles demand exceptional attention to detail in their digital representation. Playground delivers on this need with its rich suite of materials, advanced lighting options, dynamic animations, and powerful post-processing tools, ensuring every product is showcased with unmatched realism and sophistication
Instantly preview jewelry and luxury designs with uncompromising realism. Diamonds sparkle, metals shine, and lighting reacts naturally—giving clients a true-to-life experience without hours of offline rendering.
### Intuitive UI/UX
Designed for ease of use, the interface is simple enough for first time users yet powerful enough for professionals. Complex 3D workflows are streamlined into clear steps, making it easy to focus on creativity rather than technical hurdles.
### Rich Material Library
Access a rich collection of pre built materials designed specifically for jewelry and luxury products including precious metals, antique finishes, diamonds, gemstones, precious stones, car paints, fine fabrics (satin, velvet, cotton, and more), wood, leathers, and many others. Beyond the library, users can also create and fine tune custom materials, giving them complete control over every detail of their designs.
### Extensive Scene Presets
Save time with ready to use environments and lighting setups. From elegant studio backdrops to dramatic HDR scenes, complete 3D stages, backgrounds, and ground settings, Playground’s scene presets make it effortless to showcase luxury products under the perfect conditions. With just a few clicks, you can craft unique atmospheres that reflect your brand’s identity and elevate the visual storytelling of your creations.
---
# Quick Start

To quickly create a realistic render and get a felling of the workflow in iJewel Playground, follow these simple steps:
* Pick one of the sample models
* **Apply materials** from metal, diamond, gem, and PBR presets, or customize your own.
* **Choose HDR lighting** for a realistic environment reflection and mood.
* **Configure the scene** Backgrounds, ground reflections, shadows, and camera setups.
* **Adjust Post processing** Apply filters such as reflections, bloom, tone-mapping, ambient occlusion and more.
* **Export & share** Download images, videos, or scene presets to showcase your work.
Here is a [Quick Introduction Video](https://www.youtube.com/watch?v=P0R38Y2S-b0)
---
# Importing Your First Model
You can import files into Playground in two simple ways:
1. Drag your file directly into the **Main Canvas Area**.
2. Browse & Select
- Click the **Import File** button in the toolbar or editor UI.
- Select the file from your local computer.

::: tip
Playground also provides a few **sample models** for a quick start. Perfect for testing workflows before importing your own designs.

:::
---
# UI Overview
The iJewel Playground interface is designed to give you both **speed** and **control** while working with your 3D models. Whether you're a beginner or a professional 3D artist, this page will help you understand where everything is and how the interface is organized.
## Interface Layout
The Playground is divided into **three main areas**:

1. Left Panel — Presets & quick settings for fast, professional results
2. Canvas (Center) — The live 3D viewport where your models are displayed
3. Right Panel — Professional tools with full control over every setting
::: tip
The **left panel** is designed for speed — ready-made presets you can apply with one click. The **right panel** is for precision — complete control over every detail. Both panels work together to give you the perfect balance between convenience and customization.
:::
---
## Canvas (3D Viewport)
The canvas is the central area where your 3D model is displayed in real-time.
### Welcome Screen
When no model is loaded, you'll see the welcome screen with options to get started:

- **Drag and drop** a 3D file directly onto the canvas
- **Select local file** from the right panel to browse your files
- **Load a sample** — click one of the sample models at the bottom to start experimenting right away
### Navigation Controls
Once a model is loaded, you can navigate the 3D scene:
| Action | Mouse | Touch (Mobile/Tablet) |
|---|---|---|
| **Rotate** | Click & drag | Drag with one finger |
| **Zoom** | Scroll wheel | Pinch with two fingers |
| **Reposition** | Hold `Shift` + drag | Drag with two fingers |
### Selecting Objects
To select an object, simply **click on it**. The selected object will be highlighted with an **orange outline**. Once selected, you can apply materials, add configurators, and adjust settings for that specific object.

::: tip
Click on **empty space** to deselect the current object.
:::
### Canvas Toolbar
The toolbar is located on the right side of the canvas, providing quick access to common actions:

Fullscreen
Expand the viewer to fill the screen
Reset Settings
Remove all custom settings and start fresh
Delete Scene
Clear everything from the canvas
Fit Object to Scene
Auto-frame the selected object or entire scene
Loop Camera Views
Play your saved camera view animation
GLTF Animation
Play animations imported from other software (Blender, etc.)
Auto Rotate
Simple 360° rotation of the model
Capture Snapshot
Download a PNG of exactly what you see — no UI elements
Export GLB
Download all objects and settings as a GLB file
::: tip
**Fit Object to Scene** is one of the most useful tools. Editing a specific diamond? Select it, click this button, and the canvas frames it perfectly. Click on empty space and use it again to frame your entire scene.
:::
### Material Configurator (Canvas)
When you **select an object** on the canvas, an **Add Configurator** button appears at the top-right of the canvas. This lets you create interactive material options that your clients can switch between in real-time.

Add Configurator
Appears when an object is selected and has no configurator yet
Edit Configurator
Appears when an object is selected and already has a configurator
**How it works:**
1. **Select an object** on the canvas — the "Add Configurator" button appears at the top-right
2. **Click Add Configurator** — a popup appears on the canvas showing the material library (5 categories: Metals, Gems, Ceramics, Pearls, Other)
3. **Choose or enter a name (Label)** at the top of the popup. The field suggests labels for the selected material category, and also accepts a custom label. Selecting a suggestion applies it immediately
4. **Click materials** to add them — each selected material appears at the bottom of the canvas
5. **Click a selected material again** to remove it from the configurator

Once configured, the material options appear at the bottom of the canvas. Your clients can click to switch between materials in real-time.

::: tip
You can create **multiple configurators** for different objects in the same scene — for example, one for metals and one for gemstones. The configurator name helps you identify which is which.
:::
---
## Left Panel — Presets & Quick Settings
The left panel provides **ready-to-use presets** for fast, professional results. These are designed to save you time — instead of adjusting dozens of settings manually, just click a preset and your scene is instantly transformed.

HDR Metal
HDRI environment maps optimized for metal reflections — gold, silver, platinum
HDR Gem
HDRI environment maps for diamond sparkle, fire, and brilliance
Background
Solid colors, gradients, and specialty jewelry backgrounds
Scene Presets
Complete setups with HDRI, background, ground & tonemapping — one click
Stage
Professional platforms, display stands, ring boxes, cone stands, snow globes
Compute Stable Pose — ring lying flat, standing, or custom angle
Export
Quick image & video export — PNG, JPEG, WebP, MP4 up to 4K
Batch Render
Render multiple outputs at once for batch production
Embed
Generate embed code for your website or e-commerce platform
Branding Settings
Logo, watermark, and brand customization for embeds
Advanced Settings
Environment rotation, intensity, SSBevel shortcut
TryOn
Virtual try-on for rings using AR camera
---
## Left Panel — Material Library
When you **select an object** on the canvas, a set of material category icons appears at the top of the left panel. This is the **Material Library** — an extensive collection of ready-to-use materials organized by category.

Simply click any material to apply it instantly to the selected object.
How it works
Click any object on the canvas → material category icons appear at the top of the left panel → browse and click to apply materials instantly.
Metals
Gold, white gold, rose gold, silver, platinum, antique finishes, enamel, and more
Beautiful pearl presets with realistic iridescence and luster
Other Materials
Turquoise, malachite, lapis lazuli, jasper, carbon, coral, enamel, fabric, leather, marble, wood, and more
Free vs Premium vs Advance
Free
Gems & Materials Basic, Gems Inclusions Basic
Premium
Gems & Materials Extended, Gems Inclusions Basic
Advance
Gems & Materials All, Gems Inclusions All
Materials marked with a 💎 icon require a Premium or Advance plan. See pricing details.
---
## Right Panel — Professional Tools
The right panel contains **every setting available** in Playground, organized into tabs. The icons are arranged vertically on the far right side of the screen.

Viewer
Renderer quality & scale, Camera & Field of View, Drop Options
Picking
Hierarchy, Material Library, Diamonds, Transform Controls, Picker, UV Unwrapping, Widgets
KHR Material Variants, Material Configurator, Switch Node
Plugins
Full Screen, Loading Screen, Model Stage, Rhino 3dm Loader, CSS3D Renderer & more
Extras
Virtual Cameras, Rainbow Diamond Coloring, Snow Fall Particles, Wave Ground
---
## Image Input Menu
Many settings across the right panel use image inputs — for textures, background images, environment maps, and more. When an image is loaded in any of these inputs, clicking on the image thumbnail opens a context menu with the following options:

Remove Image
Delete the current image from this input
Download Image
Save the current image to your computer
Set/Replace Image
Upload a new image from your computer to replace the current one
From URL
Load an image from a web URL
Cancel
Close the menu without making changes
---
## What's Next?
Now that you know where everything is, here are the recommended next steps:
- **[Quick Start](./quick-start)** — Set up your first scene in minutes
- **[Importing Your First Model](./import-first-model)** — Learn how to bring your 3D designs into Playground
- **[Renderer Settings](./renderer-settings)** — Improve your render quality
- **[Export Images](./export-images)** — Save high-resolution renders
- **[Export Videos](./export-videos)** — Create turntable and camera animations
---
# Importing
Playground supports importing 3D models, custom materials, and scene settings. Drag & drop files directly onto the canvas or use the import panels to bring your content into the scene.
---
# Importing 3D Models
iJewel Playground supports all popular 3D formats, making it easy to bring your jewelry designs into an interactive, real-time environment.
## Supported File Formats
::: tip Recommended Format for Jewelry
For **jewelry workflows**, the **3DM format** is highly recommended. It supports layers, which Playground reads automatically — based on standard naming conventions, default materials are applied instantly, letting you view your jewelry in a photorealistic way right from the start.
:::
::: warning STL Limitations
**STL format** does not support materials, making it unsuitable unless your model uses only a single material. Additionally, STL files often have unsmoothed normals, which can reduce the visual quality of jewelry models.
:::
---
## Import Methods
You can import files into Playground in two ways:
### 1. Drag & Drop
Drag your file(s) directly into the **Main Canvas Area**. When you first open Playground, the welcome screen provides a clear drop zone:
### 2. Browse & Select
Click the **Import File** button in the toolbar to open a file dialog and select the file(s) from your computer.
::: tip
- You can **drag & drop multiple files** at once to import them together.
- Drop a **folder or zipped folder** with multiple 3D files — Playground will automatically process its contents (including subfolders).
- For **OBJ + MTL** files, make sure both are dropped together to correctly apply material data.
:::
---
## Drop Options
Before importing, you can configure how models are placed in the scene. These settings are located in **Viewer → Drop Options**.
Auto Scale
Automatically adjusts the model's proportions (defined by Auto Radius) to fit the scene.
Auto Radius
Defines the radius by which the model proportions will be scaled.
Auto Center
Ensures the model is positioned at the exact center of the canvas.
::: tip
Keep **Auto Scale + Auto Center** turned **ON** when importing single models. This ensures that even off-center or incorrectly scaled models are normalized for an optimal starting view.
:::
Turn **OFF** Auto Scale / Auto Center if you want to preserve the original **size** and **relative position** of your models. For example, if you import two separate files (e.g., the **shank** and the **head** of a ring), enabling Auto Scale / Auto Center may rescale or reposition them incorrectly, resulting in misalignment.
✅ Auto Scale OFF — correct alignment
❌ Auto Scale ON — misalignment
---
## Sample Models
Playground provides a few built-in **sample models** for quick testing. Perfect for exploring workflows before importing your own designs.
See the [Quick Start](./quick-start) guide for more details.
---
## Import Options for Jewelry
Once a jewelry model is imported, Playground will prompt you with a few options to help you get started faster.
### 1. Default Materials
Based on the **layer/material names** assigned in the imported file, Playground will attempt to assign default materials automatically. Click **Yes** to apply the suggested materials.
::: info Default Material Mapping
- `Metal 01`, `Metal 02`, ... → Assigned default **Metal** materials
- `Gem 01`, `Gem 02`, ... → Assigned default **Gem** materials
:::
---
### 2. HDR Map for Gem/Metal
If a model has both **gem/diamond** and **metal** materials, Playground will prompt you to apply a **separate HDR environment map** for each category.
::: tip Recommendation
It is generally recommended to use a **separate HDR environment map** for gems/diamonds and metals. This allows finer control over the look and realism of your jewelry.
:::
---
### 3. Default Material Configurator
If default layers are assigned for **metals** and/or **gems/diamonds**, Playground will prompt you to create a **material configurator** — enabling interactive switching of gem and metal materials in the embedded viewer.
::: tip Editing Configurator
The default configurator can be **edited later** if you wish to change materials or modify the configurator settings. See [Material Configurator](./material-configurator) for details.
:::
::: info
These **Import Options** appear as pop-up prompts immediately after adding a new model, before it is fully loaded into the **Scene Hierarchy**.
:::
---
## Related Pages
- **[Import Materials](./import-materials)** — Load saved PBR and diamond material presets
- **[Import Scene Settings](./import-scene-settings)** — Apply complete scene configurations
- **[FAQ: Importing Models](./faq-import)** — Common questions about importing
---
# Import Materials
iJewel Playground allows you to import your own custom materials and use them alongside the built-in material library. The supported formats are **`.pmat`** (PBR Material) and **`.dmat`** (Diamond Material).
## Supported Formats
| Format | Description |
|---|---|
| `.pmat` | PBR material file — used for metals, ceramics, pearls, etc. |
| `.dmat` | Diamond material file — used for diamonds and other gemstones |

## Two Ways to Import Materials
There are two ways to add a custom material in Playground: **apply directly to an object** or **add to the material library** for reuse across projects.
---
### Method 1 — Apply Directly to an Object
Use this method when you want to quickly apply a material to a specific object without saving it to the library.
1. **[Select an object](./ui-overview#selecting-objects)** on the canvas
2. **Drag and drop** your `.pmat` or `.dmat` file onto the 3D canvas
3. A popup will appear asking: **"Apply material to the selected object?"** — click **Yes** or **No**

4. A second popup will appear asking: **"Apply to all objects using this material?"** — click **Yes** or **No**

::: tip Selective Material Application
These two popups give you precise control over where the material is applied. By answering **Yes** to the first and **No** to the second, you can apply the material **only to the selected object** — even if other objects in the scene share the same original material. This effectively separates the material, allowing different objects to have different looks.
:::
---
### Method 2 — Add to Material Library
Use this method when you want to save a material for reuse across multiple projects. Once added, the material stays in your library and is available anytime.
1. **[Select an object](./ui-overview#selecting-objects)** on the canvas — this opens the material library in the left panel
2. Navigate to the appropriate material category (Metals, Gems, Ceramics, Pearls, or Other)
3. Click the **circle with a plus icon** at the very beginning of the material list
4. Choose the `.pmat` or `.dmat` file you want to upload
5. The material will appear in the library with an **automatically generated preview** thumbnail

To apply the material, simply **click on its icon** in the library — it will be applied to the currently selected object. To remove a material from the library, click the **cross icon** at the top-right corner of its thumbnail.
::: tip
Materials added to the library are persistent — you can use them in other projects without needing to import them again.
:::
::: warning Premium & Advance
Saving custom materials to the library requires a paid plan. **Premium** allows up to **5 saved materials**, and **Advance** allows up to **100**. See [pricing details](https://ijewel.design/pricing) for more information.
:::
---
## Related Pages
- **[UI Overview](./ui-overview)** — Learn about the interface layout, panels, and navigation
- **[Importing 3D Models](./import-models)** — How to bring your 3D designs into Playground
- **[UI Overview — Material Library](./ui-overview#left-panel-—-material-library)** — Browse the built-in material categories
- **[UI Overview — Material Configurator](./ui-overview#material-configurator-canvas)** — Create interactive material switching for your clients
- **[Import Scene Settings](./import-scene-settings)** — Import `.vjson` and `.json` scene configuration files
- **[Export Models](./export-models)** — Export your scene as `.glb`, including materials and settings
- **[Export Materials](./export-materials)** — Export `.pmat` and `.dmat` material files
- **[Export Scene Settings](./export-scene-settings)** — Export `.vjson` and `.json` scene configuration files
---
# Import Scene Settings
iJewel Playground allows you to import scene settings files to quickly apply preconfigured environments, lighting, post-processing, and more. This is especially useful when you want to reuse a look you've already perfected or share setups between projects.
## Supported Formats
| Format | Description |
|---|---|
| `.vjson` | Complete scene configuration — contains all settings: HDR maps, background, ground, post-processing, tonemapping, camera, and more |
| `.json` | Partial settings — contains only specific settings, for example only ground or only tonemapping |

::: info What's inside a .vjson file?
A `.vjson` file is a full snapshot of your scene configuration. It includes everything: environment HDR maps, background color/gradient, ground settings, light positions, post-processing effects (bloom, SSAO, SSR, etc.), tonemapping, anti-aliasing, and camera parameters. Importing one instantly recreates the entire look of a scene.
:::
---
## Two Ways to Import Settings
There are two ways to use settings files: **apply directly to the current scene** or **save to the preset library** for reuse.
---
### Method 1 — Apply Directly to the Current Scene
Use this method when you want to quickly load settings into your active scene.
1. Open your project in Playground
2. **Drag and drop** your `.vjson` or `.json` file onto the 3D canvas
3. The settings are **applied immediately** — you will see the scene update in real-time
::: tip
This is the fastest way to switch between different scene looks. Just drag a different `.vjson` file to instantly change the entire atmosphere of your scene.
:::
---
### Method 2 — Save to Scene Presets Library
Use this method when you want to save a `.vjson` file for reuse across multiple projects. Once added, the preset stays in your library and is available anytime.
1. Open the [left panel](./ui-overview#left-panel-—-presets-quick-settings) and go to the **Scene Presets** tab:
Scene Presets
2. Click the **square with a plus icon** at the beginning of the preset list
3. Select the `.vjson` file you want to upload
4. The preset will be added to the library with an **automatically generated preview** of the scene settings
5. To apply the preset, simply **click on its icon**
6. To remove a preset from the library, click the **cross icon** at the top-right corner of its thumbnail

::: warning Premium & Advance
Saving presets to the library requires a paid plan. **Premium** allows up to **5 saved presets**, and **Advance** allows up to **100**. See [pricing details](https://ijewel.design/pricing) for more information.
:::
---
## .vjson vs .json — When to Use Which
| | `.vjson` | `.json` |
|---|---|---|
| **Scope** | All scene settings at once | Only specific settings |
| **Use case** | Recreate an entire scene look | Adjust one aspect (e.g., ground only) |
| **Example** | Full studio setup with HDR, lighting, ground, post-processing | Just the tonemapping or just the ground shadow |
| **Library** | Can be saved to Scene Presets | Ground `.json` can be saved to Ground tab; other `.json` — drag & drop only |
::: tip Ground Presets
A `.json` file with ground settings can also be saved to the library — use the Ground tab on the left panel and click the plus icon, just like with Scene Presets. Other partial `.json` files (tonemapping, etc.) can only be applied via drag & drop.
:::

---
## Related Pages
- **[UI Overview](./ui-overview)** — Learn about the interface layout and panels
- **[UI Overview — Left Panel](./ui-overview#left-panel-—-presets-quick-settings)** — Scene Presets and other quick settings
- **[Import Materials](./import-materials)** — Import custom `.pmat` and `.dmat` files
- **[Importing 3D Models](./import-models)** — Bring your 3D designs into Playground
- **[Renderer Settings](./renderer-settings)** — Configure render quality and scale
- **[Export Models](./export-models)** — Export your scene as `.glb`, including settings
- **[Export Scene Settings](./export-scene-settings)** — Export `.vjson` and `.json` scene configuration files
---
# Coming Soon...
---
# Exporting
Everything you create in Playground can be exported. Download 3D models, save custom materials for reuse, back up your scene settings, render high-resolution images and videos, or share an interactive 3D viewer link with your clients.
---
## 3D
Export your full scene as a file.
---
# Export Models
iJewel Playground allows you to export your scene as a **GLB** file — a compact binary format that packages 3D geometry, materials, textures, and optionally scene settings into a single file. There are three ways to export, depending on how much control you need.
## Export Format
| Format | Description |
|---|---|
| `.glb` | Binary glTF — contains all objects, materials, textures, and optionally scene settings in one file |
---
## Three Ways to Export
---
### Method 1 — Quick Export (Canvas Toolbar)
The fastest way to export. Click the Export GLB button on the [canvas toolbar](./ui-overview#canvas-toolbar) — this immediately downloads your scene as a `.glb` file with current settings.

---
### Method 2 — Left Panel Export
For a quick export with the option to enable compression:
1. Open the Export tab on the [left panel](./ui-overview#left-panel-—-presets-quick-settings)
2. Enable **Compress** if you want to reduce the file size (uses DRACO compression)
3. Click **Download .glb**

::: tip
Use the left panel export when you need a smaller file for web embedding or sharing. DRACO compression significantly reduces file size with minimal quality loss.
:::
---
### Method 3 — Right Panel (Advanced Export)
For full control over what's included in the exported file, use the **Asset Export** section on the [right panel](./ui-overview#right-panel-—-professional-tools):
1. Open the Export tab on the right panel
2. Go to the **Asset Export → GLB Export** section
3. Enter a **file name** at the top
4. Configure export options (see below)
5. Click **Export GLB**

#### Export Options
DRACO Compress
Applies DRACO compression to reduce file size. Useful for web delivery and embedding.
Scene Settings
Include all scene configuration (HDR, background, ground, post-processing, etc.) in the exported file. Disable if you only need the 3D geometry and materials.
Embed Image Previews
Embeds preview images of materials and scene inside the GLB file.
Only Visible
Exports only objects that are currently visible in the Hierarchy. Hidden objects are excluded from the file. This is useful for splitting one scene into multiple files — hide/show different parts and export separately.
Encrypt
Protects the file with a password. When enabled, a password input field appears. This password will be required every time someone tries to load the file.
Compress HDR env maps
Compresses the HDR environment maps included in the file to reduce overall size.
Convert to indexed
Converts geometry to indexed format for better performance and smaller file size.
Ignore invalid animations
Skips any animations that may cause export errors, ensuring a clean export.
Protecting Your Designs
Jewelry designs are often unique and commercially valuable. The Encrypt option lets you protect your GLB files with a password — anyone trying to open the file will need to enter it first. This adds an extra layer of security when sharing files with clients, manufacturers, or partners.
::: tip Splitting a Scene into Multiple Files
Use the **Only Visible** option together with the [Hierarchy](./picking) to export parts of your scene separately. For example, hide everything except the ring band, export it, then hide the band and show the gemstone, and export again. This gives you individual GLB files for each component.
:::
---
## Related Pages
- **[UI Overview](./ui-overview)** — Interface layout, toolbar, and panels
- **[UI Overview — Canvas Toolbar](./ui-overview#canvas-toolbar)** — Quick export button location
- **[Importing 3D Models](./import-models)** — Bring your 3D designs into Playground
- **[Import Materials](./import-materials)** — Import custom `.pmat` and `.dmat` files
- **[Import Scene Settings](./import-scene-settings)** — Import `.vjson` and `.json` scene files
- **[Export Images](./export-images)** — Save high-resolution renders as PNG, JPEG, or WebP
- **[Export Videos](./export-videos)** — Create turntable and camera animation videos
---
# Export Materials
iJewel Playground allows you to export custom materials as standalone files. This is useful for backing up your material settings, sharing them with colleagues, or reusing them in other projects.
## Export Formats
| Format | Description |
|---|---|
| `.pmat` | PBR material file — for metals, ceramics, pearls, etc. |
| `.dmat` | Diamond material file — for diamonds and other gemstones |
---
## Exporting a PBR Material (.pmat)
To export a physical material:
1. **[Select the object](./ui-overview#selecting-objects)** that has the material you want to export
2. Open the Picking tab on the [right panel](./ui-overview#right-panel-—-professional-tools)
3. In the **Picker** section, find the **Physical Material** settings
4. Scroll down to the bottom
5. Click **Download .pmat**
---
## Exporting a Diamond Material (.dmat)
To export a diamond material:
1. **[Select the object](./ui-overview#selecting-objects)** that has the diamond material
2. Open the Picking tab on the [right panel](./ui-overview#right-panel-—-professional-tools)
3. In the **Picker** section, find the **Diamond Material** settings
4. Scroll down to the bottom
5. Click **Download .dmat**
---
## Related Pages
- **[Import Materials](./import-materials)** — Import `.pmat` and `.dmat` files back into Playground
- **[UI Overview](./ui-overview)** — Interface layout, panels, and navigation
- **[Export Models](./export-models)** — Export your full scene as a `.glb` file
- **[Export Scene Settings](./export-scene-settings)** — Export `.vjson` and `.json` scene configuration files
- **[Custom PBR Materials](./coming-soon)** — Create your own PBR materials from scratch
- **[Custom Diamond Materials](./coming-soon)** — Create your own diamond materials
---
# Export Scene Settings
iJewel Playground allows you to export your scene settings as standalone files. This is useful for backing up your scene look, transferring configurations between projects, or sharing presets with colleagues.
## Export Formats
| Format | Description |
|---|---|
| `.vjson` | Complete scene configuration — all settings: HDR maps, background, ground, post-processing, tonemapping, material configurators, and more |
| `.json` | Individual setting — only a specific plugin or parameter (e.g., ground, tonemapping, camera) |
---
## Exporting All Scene Settings (.vjson)
There are two ways to export a complete `.vjson` file with all your scene settings.
### Method 1 — Left Panel (Quick Export)
The fastest way to export all scene settings:
1. Open the Export tab on the [left panel](./ui-overview#left-panel-—-presets-quick-settings)
2. Find the **Scene Settings** section
3. Click **Download VJSON**
This saves all settings currently applied in your scene — background, ground, shadows, tonemapping, post-processing, material configurators, and everything else — as a single `.vjson` file.

---
### Method 2 — Right Panel (Advanced Export)
For more control over exactly what to include in the exported file:
1. Open the Export tab on the [right panel](./ui-overview#right-panel-—-professional-tools)
2. Go to the **Asset Export** section
3. Open **Preset Config Export**
4. Click **Plugins** to see the full list of what can be included or excluded

Here you can individually toggle which settings to include in the `.vjson` export. For example, you can exclude material configurators, remove a specific HDR map, or keep only the post-processing settings — giving you full control over what goes into the file.
#### Quick Actions
Select None
Deselect all plugins — start from scratch and manually pick only what you need
Select All
Select all plugins — export everything
Export Plugins
Export only the currently selected plugins as a `.vjson` file
Export All Viewer Config Editor
Export the complete viewer configuration including all settings and plugins

---
## Exporting Individual Settings (.json)
You can also export a single setting as a `.json` file — for example, only the ground preset, only the tonemapping, or only the camera settings. This is useful when you want to transfer one specific aspect of your scene to another project.
1. On the right panel, navigate to the tab that contains the setting you want to export (e.g., Scene for ground settings, or Post Processing for effects)
2. Find the specific setting (e.g., Ground, Tonemapping, SSR, etc.)
3. Click the **three dots** (⋮) next to the setting name
4. Select **Download preset** from the menu
5. The `.json` file with that specific setting will be downloaded
### What can be exported as individual .json?
You can export presets for almost any setting in the right panel, including:
- **Scene:** Ground, Progressive Shadow, Background
- **Post Processing:** Screen Space Reflection (SSR), Tonemapping, Bloom, Depth of Field, SSAO, SSBevel, Vignette
- **Viewer:** Renderer settings, Camera settings
- **Anti-aliasing:** TAA, Progressive AA
::: tip
Individual `.json` presets can be imported back by drag & drop onto the canvas. Ground `.json` files can also be [saved to the library](./import-scene-settings#method-2-—-save-to-scene-presets-library) for quick reuse.
:::
---
## Related Pages
- **[Import Scene Settings](./import-scene-settings)** — Import `.vjson` and `.json` files back into Playground
- **[UI Overview](./ui-overview)** — Interface layout and panels
- **[Export Models](./export-models)** — Export your scene as a `.glb` file
- **[Export Materials](./export-materials)** — Export `.pmat` and `.dmat` material files
- **[Renderer Settings](./renderer-settings)** — Configure render quality and scale
---
# Export Images
iJewel Playground makes it easy to save high-resolution images of your jewelry renders in multiple formats. There are two ways to export images — a quick method and an advanced method.
## Quick Export (Camera Icon)
The fastest way to capture an image is using the **camera icon** in the floating Quick Actions panel on the canvas.
- Click the **camera icon** to instantly save a **PNG** snapshot of your current view.
::: tip
This is perfect for quick captures during your design process. The image is saved at the current canvas resolution — make sure to adjust your [Renderer Settings](./renderer-settings.md) first if you need higher quality.
:::
## Advanced Export (Export Tab)
For more control over format, resolution, and file naming, use the **Export Tab** in the Editor UI Panel.
### Steps
1. Open the **Export** tab in the right-side Editor UI Panel.
2. Choose your desired format:
- **PNG** — Lossless quality, supports transparency. Best for product images.
- **JPEG** — Smaller file size, no transparency. Good for web and social media.
- **WEBP** — Modern format with excellent compression. Ideal for websites and e-commerce.
3. Enter a **file name** for your export.
4. Click **Download**.
## Export from the Left Menu
You can also export images from the **left-side Presets Panel**:
1. Set the desired **width** and **height** for your output resolution.
2. Select the output **format** (PNG, JPEG, or WEBP).
3. Click **Download**.
::: tip Higher Quality Exports
For the best quality exports, increase the **width and height** values before downloading. This produces sharper images suitable for print, catalogs, or high-DPI displays.
:::
## Transparent Background
To export an image with a transparent background (PNG format only), you need to configure several settings before exporting:
1. Go to [Background / Environment](./background-environment) and set the **Background Color** alpha channel to `0` (fully transparent)
2. Go to [Ground](./ground) and uncheck **Visible** to hide the ground plane
3. Disable [Progressive Shadow](./progressive-shadow) if it is enabled
4. Choose **PNG** as the export format (JPEG and WEBP do not support transparency)
5. Export the image
::: tip
This is especially useful for e-commerce product listings and marketing materials where you need the jewelry on a clean, transparent background that can be composited onto any backdrop.
:::
---
## Recommended Settings by Use Case
| Use Case | Format | Suggested Resolution |
|---|---|---|
| E-commerce product listing | PNG or WEBP | 1000×1000 px or higher |
| Social media | JPEG or WEBP | 1080×1080 px |
| Print catalog | PNG | 2000×2000 px or higher |
| Website banner | WEBP | 1920×600 px |
---
# Export Videos
iJewel Playground allows you to record and export videos of your jewelry models — perfect for product showcases, social media, and e-commerce listings. You can create turntable animations, camera path recordings, and 360° spins.
## Turntable Video (Left Menu)
The left-side Presets Panel provides a quick way to export turntable videos.
### Steps
1. Set the **resolution** (width and height) for your video output.
2. Configure the **FPS** (frames per second) — higher FPS results in smoother playback.
3. Set the **duration** of the video.
4. Click **Download**.
The rendering process will begin, indicated by a **red border on the canvas**.
::: warning
Keep the browser tab open until the rendering process is complete. Closing or switching away from the tab may interrupt the export.
:::
## Advanced Recording (Right Panel)
The **Export** section in the right-side Editor UI Panel offers multiple recording modes for different types of video output.
### Recording Modes
| Mode | Description |
|---|---|
| **Standard Recording** | Records whatever is happening on the canvas in real time — ideal for custom interactions and walkthroughs. |
| **Camera Views** | Records a sequence based on your saved camera view positions. |
| **360° Animation** | Automatically rotates the model clockwise for a full 360° turntable video. |
| **360° Animation (CCW)** | Same as above, but rotates counterclockwise. |
### Steps
1. Open the **Export** tab in the Editor UI Panel.
2. Select your desired **recording mode**.
3. Customize your settings:
- **Resolution** — Output width and height in pixels.
- **FPS** — Frames per second (24 or 30 recommended for smooth playback).
- **Duration** — Length of the video in seconds.
4. Click **Record**.
5. Wait for the recording to finish — a **red indicator** will appear on the canvas during the process.
::: tip
For e-commerce and social media, a **360° animation** at 5–10 seconds duration with 30 FPS is a great starting point. It gives customers a complete view of the product in a short, engaging clip.
:::
::: tip Video file too large?
See [Reducing the Video File Size](#reducing-the-video-file-size) below - a few settings can shrink a 33 MB export to under 1 MB.
:::
## Recommended Settings by Use Case
| Use Case | Mode | FPS | Duration |
|---|---|---|---|
| Product listing | 360° Animation | 30 | 5–8 sec |
| Social media reel | 360° Animation | 30 | 5–15 sec |
| Client presentation | Camera Views | 24–30 | 10–20 sec |
| Custom walkthrough | Standard Recording | 30 | As needed |
## Reducing the Video File Size
Is your exported video too large? The compression settings are located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Export tab: set **Mime type** to *MP4 Video (ffmpeg)* and expand **FFmpeg Options (Advanced)** - highlighted below.
The two settings that matter for file size are **crf** and **preset**. Raise the crf (higher = smaller file) and set the preset to `veryfast` - this alone can shrink a 30+ MB export to a fraction of its size.
Pick your goal:
| Goal | Settings | Approx. size (10-sec video) |
|---|---|---|
| Best quality (larger file) | crf `18`, preset `veryfast` | ~4.5 MB |
| Balanced (recommended for web) | crf `23`, preset `veryfast` | ~2 MB |
| Smallest file | crf `28`, preset `veryfast` | ~1 MB |
Exact sizes vary with the scene, the resolution, and the duration. If the file is still too large, keep raising the crf (it goes up to `51`) and lower the export resolution.
What each option does:
| Option | What it does |
|---|---|
| **imageType** | The format of the frames captured from the canvas before they are encoded into the video (`jpeg`, `png`, or `webp`). |
| **bitrate** | A fixed target for the amount of data per second of video. When active, it makes the output size predictable. |
| **crf** | Constant Rate Factor, the quality control. Lower values give better quality, higher values give stronger compression. Range `0`–`51`. |
| **pixFmt** | The pixel format of the encoded video. `yuv420p` is compatible with all common browsers and players. |
| **preset** | The encoding speed vs. compression trade-off. Faster presets encode quicker but compress less thoroughly. |
| **colorTrc** / **colorSpace** | Color metadata written into the video, so the exported colors match what you see in the viewer. |
Every scene is different, so feel free to play around: export a short test clip, check the size and quality, and adjust the crf up or down until you are happy with the result.
---
# Scene Basics
A scene in iJewel Playground consists of your 3D model together with everything that defines how it looks — background, lighting, ground, shadows, camera, and materials. Understanding these building blocks helps you create professional jewelry visualizations.
## What Makes Up a Scene
Every scene has three core components:
**3D Objects** — your imported jewelry model, organized as a [hierarchy](./hierarchy) of mesh nodes (containing actual geometry) and transform nodes (containing position, rotation, scale). Multiple meshes can share the same material, and objects can be nested inside parent groups.
**Materials** — define the visual appearance of each object. By default, Playground assigns a Physical (PBR) Material for realistic rendering. You can convert objects to Diamond Material for gemstones. See [Picking → Physical Material](./picking#physical-material) and [Picking → Diamond Material](./picking#diamond-material).
**Scene Settings** — everything else: background color, environment maps, ground, shadows, post-processing, lighting, and camera configuration. These are managed primarily through the Scene tab on the right panel.
---
## Scene Tab Sections
The Scene tab on the right panel contains the following sections:
Background / Environment
Background color, environment maps (HDRI), and intensity settings. Read more →
Progressive Shadow
Soft, progressively refined shadows beneath the model
Ground
Ground plane visibility, reflections, and shadow settings
Scene
General scene settings and configuration
Gradient SVG
Custom gradient backgrounds using SVG
Lights
Add and configure directional, spot, and point lights in the scene
Cameras (Loaded)
Camera presets loaded from the model file
HDRi Ground
Use the HDRI environment map as a projected ground plane
Generate Geometry
Create simple primitive shapes (spheres, cubes, planes) directly in the scene
Scene settings like Background / Environment, Progressive Shadow, and Ground are documented separately under the **[Scene Settings](./scene-settings)** section in the sidebar.
---
# Scene Basics
A scene in iJewel Playground consists of your 3D model together with everything that defines how it looks — background, lighting, ground, shadows, camera, and materials. Understanding these building blocks helps you create professional jewelry visualizations.
## What Makes Up a Scene
Every scene has three core components:
**3D Objects** — your imported jewelry model, organized as a [hierarchy](./hierarchy) of mesh nodes (containing actual geometry) and transform nodes (containing position, rotation, scale). Multiple meshes can share the same material, and objects can be nested inside parent groups.
**Materials** — define the visual appearance of each object. By default, Playground assigns a Physical (PBR) Material for realistic rendering. You can convert objects to Diamond Material for gemstones. See [Picking → Physical Material](./picking#physical-material) and [Picking → Diamond Material](./picking#diamond-material).
**Scene Settings** — everything else: background color, environment maps, ground, shadows, post-processing, lighting, and camera configuration. These are managed primarily through the Scene tab on the right panel.
---
## Scene Tab Sections
The Scene tab on the right panel contains the following sections:
Background / Environment
Background color, environment maps (HDRI), and intensity settings. Read more →
Progressive Shadow
Soft, progressively refined shadows beneath the model
Ground
Ground plane visibility, reflections, and shadow settings
Scene
General scene settings and configuration
Gradient SVG
Custom gradient backgrounds using SVG
Lights
Add and configure directional, spot, and point lights in the scene
Cameras (Loaded)
Camera presets loaded from the model file
HDRi Ground
Use the HDRI environment map as a projected ground plane
Generate Geometry
Create simple primitive shapes (spheres, cubes, planes) directly in the scene
Scene settings like Background / Environment, Progressive Shadow, and Ground are documented separately under the **[Scene Settings](./scene-settings)** section in the sidebar.
---
# Renderer Settings
The Renderer Settings control the rendering quality and resolution of the 3D viewport, as well as the output quality for exported images and videos. Adjusting these settings lets you balance between real-time performance while designing and maximum quality for final renders.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Viewer tab, in the **Renderer** section at the top.

---
## Settings
Mode
Dropdown — controls the rendering mode for the viewport. Full enables all effects for the highest quality preview and exports
Scale
Slider — resolution multiplier for the 3D canvas (default: 1.000). Increasing the value enhances both the real-time viewing quality and the resolution of exported images and videos. Higher values produce sharper, more detailed renders — ideal for close-up jewelry shots where every facet matters
Custom Canvas Size
Set exact canvas dimensions (width × height in pixels). Useful when you need renders at specific dimensions — square images for e-commerce listings, wide formats for banners, or standard resolutions like 1920×1080
::: warning Performance Note
Higher scale values require more GPU processing power. If you experience lag during real-time viewing, keep the scale at `1.000` while working and increase it only before exporting.
:::
---
## Recommended Workflow
**While designing** — you can set the scale to `2.000` on most desktop computers — modern browsers handle it well. On lower-end devices, keep it at `1.000` for smooth performance.
**Before exporting** — increase the scale to `3.000` or `4.000` for the sharpest results. On lower-end devices, `2.000` is a good minimum. If you're unsure about your device's capabilities, start with `1.000` and increase gradually.
**Export** — use the [Export Images](./export-images) or [Export Videos](./export-videos) features to download your high-resolution renders.
---
## Related Pages
- **[Scene Basics](./scene)** — Overview of all scene components
- **[Export Images](./export-images)** — Export high-resolution renders
- **[Export Videos](./export-videos)** — Export animated video renders
- **[UI Overview](./ui-overview)** — Full interface layout including panels
---
# Scene Hierarchy
The Scene Hierarchy gives you a complete overview of every 3D object in your scene. It displays the parent-child structure of your model, lets you select individual objects by name, and allows you to hide or show any object — which is especially useful when working with complex jewelry assemblies.
## Where to Find It
The Hierarchy is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Picking tab. It is the first section you see when you open this tab.
Click on the **Hierarchy** section header to expand the full tree view of your scene.

---
## Selecting Objects
Clicking on an **object name** in the hierarchy selects that object in the scene. The selected object will be highlighted in the 3D viewport, and its properties will become available for editing.
This is particularly useful when:
- An object is **hard to click** in the viewport because it's small or hidden behind other objects
- You need to select a **parent group** rather than an individual mesh
- You want to quickly navigate between different parts of a complex model
::: tip
You can also select objects by clicking directly on them in the 3D viewport. See [Selecting Objects](./ui-overview#selecting-objects) for more details.
:::
---
## Hiding and Showing Objects
Each object in the hierarchy has a **checkbox** next to its name. Toggling this checkbox controls the object's visibility:
- **Checked** — the object is visible in the scene
- **Unchecked** — the object is hidden from the scene
Click on name
Select the object — it gets highlighted in the viewport and its properties become editable
Toggle checkbox
Show or hide the object in the scene — hidden objects disappear from the viewport
Toggle parent
Hiding a parent object also hides all of its children at once
---
## Practical Use Cases
### Exporting Without Certain Objects
Hiding objects in the hierarchy directly affects what gets included when you [export your model](./export-models). Combined with the **Only Visible** export option, you can:
1. Hide the objects you don't want to export (e.g., hide all stones, keep only the band)
2. Go to export and enable **Only Visible**
3. The exported `.glb` file will only contain the visible objects
This is a powerful way to split a complex scene into separate files or to create variations of the same model without duplicating the original.
::: tip
Use **Only Visible** together with **Hierarchy** to control exactly which parts end up in the exported file. See [Export Models — Splitting Scenes](./export-models) for more details.
:::
### Working with Transform Controls
After selecting an object through the hierarchy, you can use [Transform Controls](./transform-controls) to move, rotate, or scale it directly in the viewport. This is especially useful for repositioning individual stones or adjusting specific parts of an assembly.
### Debugging Material Assignments
Selecting an object in the hierarchy helps you see exactly which material is applied to it. This is useful when you need to change materials on a specific part of the model — for example, applying a different metal only to the prongs while keeping the band unchanged. You can also [import custom materials](./import-materials) (`.pmat` and `.dmat` files) and apply them to selected objects by drag & drop.
---
## Related Pages
- **[UI Overview](./ui-overview)** — Full interface layout including the right panel
- **[Selecting Objects](./ui-overview#selecting-objects)** — Different ways to select objects in the viewport
- **[Export Models](./export-models)** — Export your scene as `.glb`, including visibility-based filtering
- **[Transform Controls](./transform-controls)** — Move, rotate, and scale objects in the scene
- **[Import Models](./import-models)** — How to bring 3D models into Playground
---
# Picking
The Picking tab is your main workspace for interacting with individual objects in the scene. When you select an object — either by clicking on it in the viewport or through the [Scene Hierarchy](./hierarchy) — the Picking tab shows everything related to that object: its name, visibility, transform properties, material, and more.
## Where to Find It
The Picking tab is located on the [right panel](./ui-overview#right-panel-—-professional-tools). Click the Picking icon to open it.

The tab contains the following sections:
Hierarchy
Tree view of all objects in the scene — select and hide objects. Read more →
HDRI environment map for diamonds, Environment Rotation, and support for multiple HDRI maps per scene
Transform Controls
Move, rotate, and scale objects directly in the viewport. Read more →
Picker
All properties of the currently selected object — name, visibility, transform, material, and more
UV Unwrapping (xAtlas)
View and edit UV coordinates for texture mapping
Widgets
Additional visual helpers and interactive controls
---
## Diamonds
The Diamonds section manages the HDRI environment map used specifically for diamond and gemstone rendering. Diamonds require a separate environment map to produce realistic light dispersion and brilliance effects.
Here you can adjust the **Environment Rotation** to change the angle of light reflections in your diamonds. You can also add a second or third environment map — this is useful when you want different diamonds in the same scene to use different HDRI maps for unique visual results.
The Diamonds section also contains action buttons that change depending on the selected object's current material type:
**When a regular object is selected** (Physical Material):
Make Diamond
Convert the object's material from Physical Material to Diamond Material, enabling diamond-specific rendering with light dispersion and brilliance
Clear Cache
Clear the cached diamond rendering data to force a fresh recalculation
**When a diamond object is selected** (Diamond Material):
Make Standard
Convert the object back from Diamond Material to a regular Physical Material
Auto Instance Diamonds (dev)
Developer utility for automatically instancing diamond objects
Clear Cache
Clear the cached diamond rendering data to force a fresh recalculation

Once converted with Make Diamond, the Picker will display **Diamond Material** instead of Physical Material under the selected mesh, with its own set of properties tailored for gemstone rendering.
::: info
Diamond Material editing will be covered on a dedicated page. See [Diamond Materials](./coming-soon) for more information. You can also [import custom .dmat materials](./import-materials) and [export diamond materials](./export-materials) from your scene.
:::
---
## Picker
The Picker is the core section of the Picking tab. It has two global settings at the top:
Enabled
Checkbox — when enabled, clicking on objects in the canvas selects them. Disable to prevent accidental selection
AutoFocus
Checkbox — when enabled, the camera automatically zooms in on the object when you click on it
When you select an object, a section with the object's name (e.g., **mesh_1**) appears inside the Picker. This section contains all the properties described below.
### Visibility & Navigation
Visible
Checkbox — show or hide the object in the 3D canvas. Same as toggling visibility in the Hierarchy
Pick/Focus
Button — zoom the camera to focus on the selected object
Pick Parent
Button — select the parent object of the current selection in the hierarchy
Name
Text input — the name of the selected object. You can rename it here
### Rendering & Shadow
Casts Shadow
Whether this object casts shadows onto other objects and the ground
Receive Shadow
Whether this object receives shadows from other objects
Frustum culled
Whether the object is culled when outside the camera's view frustum
Render Order
Controls the rendering order — useful for overlapping transparent objects
### Transform
The transform properties let you position, rotate, and scale the selected object numerically. You can type exact values for precise control.
Position
X, Y, Z coordinates — move the object to an exact position in the scene
Rotation
X, Y, Z angles — rotate the object around each axis
Scale
X, Y, Z values — resize the object along each axis
::: tip
For visual, interactive transformations (drag to move/rotate/scale in the viewport), use [Transform Controls](./transform-controls) — also available in the Picking tab.
:::
### Quick Actions
Auto Scale
Automatically scale the object to fit the scene proportionally
Auto Center
Move the object to the center of the scene
Pivot to Node Center
Reset the object's pivot point to the center of its bounding box
### Rotate Model
Quick rotation buttons that rotate the object by **90°** on each axis:
Rotate X +90 / −90
Rotate the object 90° around the X axis
Rotate Y +90 / −90
Rotate the object 90° around the Y axis
Rotate Z +90 / −90
Rotate the object 90° around the Z axis
Useful for quickly reorienting models that were exported in a different coordinate system.
### Geometry
Displays information about the object's geometry, including a unique **uuid** and **name**. Also provides utility actions:
Center Geometry
Move the geometry to center
Center Geometry (keep position)
Center the geometry while keeping the object's world position
Compute vertex normals
Recalculate vertex normals for smooth shading
Compute vertex tangents
Recalculate tangents needed for normal mapping
Normalize normals
Ensure all normals are unit length for correct lighting
Convert to non-indexed
Convert the geometry from indexed to non-indexed format
### Physical Material
The Physical Material section shows the PBR material currently assigned to the selected object. It contains subsections for editing all material properties: color, map, **Rough/Metal**, **Bump/Normal**, **Sheen**, **Clearcoat**, and more.

::: info
Detailed material editing will be covered on a dedicated page. See [PBR Materials](./coming-soon) for more information. You can also [import custom .pmat materials](./import-materials) and [export materials](./export-materials) from your scene.
:::
### Diamond Material
If the selected object is a diamond (converted via [Make Diamond](#diamonds)), this section appears instead of Physical Material. It contains diamond-specific properties for controlling dispersion, brilliance, and other gemstone rendering settings.

::: info
Detailed diamond material editing will be covered on a dedicated page. See [Diamond Materials](./coming-soon) for more information.
:::
### Object Actions
Below the Physical Material section, there are four action buttons for managing the selected object:
Remove Material
Remove the material assigned to this object
Duplicate Object
Create a copy of the selected object in the scene
Wrap in Parent
Create a new parent group and place the selected object inside it
Delete Object
Remove the selected object from the scene entirely
### Physics
Physics simulation settings for the selected object. This section allows you to configure physical behavior for interactive scenes.
### Transform Animation
Settings for animating the object's position, rotation, and scale over time. Used for creating keyframe-based transform animations.
---
## Related Pages
- **[Scene Hierarchy](./hierarchy)** — Browse and manage all objects in the scene tree
- **[UI Overview](./ui-overview)** — Full interface layout including the right panel
- **[Import Materials](./import-materials)** — Import `.pmat` and `.dmat` material files
- **[Export Materials](./export-materials)** — Export materials for reuse in other projects
- **[Transform Controls](./transform-controls)** — Move, rotate, and scale objects visually
- **[PBR Materials](./coming-soon)** — Detailed material editing guide
- **[Diamond Materials](./coming-soon)** — Working with diamond and gemstone materials
---
# Transform Controls
Transform Controls allow you to move, rotate, and scale objects directly in the 3D viewport using interactive gizmos. This is the most visual and intuitive way to reposition objects in your scene.
## Where to Find It
Transform Controls are located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Picking tab, in the **Transform Controls** section.

---
## How to Enable
1. Open the **Picking** tab on the right panel
2. Find the **Transform Controls** section
3. Check the **Enable** checkbox
4. Select any object in the scene
Once enabled and an object is selected, a 3D gizmo with colored arrows will appear on the object in the viewport. You can click and drag these arrows to transform the object.
To disable Transform Controls, simply uncheck the **Enable** checkbox — the gizmo will disappear from the viewport.
---
## Settings
Mode
Choose the transformation type: Translate (move), Rotate, or Scale
Space
World — axes are aligned with the scene. Local — axes are aligned with the object's own orientation
Size
Adjust the size of the gizmo arrows in the viewport — make them bigger or smaller for comfort
Show X
Show or hide the X axis (red arrow)
Show Y
Show or hide the Y axis (green arrow)
Show Z
Show or hide the Z axis (blue arrow)
---
## Keyboard Shortcuts
You can quickly switch between modes and toggle axes using keyboard shortcuts:
Q
Toggle Space between World and Local
W
Switch to Translate mode
E
Switch to Rotate mode
R
Switch to Scale mode
X
Toggle Show X axis on/off
Y
Toggle Show Y axis on/off
Z
Toggle Show Z axis on/off
Ctrl+Z
Undo the last transformation (Cmd+Z on Mac)
---
## Scaling the Entire Object
In **Scale** mode (press `R`), you can scale the object along individual axes by dragging the corresponding arrow. To scale the entire object uniformly, click and drag the **small gray square** in the center of the gizmo — this resizes the object proportionally on all axes at once.
---
## Moving the Entire Object
If you want to move or transform a complete object (not just an individual mesh), you need to select the **root parent** in the hierarchy first:
1. Open the [Scene Hierarchy](./hierarchy)
2. Click on the **parent object name** (the top-level group)
3. The Transform Controls gizmo will now affect the entire object, including all its children
This is a common workflow — for example, when you want to reposition a whole ring assembly rather than just one stone or the band.
---
## Pivot Point
The gizmo appears at the object's **pivot point**. Sometimes, especially with imported models, the pivot may not be centered on the object — it can be at the origin of the scene or at an unexpected location. This makes transformations (especially rotation and scaling) behave unexpectedly.
To fix this, use the **Pivot to Node Center** button in the [Picker](./picking#quick-actions) section. This resets the pivot to the center of the object's bounding box.

::: warning
If you use Pivot to Node Center on a **diamond object**, it may affect the diamond material structure. To fix this, go to the [Diamonds section](./picking#diamonds) and click **Make Standard** to revert the object to a regular material, then click **Make Diamond** again to reapply the diamond material. Alternatively, you can apply any diamond preset from the Material Library on the left panel.
:::
---
## Related Pages
- **[Picking](./picking)** — Full overview of the Picking tab and all its sections
- **[Scene Hierarchy](./hierarchy)** — Select parent objects and manage the scene tree
- **[UI Overview](./ui-overview)** — Full interface layout including the right panel
- **[Export Models](./export-models)** — Export your transformed scene as `.glb`
- **[Import Models](./import-models)** — How to bring 3D models into Playground
---
# Scene Settings
The Scene Settings control everything about the visual environment surrounding your model — background, lighting, ground, shadows, and more. All of these settings are found in the Scene tab on the [right panel](./ui-overview#right-panel-—-professional-tools).

---
## Scene Tab Sections
Background / Environment
Background color, images, HDRI environment maps, intensity and rotation settings. Read more →
Progressive Shadow
Soft directional shadow beneath the model with adjustable focus, spread, color, and direction. Read more →
Ground
Ground plane with shadow, material, and blending options. Can be disabled for floating objects. Read more →
Scene
Contains the Clear Scene button — removes all objects and resets the scene. Same as the Clear Scene button on the toolbar. Use with caution: this action cannot be undone
Gradient SVG
Create custom gradient backgrounds using SVG. Read more →
Lights
Add and configure directional, ambient, point, and spot lights in the scene. Read more →
Cameras (Loaded)
Cameras imported from your 3D software — activate to use custom camera paths and animations. Read more →
HDRi Ground
Use the HDRI environment map as a projected ground plane. Read more →
Generate Geometry
Create simple primitive shapes (spheres, cubes, planes) directly in the scene. Read more →
---
## Related Pages
- **[Scene Basics](./scene)** — Overview of working with 3D objects: hierarchy, picking, transforms
- **[Import Scene Settings](./import-scene-settings)** — Import `.vjson` and `.json` scene configuration files
- **[Export Scene Settings](./export-scene-settings)** — Export your scene settings for backup or sharing
- **[UI Overview](./ui-overview)** — Full interface layout including panels
---
# Background / Environment
The Background / Environment section controls the visual backdrop and lighting environment of your scene. Here you can set a background color, add a background image, load HDRI environment maps for realistic reflections, and adjust intensity and rotation.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab. It is the first section at the top.

---
## Background
### Color
Choose a background color for your scene using the color picker. This color is visible behind your 3D model and in renders.

### Image
Upload a custom background image from your computer. This image will be displayed behind the 3D model instead of the solid color.

### Env Map BG
When enabled, the Environment Map (HDRI) is also used as the background image. This creates a seamless look where the reflections on the model match the visible background.
### Bg Intensity
Controls the brightness of the background. Increase to make the background brighter, decrease to darken it. This only affects the visual background — not the lighting on the model.
---
## Environment Map (HDRI)
The Environment Map is an HDRI image that wraps around the entire scene and provides realistic lighting and reflections on your model. This is the primary light source for PBR materials — metals, ceramics, and pearls all react to the environment map. **Changing the HDRI map dramatically changes how your model looks** — different maps produce completely different reflections, highlights, and overall mood.
You can load a custom HDRI map by uploading it in this section, or choose from the large library of ready-made HDRI presets on the [left panel](./ui-overview#left-panel-—-presets-quick-settings). The library includes many presets specifically optimized for jewelry rendering — the first preset is designed for metals.
::: tip
For creating custom HDRI maps, you can use the [iJewel HDRI Editor](https://editor.hdrmap.com/#) — a dedicated tool for building environment lighting setups from scratch.
:::
---
## Environment Settings
Env Rotation
Rotate the environment map along three axes. Changing the rotation changes where highlights and reflections appear on the model. Also available in Advanced Settings on the left panel
Env Intensity
Controls the brightness of the environment lighting on the model. Reduce to dim the reflections, increase to make them stronger. Also available in Advanced Settings on the left panel
Environment 1
A second environment map slot. Useful when you want different objects in the same scene to use different HDRI maps — for example, a separate environment for pearls
Fixed Env Direction
When enabled, the environment stays fixed while you rotate the model — reflections shift as the model turns. When disabled, the environment rotates together with the model, keeping reflections in the same relative position
::: tip
**Env Rotation** and **Env Intensity** are duplicated in the Advanced Settings on the left panel for quick access. Changing the value in one place updates it in the other automatically.
:::
---
## Video Tutorials
### Tutorial: How to Make Pure White and Transparent Background
### Tutorial: How to Change Background & Ground Color
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[Ground](./ground)** — Ground plane, shadows, material, and blending
- **[Scene Basics](./scene)** — Overview of working with 3D objects
- **[UI Overview](./ui-overview)** — Full interface layout including panels
- **[Import Scene Settings](./import-scene-settings)** — Import `.vjson` and `.json` scene configuration files
- **[Export Scene Settings](./export-scene-settings)** — Export your scene settings for backup or sharing
- **[Renderer Settings](./renderer-settings)** — Configure render quality and scale
---
# Progressive Shadow
Progressive Shadow adds a soft, realistic shadow beneath your model using a directional light. Once enabled, you get full control over the shadow's color, direction, softness, and intensity — making your jewelry renders look more grounded and professional.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab, in the **Progressive Shadow** section.

---
## Enabling Progressive Shadow
Check the **Enable** checkbox to activate the Progressive Shadow. A directional light will be created in the scene, and a shadow will appear beneath your model. Uncheck to disable.
---
## Directional Light Settings
Once enabled, you can configure the directional light that casts the shadow:
### Visibility & Intensity
Visible
Checkbox — show or hide the directional light helper in the viewport
Intensity
Slider — controls the strength of the directional light
Color
Color picker — choose the color of the shadow. Use darker colors for subtle shadows or try colored shadows for creative effects
### Focus & Spread
Focus
Slider — controls how tight the shadow area is. Higher focus produces a more concentrated shadow beneath the model
Spread
Slider — controls the softness of the shadow edges. Higher spread produces a softer, more diffused shadow
Distance Scale
Slider — adjusts the distance of the light from the model
### Direction & Advanced
Direction
Three inputs (X, Y, Z) — set the direction the light comes from. This changes where the shadow falls relative to the model
Radius
Slider — the radius of the shadow map area
First Stone Size
Slider — size of the first shadow cascade step
Bias
Slider — shadow bias to reduce shadow acne artifacts
Normal Bias
Slider — normal-based bias for further artifact reduction
---
## Video Tutorial
### How to Create Custom Shadows
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[Ground](./ground)** — Ground plane, shadows, material, and blending
- **[Scene Basics](./scene)** — Overview of working with 3D objects
- **[Background / Environment](./background-environment)** — Background color, HDRI maps, and environment settings
- **[UI Overview](./ui-overview)** — Full interface layout including panels
- **[Export Scene Settings](./export-scene-settings)** — Export your scene settings including shadow configuration
---
# Ground
The Ground section controls the floor plane beneath your model. It is responsible for the surface your jewelry sits on, the shadow it casts, and how the ground blends with the background. One of the most important features here is the ability to **disable the ground entirely** — if you want your object to appear floating in space, simply uncheck the Visible checkbox.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab, in the **Ground** section (the third section from the top).

---
## Visible
Check or uncheck the **Visible** checkbox to show or hide the ground plane. When disabled, the model appears to float — useful for pendants, earrings, or any jewelry that should look suspended rather than resting on a surface.
---
## Ground Settings
Size
Slider — controls the size of the ground plane. Increase for a larger visible floor area
Render to Depth
When enabled, the ground plane blends into the background. This helps create a seamless transition between the floor surface and the background color or image
Limit Camera
Prevents the camera from going below the floor level. When enabled, users cannot rotate the view to see the underside of the ground — keeping the presentation clean and professional
Tone Map
Applies tone mapping to the ground plane
Shadow Frames
Controls the number of frames used for shadow calculation. More frames produce a softer, smoother shadow but take longer to compute
---
## Height
The **Height** slider raises or lowers the ground plane relative to the model. This is one of the most frequently used ground settings — it lets you fine-tune exactly where the floor sits in relation to your jewelry. Lower the ground to create a subtle levitation effect where the model appears to hover slightly above the surface, or raise it to align the floor with a specific part of the model. Small adjustments to height can make a big difference in the overall look of your render.
---
## Randomized Light
This subsection controls the directional light that creates the shadow cast onto the ground plane. By adjusting these settings you can fine-tune the shadow's appearance, direction, and softness.
Color
Color picker — sets the color of the shadow light
Intensity
Slider — controls the strength of the light. Higher intensity produces a darker, more visible shadow
Direction
Three inputs (X, Y, Z) — sets the direction the light comes from, which determines where the shadow falls relative to the model
Radius
Slider — the radius of the shadow map area
Bias
Slider — shadow bias to reduce visual artifacts (shadow acne)
Focus
Slider — controls how tight the shadow area is. Higher focus produces a more concentrated shadow beneath the model
Spread
Slider — controls the softness of the shadow edges. Higher spread produces a softer, more diffused shadow
---
## Physical Material
This subsection controls the visual appearance of the ground surface. It uses the same Physical (PBR) Material as regular 3D objects, with all the same properties — Color, Roughness, Metalness, Bump, Normal, Sheen, Clear Coat, Emission, and Reflection. For a detailed description of all material properties, see [PBR Materials](./coming-soon).
---
## Blending
The Blending subsection controls how the ground shadow blends with the scene.
Opacity
Slider — controls the transparency of the ground shadow. Lower opacity creates a softer, more subtle shadow. Use this when you want a gentle shadow hint rather than a solid dark shadow beneath the model
---
## Video Tutorials
### Tutorial: How to Change Background & Ground Color
### Tutorial: How to Create Custom Shadows
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[Progressive Shadow](./progressive-shadow)** — Additional directional shadow with focus and spread controls
- **[Background / Environment](./background-environment)** — Background color, HDRI maps, and environment settings
- **[UI Overview](./ui-overview)** — Full interface layout including panels
- **[Export Scene Settings](./export-scene-settings)** — Export your scene settings including ground configuration
---
# Gradient SVG
The Gradient SVG section lets you create custom gradient backgrounds directly inside iJewel Playground. You choose two colors, adjust the gradient type and angle, and the result is applied as an SVG image to the scene background. This is a quick way to create professional-looking gradient backdrops without any external tools.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab, in the **Gradient SVG** section.

---
## How It Works
The Gradient SVG tool generates an SVG gradient image and places it into the **Image** slot in the [Background / Environment](./background-environment) section. When you enable **Apply to Background**, any changes you make to the gradient are immediately visible in the viewport.
To see your gradient in real time, make sure the **Apply to Background** checkbox at the bottom of the section is checked. All changes to colors, angle, and positions will update the background automatically.
---
## Settings
Enabled
Checkbox — enable or disable the Gradient SVG tool
Type
Dropdown — choose the gradient type: Linear (straight gradient from one side to another) or Radial (circular gradient from center outward)
Position 1
Two values — the starting position of the first color stop in the gradient
Position 2
Two values — the ending position of the second color stop in the gradient
Angle
Slider — rotation angle of the gradient in degrees (0–360). Only applies to Linear type
Color 1
Color picker — the first gradient color
Color 2
Color picker — the second gradient color
Apply to Background
Checkbox — when enabled, the generated SVG gradient is automatically applied to the scene background. All changes are visible in real time
Refresh SVG
Button — manually regenerate and apply the SVG gradient
---
## Removing the Gradient
The gradient is stored as an SVG image in the [Background / Environment](./background-environment) → **Image** section. To remove it:
1. Open the **Background / Environment** section (the first section in the Scene tab)
2. Go to the **Image** subsection
3. Click on the image thumbnail and select the rectangular image placeholder from the menu to clear it
This will remove the SVG gradient from the background and return to the default background color.
---
## Video Tutorial
### Tutorial: How to Change Background & Ground Color
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[Background / Environment](./background-environment)** — Background color, HDRI maps, and environment settings
- **[Export Images](./export-images)** — Export your renders including gradient backgrounds
- **[UI Overview](./ui-overview)** — Full interface layout including panels
---
# HDRi Ground
The HDRi Ground section lets you project the current HDRI environment map onto a ground surface, placing your model inside the full HDRI sphere. When enabled, the background and the floor become one continuous HDRI image — your object appears as if it exists inside the real environment captured by the HDRI map. This is a quick way to get a realistic, immersive scene without any additional setup.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab, in the **HDRi Ground** section.
::: info
HDRi Ground uses whatever HDRI map is currently loaded in the [Background / Environment](./background-environment) section. If no HDRI map is set, enabling HDRi Ground will have no visible effect.
:::
---
## Enabled
Check or uncheck the **Enabled** checkbox to toggle the HDRi Ground on or off. When enabled, the HDRI environment map wraps around the scene as a sphere, and the ground becomes part of that sphere — creating a seamless environment where the background and floor are one continuous image.
---
## Settings
World Radius
Controls the size of the HDRI sphere surrounding the scene. A larger radius pushes the environment further away, while a smaller radius brings it closer to the model
Tripod Height
Adjusts the vertical offset of the HDRI projection — similar to the height at which the original HDRI photo was captured. Change this to align the horizon line with your model's ground level
Origin Position (X, Y, Z)
Three inputs that shift the center point of the HDRI sphere in 3D space. Use this to reposition the environment relative to your model if the default alignment doesn't look right
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[Background / Environment](./background-environment)** — Set the HDRI map used by HDRi Ground
- **[Ground](./ground)** — Standard ground plane with shadow and material options
- **[UI Overview](./ui-overview)** — Full interface layout including panels
---
# Generate Geometry
The Generate Geometry section lets you create basic 3D primitive shapes directly inside iJewel Playground. This is useful when you want to quickly test materials, experiment with lighting setups, or add simple objects to your scene without importing anything from external 3D software.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab, in the **Generate Geometry** section.
---
## Available Shapes
The section provides six buttons, each generating a different primitive shape:
Generate Plane
A flat rectangular surface — useful for floors, walls, or material previews
Generate Sphere
A round shape — great for testing reflections and material properties
Generate Box
A cube — a simple shape for testing materials on flat surfaces and edges
Generate Circle
A flat circular disc
Generate Torus
A donut-shaped ring — particularly useful for previewing ring materials and finishes
Generate Cylinder
A cylindrical tube — good for testing materials on curved and flat surfaces together
Once generated, the shape appears in the scene and in the [Hierarchy](./hierarchy). You can then select it, apply materials, adjust transforms, or use it alongside your imported models.
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[Picking](./picking)** — Select generated objects and apply materials
- **[Transform Controls](./transform-controls)** — Move, rotate, and scale generated shapes
- **[UI Overview](./ui-overview)** — Full interface layout including panels
---
# Cameras (Loaded)
The Cameras (Loaded) section displays cameras that were imported with your 3D model file. If you create a camera in your 3D software (such as Blender, 3ds Max, or Cinema 4D) and export it together with the model, that camera will appear here. This is especially useful for creating specific camera paths and animations — you set up the exact camera movement in your 3D software, export it, and then play it back in iJewel Playground.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab, in the **Cameras (Loaded)** section.

::: info
This section will be empty if your model file does not contain any cameras. To use loaded cameras, you need to export cameras from your 3D software together with the model.
:::
---
## How It Works
By default, iJewel Playground uses its own viewport camera — the one that lets you orbit, zoom, and pan around the model freely. When you load a model that contains a camera, it appears as an object in this section. You can then **activate** that camera to switch from the default viewport to the imported camera's point of view.
### Tutorial: Creating a Camera Path and Rendering It in Playground
This tutorial walks through the full workflow for camera animations: you start by creating a camera path in **Blender** — setting up keyframes, defining the movement curve, and configuring the animation timeline. Then you export the scene (model + camera) as a `.glb` file and import it into **iJewel Playground**. Once loaded, you activate the imported camera and use the export tools to render the final video directly in the browser.
---
## Camera Properties
When you expand a loaded camera, it shows properties similar to a regular object:
Visible
Checkbox — show or hide the camera helper in the viewport
Pick/Focus
Button — zoom the viewport to focus on the camera object
Pick Parent
Button — select the parent object in the hierarchy
Name
Text input — the name of the camera (imported from your 3D software)
Position
Three inputs (X, Y, Z) — the camera's position in the scene
Rotation
Three inputs (X, Y, Z) — the camera's rotation angles
Scale
Three inputs (X, Y, Z) — the camera's scale
Render Order
Controls the rendering order
---
## Key Actions
Below the camera properties, there is an important action button:

Activate Main
Switch from the default viewport to this loaded camera. The button changes to Deactivate Main once active. While activated, you can no longer orbit or pan — you see only through this camera
::: tip Playing Camera Animations
If your loaded camera has an animation (a camera path created in your 3D software), activate the camera with **Activate Main**, then enable the animation using the **GLTF Animation** controls. The camera will follow the path you defined in your 3D software. To return to the default viewport, click **Deactivate Main**.
:::
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[UI Overview](./ui-overview)** — Full interface layout including panels
- **[Export Videos](./export-videos)** — Export animated video renders using camera paths
- **[Import Scene Settings](./import-scene-settings)** — Import scene configurations
---
# Cameras (Loaded)
The Cameras (Loaded) section displays cameras that were imported with your 3D model file. If you create a camera in your 3D software (such as Blender, 3ds Max, or Cinema 4D) and export it together with the model, that camera will appear here. This is especially useful for creating specific camera paths and animations — you set up the exact camera movement in your 3D software, export it, and then play it back in iJewel Playground.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab, in the **Cameras (Loaded)** section.

::: info
This section will be empty if your model file does not contain any cameras. To use loaded cameras, you need to export cameras from your 3D software together with the model.
:::
---
## How It Works
By default, iJewel Playground uses its own viewport camera — the one that lets you orbit, zoom, and pan around the model freely. When you load a model that contains a camera, it appears as an object in this section. You can then **activate** that camera to switch from the default viewport to the imported camera's point of view.
### Tutorial: Creating a Camera Path and Rendering It in Playground
This tutorial walks through the full workflow for camera animations: you start by creating a camera path in **Blender** — setting up keyframes, defining the movement curve, and configuring the animation timeline. Then you export the scene (model + camera) as a `.glb` file and import it into **iJewel Playground**. Once loaded, you activate the imported camera and use the export tools to render the final video directly in the browser.
---
## Camera Properties
When you expand a loaded camera, it shows properties similar to a regular object:
Visible
Checkbox — show or hide the camera helper in the viewport
Pick/Focus
Button — zoom the viewport to focus on the camera object
Pick Parent
Button — select the parent object in the hierarchy
Name
Text input — the name of the camera (imported from your 3D software)
Position
Three inputs (X, Y, Z) — the camera's position in the scene
Rotation
Three inputs (X, Y, Z) — the camera's rotation angles
Scale
Three inputs (X, Y, Z) — the camera's scale
Render Order
Controls the rendering order
---
## Key Actions
Below the camera properties, there is an important action button:

Activate Main
Switch from the default viewport to this loaded camera. The button changes to Deactivate Main once active. While activated, you can no longer orbit or pan — you see only through this camera
::: tip Playing Camera Animations
If your loaded camera has an animation (a camera path created in your 3D software), activate the camera with **Activate Main**, then enable the animation using the **GLTF Animation** controls. The camera will follow the path you defined in your 3D software. To return to the default viewport, click **Deactivate Main**.
:::
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[UI Overview](./ui-overview)** — Full interface layout including panels
- **[Export Videos](./export-videos)** — Export animated video renders using camera paths
- **[Import Scene Settings](./import-scene-settings)** — Import scene configurations
---
# Coming Soon...
---
# Lights
The Lights section allows you to add additional light sources to your scene beyond the default environment map (HDRI). While the HDRI map provides the main lighting for realistic jewelry rendering, extra lights can be used to add highlights, colored accents, or dramatic shadow effects.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab, in the **Lights** section.

The section provides four buttons to add different types of lights:
Add Directional Light
Parallel light rays from a specific direction — like sunlight. Best for consistent shadows
Add Ambient Light
Uniform light that illuminates all objects equally from all directions — fills in dark areas without casting shadows
Add Point Light
Light that emits from a single point in all directions — like a light bulb. Useful for localized highlights
Add Spot Light
Cone-shaped light that emits from a point in a specific direction — like a flashlight or stage spotlight
You can add multiple lights of the same type — for example, clicking **Add Directional Light** twice will create two separate directional lights, each with its own settings.
---
## Directional Light
A directional light simulates a distant light source where all rays are parallel, similar to sunlight. Once added, a **Directional Light** section appears below the buttons with the following settings:
Enabled
Checkbox — turn the light on or off without removing it
Color
Color picker — sets the color of the light
Intensity
Slider — controls the brightness of the light
Rotation
Three inputs (X, Y, Z) — controls the direction the light points
Position
Three inputs (X, Y, Z) — position of the light in the scene
Shadow Enabled
Checkbox — enable or disable shadow casting from this light
Shadow Map Size
Controls the resolution of the shadow map — higher values produce sharper shadows
Shadow Bias
Slider — adjusts shadow bias to reduce shadow acne artifacts
Shadow Normal Bias
Slider — normal-based bias for further artifact reduction
Shadow Radius
Slider — controls the softness of the shadow edges
Shadow First Doom
Advanced shadow rendering parameter
---
## Ambient Light
An ambient light illuminates all objects in the scene equally from all directions. It does not cast shadows and has no position or direction — it simply raises the overall brightness level.

Enabled
Checkbox — turn the light on or off
Color
Color picker — sets the color of the ambient light
Intensity
Slider — controls the brightness of the ambient light
---
## Point Light
A point light emits from a single point in all directions, similar to a light bulb. The light intensity decreases with distance from the source.

Enabled
Checkbox — turn the light on or off
Color
Color picker — sets the color of the light
Intensity
Slider — controls the brightness of the light
Distance
Slider — maximum distance the light reaches. Objects beyond this distance are not illuminated
Decay
Slider — how quickly the light dims with distance. Higher values make the light fall off faster
Position
Three inputs (X, Y, Z) — position of the light in the scene
Shadow Enabled
Checkbox — enable or disable shadow casting
Shadow Map Size
Three inputs — resolution of the shadow map
Shadow Bias
Slider — adjusts shadow bias to reduce artifacts
Shadow Radius
Slider — controls the softness of the shadow edges
---
## Spot Light
A spot light emits a cone of light from a point toward a target direction, like a flashlight or stage spotlight. The cone width and edge softness can be controlled.

Enabled
Checkbox — turn the light on or off
Color
Color picker — sets the color of the light
Intensity
Slider — controls the brightness of the light
Angle
Slider — controls the width of the spotlight cone in degrees
Penumbra
Slider — controls the softness of the spotlight edge. Higher values create a gradual fade at the cone edges
Rotation
Three inputs (X, Y, Z) — controls the direction the spotlight points
Position
Three inputs (X, Y, Z) — position of the light in the scene
Shadow Enabled
Checkbox — enable or disable shadow casting
Shadow Map Size
Two inputs — resolution of the shadow map
Shadow Bias
Slider — adjusts shadow bias to reduce artifacts
Shadow Radius
Slider — controls the softness of the shadow edges
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[Background / Environment](./background-environment)** — HDRI environment maps that provide the primary scene lighting
- **[Progressive Shadow](./progressive-shadow)** — Soft shadow beneath the model
- **[UI Overview](./ui-overview)** — Full interface layout including panels
---
# Lights
The Lights section allows you to add additional light sources to your scene beyond the default environment map (HDRI). While the HDRI map provides the main lighting for realistic jewelry rendering, extra lights can be used to add highlights, colored accents, or dramatic shadow effects.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Scene tab, in the **Lights** section.

The section provides four buttons to add different types of lights:
Add Directional Light
Parallel light rays from a specific direction — like sunlight. Best for consistent shadows
Add Ambient Light
Uniform light that illuminates all objects equally from all directions — fills in dark areas without casting shadows
Add Point Light
Light that emits from a single point in all directions — like a light bulb. Useful for localized highlights
Add Spot Light
Cone-shaped light that emits from a point in a specific direction — like a flashlight or stage spotlight
You can add multiple lights of the same type — for example, clicking **Add Directional Light** twice will create two separate directional lights, each with its own settings.
---
## Directional Light
A directional light simulates a distant light source where all rays are parallel, similar to sunlight. Once added, a **Directional Light** section appears below the buttons with the following settings:
Enabled
Checkbox — turn the light on or off without removing it
Color
Color picker — sets the color of the light
Intensity
Slider — controls the brightness of the light
Rotation
Three inputs (X, Y, Z) — controls the direction the light points
Position
Three inputs (X, Y, Z) — position of the light in the scene
Shadow Enabled
Checkbox — enable or disable shadow casting from this light
Shadow Map Size
Controls the resolution of the shadow map — higher values produce sharper shadows
Shadow Bias
Slider — adjusts shadow bias to reduce shadow acne artifacts
Shadow Normal Bias
Slider — normal-based bias for further artifact reduction
Shadow Radius
Slider — controls the softness of the shadow edges
Shadow First Doom
Advanced shadow rendering parameter
---
## Ambient Light
An ambient light illuminates all objects in the scene equally from all directions. It does not cast shadows and has no position or direction — it simply raises the overall brightness level.

Enabled
Checkbox — turn the light on or off
Color
Color picker — sets the color of the ambient light
Intensity
Slider — controls the brightness of the ambient light
---
## Point Light
A point light emits from a single point in all directions, similar to a light bulb. The light intensity decreases with distance from the source.

Enabled
Checkbox — turn the light on or off
Color
Color picker — sets the color of the light
Intensity
Slider — controls the brightness of the light
Distance
Slider — maximum distance the light reaches. Objects beyond this distance are not illuminated
Decay
Slider — how quickly the light dims with distance. Higher values make the light fall off faster
Position
Three inputs (X, Y, Z) — position of the light in the scene
Shadow Enabled
Checkbox — enable or disable shadow casting
Shadow Map Size
Three inputs — resolution of the shadow map
Shadow Bias
Slider — adjusts shadow bias to reduce artifacts
Shadow Radius
Slider — controls the softness of the shadow edges
---
## Spot Light
A spot light emits a cone of light from a point toward a target direction, like a flashlight or stage spotlight. The cone width and edge softness can be controlled.

Enabled
Checkbox — turn the light on or off
Color
Color picker — sets the color of the light
Intensity
Slider — controls the brightness of the light
Angle
Slider — controls the width of the spotlight cone in degrees
Penumbra
Slider — controls the softness of the spotlight edge. Higher values create a gradual fade at the cone edges
Rotation
Three inputs (X, Y, Z) — controls the direction the spotlight points
Position
Three inputs (X, Y, Z) — position of the light in the scene
Shadow Enabled
Checkbox — enable or disable shadow casting
Shadow Map Size
Two inputs — resolution of the shadow map
Shadow Bias
Slider — adjusts shadow bias to reduce artifacts
Shadow Radius
Slider — controls the softness of the shadow edges
---
## Related Pages
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[Background / Environment](./background-environment)** — HDRI environment maps that provide the primary scene lighting
- **[Progressive Shadow](./progressive-shadow)** — Soft shadow beneath the model
- **[UI Overview](./ui-overview)** — Full interface layout including panels
---
# Coming Soon...
---
# Coming Soon...
---
# Coming Soon...
---
# Anti-aliasing
Anti-aliasing smooths out jagged edges (also called "stair-stepping" or "aliasing") on your 3D model and scene, producing cleaner, more photorealistic renders. In iJewel Playground, anti-aliasing is split into three independent sections — **Progressive**, **Temporal AA**, and **Velocity Buffer (TAA)** — each designed for a different rendering scenario.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), accessible via the Anti-aliasing tab.
---
## How the Three Sections Work Together
Each anti-aliasing method targets a specific use case:
Progressive
Multi-frame accumulation for still images. The renderer takes multiple samples over time and averages them to eliminate aliasing. Best for final image exports where you can wait a few seconds for the render to converge. Read more →
Temporal AA
Real-time anti-aliasing for interactive use and animations. Blends the current frame with previous frames to smooth edges while you rotate, zoom, or play animations. Keeps the viewport clean without the wait time of Progressive. Read more →
Velocity Buffer (TAA)
Motion-aware temporal anti-aliasing that uses per-pixel velocity data to reduce ghosting artifacts when objects or the camera move. An advanced complement to Temporal AA for scenes with animation. Read more →
---
## Quick Guide: Which Setting to Use
::: tip For Still Image Exports
Increase the **Progressive → Frame count** to 16, 32, or higher. The more frames, the smoother the result — but the longer the render takes. This is the single most impactful setting for image quality.
:::
::: tip For Real-Time Viewport & Video Recording
Enable **Temporal AA** and keep the default **Feedback** values (0.88 / 0.97). This gives you smooth edges in the viewport and during video export without a long convergence wait. If you see ghosting on moving objects, enable **Velocity Buffer (TAA)**.
:::
::: tip For Fast Previews
Lower the **Progressive → Frame count** to 4 or 8 for quicker convergence. You can also disable Progressive entirely and rely on Temporal AA alone for a responsive viewport.
:::
::: warning Performance Note
Higher Progressive frame counts significantly increase export time — especially for video. If your video export takes 10+ minutes, try reducing Progressive frames to 4–8 and relying on Temporal AA instead. See the [FAQ on video export speed](./faq-export) for more tips.
:::
---
## Documentation Pages
---
## Related Pages
- **[Renderer Settings](./renderer-settings)** — Resolution and quality configuration
- **[Export Images](./export-images)** — Image export settings and quality tips
- **[Export Videos](./export-videos)** — Video export settings
- **[FAQ: Rendering & Performance](./faq-rendering)** — Common rendering questions
---
# Progressive
Progressive anti-aliasing works by rendering multiple frames of the same view and accumulating (averaging) them together. Each frame uses a slightly different sub-pixel offset, so fine details and edges are sampled at many positions — the result is a smooth, high-quality image with no jagged edges. This is the primary quality setting for **still image exports**.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Anti-aliasing tab, in the **Progressive** section.
---
## How It Works
When the scene is idle (no camera movement, no animation playing), Playground begins accumulating frames in the background. You'll notice the image gradually becomes sharper and smoother over a few seconds — this is the progressive render converging. Once the set number of frames has been reached, the image is fully resolved.
Any interaction (rotating, zooming, panning) resets the accumulation and it starts over. This is normal — Progressive is designed for the **final still result**, not for real-time interaction.
---
## Settings
Frame count
The number of frames to accumulate before the render is considered complete. Higher values produce smoother results but take longer. Default is 32. Common values: 4–8 for fast previews, 16–32 for high-quality exports, 64+ for maximum quality
Jitter
When enabled, each accumulated frame uses a slightly randomized sub-pixel offset. This prevents structured aliasing patterns and produces a more natural, film-like anti-aliasing. Enabled by default — recommended to keep it on
---
## Recommended Values
Quick preview
Frame count: 4–8. Fast convergence, good enough for checking composition and lighting
Image export
Frame count: 16–32. Good balance of quality and speed for final renders
Video export
Frame count: 4–8. Each video frame must converge separately, so high values dramatically increase render time. For video, rely on Temporal AA for smoothing between frames
Maximum quality
Frame count: 64+. Use for hero shots or print-quality renders where every pixel matters
::: warning Export Time
Progressive frame count is the **biggest factor** in video export duration. If your turntable export takes 10+ minutes, reducing frames from 32 to 4–8 can cut the time by 75% or more while still producing smooth results (especially when combined with Temporal AA).
:::
---
## Related Pages
- **[Anti-aliasing](./anti-aliasing)** — Overview of all anti-aliasing sections
- **[Temporal AA](./anti-aliasing-temporal)** — Real-time temporal anti-aliasing
- **[Velocity Buffer (TAA)](./anti-aliasing-velocity-buffer)** — Motion-aware anti-aliasing
- **[Export Images](./export-images)** — Image export settings
- **[Export Videos](./export-videos)** — Video export settings
---
# Temporal AA
Temporal Anti-Aliasing (TAA) is a real-time anti-aliasing technique that blends the **current frame with previous frames** to smooth out edges and reduce flickering. Unlike Progressive (which accumulates many frames while the scene is still), Temporal AA works **continuously** — even while you rotate, zoom, or play animations — making it the primary anti-aliasing method for interactive use and video recording.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Anti-aliasing tab, in the **Temporal AA** section.
---
## How It Works
Each rendered frame is compared to the previous frame. Pixels that haven't changed much are blended together (using the **Feedback** values), which smooths out aliasing and reduces temporal flickering — the shimmering you sometimes see on thin edges or detailed geometry when the camera moves.
The trade-off is **ghosting**: if the feedback is too high, moving objects can leave faint trails because the renderer holds on to old frame data too long. The Feedback parameters let you control this balance.
---
## Settings
Enabled
Toggles Temporal AA on or off. When enabled, the renderer blends consecutive frames to reduce aliasing in real time. Recommended to keep enabled for interactive work and video exports
Feedback
Two values that control how much of the previous frame is blended into the current frame. The first value (0.88 by default) controls the blending weight for most pixels. The second value (0.97 by default) controls the blending for high-confidence pixels. Higher values produce smoother results but increase ghosting on moving objects. Lower values reduce ghosting but allow more aliasing/flickering
Stable Noise (Use Total Frame Count)
When enabled, the noise pattern used for rendering effects (like screen-space reflections and ambient occlusion) is tied to the total accumulated frame count rather than being re-randomized each frame. This produces more stable, consistent noise that Temporal AA can smooth out more effectively — reducing the "crawling" noise artifacts you may see on metallic or glossy surfaces
---
## Feedback Values Explained
The two Feedback numbers work together to balance smoothness and responsiveness:
First value (0.88)
General blending factor. At 0.88, each new frame contributes about 12% new data while 88% comes from the history buffer. Lowering this (e.g., to 0.5–0.7) makes the image more responsive but noisier. Raising it (e.g., to 0.95) makes it smoother but increases ghosting
Second value (0.97)
High-confidence blending factor applied to pixels where the renderer is very sure the data is correct (no disocclusion, no major change). This higher value allows those stable areas to accumulate more temporal data for maximum smoothness
::: tip Default Values
The defaults (**0.88 / 0.97**) are well-tuned for jewelry rendering. In most cases, you don't need to change them. Only adjust if you notice ghosting on animated objects (lower the values) or flickering on still surfaces (raise the values).
:::
---
## When to Use Temporal AA
Temporal AA is most useful when:
- You're **interacting** with the scene (rotating, zooming) and want smooth edges in real time
- You're **recording video** — Temporal AA provides frame-to-frame smoothing that Progressive can't offer during animation
- You're working with **screen-space effects** (SSR, SSAO, SSGI) that produce per-frame noise — TAA smooths this noise over time
- You want a **responsive viewport** without waiting for Progressive to converge
::: info Temporal AA + Progressive
These two methods are complementary. Progressive accumulates frames when the scene is still; Temporal AA blends frames in real time during motion. For the best quality, keep both enabled — Progressive handles the final still render, and Temporal AA handles everything in between.
:::
---
## Related Pages
- **[Anti-aliasing](./anti-aliasing)** — Overview of all anti-aliasing sections
- **[Progressive](./anti-aliasing-progressive)** — Multi-frame accumulation for still images
- **[Velocity Buffer (TAA)](./anti-aliasing-velocity-buffer)** — Motion-aware anti-aliasing
- **[Export Videos](./export-videos)** — Video export settings
---
# Velocity Buffer (TAA)
The Velocity Buffer is an advanced extension of Temporal AA that uses **per-pixel motion vectors** to improve anti-aliasing quality during camera movement and object animation. When enabled, the renderer tracks how each pixel has moved between frames, allowing Temporal AA to correctly reproject previous frame data and avoid ghosting artifacts.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Anti-aliasing tab, in the **Velocity Buffer (TAA)** section.
---
## How It Works
Without a velocity buffer, Temporal AA assumes that each pixel in the current frame corresponds to the same screen position in the previous frame. This works well when the scene is still, but during camera rotation or object animation, pixels shift — and the old frame data at that position is no longer valid. This mismatch causes **ghosting** (faint trails behind moving edges).
The Velocity Buffer solves this by computing a **motion vector** for every pixel — a 2D offset describing where that pixel was in the previous frame. Temporal AA then uses these vectors to look up the correct historical data, producing clean anti-aliasing even during motion.
---
## Settings
Enabled
Toggles the Velocity Buffer on or off. When enabled, the renderer generates per-pixel motion vectors each frame, which Temporal AA uses for motion-compensated reprojection. This reduces ghosting during camera movement and object animation
---
## When to Enable It
The Velocity Buffer adds a small amount of GPU overhead because it renders an extra pass per frame. For most jewelry rendering workflows, here's when to use it:
::: tip Enable When
- You're **recording turntable videos** or camera path animations — the velocity buffer prevents ghosting on edges as the camera moves
- You have **animated objects** in the scene (e.g., a pendant swing, rotating display stand)
- You notice **ghosting or trailing artifacts** on edges during camera rotation with Temporal AA enabled
:::
::: info Can Be Left Disabled When
- You're only working with **still images** — Progressive handles anti-aliasing for stills, and no motion occurs
- Your scene has **no animations** and you're fine with minor ghosting during viewport interaction
- You're on a **lower-end GPU** and want to save performance for other effects
:::
---
## Velocity Buffer + Temporal AA
The Velocity Buffer is not a standalone anti-aliasing method — it enhances **Temporal AA** by providing motion data. For it to have any effect, **Temporal AA must also be enabled**. If Temporal AA is disabled, enabling the Velocity Buffer alone will have no visible impact.
The typical setup for animated scenes is:
1. **Temporal AA** → Enabled (with default Feedback values)
2. **Velocity Buffer (TAA)** → Enabled
3. **Progressive** → Frame count 4–8 (for each video frame to converge quickly)
This combination gives you smooth, ghost-free anti-aliasing during animation with minimal render overhead.
---
## Related Pages
- **[Anti-aliasing](./anti-aliasing)** — Overview of all anti-aliasing sections
- **[Progressive](./anti-aliasing-progressive)** — Multi-frame accumulation for still images
- **[Temporal AA](./anti-aliasing-temporal)** — Real-time temporal anti-aliasing
- **[Export Videos](./export-videos)** — Video export settings
---
# Post Processing
Post Processing effects are applied after the 3D scene is rendered, adjusting the final image appearance — color grading, reflections, edge highlights, lens effects, and more. These settings let you fine-tune the visual style of your jewelry renders without changing the scene itself.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), accessible via the Post Processing tab.
---
## Sections
---
## Related Pages
- **[Anti-aliasing](./anti-aliasing)** — Progressive, Temporal AA, and Velocity Buffer settings
- **[Renderer Settings](./renderer-settings)** — Resolution and quality configuration
- **[Export Images](./export-images)** — Image export settings
- **[Export Videos](./export-videos)** — Video export settings
---
# Screen Space Reflections (SSR)
Screen Space Reflections adds real-time reflections of the surrounding environment onto your 3D objects. This is especially visible on metallic surfaces — polished gold, silver, and platinum will reflect the ground, nearby objects, and the environment, making the render look more realistic and grounded.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab. It is the first section at the top.
::: info
SSR can only reflect what is currently visible on screen. Off-screen objects fall back to environment map reflections.
:::
---
## Settings
Enabled
Checkbox — toggles SSR on or off
Intensity
Slider — overall strength of reflections. Default 1.00
Slider — ray marching steps. More steps = more accurate but slower. Default 16
Low Quality Frames
Slider — number of lower-quality frames during camera movement for better responsiveness. Default 0
Ignore Front Rays
Checkbox — ignores camera-facing rays to prevent self-reflection artifacts. Enabled by default
Mask Front Rays Factor
Slider — masking strength for front-facing rays. Default -0.20
::: tip
Default values work well for most jewelry. For stronger ground reflections on polished bands, increase **Intensity** to 1.2–1.5. If reflections have gaps, increase **Step Count** to 24–32.
:::
---
## Related Pages
- **[Tonemapping](./tonemapping)** — Exposure, contrast, saturation, and background clipping
- **[Background / Environment](./background-environment)** — HDRI environment maps and reflections
- **[Renderer Settings](./renderer-settings)** — Resolution and quality configuration
- **[FAQ: Rendering & Performance](./faq-rendering)** — Common rendering questions
---
# Tonemapping
Tonemapping controls color grading of the final render — exposure, saturation, and contrast. Small adjustments here can dramatically improve the look of your jewelry. This section also contains **Clip Background**, the key setting for transparent background exports.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Tonemapping** section.
---
## Mode
The **Mode** dropdown selects the tonemapping algorithm. Each mode produces a different color response.
ACESFilmic
Default. Cinematic colors with natural highlight rolloff. Recommended for most jewelry renders
Linear
No tonemapping — raw HDR values. Useful for post-production color grading
Reinhard
Classic curve — softer, less contrasty than ACES
Cineon
Kodak film response — warm, slightly desaturated analog film look
Uncharted 2
Filmic curve — good balance between contrast and highlight detail
AgX
Modern approach — handles bright saturated areas better than ACES, prevents color burn-out
---
## Settings
Tonemap Background
Checkbox — applies tonemapping to the background as well. When off, only the 3D model is affected
Clip Background
Key setting for transparent exports. Removes the background and sets alpha to 0 — export as PNG to get a transparent image
Exposure
Slider — overall brightness. Default 1.00
Saturation
Slider — color intensity. Increase for more vivid rose gold or colored gemstones. Default 1.00
Contrast
Slider — difference between light and dark areas. A common adjustment is bumping this to 1.01–1.05 for a more polished look. Default 1.00
Render Depth
Checkbox — shows a black-and-white depth visualization instead of the color render. Useful for previewing Depth of Field ranges or creating depth maps for compositing
::: tip Transparent Background
Enable **Clip Background**, disable **Scene → Ground → Visible** and **Progressive Shadow**, then export as **PNG**. Watch the [How to Make Pure White and Transparent Background](https://www.youtube.com/watch?v=GCJIOmcEaPo) tutorial.
:::
---
## Related Pages
- **[Screen Space Reflections](./screen-space-reflections)** — SSR settings for realistic reflections
- **[Background / Environment](./background-environment)** — Background color, HDRI maps, and environment settings
- **[Export Images](./export-images)** — Image export with quality and format settings
- **[Ground](./ground)** — Ground plane visibility and shadow settings
- **[FAQ: Scene, Lighting & Environment](./faq-scene)** — Common scene setup questions
---
# Outline
Outline controls the selection highlight that appears around objects when you click on them in the viewport. By default, clicking an object draws a colored border around it. Here you can change the outline color, intensity, or disable it entirely.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Outline** section.
---
## How It Works
When you select an object in the viewport, Playground draws a colored outline along its edges so you can see what is selected. If you **disable** the outline, selecting still works — you just won't see the colored border.
---
## Settings
Enable
Checkbox — toggles the outline on or off. When disabled, objects are still selectable but without the colored border
Highlight
Checkbox — when enabled, the entire area of the selected object is filled with the outline color, not just the border. Use Transparency to control how visible this fill is
Intensity
Slider — controls how strong/visible the outline color is. Default 2.00
Transparency
Slider — controls the opacity of the highlight fill when Highlight is enabled. Lower values make the fill more see-through. Default 1.00
Color
Color picker — choose the outline color. Change this if you prefer a different selection color for your workflow. Default is orange (0xf36c00)
::: tip
If the default orange outline is hard to see against your scene, try switching to a brighter color like white or cyan.
:::
---
## Related Pages
- **[Picking](./picking)** — Selecting objects in the viewport
- **[Transform Controls](./transform-controls)** — Move, rotate, and scale selected objects
- **[Screen Space Reflections](./screen-space-reflections)** — SSR post-processing effect
- **[Tonemapping](./tonemapping)** — Color grading and background clipping
---
# Chromatic Aberration
Chromatic Aberration adds a subtle color fringing effect around the edges of the image, simulating the way real camera lenses separate light into RGB channels. This gives the render a more photographic, cinematic feel — especially noticeable at the edges of the frame.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Chromatic Aberration** section.
---
## Settings
Enable
Checkbox — toggles the chromatic aberration effect on or off
Intensity
Slider — controls the strength of the color fringing. Keep it low (around 0.05–0.15) for a subtle photographic touch. Higher values create a more dramatic, stylized effect. Default 0.10
::: tip
A little goes a long way — values around 0.05–0.10 add a subtle realism without making the image look distorted. This effect is most visible at the edges of the frame and on high-contrast areas like diamond facets against a dark background.
:::
---
## Related Pages
- **[Tonemapping](./tonemapping)** — Color grading and background clipping
- **[Screen Space Reflections](./screen-space-reflections)** — SSR post-processing effect
- **[Outline](./outline)** — Selection highlight settings
- **[Export Images](./export-images)** — Image export settings
---
# Filmic Grain
Filmic Grain adds a subtle noise texture over the render, simulating the grain you see in analog film photography. This gives the image a warmer, more organic feel — useful for lifestyle product shots or when you want to move away from a perfectly clean digital look.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Filmic Grain** section.
---
## Settings
Enable
Checkbox — toggles the filmic grain effect on or off
Multiply
Checkbox — when enabled, the grain is blended using multiply mode, which darkens the image slightly and makes the grain more visible in bright areas
Intensity
Slider — controls how strong the grain effect is. Keep it low for a subtle film look, increase for a more stylized vintage feel
---
## Related Pages
- **[Tonemapping](./tonemapping)** — Color grading and exposure adjustments
- **[Chromatic Aberration](./chromatic-aberration)** — Lens color fringing effect
- **[Look Up Tables (LUT)](./lut)** — Custom color grading presets
- **[Export Images](./export-images)** — Image export settings
---
# Look Up Tables (LUT)
LUT (Look Up Table) lets you apply custom color grading presets to your render. You can create a `.cube` LUT file in Photoshop (or any other color grading software) with your preferred adjustments — curves, levels, color balance, contrast — and then import it into Playground to apply that same look to your jewelry renders. This is a powerful way to achieve a consistent, cinematic color style across all your exports.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Look Up Tables (LUT)** section.
---
## How It Works
1. Export a snapshot of your scene from Playground
2. Open it in Photoshop and adjust curves, levels, filters — any color grading you want
3. Save the adjustments as a `.cube` LUT file
4. Import the `.cube` file into Playground via the LUT section
5. The color grading is applied to the entire render in real time
You can apply LUTs globally or to specific parts of the scene (metals, diamonds, ground) using the separate LUT input slots.
---
## Settings
Enable
Checkbox — toggles the LUT effect on or off
LUT Background
Checkbox — when enabled, the LUT is also applied to the background. When disabled, only the 3D model is color-graded
Intensity
Slider — controls the strength of the LUT effect. At 1.0 the LUT is fully applied, at 0 it has no effect. Use intermediate values to blend between the original and graded look
LUT
Input — the main LUT slot. Upload a .cube file to apply your color grading preset to the entire render
LUT 1
Input — additional LUT slot for applying a different color grading to specific materials
LUT 2
Input — additional LUT slot for applying a different color grading to specific materials
---
## Video Tutorial
### Tutorial: How to Create and Apply Custom LUTs in iJewel Playground
---
## Related Pages
- **[Tonemapping](./tonemapping)** — Exposure, contrast, saturation, and background clipping
- **[Filmic Grain](./film-grain)** — Analog film grain effect
- **[Chromatic Aberration](./chromatic-aberration)** — Lens color fringing effect
- **[Export Images](./export-images)** — Image export settings
---
# Vignette
Vignette darkens or tints the edges of the render, drawing the viewer's eye toward the center of the image. This is one of the most commonly used cinematic effects — it subtly frames the jewelry and keeps the focus on the product.
Use it for lifestyle-style product shots, social media content, or any render where you want a polished, editorial look. With the color picker, you can go beyond the classic dark vignette — try warm tones for a golden-hour feel, or cool tones for a modern, icy aesthetic.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Vignette** section.
---
## Settings
Enable
Checkbox — toggles the vignette effect on or off
Power
Slider — controls the strength and spread of the vignette. Higher values create a more pronounced darkening at the edges
Color
Color picker — sets the vignette color. Default is black, but you can choose any color for a stylized look
---
## Related Pages
- **[Tonemapping](./tonemapping)** — Exposure, contrast, and color grading
- **[Filmic Grain](./film-grain)** — Analog film grain effect
- **[Chromatic Aberration](./chromatic-aberration)** — Lens color fringing effect
---
# Depth of Field
Depth of Field creates a blur effect that simulates how a real camera lens focuses — objects at the focal point stay sharp while everything closer or further away becomes blurred.
This effect is especially useful for close-up product shots where you want to highlight a specific detail — like a gemstone setting, an engraving, or the front face of a ring — while softly blurring the rest. It adds a professional, photographic quality to your renders and works great for hero images and marketing materials.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Depth of Field** section.
---
## How to Set the Focus Point
1. Enable **Enable Edit** checkbox in the Depth of Field section
2. Click directly on the object in the canvas where you want the focus to be — the focal point is set automatically
3. Once the focus is set, disable **Enable Edit** to return to normal object selection on the canvas
---
## Settings
Enable
Checkbox — toggles the depth of field effect on or off
Depth Range
Slider — controls the range of the in-focus zone. A smaller range means a narrower area stays sharp
Near Blur Scale
Slider — controls how strong the blur is for objects closer to the camera than the focal point
Far Blur Scale
Slider — controls how strong the blur is for objects further from the camera than the focal point
Enable Edit
Checkbox — when enabled, click on the canvas to set the focal point. Disable after setting focus to resume normal object selection
---
## Related Pages
- **[Screen Space Reflections (SSR)](./screen-space-reflections)** — Real-time reflections
- **[Tonemapping](./tonemapping)** — Exposure and color grading
- **[Bloom](./bloom)** — Glow effect around bright areas
---
# Screen Space Ambient Occlusion (SSAO)
SSAO adds soft contact shadows in crevices, corners, and where surfaces meet — making the scene look more realistic and grounded. It is **enabled by default** in Playground.
This effect is essential for jewelry renders because it brings out the depth between prongs, around stone settings, inside chain links, and along any tight geometry. Without SSAO, models can look flat — with it, you get a natural sense of volume and contact between surfaces.
For most cases, the main settings you need are **Intensity** and **Radius**. If you're unsure about the other options, enable **Auto Radius** and just adjust **Intensity**.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **SS Ambient Occlusion** section.
---
## Settings
Enable
Checkbox — toggles SSAO on or off. Enabled by default
Enable Cavity
Checkbox — enables cavity occlusion, which adds extra detail shadows in fine surface crevices
Cavity Brightness
Slider — adjusts the brightness of cavity shadows
Intensity
Slider — controls how strong the ambient occlusion effect is. Default: 0.25
Radius
Slider — sets the sampling radius for occlusion. Larger radius = wider, softer shadows. Default: 1.0
Bias
Slider — offsets the occlusion calculation to reduce self-shadowing artifacts
Fall-Off
Slider — controls how quickly the occlusion fades with distance
Num Samples
Slider — number of sampling points per pixel. More samples = smoother result but slower performance
Smooth Enabled
Checkbox — applies smoothing to the occlusion result for a softer look
Auto Radius
Checkbox — automatically calculates the optimal radius based on the scene. Enable this if you're unsure about manual radius settings
H Sharpness
Number input — controls the sharpness of the occlusion edges
::: tip Quick Setup
Enable **Auto Radius** and adjust **Intensity** — this is the simplest way to get good SSAO results without tweaking individual settings.
:::
---
## Related Pages
- **[Screen Space Bevel](./screen-space-bevel)** — Edge softening effect
- **[Screen Space Reflections (SSR)](./screen-space-reflections)** — Real-time reflections
- **[Tonemapping](./tonemapping)** — Exposure and color grading
---
# Screen Space Bevel
Screen Space Bevel (SSB) softens sharp edges on 3D models without modifying the geometry. This makes edges look more realistic by adding a subtle bevel/rounding effect in the render.
In real life, jewelry never has perfectly sharp edges — even precision-machined metal has slight rounding. SSB simulates this, making your renders look more natural and physically accurate. It's particularly noticeable on ring bands, bezels, and prong tips where sharp CG edges would otherwise look unrealistic.
The SSB setting in Post Processing controls the effect globally — disabling it here turns off SSB for all materials in the scene.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Screen Space Bevel** section.
### Before / After
⇔
Before
After
---
## Settings
Enable
Checkbox — toggles the global SSB effect on or off. Disabling this turns off SSB for all materials
SS Bevel
Checkbox — enables the screen-space bevel calculation
SS Bevel Radius
Slider — controls how wide the bevel effect is on edges. Higher values create a more visible edge rounding
---
## SSB in Other Locations
SSB can also be configured per material and at the scene level:
- **Per material** — When you select an object via Picking, the material settings include an **SSB** section with its own **Radius** slider. This lets you control the bevel strength for individual materials separately.
- **Left panel → Advanced → Plugins** — Contains an **SSB** checkbox and **SSB Intensity** slider that act as scene-wide overrides.
---
## Related Pages
- **[Screen Space Ambient Occlusion (SSAO)](./ssao)** — Contact shadows in crevices
- **[Screen Space Reflections (SSR)](./screen-space-reflections)** — Real-time reflections
- **[Outline](./outline)** — Selection highlight settings
---
# Bloom
Bloom adds a glow effect around bright areas of the render, simulating how intense light bleeds in a camera lens.
This effect is especially powerful for diamond and gemstone jewelry — it makes bright reflections and sparkles appear to radiate light, just like they do in real photography. Use it to enhance the brilliance of stones, create dramatic hero shots, or add a luxurious feel to your renders. A subtle bloom can make the difference between a flat-looking render and one that feels alive with light.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Bloom** section.
### Before / After
⇔
Before
After
---
## Settings
Enable
Checkbox — toggles the bloom effect on or off
Threshold
Slider — brightness threshold above which bloom is applied. Only pixels brighter than this value will glow
Soft Threshold
Slider — softens the threshold transition so bloom fades in gradually rather than appearing abruptly
Intensity
Slider — controls how strong the bloom glow is
Interference
Slider — adds a color interference pattern to the bloom for a more complex optical effect
Radius
Slider — controls how far the bloom glow spreads from bright areas
Power
Slider — adjusts the falloff curve of the bloom. Higher values concentrate the glow closer to bright areas
Debug
Checkbox — shows a debug view where the screen turns black and only the bloom-affected areas are visible. Use this to see exactly where bloom appears and adjust settings accordingly. Disable when done
::: tip Using Debug Mode
Enable **Debug** to see exactly where bloom is appearing — the screen goes black and only glowing areas are shown. Adjust **Intensity**, **Radius**, and **Threshold** until the bloom looks right, then disable **Debug** to see the final result.
:::
---
## Related Pages
- **[Depth of Field](./depth-of-field)** — Selective focus with background blur
- **[Tonemapping](./tonemapping)** — Exposure and color grading
- **[Screen Space Reflections (SSR)](./screen-space-reflections)** — Real-time reflections
---
# Screen Space Global Illumination (SSGI)
Screen Space Global Illumination simulates light bouncing between surfaces — for example, a gold ring casting a warm glow onto a white surface. This brings out subtle color interactions between metals, gemstones, and the ground, making jewelry renders feel more natural and cohesive.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **SS Global Illumination** section.
---
## Settings
Enable
checkbox
Toggles the SSGI effect on or off
Intensity
slider
How strong the indirect lighting effect is
Power
slider
Falloff curve — higher values concentrate the effect closer to surfaces
Auto Radius
checkbox
Automatically calculates the optimal sampling radius
Object Radius
slider
How far indirect light can travel between surfaces
Tolerance
slider
Depth tolerance for ray matching — reduces artifacts on thin geometry
Bias
slider
Offsets ray origin to reduce self-illumination artifacts
Fall-Off
slider
How quickly the indirect lighting fades with distance
Ray Count
slider
Rays per pixel — more rays = smoother result but slower
Step Count
slider
Steps per ray — more steps = more precise tracing
Smooth Enabled
checkbox
Smooths the GI result for a softer, less noisy look
Render In Camera
checkbox
Calculates GI from the camera's perspective
GI Enabled
checkbox
Toggles the GI calculation independently from the main Enable
---
## Related Pages
- **[Screen Space Ambient Occlusion (SSAO)](./ssao)** — Contact shadows in crevices
- **[Screen Space Contact Shadows](./screen-space-contact-shadows)** — Fine shadows between close surfaces
- **[Screen Space Reflections (SSR)](./screen-space-reflections)** — Real-time reflections
- **[Tonemapping](./tonemapping)** — Exposure and color grading
---
# Screen Space Contact Shadows
Screen Space Contact Shadows add fine shadows where surfaces meet or nearly touch — prongs on a stone, a ring band on a surface, chain links against each other. These micro-shadows make jewelry look grounded and physically present.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Post Processing tab, in the **Screen Space Contact Shadows** section.
---
## Settings
Enable
checkbox
Toggles Screen Space Contact Shadows on or off
Radius
slider
Max distance for contact shadows — keep small for realistic results
Intensity
slider
How dark the contact shadows are
Tolerance
slider
Depth comparison tolerance — reduces false shadows on flat surfaces
Debug Only SSCS
checkbox
Shows only contact shadows — use to fine-tune, then disable
Step Count
slider
Ray marching steps — more steps = more precise but slower
::: tip Using Debug Mode
Enable **Debug Only SSCS** to isolate and visualize just the contact shadows. This makes it easy to see where shadows are appearing and adjust **Radius**, **Intensity**, and **Step Count** before disabling debug to see the full render.
:::
---
## Related Pages
- **[Screen Space Ambient Occlusion (SSAO)](./ssao)** — Ambient occlusion in crevices
- **[Screen Space Global Illumination (SSGI)](./ssgi)** — Indirect light bouncing between surfaces
- **[Screen Space Reflections (SSR)](./screen-space-reflections)** — Real-time reflections
---
# Animations
The Animations tab provides tools for controlling all types of motion in your scene — imported glTF animation playback, camera path transitions, scroll-driven interactions, physics simulations, and object posing.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), accessible via the Animations tab.
---
## Sections
---
## Related Pages
- **[Export Videos](./export-videos)** — Export animations as video files
- **[Post Processing](./post-processing)** — Visual effects applied to your renders
---
# glTF Animation
This section controls playback of animations embedded in your glTF/GLB file. If you created an animation in your 3D software (Blender, 3ds Max, Maya) and exported it with the file, you can play it back and adjust its speed directly in Playground.
This is useful for product showcase animations — a ring rotating to show all angles, a pendant swinging, or a bracelet clasp opening and closing. You prepare the animation in your 3D software, export it as glTF/GLB, and then control the playback here.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Animations tab, in the **glTF Animation** section.
You can also start and stop the animation using the Play glTF Animation button on the top toolbar.
---
## Settings
Animation State
read-only
Displays the current animation state
Animation Time
read-only
Displays the current playback time position
Animation Duration
read-only
Displays the total duration of the animation
Loop
checkbox
Repeats the animation continuously after it finishes
Time Scale
slider
Scales the overall animation time
Speed
slider
Controls the playback speed
Animate on Scroll
checkbox
Ties animation progress to page scroll position
Animate on Drag
checkbox
Ties animation progress to mouse/touch drag on the canvas
Drag Axis
select
Drag direction — horizontal or vertical
Autoplay on Load
checkbox
Starts the animation automatically when the scene loads
Sync Max Duration
checkbox
Synchronizes all animations to the longest duration
### Playback Controls
PlayStopReset
::: tip Key Settings
**Loop**, **Time Scale**, and **Speed** are the most commonly adjusted parameters. Loop repeats the animation continuously, while Time Scale and Speed control how fast it plays. Use **Play**, **Stop**, and **Reset** for direct playback control.
:::
---
## Video Tutorials
### Professional Diamond Ring Animation — Blender to iJewel Playground
### How to Create Beautiful Ring Animation — Blender to iJewel Playground
### How to Create Beautiful Pendant Swing Animation — Blender + iJewel Playground
---
## Related Pages
- **[Export Videos](./export-videos)** — Export your animations as video files
- **[Animations](./animations)** — Overview of all animation sections
---
# Camera Views
Camera Views lets you save specific camera positions and animate smooth transitions between them. This is one of the most important features for presenting jewelry — you can set up a front view, a top-down angle, a close-up on the stone, and then animate between them with a single click.
You can use Camera Views in two ways: save a single position as a "home" angle that viewers can always return to, or create a sequence of multiple views to showcase your piece from every angle with cinematic transitions.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Animations tab, in the **Camera Views** section.
You can also use the Loop Camera Views button on the top toolbar to start looping through all saved positions.
---
## How to Create Camera Views — Step by Step
### Step 1: Position Your Camera
Navigate in the canvas to find the angle you want to save. You can rotate the model by dragging, zoom in/out with scroll, and hold **Shift + drag** to pan left/right. For more details on canvas navigation, see [UI Overview](./ui-overview).
### Step 2: Save the Position
In the Camera Views section, click the **Add Current View** button. A new entry called "Camera View" will appear at the top of the list. This saves the exact camera position, target, and orientation.
### Step 3: Review the Saved View
Click on the saved view to expand it. You will see the stored coordinates (Position, Target, Quaternion, Up), plus Duration, Name, and three action buttons: **Focus View**, **Delete View**, and **Update View**.
Click **Focus View** to fly the camera to this saved position. The transition speed depends on the **Duration** setting — if you want an instant jump with no animation, set Duration to **0**.
### Step 4: Add More Views
Rotate your model to a new angle (for example, a top-down view) and click **Add Current View** again. A second Camera View entry will appear. Repeat this for as many views as you need — front, side, top, close-up on a detail, etc.
### Step 5: Animate Between Views
Click the **Animate All Views** button in the main settings. The camera will smoothly transition through all saved positions in order.
To fine-tune the animation, adjust these key settings:
- **Duration** — increase for slower, more cinematic transitions
- **Ease** — controls the acceleration curve. **easeInOutSine** is the most popular choice for smooth, natural motion
- **Interpolation** — **Spherical** is the most commonly used for camera movements
- **Loop All Views** — enable to loop continuously, so the last view transitions back to the first
---
## Use Cases
**Single view as a home position** — If you want your product page to always start from a specific angle, save just one Camera View. Users can rotate the model freely, and the scene can always snap back to this starting position.
**Multiple views for product showcase** — Create 3–4 or more Camera Views to highlight different details of your jewelry: front face, top-down, side profile, close-up on the setting. Use **Animate All Views** or **Loop All Views** to present them as a guided tour.
---
## Per-View Buttons
Each saved Camera View has three action buttons:
Focus ViewDelete ViewUpdate View
- **Focus View** — Flies the camera to this saved position
- **Delete View** — Permanently removes this view
- **Update View** — Overwrites the saved coordinates with the current canvas position
::: warning
**Delete View** and **Update View** are irreversible. There is no undo — once you delete or update a view, the previous data is gone.
:::
---
## General Settings
Loop All Views
checkbox
Loops the animation continuously — the last view transitions back to the first
View Pause Time
input
How long the camera pauses at each view before moving to the next
Ease
select
Transition easing curve. Recommended: easeInOutSine for smooth, natural motion
Duration
slider
Transition time between views. Increase for slower, more cinematic movement
Rotation Offset
slider
Adds a rotation offset to the camera path
Interpolation
select
Camera path interpolation method. Recommended: Spherical
Seek on Scroll
checkbox
Ties the camera view transition to page scroll position
### Action Buttons
Animate All ViewsRecord All ViewsAdd Current ViewFocus NextFocus Previous
- **Animate All Views** — Plays the full transition sequence through all saved views
- **Record All Views** — Records the camera view animation as an MP4 video and downloads it to your computer. This is the same as **Export → Video Export → Record Camera Views**
- **Add Current View** — Saves the current canvas camera position as a new view
- **Focus Next** — Jumps to the next saved view
- **Focus Previous** — Jumps to the previous saved view
---
## Common Mistakes
::: danger Changing Field of View breaks Camera Views
If you change the **Field of View** setting in **Viewer → Camera**, all previously saved Camera Views will become inaccurate — the framing and zoom will shift. You will need to delete and re-create your Camera Views after changing Field of View. Always set your Field of View **before** creating Camera Views.
:::
---
## Video Tutorial
### iJewel3D Video Rendering — Camera Paths & Animated Lightmaps
---
## Related Pages
- **[Export Videos](./export-videos)** — Export camera view animations as video files
- **[Animations](./animations)** — Overview of all animation sections
- **[FAQ: Cameras & Animations](./faq-cameras)** — Common questions about cameras and camera paths
- **[Cameras (Loaded)](./cameras-loaded)** — Working with cameras imported from 3D software
---
# Viewer Animations
Viewer Animations lets you create dynamic, cinematic scenes by combining multiple visual effects into a single animation sequence. You can animate environment rotation, background color, lighting intensity, post-processing effects, and camera properties — all at the same time or in a carefully timed sequence.
This is one of the most powerful tools for creating professional jewelry presentations. By layering a few animation blocks — spinning the environment for moving reflections on metal, rotating the diamond light map for sparkle, and shifting the background color — you can turn a static 3D model into a living, cinematic preview.
You can also use these animations as **animated product images** — for example, when a customer hovers over your ring on a product page, the static thumbnail can transition into a looping video that showcases sparkling diamonds and moving reflections. Record the animation using [Export Videos](./export-videos) and embed it as a hover-triggered video on your website.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Animations tab, in the **Viewer Animations** section.
---
## How to Create an Animation — Step by Step
### Step 1: Add a New Animation Block
In the Viewer Animations section, click the **Add Animation** button at the bottom of the panel. A new collapsible tab labeled "Animation" will appear.
### Step 2: Choose a Property
Expand the new animation tab and select the property you want to animate from the **Property** dropdown. For example, choose **Environment Rotation** to make reflections move across your jewelry's metal surface.
### Step 3: Configure the Settings
Set your desired values:
- **From / To** — the start and end values for the animation (for colors, use the color pickers)
- **Duration** — animation length in milliseconds (e.g., `3000` = 3 seconds)
- **Ease** — the speed curve (e.g., `easeInOutSine` for a smooth start and finish)
- **Repeat Type** — what happens when the animation ends (Loop, Mirror, or Reverse)
Make sure the **updateScene** and **updateViewer** checkboxes are enabled — without them, the animation will not be visible.
### Step 4: Play the Animation
Click the **Animate** button at the top of the panel to start the animation. You should see the effect in real time on your model.
### Step 5: Add More Effects
Repeat Steps 1–3 to add more animation blocks. For example, add a second block for **Diamond Env Map Rotation** and a third for **Background Color**. Enable **Run in Parallel** to play them all at the same time.
---
## Popular Animation Examples
Here are four commonly used animations for jewelry presentations.
### Diamond Env Map Rotation
The signature jewelry animation. Rotates the environment map only for Diamond materials, making the gemstone facets sparkle and shift with light. Combine this with Environment Rotation for the most realistic result — the metal and the stone animate independently.
### Environment Rotation
Rotates the HDRI map around your model, making reflections glide across polished metal surfaces. Set **From** to `0` and **To** to `6.28` for a full 360° loop. Use **Mirror** repeat type for a seamless back-and-forth motion.
### Background Color
Smoothly transitions the scene background between two colors — for example, from warm ivory to cool grey. This creates a subtle atmospheric shift that enhances the cinematic feel of your presentation.
### Tonemap Exposure
Dynamically adjusts the exposure level of the final image. This can simulate a "reveal" effect — starting dim and fading up to full brightness, or creating a dramatic spotlight moment.
---
## Pro Tip: The Perfect Jewelry Preview
To create a professional, cinematic product preview, set up three animation blocks:
1. **Diamond Env Map Rotation** — for sparkling gemstone fire
2. **Environment Rotation** — for moving reflections on metal
3. **Background Color** — for a soft atmospheric color shift
Enable **Run in Parallel**, set all three to the same **Duration** (e.g., `5000` ms), and use **Mirror** as the Repeat Type. Your scene will come to life with smooth, looping motion that showcases your jewelry from its best angle.
---
## Video Tutorial
This tutorial covers both Camera Views and Viewer Animations in one walkthrough:
### iJewel3D Video Rendering — Camera Paths & Animated Lightmaps
---
## Master Controls & Animation List
The buttons at the top of the panel control all animation blocks simultaneously:
AnimateAnimate ReverseStop
- **Animate** — Starts all animation blocks from top to bottom
- **Animate Reverse** — Plays all animations in reverse (from end value back to start value)
- **Stop** — Immediately stops all active animations
You can create an unlimited number of animation blocks for a single scene. Each block appears as a collapsible tab.
Add Animation
button
Creates a new animation block at the bottom of the list
Run in Parallel
checkbox
When enabled, all animations play simultaneously. When disabled, they play sequentially (first finishes, then second starts, etc.)
---
## Block Settings
Each animation block contains the following parameters:
Start and end values for the animation. For colors, a color picker is shown
Duration
input
Animation length in milliseconds (e.g., 3000 = 3 seconds)
Ease
select
Speed curve for the animation. Recommended: easeInOutSine for smooth motion
Repeat Type
select
Behavior after the animation ends — Loop (restart from beginning), Mirror (reverse back and forth), or Reverse (play backwards continuously)
updateScene
checkbox
Calculates the scene changes. Must be enabled for the animation to work
updateViewer
checkbox
Renders the visual output. Must be enabled for the animation to be visible
updateCamera
checkbox
Enable only when animating camera properties (FOV, Depth of Field). Not needed for environment or post-processing animations
::: warning Important
Both **updateScene** and **updateViewer** must be enabled in every animation block, otherwise the effect will not appear. Enable **updateCamera** only if you are animating camera-related properties like FOV or Depth of Field.
:::
::: tip Mirror for seamless loops
Use **Mirror** as the Repeat Type for the smoothest seamless effect — the animation plays forward and then reverses naturally, avoiding any visible "jump" at the loop point.
:::
---
## Available Properties
### Environment & Light
Background Color
Smooth transition between two background colors (use From/To color pickers)
Environment Rotation
Rotates the HDRI environment map, making reflections move across metal surfaces. Use values 0 to 6.28 for a full 360° rotation
Environment Intensity
Changes the overall scene brightness (from 0 to 1 and above)
Fixed Env Map Direction
Locks the environment map direction during rotation
Directional Light Color / Direction
Animate the color and direction of the directional light source
### Gems Special
Diamond Env Map Rotation
Rotates the environment map only for Diamond materials, creating a sparkling "fire" effect inside gemstone facets. Use values 0 to 6.28 for a full rotation
### Tonemapping & Post-Processing
Tonemap Exposure
Animate the exposure level of the final image
Tonemap Saturation
Animate the color saturation of the scene
Tonemap Contrast
Animate the contrast level of the frame
Tonemap Tone Mapping
Switch between different tone mapping algorithms
### Camera & Lens
Camera FOV
Animate the field of view for a dolly zoom or push-in/pull-out effect
Depth of Field
Animate Focal Point, Blur Scale, and Focal Depth Range to smoothly shift focus between foreground and background
Chromatic Aberration
Add a color fringing lens effect for a cinematic look
Filmic Grain
Animate film grain intensity for a movie-like visual style
### Bloom & Reflections
Bloom (Intensity, Radius, Power)
Animate the soft glow around bright areas of the scene
SSR (Intensity, Boost)
Animate Screen Space Reflections intensity in real time
Vignette (Color, Power)
Animate the edge darkening to draw focus to the center of the frame
---
## Related Pages
- **[Camera Views](./camera-views)** — Save camera positions and animate transitions between them
- **[Animations](./animations)** — Overview of all animation sections
- **[Post Processing](./post-processing)** — Visual effects you can animate with Viewer Animations
- **[Export Videos](./export-videos)** — Export your animations as video files
- **[Bloom](./bloom)** — Bloom post-processing effect details
- **[Depth of Field](./depth-of-field)** — Depth of Field post-processing effect details
---
# Scrollable Camera Views Preview (Dev)
Scrollable Camera Views Preview controls how the camera behaves when the user scrolls the page. Instead of clicking buttons to transition between views, the camera position is tied directly to the scroll position — as the user scrolls down, the camera smoothly moves through all saved [Camera Views](./camera-views).
This is especially useful for product landing pages where you want the 3D model to animate cinematically as the visitor scrolls through the page content.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Animations tab, in the **Scrollable Camera Views Preview** section.
---
## Settings
Enabled
checkbox
Toggles scroll-driven camera control on or off
Ease
select
Easing function that controls how the camera accelerates and decelerates. Default: easeInOutSine for smooth, natural motion
Interpolation
select
Camera path interpolation method. Spherical moves the camera along an arc around the object, preserving distance and preventing the camera from clipping through models
Enable Damping
checkbox
Adds inertia to the camera movement. When enabled, the camera doesn't stop instantly after scrolling — it smoothly glides to its final position
Damping
slider
Damping coefficient (default: 0.040). Lower values create a smoother, more "buttery" glide after scrolling stops. Higher values make the camera respond more immediately
Init Anim Time
slider
Duration (in seconds) of the initial animation when the page first loads or the scene first appears (default: 1.000)
Canvas on Top
checkbox
When enabled, the 3D canvas renders above other page elements. Useful for debugging layer overlap issues
---
## Related Pages
- **[Camera Views](./camera-views)** — Save the camera positions that this feature scrolls through
- **[Viewer Animations](./viewer-animations)** — Create dynamic scenes with combined visual effects
- **[Animations](./animations)** — Overview of all animation sections
---
# Physics
The Physics section controls the physics engine for your scene. It enables gravity, collisions, and inertia for objects, making interactions with jewelry and scene elements feel realistic and dynamic.
A common use case in iJewel is **gyroscope-driven motion** — when a customer tilts their phone, the physics engine "pushes" objects in the scene. Pendants start swinging, stones catch the light from different angles, and the jewelry feels like it's physically in the viewer's hands.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Animations tab, in the **Physics** section.
---
## Settings
Enabled
checkbox
Global physics toggle. When disabled, all objects remain static. When enabled, physics laws apply — objects with mass can fall, collide, and respond to forces
Step Count
input
Number of physics calculations per frame (default: 100). Higher values produce more accurate simulations but increase CPU load
Delta
input
Time step for each physics calculation (default: 0.10). Controls how fast time flows in the physics simulation
### Action Buttons
StepMake Root Bodies
- **Step** — Manually advances the physics simulation by one step. Useful for debugging to see exactly where objects will move next
- **Make Root Bodies** — Automatically creates physics bodies for the root objects of your model. This turns regular 3D objects into physical entities with mass that can collide and interact with each other
---
## Related Pages
- **[Viewer Animations](./viewer-animations)** — Create dynamic scenes with combined visual effects
- **[Animations](./animations)** — Overview of all animation sections
- **[Camera Views](./camera-views)** — Save camera positions and animate transitions
---
# Materials
Materials define how every surface in your scene looks — the color, reflectivity, roughness, and transparency of metals, gemstones, ceramics, pearls, and more. iJewel Playground uses two specialized material types: **Physical Material (PBR)** for opaque surfaces like metals and ceramics, and **Diamond Material** for gemstones with ray-traced refraction and sparkle.
You can start from scratch by adjusting every parameter manually, or use one of the 300+ ready-made presets from the built-in library to get professional results instantly.
## Where to Find It
Materials can be accessed in two ways:
1. **Left panel — Material Presets** — Click on any object in the canvas, then browse the preset library tabs (Metals, Gems, Ceramics, Pearls, Other) to apply a preset with one click
2. **Right panel — Picking** — Select an object in the canvas while in Picking mode to open its full material editor (Physical Material or Diamond Material)
---
## Sections
---
## Related Pages
- **[Export Materials](./export-materials)** — Save and share material presets
- **[Import Materials](./import-materials)** — Load saved material presets
- **[FAQ: Materials & Diamonds](./faq-materials)** — Common questions about materials
- **[Post Processing](./post-processing)** — Visual effects applied to the final render
---
# PBR Materials
Physical Materials (PBR) control how surfaces look in your scene — their color, reflectivity, roughness, transparency, and more. This is the most detailed material editor in iJewel Playground and it uses a physically-based rendering model to produce realistic results.
Every metal, stone setting, enamel, ceramic, or glass surface in your jewelry model is controlled through this panel.
## How to Open
1. Click on any object in the canvas to select it
2. Go to the Picking tab on the [right panel](./ui-overview#right-panel-—-professional-tools)
3. The Picker will show the material name, and the **Physical Material** section will open below with all its settings
::: tip Merging Materials
You can rename a material in the **name** field. If you select a different object and rename its material to the **same name**, both objects will share the same material — any change to one will apply to both. This is useful when applying library presets to multiple objects at once.
:::
---
## Physical Material
These are the top-level settings that appear when you expand the Physical Material section.
name
input
Material name. Rename for convenience (e.g., "Metal", "Pearl") or to merge materials by giving them the same name
wireframe
checkbox
Shows the polygon structure of the mesh instead of the solid surface
vertexColors
checkbox
Enables vertex color data from the model. Usually black by default — rarely needs to be changed
color
color picker
The base color of the material. Use the color picker or enter a hex value directly. The format is 0x followed by 6 hex digits (e.g., 0xe5b377 for gold) — keep the 0x prefix and change only the last 6 characters
Custom color applied to metal
Gold metal material
map
image
Texture map applied on top of the base color. Requires UV unwrapping on the model. If your model has no UVs, enable Triplanar mapping below — seamless textures will wrap automatically
Texture map on surface
Wood texture with Triplanar
---
## Rough/Metal
Controls how reflective and metallic the surface appears. Together with color, this defines the overall look of your material.
roughness
slider
How rough or smooth the surface is. 0 = mirror-like, 1 = completely matte
metalness
slider
How metallic the surface is. 1 = fully metallic (gold, silver), 0 = non-metallic (ceramic, plastic)
roughnessMap
image
Texture that controls roughness variation across the surface. When added, a roughnessMap Sampler section appears for positioning
metalnessMap
image
Texture that controls metalness variation across the surface. When added, a metalnessMap Sampler appears
::: tip Map Samplers
Whenever you add a texture map, a **Sampler** section appears below it with controls for scale, offset, and repeat. If you are using [Triplanar](#triplanar) mapping, you can ignore the Sampler — Triplanar handles texture placement automatically.
:::
Roughness: 0
Roughness: 1
Metalness: 0
Roughness: 0.25, Metalness: 0.80
Roughness map applied
---
## Bump/Normal
Adds surface detail without changing the actual geometry. Bump maps use black-and-white images to create the illusion of height. Normal maps use specialized purple-tinted images for more precise surface detail.
bumpScale
slider
Controls the intensity of the bump effect
bumpMap
image
Black-and-white texture for surface bumps. When added, a bumpMap Sampler appears
normalMap
image
Purple-tinted normal map for detailed surface normals. Adds normalMap Sampler, normalScale (two inputs for X/Y strength), and normalMapType (Tangent Space)
displacementMap
image
Displacement texture that actually moves vertices. Adds displacementMap Sampler and displacementScale
Bump map on metal surface
---
## Sheen
Adds a soft, fabric-like sheen to the surface edges. Can create interesting velvet or silk effects.
sheen
slider
Intensity of the sheen effect
sheenColorMap
image
Texture controlling the sheen color across the surface
sheenRoughness
slider
Roughness of the sheen layer
sheenRoughnessMap
image
Texture controlling sheen roughness across the surface
---
## Clearcoat
Adds a secondary reflective layer on top of the base material — like a glossy varnish. Commonly used for **ceramic**, **marble**, and **lacquered** surfaces.
clearcoat
slider
Intensity of the clearcoat layer. 0 = off, 1 = full reflective coating
clearcoat-Roughness
slider
Roughness of the clearcoat layer itself
clearcoatMap
image
Texture controlling clearcoat intensity across the surface
clearcoatRoughnessMap
image
Texture controlling clearcoat roughness across the surface
clearcoatNormalMap
image
Normal map for the clearcoat layer specifically
Clearcoat: 0
Clearcoat: 1
---
## Emission
Makes the material glow by emitting light. Useful for decorative elements, LED accents, or artistic effects.
emissive
color picker
The color of the emitted light
emissiveIntensity
input
Brightness of the emission. Higher values create a stronger glow
emissiveMap
image
Texture controlling which parts of the surface emit light. When added, a Map Sampler appears
---
## Refraction
Controls transparency and light refraction through the material. Used for **glass**, **crystal**, and other see-through surfaces.
ior
slider
Index of Refraction — how much light bends when passing through. Glass ≈ 1.5, Diamond ≈ 2.42, Water ≈ 1.33
transmission
slider
How much light passes through the material. 1 = fully transparent, 0 = opaque
thickness
input
The virtual thickness of the material, affecting how much light is absorbed
transmissionMap
image
Texture controlling transmission across the surface
thicknessMap
image
Texture controlling thickness variation across the surface
attenuationDistance
input
Distance at which light is fully absorbed by the material's color
attenuationColor
color picker
The color that light takes on as it passes through the material
Glass material with refraction
---
## Blending
Controls transparency and visibility of the material. **Opacity** and **transparent** are the most commonly used settings here.
opacity
slider
Overall transparency of the object. 1.0 = fully visible, 0 = invisible
transparent
checkbox
Enables transparency rendering. Must be checked for opacity to take effect
depthFunc
select
Depth comparison function (default: LessEqual). Rarely needs to be changed
depthTest
checkbox
Whether to test against the depth buffer when rendering
depthWrite
checkbox
Whether to write to the depth buffer
colorWrite
checkbox
Whether to write color data to the frame buffer
alphaTest
slider
Alpha cutoff threshold. Pixels with alpha below this value are discarded
alphaHash
checkbox
Enables alpha hashing for order-independent transparency
dithering
checkbox
Adds dithering to reduce color banding artifacts
Blending
select
Blending mode (default: None)
alphaMap
image
Texture that controls transparency across the surface
Render to Depth
checkbox
Renders the material to the depth buffer
Inverse AlphaMap
checkbox
Inverts the alpha map values
Polygon Offset
checkbox
Enables polygon offset to prevent z-fighting between overlapping surfaces
Polygon Offset Factor
slider
Scale factor for the polygon offset
Polygon Offset Units
slider
Unit offset for the polygon offset
---
## AO/Lightmap
Ambient Occlusion and Light Maps add pre-baked shadow and lighting detail. Mostly used for ground planes and background surfaces.
aoMapIntensity
slider
Strength of the ambient occlusion map
aoMap
image
Ambient occlusion texture
lightMapIntensity
slider
Strength of the light map
lightMap
image
Pre-baked lighting texture
---
## Iridescence
Creates a rainbow-like color shifting effect that changes depending on the viewing angle — similar to oil on water or the sheen on certain pearls and shells. Some pearl presets in the library (e.g., "Pearl Green") use this for their color-shifting effect.
Intensity
slider
Strength of the iridescent effect
IOR
slider
Index of refraction for the thin film layer
Thickness0
slider
Minimum thin film thickness. Adjust together with Thickness1 to control the color range
Thickness1
slider
Maximum thin film thickness
iridescenceMap
image
Texture controlling where iridescence appears on the surface
iridescenceThicknessMap
image
Texture controlling thickness variation for the iridescent layer
---
## Environment
Override the global environment map for this specific material. This lets you use a different HDRI lighting setup for one material while the rest of the scene uses the default.
Override Environment
checkbox
Enables a custom environment map for this material only
Environment Intensity
slider
Brightness of the custom environment for this material
Environment Map
select
Choose from environment maps added to the scene
---
## General Settings
Side
select
Which side of the polygons to render. Double is most common. Use Front or Back for special effects
flatShading
checkbox
Disables smooth shading and shows flat polygon faces instead
Mesh count
read-only
Number of meshes using this material
### Download pmat
Download pmat
Exports the current material as a **.pmat** file. You can save your custom material settings and reuse them later or share them with others.
---
## LUT
Apply a per-material Look Up Table for color grading. This works the same way as the global [LUT post-processing effect](./lut), but applies only to this specific material.
Enabled
checkbox
Toggles the per-material LUT
index
select
Select which LUT to apply from the available presets
---
## Anisotropy
Creates directional reflections — like the elongated highlights you see on brushed metal.
Anisotropy — brushed metal reflections
Enabled
checkbox
Toggles the anisotropy effect
Factor
slider
Strength of the anisotropic stretch. 0 = uniform, 1 = fully stretched
Noise
slider
Adds randomness to the anisotropy direction
Texture
image
Direction map that controls the anisotropy direction per pixel
Mode
select
Anisotropy calculation mode (default: DIRECTION)
---
## Triplanar
Automatically projects textures onto a model from three directions (X, Y, Z) without requiring UV unwrapping. This is the solution when your model has no UVs — just enable Triplanar, and seamless textures will wrap correctly.
Triplanar mapping — no UV required
Enabled
checkbox
Toggles triplanar mapping on or off
Fix to Object
checkbox
Locks the texture to the object so it doesn't shift when the object moves
Scale
slider
Size of the projected texture. Smaller values = larger texture pattern
Blend
slider
How smoothly the three projection directions blend into each other
Offset
slider
Shifts the texture position
---
## ThinFilmLayer
Adds a subtle thin film interference effect, creating a slightly paler or tinted look on the surface.
Enabled
checkbox
Toggles the thin film layer effect
Intensity
slider
Strength of the thin film effect
Base Layer
4 inputs
Base layer parameters (4 values)
Noise Layer
4 inputs
Noise layer parameters (4 values)
Noise Params
4 inputs
Additional noise parameters (4 values)
---
## FragmentClipping
Advanced section for clipping parts of the material rendering at the fragment level.
---
## Flat Material
Renders the material without any lighting calculations — a flat, unlit appearance.
---
## SparkleBump (NoiseBump)
Generates a procedural sparkle/noise bump pattern on the surface. For best results, use ready-made sparkle materials from the preset library rather than configuring this manually.
---
## CustomBumpMap
Custom bump map settings for additional surface detail control.
---
## ClearcoatTint
Adds a subtle color tint to the clearcoat layer.
---
## SSBevel (Dev)
Per-material Screen Space Bevel control. This can also be configured globally from the [Screen Space Bevel](./screen-space-bevel) post-processing settings.
---
## Bloom
Per-material Bloom toggle. Allows you to enable or disable the [Bloom](./bloom) post-processing effect for this specific material.
---
## LayeredMaterial
Creates a beautiful two-tone effect where a second color appears in surface crevices and recesses. Commonly used for **oxidized bronze**, **oxidized copper**, **patina**, and **antique** finishes — the secondary color naturally accumulates in the grooves and hard-to-reach areas of the model.
Enabled
checkbox
Toggles the layered material effect
cutoff
slider
Controls the threshold between the base material and the layered color. Adjust to control how much of the secondary color appears
color
color picker
The secondary color that appears in crevices and recesses
roughness
slider
Roughness of the secondary layer
Scale
slider
Scale of the pattern used to distribute the secondary layer
StepSize
slider
Controls the sharpness of the transition between layers
metalness
slider
Metalness of the secondary layer
LayeredMaterial — oxidized bronze effect
---
## Auto UV Mapping
Automatic UV unwrapping for the model. Enable this if you want the system to generate UVs automatically.
---
## Object Actions
These buttons appear at the bottom of the Picking panel and affect the selected object.
Remove MaterialDuplicate ObjectWrap in ParentDelete Object
- **Remove Material** — Strips the material from the selected object
- **Duplicate Object** — Creates a copy of the selected object
- **Wrap in Parent** — Wraps the selected object inside a new parent group
- **Delete Object** — Permanently removes the selected object from the scene
::: warning
**Delete Object** is irreversible. There is no undo — the object and its data will be permanently removed.
:::
---
## Physics
Per-object physics body settings. See the [Physics](./physics) page for global physics configuration.
---
## Transform Animation
Per-object transform animation settings for position, rotation, and scale keyframes.
---
## Video Tutorial
---
## Related Pages
- **[Material Presets](./material-presets)** — Browse and apply ready-made material presets from the library
- **[Diamond Materials](./diamond-materials)** — Material settings specific to gemstones and diamonds
- **[FAQ: Materials & Diamonds](./faq-materials)** — Common questions about materials
- **[Look Up Tables (LUT)](./lut)** — Global LUT post-processing
- **[Screen Space Bevel](./screen-space-bevel)** — Global SSBevel post-processing
- **[Bloom](./bloom)** — Global Bloom post-processing
---
# Diamond Materials
Diamond Material is a specialized shader designed for rendering gemstones — diamonds, emeralds, sapphires, rubies, and other precious stones. Unlike [PBR Materials](./pbr-materials), which simulate opaque surfaces, Diamond Material uses ray-traced refraction and dispersion to produce realistic sparkle, fire, and brilliance inside the stone.
How your gemstone looks depends heavily on the **HDRI environment map** assigned to it. Different HDRI maps produce dramatically different sparkle patterns, so try several options from the Gems library on the left panel or create your own. All images on this page use the **Gem001** HDRI map.
::: warning My diamond doesn't look right?
If your diamond looks white, flat, or lacks sparkle, the most common cause is the wrong HDRI environment map. See [FAQ: Materials & Diamonds](./faq-materials) for troubleshooting steps and video tutorials on fixing common diamond issues.
:::
## Gem Shapes
If your scene contains multiple diamond shapes (round, pear, oval, princess, marquise, emerald, etc.), each shape **must be on a separate material layer**. For example, round diamonds should be on a "Gem 01" layer, pear shapes on a "Gem 02" layer, and so on. If different shapes share the same material layer, you won't be able to adjust settings per shape, and some stones may render incorrectly.
### Video Tutorial — Fixing Diamond Rendering
### Shape Examples
Round
Pear
Oval
Princess
Marquise
Emerald
---
## How to Open
1. Click on any gemstone object in the canvas to select it
2. Go to the Picking tab on the [right panel](./ui-overview#right-panel-—-professional-tools)
3. The Picker will show the material name, and the **Diamond Material** section will open below with all its settings
If your object does not have a Diamond Material yet, you can assign one in two ways:
1. **From the Gems library** — Open the Gems tab on the left panel and select any gem preset to apply it to the selected object
2. **From Picking → Diamonds** — Go to the Picking panel, find the **Diamonds** section, and click **Make Diamond**. This converts the Physical Material on the selected object into a Diamond Material
---
## Diamond Material
name
input
Material name. Works the same as in PBR Materials — rename for convenience or give two objects the same name to merge their materials
wireframe
checkbox
Shows the polygon structure of the gemstone mesh
Environment
select
Select which environment map to use for this gemstone. If you have added multiple environments to the Diamonds section, you can assign different HDRIs to different stones
Color
color picker
The base color of the gemstone. White (0xffffff) for a classic diamond, or any color for colored gemstones like emerald, sapphire, or ruby
Emerald green color applied to diamond
Env Intensity
slider
Controls the overall brightness of the gemstone. Default is around 1.30. Increase for a brighter, more vivid stone; decrease for a subtler look
Env Intensity: 0.84 — slightly dimmer stone
Env Rotation Offset
slider
Rotates the HDRI map around the gemstone. Use this to find the perfect lighting angle — rotate until you see the most beautiful sparkle and fire for your current camera position
Env Rotation Offset X/Y/Z
slider
Fine-tune the environment map rotation on individual axes. Useful when one specific diamond has a bright overexposed spot — adjust these to shift the HDRI and fix it
Dispersion
slider
Adds rainbow color separation (chromatic dispersion) — the colorful "fire" effect you see in real diamonds when light splits into its spectral colors
Dispersion enabled — rainbow fire effect
Absorption
slider
Intensifies the selected Color for colored gemstones. Only visible when the stone has a non-white color — higher values produce a deeper, more saturated tint
Absorption — intensified color on a tinted stone
Refractive Index
slider
Controls the depth and brilliance of the stone. Default is 2.60. Lower values create a shallower, less brilliant look. Increase or decrease depending on the stone shape and cut — unusual or custom cuts may need adjustment
Gamma
slider
Contrast adjustment for the gemstone's internal colors. Default is 1.00. Increase to boost contrast and make colors more vivid, decrease for a softer look
RGB Boost
3 inputs
Boost individual Red, Green, and Blue channels. An alternative to the Color picker for adding specific tints — can produce brighter, more saturated color effects
Makes the stone transparent, allowing the metal prongs and setting behind it to show through. This creates beautiful color reflections inside the gemstone from the surrounding metal
Transmission — metal prongs visible through the stone
Reflectivity
slider
Controls how much the surface of the gemstone reflects light. Higher values create a more mirror-like top surface
Ray Bounces
slider
Number of times light bounces inside the stone. Default is 4–5. Increase up to 16 for more realistic results on certain cuts
Ray Bounces: 12 — more realistic brilliance
Diamond Oriented Lighting
slider
Changes the orientation of the environment map relative to the stone
::: tip Finding the perfect sparkle
If a diamond looks overexposed (pure white with no detail) from a certain angle, use the **Env Rotation Offset** sliders to rotate the HDRI map slightly. Small adjustments can dramatically change how light enters the stone and produce much better fire and brilliance.
:::
---
## General Settings
Mesh count
read-only
Number of meshes using this diamond material
uuid
read-only
Unique identifier for this material
### Download .dmat
Download .dmat
Exports the current diamond material as a **.dmat** file. You can save your custom gemstone settings and reuse them later. See [Export Materials](./export-materials) for more details.
---
## LUT
Apply a per-material Look Up Table for color grading. See the [Look Up Tables (LUT)](./lut) page for a full overview of how LUT works.
---
## ThinFilmLayer
Adds a thin film interference effect that creates rainbow-like color shifting on the stone's surface. See [PBR Materials — ThinFilmLayer](./pbr-materials#thinfilmlayer) for settings details.
---
## Flat Material
Renders the gemstone without any lighting calculations — a flat, unlit appearance.
---
## Bloom
Per-material Bloom toggle. Allows you to enable or disable the [Bloom](./bloom) post-processing effect for this specific gemstone.
---
## Inclusions
Inclusions simulate the natural imperfections found inside real gemstones — tiny cracks, mineral deposits, and internal fractures that give each stone its unique character. This is especially important for colored gemstones like emeralds, sapphires, and rubies, which naturally contain visible inclusions.
You can use ready-made inclusion maps from the **Gems** library on the left panel, or create your own unique inclusions by adding custom maps and adjusting the settings below.
Enabled
checkbox
Toggles inclusions on or off
VariableBlur
slider
Controls the blur amount applied to inclusion textures
VariableParam1
slider
First variable parameter for inclusion rendering
VariableParam2
slider
Second variable parameter for inclusion rendering
blurRadius
slider
Radius of the blur applied to inclusions
ClampHDR
checkbox
Clamps HDR values in the inclusion rendering
SurfaceScale
slider
Scale of the surface texture for inclusions
Color Map Scale
slider
Scale of the color map used for inclusions
BumpScale
slider
Intensity of the bump effect from inclusion textures
InclusionScale
slider
Scale of the inclusion pattern inside the stone
IncNormalScale
slider
Scale of the inclusion normal map effect
InclusionRoughnessMap
image
Roughness texture for the inclusion areas
InclusionMap
image
Main inclusion texture — black-and-white map that defines where inclusions appear inside the stone
Surface Roughness
slider
Roughness of the stone's surface (not the internal inclusions)
RoughnessMap
image
Surface roughness texture map
normalMap
image
Normal map for surface detail on the stone
InclusionNormalMap
image
Normal map specifically for inclusions — adds additional surface detail to the inclusion areas
Map
image
General texture map for the gemstone surface
---
## Auto UV Mapping
Automatic UV unwrapping for the gemstone model.
---
## Object Actions
These buttons appear at the bottom of the Picking panel and affect the selected object.
Remove MaterialDuplicate ObjectWrap in ParentDelete Object
- **Remove Material** — Strips the material from the selected object
- **Duplicate Object** — Creates a copy of the selected object
- **Wrap in Parent** — Wraps the selected object inside a new parent group
- **Delete Object** — Permanently removes the selected object from the scene
---
## Physics
Per-object physics body settings. See the [Physics](./physics) page for global physics configuration.
---
## Transform Animation
Per-object transform animation settings for position, rotation, and scale keyframes.
---
## Diamond Close-Up Views
Front
Side
Back
---
## Video Tutorial
---
## Related Pages
- **[PBR Materials](./pbr-materials)** — Physical material settings for metals, ceramics, and other surfaces
- **[Material Presets](./material-presets)** — Browse and apply ready-made material presets
- **[FAQ: Materials & Diamonds](./faq-materials)** — Common questions about materials and diamonds
- **[Export Materials](./export-materials)** — Save and share material presets
- **[Look Up Tables (LUT)](./lut)** — LUT color grading
- **[Bloom](./bloom)** — Bloom post-processing
- **[Viewer Animations](./viewer-animations)** — Animate Diamond Env Map Rotation for sparkling effects
---
# Material Presets
iJewel Playground includes a library of 300+ ready-made materials that you can apply to any object with a single click. The presets are professionally configured and cover the most common jewelry materials — from yellow and white gold to emeralds, sapphires, pearls, and ceramics.
## How to Use
1. Click on any object in the canvas to select it
2. On the left panel, browse the material categories using the tabs at the top
3. Click on any preset thumbnail to apply it instantly to the selected object
## Categories
The library is organized into five tabs:
Metals
Gold (yellow, white, rose), silver, platinum, palladium, brass, copper, bronze, titanium, and more. Applies a PBR Material
Gems
Diamonds (white, colored), emeralds, sapphires, rubies, amethyst, topaz, and many more. Applies a Diamond Material
Ceramics
Ceramic, marble, enamel, and other non-metallic surfaces. Applies a PBR Material with clearcoat
Pearls
Pearl materials with iridescence and soft sheen effects. Applies a PBR Material with iridescence
Other
Wood, leather, fabric, glass, rubber, and other specialized surfaces
## Availability
The number of available presets depends on your subscription plan. Free users have access to a limited selection, while Premium and Advance plans unlock the full library. See [iJewel Pricing](https://ijewel.design/pricing) for plan details and feature comparison.
## Saving Custom Presets
You can save your own custom materials to the library for reuse across projects. After configuring a material the way you want it, use the **Download** button in the material panel:
- **Download pmat** — saves a Physical Material as a `.pmat` file
- **Download dmat** — saves a Diamond Material as a `.dmat` file
To reapply a saved material, drag and drop the `.pmat` or `.dmat` file into Playground. See [Export Materials](./export-materials) and [Import Materials](./import-materials) for the full workflow.
## Video Tutorial
---
## Related Pages
- **[PBR Materials](./pbr-materials)** — Full Physical Material editor reference
- **[Diamond Materials](./diamond-materials)** — Full Diamond Material editor reference
- **[Materials](./materials)** — Materials overview
- **[Export Materials](./export-materials)** — Save and share material presets
- **[Import Materials](./import-materials)** — Load saved material presets
- **[FAQ: Materials & Diamonds](./faq-materials)** — Common questions about materials
---
# Material Configurator
The Material Configurator lets you create interactive material variations for your 3D model. When embedded in the [iJewel Viewer](../viewer/introduction), your customers can switch between different metals, gemstone colors, ceramics, pearls, and any other materials — directly on your product page.
When you add a configurator, a UI bar appears at the bottom of the canvas. The lower bar shows the configuration name (e.g., "Metal"), and the upper bar displays the available material variants as clickable thumbnails.
---
## Adding a Material Configurator — Step by Step
### Step 1: Select the Object
Click on the object in the canvas that you want to add material variations to. The object will be highlighted.
### Step 2: Open the Configurator
At the top of the canvas, click the **Add Configurator** button. A material library panel will appear with tabs for different categories (Metals, Gems, Ceramics, Pearls, Other).
### Step 3: Choose Materials
Click on any material to add it as a variant — it will instantly appear in the configurator bar at the bottom of the canvas. You can add as many variants as you want — there is no limit. Click on a selected material again to remove it.
### Step 4: Done
The configuration name is automatically taken from the material name of the selected object. You can now click on different variants in the bottom bar to preview how each material looks on your model.
---
## Adding Gem Variations
The process works the same for gemstones. Select a gem object, click **Add Configurator**, and the library will automatically open to the **Gems** tab (since the selected object already has a [Diamond Material](./diamond-materials)). Choose your gem variants the same way.
---
## Adding Custom Materials
If you've created a custom material in the [PBR Materials](./pbr-materials) or [Diamond Materials](./diamond-materials) editor (for example, a specific color or texture), you can add it as a variant too:
1. Make sure your object is still selected
2. Make all the material changes you need in the Picking panel
3. At the bottom of the canvas, click the **+** button (Add Current Material) — the last button in the configurator bar
This adds your current custom material as a new variant.
---
## Editing the Configuration Name
The configuration name appears in the lower bar on the canvas (e.g., "Metal", "Gem"). To change it:
1. Enter Edit mode — either click the **Edit Configurator** button at the top of the canvas (after selecting the object), or right-click on the configuration name and choose **Edit**
2. Change the name in the input field at the top of the material library panel
---
## Editing Variant Names
Each material variant has a name that appears as a tooltip on hover. To rename a variant:
1. Hover over the variant thumbnail in the configurator bar
2. A tooltip with the variant name will appear — move your cursor to the right side of the tooltip
3. Click the **pencil icon** to edit the name
---
## Removing a Material Variant
There are two ways to remove a variant from the configurator:
**Method 1** — Right-click on the variant thumbnail in the configurator bar and click **Delete**
**Method 2** — Enter Edit mode and click on the material in the library to deselect it
---
## Deleting an Entire Configuration
To remove the entire configurator from an object:
---
## Right Panel Controls
You can also manage the configurator from the right panel. Select an object and go to the **Configurator** tab to find the **Material Configurator** section.
The right panel provides additional buttons:
Clear VariationsRemove CompletelyAdd VariationRefresh UIApply All
- **Clear Variations** — Removes all material variations from the selected configurator
- **Remove Completely** — Deletes the entire configurator from the object
- **Add Variation** — Adds the material currently applied to the object (the one you edited in the [Picking](./pbr-materials) panel) as a new variant
- **Refresh UI** — Refreshes the configurator UI on the canvas
- **Apply All** — Applies changes to all configurator entries
---
## Downloading & Importing Configurations
### Download a Configuration Preset
To save your configurator setup for reuse across other scenes:
1. Go to the **Configurator** tab on the right panel
2. Find the **Material Configurator** section
3. Click the **three dots** (⋯) next to the section title
4. Click **Download Preset**
A `.json` file will be downloaded to your computer containing all your material configurations.
### Import a Configuration Preset
To apply a saved configuration to a new scene:
1. Open the new scene in Playground
2. Drag and drop the `.json` file into the canvas
The configurator will automatically apply to objects that have matching material names. This is why it's important to keep consistent material names across your models.
::: warning Material names must match
The configurator links to objects by their **material name** (the `name` field in [PBR Materials](./pbr-materials#physical-material) or [Diamond Materials](./diamond-materials#diamond-material)). If you rename a material after creating a configurator, the link will break and the configurator will stop working. Always set your material names before creating configurations.
:::
---
## Video Tutorial
### Transfer Configurator Between Projects
---
## Related Pages
- **[PBR Materials](./pbr-materials)** — Physical material editor for metals, ceramics, and surfaces
- **[Diamond Materials](./diamond-materials)** — Diamond material editor for gemstones
- **[Material Presets](./material-presets)** — Browse the built-in material library
- **[Export Scene Settings](./export-scene-settings)** — Export full scene settings including configurator data
- **[Import Scene Settings](./import-scene-settings)** — Import scene configurations
- **[FAQ: Materials & Diamonds](./faq-materials)** — Common questions about materials
---
# Material Configurator
The Material Configurator lets you create interactive material variations for your 3D model. When embedded in the [iJewel Viewer](../viewer/introduction), your customers can switch between different metals, gemstone colors, ceramics, pearls, and any other materials — directly on your product page.
When you add a configurator, a UI bar appears at the bottom of the canvas. The lower bar shows the configuration name (e.g., "Metal"), and the upper bar displays the available material variants as clickable thumbnails.
---
## Adding a Material Configurator — Step by Step
### Step 1: Select the Object
Click on the object in the canvas that you want to add material variations to. The object will be highlighted.
### Step 2: Open the Configurator
At the top of the canvas, click the **Add Configurator** button. A material library panel will appear with tabs for different categories (Metals, Gems, Ceramics, Pearls, Other).
### Step 3: Choose Materials
Click on any material to add it as a variant — it will instantly appear in the configurator bar at the bottom of the canvas. You can add as many variants as you want — there is no limit. Click on a selected material again to remove it.
### Step 4: Done
The configuration name is automatically taken from the material name of the selected object. You can now click on different variants in the bottom bar to preview how each material looks on your model.
---
## Adding Gem Variations
The process works the same for gemstones. Select a gem object, click **Add Configurator**, and the library will automatically open to the **Gems** tab (since the selected object already has a [Diamond Material](./diamond-materials)). Choose your gem variants the same way.
---
## Adding Custom Materials
If you've created a custom material in the [PBR Materials](./pbr-materials) or [Diamond Materials](./diamond-materials) editor (for example, a specific color or texture), you can add it as a variant too:
1. Make sure your object is still selected
2. Make all the material changes you need in the Picking panel
3. At the bottom of the canvas, click the **+** button (Add Current Material) — the last button in the configurator bar
This adds your current custom material as a new variant.
---
## Editing the Configuration Name
The configuration name appears in the lower bar on the canvas (e.g., "Metal", "Gem"). To change it:
1. Enter Edit mode — either click the **Edit Configurator** button at the top of the canvas (after selecting the object), or right-click on the configuration name and choose **Edit**
2. Change the name in the input field at the top of the material library panel
---
## Editing Variant Names
Each material variant has a name that appears as a tooltip on hover. To rename a variant:
1. Hover over the variant thumbnail in the configurator bar
2. A tooltip with the variant name will appear — move your cursor to the right side of the tooltip
3. Click the **pencil icon** to edit the name
---
## Removing a Material Variant
There are two ways to remove a variant from the configurator:
**Method 1** — Right-click on the variant thumbnail in the configurator bar and click **Delete**
**Method 2** — Enter Edit mode and click on the material in the library to deselect it
---
## Deleting an Entire Configuration
To remove the entire configurator from an object:
---
## Right Panel Controls
You can also manage the configurator from the right panel. Select an object and go to the **Configurator** tab to find the **Material Configurator** section.
The right panel provides additional buttons:
Clear VariationsRemove CompletelyAdd VariationRefresh UIApply All
- **Clear Variations** — Removes all material variations from the selected configurator
- **Remove Completely** — Deletes the entire configurator from the object
- **Add Variation** — Adds the material currently applied to the object (the one you edited in the [Picking](./pbr-materials) panel) as a new variant
- **Refresh UI** — Refreshes the configurator UI on the canvas
- **Apply All** — Applies changes to all configurator entries
---
## Downloading & Importing Configurations
### Download a Configuration Preset
To save your configurator setup for reuse across other scenes:
1. Go to the **Configurator** tab on the right panel
2. Find the **Material Configurator** section
3. Click the **three dots** (⋯) next to the section title
4. Click **Download Preset**
A `.json` file will be downloaded to your computer containing all your material configurations.
### Import a Configuration Preset
To apply a saved configuration to a new scene:
1. Open the new scene in Playground
2. Drag and drop the `.json` file into the canvas
The configurator will automatically apply to objects that have matching material names. This is why it's important to keep consistent material names across your models.
::: warning Material names must match
The configurator links to objects by their **material name** (the `name` field in [PBR Materials](./pbr-materials#physical-material) or [Diamond Materials](./diamond-materials#diamond-material)). If you rename a material after creating a configurator, the link will break and the configurator will stop working. Always set your material names before creating configurations.
:::
---
## Video Tutorial
### Transfer Configurator Between Projects
---
## Related Pages
- **[PBR Materials](./pbr-materials)** — Physical material editor for metals, ceramics, and surfaces
- **[Diamond Materials](./diamond-materials)** — Diamond material editor for gemstones
- **[Material Presets](./material-presets)** — Browse the built-in material library
- **[Export Scene Settings](./export-scene-settings)** — Export full scene settings including configurator data
- **[Import Scene Settings](./import-scene-settings)** — Import scene configurations
- **[FAQ: Materials & Diamonds](./faq-materials)** — Common questions about materials
---
# Material Configurator
The Material Configurator lets you create interactive material variations for your 3D model. When embedded in the [iJewel Viewer](../viewer/introduction), your customers can switch between different metals, gemstone colors, ceramics, pearls, and any other materials — directly on your product page.
When you add a configurator, a UI bar appears at the bottom of the canvas. The lower bar shows the configuration name (e.g., "Metal"), and the upper bar displays the available material variants as clickable thumbnails.
---
## Adding a Material Configurator — Step by Step
### Step 1: Select the Object
Click on the object in the canvas that you want to add material variations to. The object will be highlighted.
### Step 2: Open the Configurator
At the top of the canvas, click the **Add Configurator** button. A material library panel will appear with tabs for different categories (Metals, Gems, Ceramics, Pearls, Other).
### Step 3: Choose Materials
Click on any material to add it as a variant — it will instantly appear in the configurator bar at the bottom of the canvas. You can add as many variants as you want — there is no limit. Click on a selected material again to remove it.
### Step 4: Done
The configuration name is automatically taken from the material name of the selected object. You can now click on different variants in the bottom bar to preview how each material looks on your model.
---
## Adding Gem Variations
The process works the same for gemstones. Select a gem object, click **Add Configurator**, and the library will automatically open to the **Gems** tab (since the selected object already has a [Diamond Material](./diamond-materials)). Choose your gem variants the same way.
---
## Adding Custom Materials
If you've created a custom material in the [PBR Materials](./pbr-materials) or [Diamond Materials](./diamond-materials) editor (for example, a specific color or texture), you can add it as a variant too:
1. Make sure your object is still selected
2. Make all the material changes you need in the Picking panel
3. At the bottom of the canvas, click the **+** button (Add Current Material) — the last button in the configurator bar
This adds your current custom material as a new variant.
---
## Editing the Configuration Name
The configuration name appears in the lower bar on the canvas (e.g., "Metal", "Gem"). To change it:
1. Enter Edit mode — either click the **Edit Configurator** button at the top of the canvas (after selecting the object), or right-click on the configuration name and choose **Edit**
2. Change the name in the input field at the top of the material library panel
---
## Editing Variant Names
Each material variant has a name that appears as a tooltip on hover. To rename a variant:
1. Hover over the variant thumbnail in the configurator bar
2. A tooltip with the variant name will appear — move your cursor to the right side of the tooltip
3. Click the **pencil icon** to edit the name
---
## Removing a Material Variant
There are two ways to remove a variant from the configurator:
**Method 1** — Right-click on the variant thumbnail in the configurator bar and click **Delete**
**Method 2** — Enter Edit mode and click on the material in the library to deselect it
---
## Deleting an Entire Configuration
To remove the entire configurator from an object:
---
## Right Panel Controls
You can also manage the configurator from the right panel. Select an object and go to the **Configurator** tab to find the **Material Configurator** section.
The right panel provides additional buttons:
Clear VariationsRemove CompletelyAdd VariationRefresh UIApply All
- **Clear Variations** — Removes all material variations from the selected configurator
- **Remove Completely** — Deletes the entire configurator from the object
- **Add Variation** — Adds the material currently applied to the object (the one you edited in the [Picking](./pbr-materials) panel) as a new variant
- **Refresh UI** — Refreshes the configurator UI on the canvas
- **Apply All** — Applies changes to all configurator entries
---
## Downloading & Importing Configurations
### Download a Configuration Preset
To save your configurator setup for reuse across other scenes:
1. Go to the **Configurator** tab on the right panel
2. Find the **Material Configurator** section
3. Click the **three dots** (⋯) next to the section title
4. Click **Download Preset**
A `.json` file will be downloaded to your computer containing all your material configurations.
### Import a Configuration Preset
To apply a saved configuration to a new scene:
1. Open the new scene in Playground
2. Drag and drop the `.json` file into the canvas
The configurator will automatically apply to objects that have matching material names. This is why it's important to keep consistent material names across your models.
::: warning Material names must match
The configurator links to objects by their **material name** (the `name` field in [PBR Materials](./pbr-materials#physical-material) or [Diamond Materials](./diamond-materials#diamond-material)). If you rename a material after creating a configurator, the link will break and the configurator will stop working. Always set your material names before creating configurations.
:::
---
## Video Tutorial
### Transfer Configurator Between Projects
---
## Related Pages
- **[PBR Materials](./pbr-materials)** — Physical material editor for metals, ceramics, and surfaces
- **[Diamond Materials](./diamond-materials)** — Diamond material editor for gemstones
- **[Material Presets](./material-presets)** — Browse the built-in material library
- **[Export Scene Settings](./export-scene-settings)** — Export full scene settings including configurator data
- **[Import Scene Settings](./import-scene-settings)** — Import scene configurations
- **[FAQ: Materials & Diamonds](./faq-materials)** — Common questions about materials
---
# Object Configurator
The Object Configurator in Playground allows you to create interactive **object variations** — letting end users switch between different design options (e.g., ring heads, pendant shapes, or bracelet links) directly in the embedded 3D viewer.
## How It Works
The Object Configurator operates by **toggling visibility** of objects within a single scene. All object variations are loaded into the scene at once, but only one is visible at a time. When the user selects a different option, the current object is hidden and the selected one is revealed.
**Example:** A ring with 5 different head designs — all 5 heads are present in the scene, but only the selected one is displayed. Switching between options is instant.
::: info
Because all variations must be included in a single file, this approach results in **larger file sizes**. The more object variations you add, the heavier the scene becomes.
:::
## Video Tutorial
Watch how to set up an Object Configurator in Playground step by step:
---
## When to Use
The Playground Object Configurator is suitable for:
- **Quick prototyping** — testing how different design options look together
- **Simple configurations** — a small number of variations (2–5 options)
- **Internal previews** — sharing design alternatives with your team before publishing
---
## Advanced: Ring Configurator on iJewel3D Platform
For production use and customer-facing configurators, we recommend the **Ring Configurator** available on the iJewel3D Platform.
Instead of loading all variations into one heavy file, the Platform Configurator uses an **anchor-based system**:
- **Components are separate files** — each head and shank is an independent, lightweight 3D model
- **Anchors define placement** — components snap together automatically at predefined anchor points
- **Files are swapped dynamically** — only the currently selected combination is loaded, keeping performance optimal
- **Hundreds of combinations** — mix and match heads, shanks, diamond shapes, carat sizes, and materials
This results in **significantly smaller file sizes** and a smoother user experience, especially for catalogs with many variations.
::: tip Getting Started with Ring Configurator
The Ring Configurator documentation covers everything from preparing 3D components to embedding the final configurator on your website:
**[Ring Configurator Documentation →](https://docs.ijewel3d.com/ring-configurator/introduction.html)**
:::
---
## Related Pages
- **[Material Configurator](./material-configurator)** — Switch materials (metals, gems, textures) interactively
- **[Ring Configurator (Platform)](https://docs.ijewel3d.com/ring-configurator/introduction.html)** — Advanced anchor-based configurator for production use
---
# Modifiers — Object Rotation
The Object Rotation modifier duplicates an object around a circle using instanced copies. Because it creates instances (not full copies), your scene stays lightweight and fast — even with dozens of duplicates. This is especially useful for creating chain links, repeating gemstone patterns, halo settings, and other circular arrangements common in jewelry design.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Picking tab, in the **Modifiers** section. Select an object in the canvas to see the modifier controls.
---
## Settings
Enable
Checkbox — activates the Object Rotation modifier on the selected object
Rotation Count
Slider — the total number of instances placed around the circle. Higher values produce a denser ring of copies
Axis
Select (X / Y / Z) — the axis around which the copies are rotated. Choose the axis that matches your model's orientation — for example, Y for a ring viewed from above
Rotation Skip
Input — comma-separated list of instance numbers to skip (e.g., 0,1,3,5,7). Skipped positions will be empty, allowing you to create patterns with gaps. Instance numbering starts at 0
::: tip Pivot Point
Make sure your object's pivot point is at the center of the scene, not inside the object itself. If the pivot is inside the object, all copies will stack on top of each other instead of spreading around a circle.
:::
::: info Settings not appearing?
If the modifier settings don't appear after enabling the checkbox, simply deselect the object and select it again — the settings will show up.
:::
---
## Approach 1 — Single Object
Use this approach when you have a single piece (like a chain link) and want to repeat it around a circle.
### Step 1: Select the Object
Click on the object in the canvas that you want to duplicate. The object will be highlighted and its properties will appear in the right panel.
### Step 2: Enable the Modifier
In the right panel under **Modifiers**, check the **Enable** checkbox for Object Rotation. The object will immediately be duplicated around a circle.
### Step 3: Set the Rotation Count
Use the **Rotation Count** slider to control how many copies are placed around the circle. Increase the value until your ring or pattern is complete.
### Step 4: Choose the Correct Axis
Select the rotation **Axis** (X, Y, or Z) that matches your model's orientation. If the copies appear in the wrong plane, try a different axis.
---
## Approach 2 — Parent Object with Rotation Skip
Use this approach when you have a parent object with multiple children (e.g., a chain link with a diamond) and want to skip certain positions so that only some instances include the child objects.
### Step 1: Select the Parent Object
To select the entire parent group (including all its children like diamonds and prongs), go to the Picking tab, find the **Hierarchy** section, and click on the parent object's name in the hierarchy tree. This selects the parent along with all child objects beneath it.
### Step 2: Set the Rotation Count
Enable the modifier and set the **Rotation Count** to the total number of positions you need.
### Step 3: Use Rotation Skip
In the **Rotation Skip** field, enter the instance numbers you want to hide, separated by commas. For example, if you have 30 total positions and want diamonds only at even-numbered positions, enter all the odd numbers: `1,3,5,7,9,11,13,15,17,19,21,23,25,27,29`. Instance numbering starts at `0`.
The skipped instances will be removed, creating a pattern where only certain positions show the full parent-child group.
---
## Video Tutorial
### Object Rotation Modifier
---
## Related Pages
- **[Scene Basics](./scene)** — Overview of working with 3D objects
- **[Scene Hierarchy](./hierarchy)** — Understanding parent-child relationships
- **[Transform Controls](./transform-controls)** — Moving, rotating, and scaling objects
- **[PBR Materials](./pbr-materials)** — Physical material editor for metals and surfaces
- **[Diamond Materials](./diamond-materials)** — Diamond material editor for gemstones
---
# Modifiers — Object Rotation
The Object Rotation modifier duplicates an object around a circle using instanced copies. Because it creates instances (not full copies), your scene stays lightweight and fast — even with dozens of duplicates. This is especially useful for creating chain links, repeating gemstone patterns, halo settings, and other circular arrangements common in jewelry design.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Picking tab, in the **Modifiers** section. Select an object in the canvas to see the modifier controls.
---
## Settings
Enable
Checkbox — activates the Object Rotation modifier on the selected object
Rotation Count
Slider — the total number of instances placed around the circle. Higher values produce a denser ring of copies
Axis
Select (X / Y / Z) — the axis around which the copies are rotated. Choose the axis that matches your model's orientation — for example, Y for a ring viewed from above
Rotation Skip
Input — comma-separated list of instance numbers to skip (e.g., 0,1,3,5,7). Skipped positions will be empty, allowing you to create patterns with gaps. Instance numbering starts at 0
::: tip Pivot Point
Make sure your object's pivot point is at the center of the scene, not inside the object itself. If the pivot is inside the object, all copies will stack on top of each other instead of spreading around a circle.
:::
::: info Settings not appearing?
If the modifier settings don't appear after enabling the checkbox, simply deselect the object and select it again — the settings will show up.
:::
---
## Approach 1 — Single Object
Use this approach when you have a single piece (like a chain link) and want to repeat it around a circle.
### Step 1: Select the Object
Click on the object in the canvas that you want to duplicate. The object will be highlighted and its properties will appear in the right panel.
### Step 2: Enable the Modifier
In the right panel under **Modifiers**, check the **Enable** checkbox for Object Rotation. The object will immediately be duplicated around a circle.
### Step 3: Set the Rotation Count
Use the **Rotation Count** slider to control how many copies are placed around the circle. Increase the value until your ring or pattern is complete.
### Step 4: Choose the Correct Axis
Select the rotation **Axis** (X, Y, or Z) that matches your model's orientation. If the copies appear in the wrong plane, try a different axis.
---
## Approach 2 — Parent Object with Rotation Skip
Use this approach when you have a parent object with multiple children (e.g., a chain link with a diamond) and want to skip certain positions so that only some instances include the child objects.
### Step 1: Select the Parent Object
To select the entire parent group (including all its children like diamonds and prongs), go to the Picking tab, find the **Hierarchy** section, and click on the parent object's name in the hierarchy tree. This selects the parent along with all child objects beneath it.
### Step 2: Set the Rotation Count
Enable the modifier and set the **Rotation Count** to the total number of positions you need.
### Step 3: Use Rotation Skip
In the **Rotation Skip** field, enter the instance numbers you want to hide, separated by commas. For example, if you have 30 total positions and want diamonds only at even-numbered positions, enter all the odd numbers: `1,3,5,7,9,11,13,15,17,19,21,23,25,27,29`. Instance numbering starts at `0`.
The skipped instances will be removed, creating a pattern where only certain positions show the full parent-child group.
---
## Video Tutorial
### Object Rotation Modifier
---
## Related Pages
- **[Scene Basics](./scene)** — Overview of working with 3D objects
- **[Scene Hierarchy](./hierarchy)** — Understanding parent-child relationships
- **[Transform Controls](./transform-controls)** — Moving, rotating, and scaling objects
- **[PBR Materials](./pbr-materials)** — Physical material editor for metals and surfaces
- **[Diamond Materials](./diamond-materials)** — Diamond material editor for gemstones
---
# Rainbow Diamond Coloring
Rainbow Diamond Coloring creates a smooth, seamless color gradient across a series of diamonds. The gradient loops perfectly — the first color flows into the last without any visible break, producing a beautiful infinite rainbow effect. This feature is located in the **Extras** tab on the right panel.
---
## Step-by-Step Guide
### Step 1: Prepare Your Model
Before using this feature, your diamonds must be named correctly in your 3D software. Each diamond should have a consistent name prefix followed by a sequential number — for example:
`gem001`, `gem002`, `gem003`, … `gem040`
The numbering must be sequential so the gradient follows the correct order around the model. This is the only preparation needed — once the names are in order, you're ready to go.
### Step 2: Apply a Diamond Material
Select one of the gem objects in the canvas and apply a [Diamond Material](./diamond-materials) to it. Make sure all the diamonds in the sequence share the same material layer.
### Step 3: Open the Extras Tab
Go to the Extras tab on the right panel and find the **Rainbow Diamond Coloring** section.
### Step 4: Set the Object Name Prefix
In the **Object Name Prefix** field, enter only the name part without the numbers. For example, if your diamonds are named `gem001` through `gem040`, type just `gem`.
### Step 5: Set the Count
In the **Count** field, enter the total number of diamonds in your sequence. For example, `40` if you have `gem001` to `gem040`.
### Step 6: Set the Loops
In the **Loops** field, choose how many times the color gradient should repeat across the full sequence. For example, `1` loop means one full rainbow cycle across all diamonds, `2` loops means the gradient repeats twice.
### Step 7: Choose the Starting Color
Click on the color picker and select the starting color for your gradient. The gradient will automatically generate a full rainbow cycle starting from this color. Red is a common choice for a classic rainbow effect.
### Step 8: Apply
Click the **Color All Items** button. The rainbow gradient will instantly be applied across all your diamonds in sequence.
---
## Settings
Object Name Prefix
Input — the shared name prefix of your diamond objects, without the sequential numbers (e.g., gem for gem001–gem040)
Count
Input — the total number of diamonds in the sequence
Loops
Input — how many times the full color cycle repeats across all diamonds. 1 produces a single seamless rainbow, higher values create a tighter repeating pattern
Color
Color picker — the starting color for the gradient. The gradient generates a full hue cycle from this color
Color All Items
Button — applies the rainbow gradient to all diamonds matching the prefix
::: warning Diamond naming matters
The diamonds must be named with a consistent prefix and sequential numbers (e.g., `gem001`, `gem002`, …). If the naming is inconsistent or the numbers are not sequential, the gradient will not apply correctly.
:::
---
## Related Pages
- **[Diamond Materials](./diamond-materials)** — Diamond material editor for gemstones
- **[Material Presets](./material-presets)** — Browse the built-in material library
- **[Material Configurator](./material-configurator)** — Create interactive material variations
- **[Import Models](./import-models)** — How to import 3D models into Playground
---
# Snow Fall Particles
Snow Fall Particles adds a falling snow effect to your scene — soft, round particles of varying sizes drifting downward. This is a great way to add atmosphere to video exports, seasonal product showcases, or creative marketing content.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Extras tab, in the **Snow Fall Particles** section.
---
## Settings
enabled
Checkbox — activates the snowfall effect in the scene
Bounds size
Slider — the size of the area where particles are generated. Increase to spread snowflakes across a wider area, decrease to concentrate them around the model
Particle size
Slider — the size of individual snowflake particles. Smaller values create fine, delicate snow; larger values produce bigger, more visible flakes
Particle speed
Slider — how fast the particles fall. Lower values create a gentle, slow drift; higher values make the snow fall more rapidly
Bottom clamp
Slider — the lowest point where particles disappear. Adjust this so snowflakes vanish near the ground level rather than falling through it
Paused
Checkbox — pauses the animation. The snowflakes freeze in place, which can be useful for taking still screenshots with snow visible
::: tip Best for video exports
The snowfall effect works best in [video exports](./export-videos). Enable the effect, set up your [Camera Views](./camera-views) animation, and export — the snow will be captured in the final video.
:::
---
## Related Pages
- **[Export Videos](./export-videos)** — Export animated video renders
- **[Camera Views](./camera-views)** — Set up camera animations
- **[Background / Environment](./background-environment)** — Background and environment settings
- **[Scene Settings](./scene-settings)** — Overview of all scene settings
---
# Wave Ground
Wave Ground transforms the ground plane into a dynamic, animated surface with wave-like motion. The ground moves like gentle ocean waves, creating a beautiful visual effect — especially on reflective or mirror-like surfaces where the waves produce shifting reflections beneath your jewelry model.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Extras tab, in the **Wave Ground** section.
---
## Settings
enabled
Checkbox — activates the wave animation on the ground plane
Noise scale
Slider — controls the scale of the wave pattern. Lower values create large, broad waves; higher values produce smaller, more detailed ripples
Amplitude
Slider — the height of the waves. Higher values create more pronounced, dramatic waves; lower values produce a subtle, gentle surface motion
Paused
Checkbox — pauses the wave animation. The ground freezes in its current shape, useful for still renders with a wavy surface
::: tip Reflective surfaces
Wave Ground looks best when combined with a reflective ground material. The moving waves create dynamic reflections beneath your model that add depth and motion to both the viewport and video exports.
:::
---
## Related Pages
- **[Ground](./ground)** — Ground plane settings, material, and blending
- **[Background / Environment](./background-environment)** — Background and environment settings
- **[Export Videos](./export-videos)** — Export animated video renders
- **[Scene Settings](./scene-settings)** — Overview of all scene settings
---
# Rhino 3dm Loader
When you import a model exported from Rhino, the file may contain extra geometry that isn't part of your actual product — such as line meshes, point meshes, or construction helpers. These elements can clutter the viewport and interfere with how your model looks in the viewer.
The **Rhino 3dm Loader** plugin gives you a set of checkboxes to control what gets imported and what gets hidden, so you only see the geometry you need.
## Where to Find It
This section is located on the [right panel](./ui-overview#right-panel-—-professional-tools), inside the Plugins tab, in the **Rhino 3dm Loader** section. This section is always visible, but its settings are used when working with `.3dm` files imported from Rhino.
---
## Settings
importMaterials
Checkbox — imports materials defined in the Rhino file. Enabled by default
forceLayerMaterials
Checkbox — forces materials to follow Rhino layer assignments instead of per-object materials. Enabled by default
replaceWithInstancedMesh
Checkbox — replaces duplicate geometry with instanced meshes for better performance. Disabled by default
hideLineMesh
Checkbox — hides line meshes (curves, edges, wireframes) that may be exported from Rhino. Enable this to remove unwanted lines from the viewport. Enabled by default
hidePointMesh
Checkbox — hides point meshes (control points, construction dots) that may be present in the Rhino file. Enable this to keep the viewport clean. Enabled by default
loadUserDataStrings
Checkbox — loads custom user data strings attached to objects in the Rhino file. Enabled by default
::: tip Clean imports
If you see unexpected lines or dots around your model after importing a `.3dm` file, check that **hideLineMesh** and **hidePointMesh** are enabled. This is the most common fix for cluttered Rhino imports.
:::
---
## Related Pages
- **[Import Models](./import-models)** — How to import 3D models into Playground
- **[Rhino Plugin](../integrations/rhino-plugin)** — iJewel Rhino plugin overview
- **[Rhino Plugin Integration](../integrations/rhino-plugin-integration)** — Setting up the Rhino plugin
- **[Scene Hierarchy](./hierarchy)** — Understanding object hierarchy in the scene
---
# Frequently Asked Questions
Answers to the most common questions about iJewel Playground, sourced from our community. Choose a topic below to find what you're looking for.
---
---
::: tip Can't find your answer?
If your question isn't covered here, visit the [iJewel Discord community](https://discord.gg/ijewel3d) or submit a request through the [Helpdesk](../feedback/form).
:::
---
# FAQ: Importing Models
Frequently asked questions about importing 3D models into iJewel Playground.
---
What file formats does iJewel Playground support?
iJewel Playground supports **GLB**, **GLTF**, **3DM** (Rhino), **FBX**, and **OBJ** formats. For the best results — including full PBR materials, textures, and animations — use **GLB/GLTF**. This is the recommended format for all major 3D software (Blender, 3ds Max, Maya, Cinema 4D, Rhino).
Can I use texture maps or vertex colors from other software?
Yes. All major 3D programs (Maya, 3ds Max, Blender, Rhino) export GLTF/GLB with PBR material and texture support. iJewel Playground will read the PBR material information and apply it correctly. For the best texture/animation fidelity, always export as GLB or GLTF rather than OBJ or FBX.
My model appears black or dark after loading. What's wrong?
This usually means the model is missing an environment map. By default, Playground applies a lighting environment, but if your model was exported without materials or with incorrect settings, it may appear dark. Try the following:
1. Go to **Scene → Background / Environment** and make sure an HDRI environment map is loaded
2. Check that your model's materials exported correctly from your 3D software
3. If you're loading a jewelry model with diamonds, make sure diamond layers have unique names — Playground uses layer/material names to assign diamond materials
How do I import a camera from Blender?
Export your Blender scene as a **GLB file with cameras included** (check the camera export option in Blender's GLTF export settings). When you load this GLB into Playground, the camera will appear in **Scene → [Cameras (Loaded)](./cameras-loaded)**. From there, select the camera and click **Activate Main** to switch to it. Make sure to **bake the animation as keyframes** before exporting.
My camera animation from Blender doesn't play in Playground. What am I doing wrong?
When creating camera animations in Blender, make sure to:
1. **Bake the animation as keyframes** — constraints and drivers don't export to GLTF
2. **Export as GLB with cameras enabled** in the export settings
3. In Playground, go to **Scene → Cameras (Loaded)**, select the camera, and click **Activate Main**
4. Play the animation using the **GLTF Animation** controls
How do I align an imported model from Rhino/Matrix with a Blender camera animation?
You have two options:
1. Export the 3DM from Rhino/Matrix and convert it to GLB in Playground. Then edit this GLB in Blender to add the camera animation, and export as GLB with animations
2. Export only the camera as a separate GLB from Blender, then drag and drop both files (the 3DM model and the camera GLB) into Playground one by one
How can I scale or reposition my imported model?
1. Select your model — click on it in the viewport or find it in the [Hierarchy](./hierarchy)
2. Go to [Transform Controls](./transform-controls) and enable the gizmo
3. Switch the **Mode** to Scale (or Translate/Rotate) and use the gizmo handles to adjust
You can also type exact values in the **Position**, **Rotation**, and **Scale** fields in the [Picking](./picking) panel.
Can I import multiple models into the same scene?
Yes. Simply drag and drop additional files into Playground or use the import button. Each new model is added to the existing scene. You can then reposition them using [Transform Controls](./transform-controls).
How should I name layers in Blender/Rhino for automatic material assignment?
iJewel uses layer/material names to automatically assign materials. The recommended naming convention is: layers named **Metal** (or Metal Yellow Gold, Metal Rose Gold, etc.) for metal parts, and **Diamond** (or Diamond Round, Diamond Princess, etc.) for diamond/gem parts — each unique diamond cut should have a unique layer name.
::: tip Video Tutorial
Watch the [Layer Naming in Blender](https://www.youtube.com/watch?v=8sfDdlF4F9I) tutorial. For Rhino, see the [Preparing 3D Models](https://docs.ijewel3d.com/batchx/prepare-3dmodels.html#assigning-layers-to-objects-in-rhino) guide.
:::
My model file is too large. How can I reduce it?
Drop your model into Playground, then export it as GLB from the **Export** tab with **compression enabled**. This will apply Draco compression and can significantly reduce file size. You can also check individual texture sizes in **Picking → Physical Material** — large texture maps are often the main contributor to file size.
---
## Related Pages
- **[Import Models](./import-models)** — Full guide on importing 3D models
- **[Import Materials](./import-materials)** — Importing material presets
- **[Import Scene Settings](./import-scene-settings)** — Importing scene configurations
- **[Cameras (Loaded)](./cameras-loaded)** — Working with imported cameras
---
# FAQ: Materials & Diamonds
Frequently asked questions about materials, diamonds, and textures in iJewel Playground.
---
How do I change the rotation of a brushed metal texture?
Go to **Picking → Physical Material → Map Sampler** and adjust the **Rotation** property. The Map Sampler settings are available for any texture map (albedo, roughness, metalness, normal, etc.). Note that your model needs proper UV coordinates for this to work — make sure the Triplanar extension is disabled.
::: tip Video Tutorial
Watch [Fix Brushed Textures | UV Unwrap Solution](https://www.youtube.com/watch?v=4zqofmJTq64) if your brushed textures look incorrect — this covers UV unwrapping and disabling Triplanar.
:::
How do I get a deeper/clearer engraving?
Use the **Simple Text** modifier along with **Parallax Mapping**:
1. Go to **Modifiers → Simple Text → Add Text** and type your engraving. Make sure to click **Apply**
2. Enable **Modifiers → Parallax Mapping**
3. To control the depth, adjust **bumpScale** in **Picking → Physical Material → Bump/Normal**
My diamond looks white/plain instead of sparkly. What's wrong?
This is typically caused by a missing or inappropriate environment map for the diamond material. Try:
1. Make sure an HDRI environment map is loaded in **Scene → Background / Environment**
2. Check the **Gem Env** setting — if it's set to None, the diamond won't reflect anything. Select an appropriate diamond environment map
3. Adjust the **Bloom** parameters in **Post Processing** — this adds the sparkle/glow effect
4. Try adjusting **envRotation** values in the diamond material settings
Can I apply a different HDRI specifically for diamonds?
Yes. You can set separate environment map slots for Gem/Diamond materials. Additionally, you can create a custom HDR map specifically optimized for diamond sparkle.
::: tip Video Tutorial
Watch [Creating Custom HDR for Diamonds](https://www.youtube.com/watch?v=D5BV9S5izG0) for a detailed walkthrough.
:::
Why do my diamonds have pixelated seams?
Pixelated seams on diamonds are usually related to **normal map resolution**. The diamond mesh may have low-resolution normals or overlapping/broken geometry. Check the following:
1. Make sure your diamond mesh has clean, non-overlapping geometry
2. Check that normals are correct — avoid modifiers like mirroring that can create overlapping meshes
3. Use the diamond models provided by iJewel, which are optimized for the renderer
Unnatural black shadows appear inside my marquise-cut diamond. How do I fix this?
This is often caused by **incorrect normals** or **broken/overlapping meshes** in the diamond geometry. This can happen when you use modifiers like mirroring in 3D software. Try:
1. Recalculate normals in your 3D software before exporting — see the [Fix Wrong Normals](https://www.youtube.com/watch?v=iivi9HyJpWU) tutorial
2. Check for overlapping or intersecting geometry
3. Try different HDRI environments — some environment maps produce better results with certain cuts
4. Use the diamond models provided by iJewel, which are verified to work correctly
How can I reduce diamond sparkle frequency in videos?
Diamond sparkle is mainly controlled by the **Gem HDR environment maps**. To reduce sparkle frequency:
1. Try using different HDRI maps in the Gem Env setting
2. Adjust the **Bloom** parameters in Post Processing
3. Modify the **envRotation** values in the diamond material
Can I apply a different HDRI to diamonds and metal separately?
Yes. In Playground, you can set separate environment map slots for **Metal** and **Gem/Diamond** materials. Go to **Scene → Background / Environment** and look for the Metal Env and Gem Env options. This lets you use a studio HDRI for metal reflections and a different, more sparkly HDRI for diamond refraction.
How do I create material variations and save them?
1. Click on an object in the viewport to select it
2. In the **Configurator** tab, click **Add Variation** — this adds a material variation icon
3. Modify the material properties (color, roughness, metalness, etc.) for each variation
4. Repeat for multiple objects and variations
5. To save all variations, click the three dots (⋯) above the Material Configurator UI and click **Download Preset** — this saves to a JSON file that can be reused across models with matching object/material names
::: tip Video Tutorials
- Watch [Transfer Configurator Between Projects](https://www.youtube.com/watch?v=c_cph8q_vA8) for reusing material configurations
- Watch [Quick Material Export & Import Tutorial](https://www.youtube.com/watch?v=59dNYczASqU) for downloading, exporting, and applying materials to ring components and gemstones
:::
My model's file size is too large because of textures. How do I check which textures are heavy?
Go to **Picking → Physical Material** and check the different texture maps (Albedo, Roughness, Metalness, Normal, etc.). You can download individual texture images to check their sizes. Large texture maps are usually the main contributor to file size — consider reducing their resolution before re-importing.
The model looks fine in Playground but terrible in Shopify. Why?
Shopify's default 3D viewer does not support iJewel's advanced lighting, diamond rendering, or post-processing effects. To get the same quality on your website, embed your model using the [iJewel Viewer SDK](../viewer/introduction) or use [iframe embedding](../integrations/shopify-embedding).
---
### Useful Video Tutorials
- [Fix Brushed Textures | UV Unwrap Solution](https://www.youtube.com/watch?v=4zqofmJTq64) — Fix brushed texture issues with UV unwrapping
- [Quick Material Export & Import Tutorial](https://www.youtube.com/watch?v=59dNYczASqU) — Export and import materials between projects
## Related Pages
- **[Picking](./picking)** — Select objects and edit materials
- **[Background / Environment](./background-environment)** — HDRI environment settings
- **[Export Materials](./export-materials)** — Save and share material presets
- **[Import Materials](./import-materials)** — Load saved material presets
---
# FAQ: Exporting Images & Videos
Frequently asked questions about exporting images and videos from iJewel Playground.
---
How do I export an image with a transparent background?
Follow these steps:
1. Go to **Post Processing → Tonemapping** and set **Clip Background** to true (or set **Background Alpha** to 0)
2. Go to **Scene → Ground** and uncheck **Visible** (or set **Render to Depth** to false)
3. Go to **Scene → Progressive Shadow** and disable it
4. Choose **PNG** as the export format (JPG does not support transparency)
5. Export the image from the **Export** tab
See the full guide in [Export Images — Transparent Background](./export-images#transparent-background).
::: tip Video Tutorial
Watch [How to Make Pure White and Transparent Background](https://www.youtube.com/watch?v=GCJIOmcEaPo) for a step-by-step visual guide.
:::
My exported image is blurry despite using high settings. What's wrong?
::: tip Video Tutorial
Watch the [Common Export Issues](https://www.youtube.com/watch?v=UT4p-IFrbjI) tutorial for solutions to frequent export problems. Also see [Resolution & Export from Playground](https://www.youtube.com/watch?v=FAqfTMBAaBA) for a complete guide on resolution and export settings.
:::
Try these steps:
1. Instead of using Scale, set a **custom resolution** in **Viewer → Renderer** — type the exact pixel dimensions you need
2. Try the **Tiled Export** option in **Export → Image Export** which can produce higher-quality results at large resolutions
3. Check that **Depth of Field** is disabled in Post Processing — this effect intentionally blurs parts of the image
4. Make sure **Anti-Aliasing** (TAA/Progressive) is set to a sufficient number of frames
What is the maximum export resolution?
The maximum resolution depends on your device's GPU capabilities. Most devices support up to **2160px** in the standard export mode. For higher resolutions (3000×3000px and above), use the **Tiled Export** feature in **Export → Image Export**, which renders the image in tiles and stitches them together.
Video export takes 10+ minutes. How can I speed it up?
Long export times are usually caused by high anti-aliasing settings with custom backgrounds. To speed things up:
1. Reduce the **Progressive** frame count in **Anti-Aliasing** settings to something like 4 or 8 (instead of 16 or 32)
2. Lower the export resolution
3. Reduce the **FPS** — 24 fps is often sufficient for smooth turntable animations
4. Don't close the browser tab during export — wait until iJewel finishes converting frames to video. You can monitor the progress in the browser console
What are the best settings for video export?
There's no single "best" setting — it depends on your use case:
- **Turntable product shots**: 24–30 FPS, 4–8 AA Progressive frames, 1080p or 1440p resolution
- **Camera path animations**: match the FPS to your original animation (usually 24 or 30), higher AA for final renders
- **Quick previews**: 24 FPS, low AA, 720p
You can find all these options in **Export → Video Export**.
::: tip Video Tutorial
Watch [Resolution & Export from Playground](https://www.youtube.com/watch?v=FAqfTMBAaBA) for a walkthrough of resolution and export settings.
:::
How do I set the speed and direction of a turntable video?
Go to **Export → Video Export** where you'll find controls for turntable rotation speed, direction (clockwise or anticlockwise), and total rotation angle.
::: tip Video Tutorial
Watch [Perfect 360° Turntable In 2 Minutes](https://www.youtube.com/watch?v=304Hzog-7bg) for a quick guide on setting up turntable animations.
:::
Can I export 360 still frames instead of an MP4 video?
Currently, only MP4 video export is available. PNG sequence export is planned for a future release.
Can I change the export format from PNG to JPEG for quick snapshots?
Yes. In the export options, you can choose between PNG and JPEG formats. PNG is the default because it supports transparency, but JPEG produces smaller files and is faster for quick captures.
How do I render a ring on a hand model?
You can import a hand 3D model alongside your ring and position them together in Playground. A free downloadable hand model (Blender file) is available in the description of this tutorial:
::: tip Video Tutorial
Watch the [Ring on Hand Model](https://www.youtube.com/watch?v=TJNWi6AgZk0) tutorial — includes a free hand model download link in the video description.
:::
Can I add my company logo to exported videos?
This feature is not available in Playground at the moment. You would need to add your logo in a video editing tool after exporting. This feature is planned for a future update.
Can I remove the encryption from an exported file?
Yes. Open the encrypted file in Playground (you'll need the password), then re-export it from the **Export** tab with the encryption checkbox unchecked.
---
## Related Pages
- **[Export Images](./export-images)** — Full guide on image export settings
- **[Export Videos](./export-videos)** — Full guide on video export settings
- **[Export Models](./export-models)** — Exporting 3D model files
- **[Renderer Settings](./renderer-settings)** — Resolution and quality configuration
---
# FAQ: Cameras & Animation
Frequently asked questions about cameras, camera paths, and animations in iJewel Playground.
---
How do I import a camera path from Blender?
1. Create your camera animation in Blender with keyframes
2. **Bake the animation** — constraints and drivers don't export to GLTF format
3. Export as **GLB with cameras enabled** (check the camera option in Blender's GLTF export dialog)
4. Drop the GLB file into Playground
5. Go to **Scene → [Cameras (Loaded)](./cameras-loaded)**, select your camera, and click **Activate Main**
6. Play the animation with the **GLTF Animation** controls
See the full tutorial on the [Cameras (Loaded)](./cameras-loaded#tutorial-creating-a-camera-path-and-rendering-it-in-playground) page.
My camera animation from Blender doesn't play. What's wrong?
The most common causes:
1. The animation wasn't **baked as keyframes** — Blender constraints (Track To, Follow Path) don't export to GLTF
2. The camera wasn't included in the GLTF export settings
3. You haven't activated the camera — go to **Scene → Cameras (Loaded)**, select it, and click **Activate Main**
4. The animation player is paused — check the GLTF Animation controls
How do I align a Rhino/Matrix model with a Blender camera path?
Two approaches:
1. **Convert first**: Export 3DM from Rhino → convert to GLB in Playground → edit in Blender (add camera animation) → export as GLB with animations → load into Playground
2. **Load separately**: Export camera-only GLB from Blender, then drag both the 3DM model file and the camera GLB into Playground one by one
How do I create a turntable animation?
For a simple turntable, use the built-in turntable recording feature in **Export → Video Export**. You can set rotation speed, direction, and angle there.
For more complex turntable animations with custom speeds or easing, create the camera path in Blender and import it as described above.
::: tip Video Tutorial
Watch [Perfect 360° Turntable In 2 Minutes](https://www.youtube.com/watch?v=304Hzog-7bg) for a quick guide on creating turntable animations.
:::
How do I create a pendant animation?
Create the pendant swing/movement animation in Blender, export as GLB with animations, and load into Playground. You can then play the animation back and record it.
::: tip Video Tutorial
Watch the [Pendant Animation](https://www.youtube.com/watch?v=VQa6D33y8IA) tutorial for a complete walkthrough.
:::
Can I create a shadow rotation animation (shadows moving around the model)?
Yes. The best approach is to create **directional lights in Blender**, animate them to rotate around the model while keeping the target on the jewelry, and export as GLB with animations. In Playground, this will appear as GLTF Animations that you can play back.
How do I save and reuse a camera position?
You can use **[Camera Views](./camera-views)** to save and switch between fixed camera angles. This is also useful for taking snapshots from specific positions. See the full [Camera Views documentation](./camera-views) for a step-by-step guide.
::: tip Video Tutorial
Watch the [Camera Views](https://www.youtube.com/watch?v=jdePxecZRkQ) tutorial for setting up and using saved camera positions.
:::
You can also export camera settings as part of a **scene preset**. Go to the scene settings and use the **Download Preset** option from the three dots menu (⋯). This saves a JSON/VJSON file that includes camera position, rotation, and other settings. Drop this file back into Playground to restore the same camera angle.
How can I create an environment map rotation animation?
Playground supports environment map rotation animations. You can create them in the **Animation** tab using the environment rotation animation feature.
::: tip Video Tutorial
Watch the [Environment Map Rotation Animation](https://drive.google.com/file/d/17VxPoCluLMtVONHQqjuMCrXoiFRMOStO/view?usp=sharing) guide for a step-by-step walkthrough.
:::
Can I use poses to set consistent angles across different models?
Poses are currently not saved between sessions. Each model has different proportions, so the same transform values (rotation/position) produce different results on different models. For consistent angles, use the **camera position** values instead — these are independent of the model and can be saved as presets.
---
## Related Pages
- **[Cameras (Loaded)](./cameras-loaded)** — Full documentation on imported cameras
- **[Export Videos](./export-videos)** — Recording and exporting video animations
- **[Scene Settings](./scene-settings)** — Overview of all Scene tab sections
- **[Transform Controls](./transform-controls)** — Move, rotate, and scale objects
---
# FAQ: Scene, Lighting & Environment
Frequently asked questions about scene setup, lighting, HDRI environments, shadows, and backgrounds in iJewel Playground.
---
How do I set up an HDRI environment?
Go to **Scene → [Background / Environment](./background-environment)** and load an HDRI map. You can use the built-in presets or upload your own `.hdr` or `.exr` file. The environment map controls both the background appearance and the lighting/reflections on your model. Adjust **Intensity** and **Rotation** to fine-tune the look.
You can also create your own custom HDRI maps using the [HDRI Editor](https://editor.hdrmap.com/#).
How do I make the background transparent?
1. Go to **Post Processing → Tonemapping** and set **Clip Background** to true (or set Background Alpha to 0)
2. Disable **Scene → Ground → Visible**
3. Disable **Scene → Progressive Shadow**
4. Export as **PNG** (not JPG — JPG doesn't support transparency)
See the full guide in [Export Images — Transparent Background](./export-images#transparent-background).
::: tip Video Tutorial
Watch [How to Make Pure White and Transparent Background](https://www.youtube.com/watch?v=GCJIOmcEaPo) for a step-by-step walkthrough.
:::
I get a message "Background must be same as environment." What does this mean?
This message comes from the **HDRi Ground** plugin. It appears when the background texture is not the same as the environment texture. To fix it, make sure both are set to the same HDRI map, or simply confirm the dialog to sync them. If you see this message even when they seem equal, try updating to the latest Playground version.
How do I remove the ground plane?
Go to **Scene → [Ground](./ground)** and uncheck the **Visible** checkbox. This removes the ground so your model appears to float — useful for pendants, earrings, or any suspended jewelry.
How do I fix the ground position? It moves when I import new models.
The ground adjusts automatically to match the model's position. To lock it at a specific height, go to **Scene → [Ground](./ground) → Height** and set the value manually. This keeps the ground at a fixed level regardless of what you import.
Why do shadows rotate with my model during turntable recording?
By default, progressive shadows are baked and move with the scene. To get shadows that stay fixed while the model rotates:
1. Create **directional lights in Blender** with animated rotation (keeping the target on the jewelry)
2. Export as GLB with animations
3. In Playground, these will appear as GLTF Animations — play them during recording
Alternatively, you can disable baked shadows on the ground and use real-time shadows from scene lights, though this requires more setup.
::: tip Video Tutorial
Watch [How to Create Custom Shadows](https://www.youtube.com/watch?v=269LnNYZDh0) for a complete guide on shadow customization.
:::
Can I disable baked shadows and use real-time shadows instead?
Yes. Disable baked shadows on the ground from **Scene → Ground** settings (uncheck shadow-related options). Then add lights in **Scene → [Lights](./lights)** with shadow casting enabled. When moving a light, the scene will re-render automatically with updated shadows.
How do I use a custom background image?
Go to **Scene → [Background / Environment](./background-environment)** and upload an image file. Note that background images may scale differently on different screen sizes. For consistent results across devices, use a square or wide-aspect image and test at your target resolution.
My custom background image turns grayscale or black after saving. Why?
This is a known issue in some versions. Try:
1. Re-uploading the background image after loading your model
2. Making sure **Tonemapping** settings aren't affecting the background color
3. Updating to the latest Playground version
What's the difference between Tonemapping and Clip Background?
**Tonemapping** adjusts the color grading and exposure of the entire render (similar to a photo filter). **Clip Background** is a boolean setting within Tonemapping that controls whether the background is rendered or made transparent. When Clip Background is enabled, the background becomes transparent for export — the model itself is still tonemapped normally.
How do I create a custom gradient background?
Use the **[Gradient SVG](./gradient-svg)** section in the Scene tab. Enable it, choose between Linear or Radial gradient type, pick two colors, and adjust the angle and positions. You can also apply the gradient to the scene background with the **Apply to Background** checkbox.
::: tip Video Tutorial
Watch [How to Change Background & Ground Color](https://www.youtube.com/watch?v=q989o_dq7yo) for a visual guide on changing background and ground colors.
:::
---
## Related Pages
- **[Background / Environment](./background-environment)** — Full environment setup guide
- **[Ground](./ground)** — Ground plane settings
- **[Progressive Shadow](./progressive-shadow)** — Shadow configuration
- **[Lights](./lights)** — Scene lighting
- **[Gradient SVG](./gradient-svg)** — Gradient backgrounds
- **[HDRi Ground](./hdri-ground)** — HDRI ground projection
### Useful Video Tutorials
- [How to Make Pure White and Transparent Background](https://www.youtube.com/watch?v=GCJIOmcEaPo) — Set up pure white or transparent backgrounds
- [How to Change Background & Ground Color](https://www.youtube.com/watch?v=q989o_dq7yo) — Change background and ground colors
- [How to Create Custom Shadows](https://www.youtube.com/watch?v=269LnNYZDh0) — Shadow customization and positioning
- [Rendering Tutorial — General Setup](https://www.youtube.com/watch?v=P0R38Y2S-b0) — Overview of scene setup and rendering workflow
- [Creating Custom HDR for Diamonds](https://www.youtube.com/watch?v=D5BV9S5izG0) — Build your own HDRI maps for gem materials
---
# FAQ: Rendering & Performance
Frequently asked questions about render quality, performance, and device-specific issues in iJewel Playground.
---
Why is my model blurry while rotating or zooming?
During interaction (orbiting, zooming, panning), Playground renders at a lower quality for responsiveness and then refines the image once you stop. This is normal behavior — the final high-quality render appears after you release the mouse. If the blur persists after interaction stops, check:
1. **Renderer → Scale** — make sure it's set to 1 or higher (lower values reduce resolution for performance)
2. **Anti-Aliasing** settings — increase TAA/Progressive frame count for sharper results
3. **Depth of Field** in Post Processing — disable it if you don't need selective focus
How do I improve overall render quality?
Several settings affect render quality:
1. **Renderer → Scale** — set to 1 for native resolution, or higher for supersampling
2. **Renderer → Mode** — use the highest quality mode available
3. **Anti-Aliasing (TAA)** — increase Progressive frame count (8–16 gives good results)
4. **SSAO** (Screen Space Ambient Occlusion) — adds subtle shadows in crevices
5. **SSR** (Screen Space Reflections) — improves reflection accuracy
6. **Bloom** — adds glow to bright areas (especially useful for diamonds)
See [Renderer Settings](./renderer-settings) for a full explanation of quality modes.
::: tip Video Tutorial
Watch [Resolution & Export from Playground](https://www.youtube.com/watch?v=FAqfTMBAaBA) for a visual walkthrough of resolution and quality settings.
:::
The render looks different on mobile vs desktop. Why?
Mobile devices have lower GPU power and memory, so Playground may automatically reduce quality settings. Additionally:
1. Screen size and pixel density differ — the same resolution looks different on a phone vs a monitor
2. iOS has a ~350–400 MB memory limit for WebGL — exceeding it causes the page to refresh
3. Touch interactions (drag vs scroll) may behave differently than mouse controls
4. Some post-processing effects may be disabled automatically on lower-end devices
My page refreshes/crashes on iOS when loading complex models. What's happening?
iOS Safari has a strict memory limit for WebGL content (approximately 350–400 MB, depending on the iPhone model). When your scene exceeds this, iOS force-refreshes the page. To stay within limits:
1. Use smaller texture maps — resize textures to 1024×1024 or lower for mobile
2. Reduce the number of diamonds — configure **cache keys** to reuse diamond rendering resources
3. Lower the Renderer Scale on mobile
4. Use compressed GLB files (with Draco compression)
What does the Renderer Scale setting do?
**Scale** controls the internal rendering resolution relative to the canvas size. A scale of 1 means native resolution. Scale 0.5 renders at half resolution (faster but blurrier). Scale 2 renders at double resolution (sharper but slower). For final exports, use Scale 1 or higher. For real-time preview, Scale 0.5–1 is usually sufficient.
See [Renderer Settings](./renderer-settings) for more details.
Anti-aliasing breaks when playing model animation. Is this a known issue?
Yes, this can happen because TAA (Temporal Anti-Aliasing) relies on accumulating multiple frames. During animation playback, the scene changes every frame, which prevents proper accumulation. Try:
1. Increasing the **Progressive** frame count in Anti-Aliasing settings
2. For final video exports, Playground renders each frame with full AA — so the exported video will look better than the real-time preview
How do I record high-quality videos without quality depending on my device?
Use Playground's built-in video export (**Export → Video Export**) rather than screen recording. The built-in exporter renders each frame at full quality regardless of your device's real-time performance — it captures frames one by one, so even a slower device produces the same quality output (it just takes longer).
---
### Useful Video Tutorials
- [Resolution & Export from Playground](https://www.youtube.com/watch?v=FAqfTMBAaBA) — Resolution, scale, and export settings walkthrough
## Related Pages
- **[Renderer Settings](./renderer-settings)** — Resolution, scale, and quality mode configuration
- **[Export Images](./export-images)** — Image export with quality settings
- **[Export Videos](./export-videos)** — Video export and recording
- **[UI Overview](./ui-overview)** — Full interface layout
---
# FAQ: Playground & the iJewel Platform
Frequently asked questions about Playground features, projects, settings transfer, and general workflow within the iJewel platform.
---
Is iJewel Playground a CAD program?
No. Playground is a real-time **3D rendering and visualization editor** — not a modeling tool. For a full overview of all iJewel products, watch the [iJewel Products Overview](https://www.youtube.com/watch?v=PLP0K2F1hQI) video. It's designed for creating/editing materials, optimizing models, setting up lighting and camera angles, and exporting images, videos, or viewer-ready files. You can move and transform objects, and generate simple primitives (sphere, box, torus, etc.), but it's not a replacement for 3D modeling software like Blender, Rhino, or 3ds Max.
Is Playground free to use?
Playground has a **Free** tier with basic features. **Premium** (5 library slots) and **Advance** (100 library slots) tiers unlock additional features like higher export resolutions, more material presets, and advanced post-processing. For commercial use, a subscription-based license is required. See [License and Pricing](../introduction/license) for details.
How do I reopen a project I previously saved on the iJewel platform?
Open Playground from the iJewel platform and load the saved project — it reopens with your model and settings. If your version doesn't list the project directly, download its GLB file and drag it into Playground.
My Playground settings don't transfer when I save a model to the iJewel platform. Why?
When you export a GLB from Playground, some advanced settings (post-processing, certain plugin configurations) may not be preserved in the GLB format. For full settings transfer:
1. Export the **scene settings as VJSON** from the Export tab — this captures all environment, lighting, and plugin settings
2. Keep both the GLB model and the VJSON together when saving to the platform
3. Alternatively, save directly from Playground if that option is available in your version
How do I save and reuse scene settings across different models?
1. Set up your scene the way you want (lighting, environment, shadows, post-processing)
2. Go to the **Export** tab and download the scene preset as a **VJSON** file
3. For a new model, drop the model into Playground first, then drag and drop the VJSON file — it will apply all saved settings
You can also download individual presets (materials only, animations only) using the three dots menu (⋯) above specific UI sections.
My zoom limits reset after saving. How do I fix this?
Zoom limits and camera constraints are stored as part of the camera/viewer settings. When exporting, make sure to include camera settings in your VJSON export. If the issue persists, set the zoom limits again in Playground and save.
Can I save files larger than 50 MB in Playground?
There is a file size limit for saving directly from Playground to the iJewel platform. For larger files:
1. Export the GLB to your local computer first (no size limit for local download)
2. Compress the file by enabling **Draco compression** in the export options
3. Check texture sizes — large textures are usually the main contributor. Reduce texture resolution in **Picking → Physical Material**
How does Playground fit into the iJewel platform?
**Playground** is the 3D editor inside the **iJewel platform** — it's where you open 3D files and configure materials, lighting, cameras, and export images/videos. The wider platform is where those configured models are managed, hosted, embedded on websites, shared via links, or served through the viewer SDK.
How do I match a camera position from my 3D software to Playground?
Go to the camera settings in Playground (available in the viewer/camera controls) and manually set the **Position** and **Rotation** values to match your 3D software. You can also export the camera from your 3D software as part of a GLB file, and it will appear in **Scene → [Cameras (Loaded)](./cameras-loaded)**.
Can I use Playground with multiple objects and create a configurator?
Yes. Load multiple objects into the scene, then use the **Configurator** tab to set up material variations for each object. Click on an object, add variations with **Add Variation**, and configure each one. When exported, the configurator data can be used with the iJewel Viewer SDK to build interactive product configurators on your website.
---
## Related Pages
- **[Introduction](./introduction)** — What is iJewel Playground
- **[Quick Start](./quick-start)** — Getting started guide
- **[UI Overview](./ui-overview)** — Full interface layout
- **[Export Scene Settings](./export-scene-settings)** — Exporting VJSON files
- **[Import Scene Settings](./import-scene-settings)** — Importing scene configurations
---
# iJewel3D BatchX

iJewel3D BatchX is a downloadable app for Windows and MacOS, to quickly render images and models 3D models in bulk, applying various combinations of materials, camera views, models etc. All rendering happens on your local machine, using state of the art rendering algorithms to reduce render-times by 100-500x. With BatchX, it's possible to render a `2048x2048` size, `10 sec` turn-table video in under `20 sec` on simple laptop. With a GPU desktop, it's realtime.
You can try BatchX with a free 30 Day trial on every device (with no credit card or commitments) - [Download Now](https://batchx.ijewel3d.com/).
## License
After 30 days of free trial, BatchX requires an yearly license to continue using the software.
The license is locked to one device, and cannot be transferred to another device. The license includes all updates and fixes for the software while the license is active.
Get a BatchX License Key directly from iJewel3D License Portal - [Buy Now](https://license.ijewel3d.com/payment/checkout/IJewel3D_BatchX)
The images/assets exported with BatchX can be used commercially without any restrictions even after the license is expired (Not applicable to trial licenses)
::: tip
To buy multiple licenses, check for discounts or for enterprise licensing, contact us at [sales@ijewel3d.com](mailto:sales@ijewel3d.com)
:::
::: warning
Sharing and reselling the license keys is strictly prohibited and will result in invalidation of the license and blacklisting of the device.
Any attempt to bypass or crack the licensing system will result in immediate termination of the license and legal action.
:::
::: details Transferring
It is possible to transfer the license between machines in some cases by contacting us at [batchx@ijewel3d.com](mailto:batchx@ijewel3d.com). This is only allowed when the previous machine is no longer in use.
:::
## Video Tutorials
To go through the entire process in detail, check out the following playlist.
Watch the complete playlist on Youtube - https://www.youtube.com/watch?v=97Nu5WGWdNs&list=PLIWKi7kUUJPgoGuQUCOIeAuk9xPuuMZQh
## Getting Started
The next few sections will cover the details on using BatchX for automating your media generation process.
### [1. Preparing 3D Models](./prepare-3dmodels)
Learn about preparing your 3d files, properly layering them, and some other details.
[](./prepare-3dmodels)
### [2. Preparing Scene Settings](./prepare-scene-settings)
Learn how to prepare materials like diamonds, metals, enamels, and scene settings like shadows, reflections, ground and much more...
[](./prepare-scene-settings)
### [3. Generate Images and Videos](./generate-media)
Ready to start making thousands of images and videos with a single click!
[](./prepare-3dmodels)
## System recommendation
### Mac
* Apple Mac with Intel or Apple processor. Apple processor M1 and above is preferred
* Mac OS 13(Ventura) and above
* RAM - 16 GB or more
* Internet connection for download and license validation
### Windows
* Windows 10 and above
* RAM - 16 GB or more
* Nvidia graphics card is preferred with a video memory of 8 GB or more
* Internet connection for download and license validation
---
# Prepare 3D Models for BatchX
iJewel BatchX supports importing multiple file formats like 3dm, fbx, obj, glb/gltf and stl. Though its not necessasry, but we recommend to use 3dm file format, as most designers work in Matrix/Matrix gold/Rhino for designing the jewellery CAD files, and you can export the CAD file as 3dm from these softwares.
For Rhino users, we recommend the following guidelines
## Assigning Layers to Objects in Rhino
Every 3D model in Rhino, is divided into 3D objects, and each object can have an associated layer. Here is an example screenshot of layers associated with a 3D model.

And all the layers present in the 3D model:

To prepare a batch of 3d models for rendering in BatchX, make sure that
- The layers are named consistently across all the files
- Unique diamond shapes(round, pear, marquise, ...) should be put in separate layers for accurate diamond cuts
- Similar diamond shapes, including transforms(rotation/uniform scale/translation) should be put in same layers whenever possible
- Similar diamond shapes, including transforms(rotation/uniform scale/translation) should be put in different layers, if different material needs to be assigned
- Seperate layers should be created if multi tone metals needs to be created(for example head, shank...)
::: info
Although not necessary, its recommended to give the following layer names to the objects:
- Metals with a layer name Metal 01, Metal 02,.....
- Diamonds/Gemstones with a layer name Gem 01, Gem 02,.....
- Pearls with a layer name Pearl 01, Pearl 02,....
- Ceramic/Enamels with a layer name Ceramic 01, Ceramic 02,....
:::
BatchX creates a new material for each layer in the 3dm file, and creates images and videos for the combination of materials for the associated layers
## General tips for preparing 3D Models in Rhino
This is not a topic of detail for this documentation, but these are some general tips to prepare files in rhino, for a better rendering process in BatchX
- Try to use Block Instances for parts which are identical. For example similar diamond shapes, links in a chain, prongs, ...
- When converting surfaces(NURBS) to meshes, make sure that the mesh resolution is not too high, which can cause very high file size. On the other hand it should not be too low, which will result in a poor mesh quality. The best option is to find a resolution that is detailed enough to build your model features accurately while keeping file size manageable.
- For meshes having a very high resolution, use the ReduceMesh command, and adjust the polycount, while keeping good enough mesh quality
- Though it depends on the specific product, try to keep the polygon count less than 200,000
- Use face normals for Diamonds/Gems in order to produce accurate cuts
## Exporting from Rhino
Once your models are prepared using the above guidelines, export it as 3dm.
- Before exporting, make sure that you are in the shaded mode. If there are any objects in the 3d model as surfaces(NURBS), this will convert those to meshes, which is essential for BatchX.

- While exporting make sure that you don't enable the `Save small` option. This removes all the meshes from the file, and keeps the original surface(NURBS) information. For BatchX to read the 3dm files, it must have the 3d meshes present in the model.

::: warning Important Note
### Render vs Production CAD
Most CAD modellers produce a CAD production file which is created for manufacturing and casting and not for rendering.
the main reason is that the designer had no intention of modelling your designs for rendering purposes. They may have made short cuts in the modelling process for speed that cause issues with rendering but not for manufacturing
Here are some issues with the production CAD :
- Sharp edges
- Sharp and long Prongs/Claws
- Seams artifacts
- Combined metal parts, even if the design is meant to have, for example 2 tone metals for head and shank
- Penetrating surfaces
All the above issues should be fixed in the file in a modelling software like rhino, and the result is what we refer as a render ready file.
:::
## Video Tutorials on Rhino
Check out the following tutorials to go through the entire process in detail
- Importing and Layering 3DM Files in Rhino
- Layers and Properties in Rhino
- Fixing Wrong Normals
## General Tips about other 3D modelling Softwares
Though recommended to use Matrix/Matrix gold/Rhino, it is not necessary to create your designs in these softeares. For using any other software like Blender/3ds max/C4D, here are a few general comments
- The materials are named consistently across all the files
- Unique diamond shapes(round, pear, marquise, ...) should be assigned separate materials for accurate diamond cuts
- Similar diamond shapes, including transforms(rotation/uniform scale/translation) should be assigned same material whenever possible
- Similar diamond shapes, including transforms(rotation/uniform scale/translation) should be assigned different material, if different material needs to be assigned
- Use instances to model identical, or transformed(rotation/scale/translation) parts like chain links, prongs, similar diamond shapes, etc.
- Use face normals for Diamonds/Gems in order to produce accurate cuts
- When creating meshes for different jewellery parts, make sure that the mesh resolution is not too high, which can cause very high file size. On the other hand it should not be too low, which will result in a poor mesh quality. The best option is to find a resolution that is detailed enough to build your model features accurately while keeping file size manageable.
- Though it depends on the specific product, try to keep the polygon count less than 200,000
---
# Prepare Scene Settings for BatchX
The next step after preparing your 3d files, is to prepare the scene settings for the image/video render step. This includes setting HDR environment maps for metal and diamonds, setting up metal/diamond/enamel/pearl/... materials and their variations, camera views, post processing effects and more.
To prepare all the settings, you need to use the [iJewel Playground](https://playground.ijewel3d.com/v2/index.html), which is available to use for free.
Following are the recommended steps to complete your scene settings.
## 1. Choosing the right HDR environment maps
This is perhaps the most critical part to give your gold, diamonds/gems, and other materials the desired look. You can either use one of our free presets, which are available for download OR create your own HDR environment maps from scratch.
Here are a couple of tutorials to go through the environment map setup for metal and diamonds.
::: tip
#### Create environment maps from scratch using HDR Map Editor
To create your own environment maps from scratch, we recommend using the [HDR Map Editor](https://hdrmap.com/).
This powerful tool allows you to create your own environment maps to exactly fit your needs.
To understand the process in greater detail, go through the following playlist tutorials.
:::
## 2. Create materials and material variations
To create variations of your desired gold(rose, yellow, white etc), diamonds(diamond, ruby, sapphire etc), pearls(black, white,...) etc, go through the following tutorial. In this step, you need to prepare all the different variations for your gold, diamond, pearl, and other materials.
These variations will later be used by BatchX to auto generate media.
## 3. Create camera views
This step will define the different views for your products, so that BatchX can generate the media for each view automatically.
Here is a tutorial on how to do that
## 4. Adjust scene settings
In this step you can make changes to background, ground, postprocessing and many more settings.
Go through the entire playlist tutorials to understand in greater detail about setting materials, background color,images, postprocessing effects and more
## 5. Export scene settings
Now you are ready to export all your scene settings, and start using BatchX to generate media.
You can export the scene settings by going to the Export tab.

this will download a json file with vjson file extension, which contains all the information about the settings you have made.
::: tip
* For each product category like rings, earrings, braclet, you may need to create different scene settings.
* Standing and layed down rings might need different scene settings(mostly different camera views)
:::
Most of the work is done now. In the next and final step, we will go through the simple process of generating images and videos using BatchX.
---
# Start Generating Images and Videos
After exporting the scene settings from the previous step, you can now start using BatchX.
If you haven't downloaded BatchX yet, start your free trial [here](https://batchx.ijewel3d.com/).
After launching BatchX, this is how the initial screen will look like

Follow the next couple of steps to start your batch renders
## Create folder
Create a local folder and drop all your 3d files, and the prepared scene setting vjson file.
Make sure that you have only one scene setting vjson file in this folder, as BatchX will pick up only one file for the settings.
Drag and drop the local folder in the dedicated area:

## Start Batch render
Now press the "EXPORT VIEWS" button to start the batch rendering!

BatchX will start the media rendering, and dump the results in an "output" folder created within the source folder.
## BatchX Settings
### General settings
```
HEIGHT - Height of the render canvas
WIDTH - Width of the render canvas
SCALE - Scale factor to mutiply the media resolution
V-QUALITY - Video quality. Default is 8, which should give good quality. max allowed value is 32.
V-DURATION - Video duration in seconds. max allowed value is 20.
V-FRAMERATE - Video framerate. max allowed value is 60.
Image Format - Image format. Can be one of png/jpg/webp
Create Folders - Option to create subfolders for each 3d file
```
:::info
To create images of 4000x4000, you can give height and width of 1000, and a scale value of 4.
Too high scale values might result in lower performance/increased render times, depending upon the device you are rendering on.
:::
### Tabs
#### Folders
All 3d files present in the folders are shown here. You can also search files by names, and enable/disable batch rendering on specific files.

#### Camera Views
All the camera views present in the scene settings are shown here. You can enable/disable, image/video generation by clicking on the specific item. Additionaly it is possible rename a view, and add an additional camera view for your batch rendering.

#### Materials
All the materials and material variations are listed here. You can search materials by name and filter out materials for which you dont want to create the renders.

:::tip
Its best to use the 3dm file format for the 3d files, with consistent layer names. This will save you a lot of time
:::
## Video Tutorials
To go through the entire process in detail, check out the following playlist.
Watch the complete playlist on Youtube - https://www.youtube.com/watch?v=97Nu5WGWdNs&list=PLIWKi7kUUJPgoGuQUCOIeAuk9xPuuMZQh
---
# Introduction

Ring Try-On combines an iJewel3D ring project with live hand tracking.
A customer can inspect the ring in 3D, start the camera, and see the same ring on a selected finger.
This guide covers iframe integration, Mini Viewer integration, and advanced custom controls.
Try-On supports these project types:
- a standalone ring model;
- a Ring Configurator project, including the ring assembled from its current components; and
- a Wedding Band Builder project, including generated bands and catalog rings.
Configurator projects do not need a separate model file for Try-On.
## Start here
Choose the guide that matches where the project is stored and who owns the
Try-On controls:
- **Drive project with standard controls:** use
[Direct Integration](./demo).
- **Self-hosted Ring Configurator:** use
[Using Ring Configurator](../ring-configurator/using-ring-configurator#option-4-fully-self-hosted-project).
- **Self-hosted Wedding Band Builder:** use
[Self-Hosted Integration](../wedding-band-builder/integration-self-hosted).
- **Standalone Drive model with custom controls or product switching:** use
[Advanced Integration](./advanced).
- **Configurator with custom Try-On controls:** use the public
[Configurator Try-On helpers](../viewer/viewer-class#configurator-try-on-helpers).
For a Drive project, first [prepare the ring project](./prepare-model) and save
its Try-On configuration. For a fully self-hosted project, either transfer that
saved configuration through your project export pipeline or generate it with
Web VTO setup mode.
## Prepare each project in iJewel3D Platform
Each model or configurator project needs a saved Try-On configuration.
This configuration makes Try-On available and controls the ring placement on the tracked finger.
When Mini Viewer loads a Drive project, the website receives the project and
its saved configuration together. You do not need to host a separate Try-On
JSON file for that path. A fully self-hosted project keeps the same settings in
its top-level `tryonConfig`, or loads the generated JSON directly into Web VTO.
Follow [Prepare a Try-On Project](./prepare-model) before you write the website code.
The guide explains how to fit the ring to the finger cylinder, preview the result, and save the configuration.
## Meet the website requirements
The hosting page must use HTTPS because browsers restrict camera access on insecure pages.
The camera start must follow a direct user action, such as a button selection.
If the integration uses an iframe, give the iframe camera permission.
If the integration uses Mini Viewer, register the production domain with iJewel3D.
## Attribution watermark
Try-On works even when **Enable TryOn** is off for the domain.
In this case, the camera view shows an iJewel3D attribution watermark.
To hide the watermark, purchase Try-On for the domain.
Then open **Settings → Domains** and turn on **Enable TryOn** for that hostname.
## API reference
For custom JavaScript controls, start with [Advanced Integration](./advanced).
The API reference covers [RingTryonPlugin](./ring-tryon-plugin) and [TryonUIPlugin](./tryon-ui-plugin).
---
# Prepare a Try-On Project
Configure each ring project before you add Try-On to a website.
The configuration controls the ring size, position, and rotation on the tracked finger.
It also tells Mini Viewer that Try-On is available for the project.
::: info Configurator Try-On release
Configurator Try-On requires Mini Viewer `0.6.18` or later on the customer
website.
:::
> [Watch the Try-On setup video on YouTube](https://youtu.be/T8yf3xjKVyI?si=_rGwPXAxfw6UGI60).
## Before you start
Make sure that the model, Ring Configurator, or Wedding Band Builder project is available in your Drive.
The ring must have a clear inner opening. Auto Fit uses this opening to calculate the initial fit.
Use the setup path for your project type:
| Project type | Open the setup interface |
| --- | --- |
| Standalone ring model | Select the model. Then use **Open In → Editor** or **Open In → Playground**. |
| Ring Configurator | Select the configurator project. Then use **Open In → Editor** or **Open In → Playground**. |
| Wedding Band Builder | Select the Wedding Band project folder. Then select **Edit Default Settings**. |
For a Ring Configurator, the editor fits the ring assembled from the components currently shown.
For a Wedding Band Builder, select the ring that you want to use for calibration before you open Try-On settings.
One saved fit applies to every ring in that Wedding Band project.
## Enable Try-On
1. Open the project with the correct setup path from the table above.
2. Open the Try-On settings.
3. Turn on **Enable AR**.
4. Select **Enter Setup**.
Setup mode displays a cylinder inside the ring. The cylinder represents the tracked finger.
## Fit the ring to the cylinder
Select **Auto Fit** first.
Auto Fit finds the inner ring opening and provides an initial position and size.
If Auto Fit finds several openings, select it again to inspect the next result.
Use these controls to correct the result:
| Control | Use |
| --- | --- |
| **Model Size** | Match the inner ring opening to the cylinder diameter. |
| **Position** | Place the center of the ring opening on the cylinder axis. |
| **Rotation** | Align the ring band with the cylinder. Point the ring head in the direction of the arrow. |
| **Front**, **Top**, and **Side** | Inspect the fit from fixed viewpoints. |
| **X 90°**, **Y 90°**, and **Z 90°** | Correct the model orientation. Use these controls for large corrections. |
The cylinder must pass through the center of the ring opening. The band must surround the cylinder evenly.
The arrow inside the cylinder shows the correct direction for the ring head.
Check the fit from all three viewpoints.
Rotate the model until the ring head points in the direction of the arrow.
## Preview and save
1. Select **Exit Setup**.
2. Select **Preview in AR**.
3. Give the browser camera access.
4. Check the ring size, position, and direction on your hand.
5. Exit the preview.
6. Correct the setup if the fit is wrong.
7. Save the project to your Drive.
The saved project contains the Try-On configuration.
You do not need to download or host a separate configuration file.
Mini Viewer receives the project and its configuration through `loadModelById`.
For a configurator, Mini Viewer sends the ring assembled by the configurator plugin to Try-On.
It does not require a separate GLB for the configured ring.
::: info Public file access
The file must be **Public** in its share settings. `loadModelById` cannot load a private file from your Drive.
:::
## Test the saved project
After you save the project, test its file ID with the [Direct Integration](./demo) example.
The Mini Viewer Try-On button appears only when the saved configuration has Try-On enabled.
If the old fit appears, save the project again and reload the product page.
Test the customer flow for the project type:
- A Ring Configurator opens the ring that the customer assembled.
- A Wedding Band Builder with one ring opens that ring.
- An unlinked Wedding Band pair opens the selected ring.
- A linked Wedding Band pair asks the customer which ring to try on.
## See the complete platform workflow
This video shows the Try-On part of the complete iJewel Platform workflow.
> [Watch this section on YouTube](https://youtu.be/_4fjOGN-lXs?si=lomQC-wtE1Zqxj4i&t=275).
## Fix common fitting problems
| Problem | Correction |
| --- | --- |
| Auto Fit does not find the ring | Make sure that the inner opening is clear. Then adjust the ring manually. |
| The ring is too large or too small | Correct **Model Size**. |
| The ring is not centered | Correct **Position** from the front, top, and side viewpoints. |
| The ring head does not point in the direction of the arrow | Correct **Rotation**. Use a 90-degree change when the model uses another axis. |
| The configurator opens without a ring model | Wait for its components or generated bands to load before you start setup. A separate model file is not required. |
| The Try-On button is missing | Turn on **Enable AR**, save the project, and reload the product page. |
---
# Direct Integration
Start with an iframe for most product pages.
The iframe loads the configured project and the standard Try-On controls.
Use Mini Viewer when your page must load the project with JavaScript or respond to viewer events.
## Before you start
Complete [Prepare a Try-On Project](./prepare-model) before you add the project to your website.
Make sure that the project has a saved Try-On configuration with `enabled: true`.
Get the model or configurator project ID from your Drive in iJewel3D Platform.
See [Find the model ID](../viewer/tutorial-embed-drive#find-the-model-id) for the same iJewel3D Platform steps.
## Option 1: Add an iframe
Copy this example and replace `MODEL_ID` with the model or configurator project ID.
```html
```
The `camera` permission lets Try-On request camera access from inside the iframe.
The parent page must use HTTPS.
For an enterprise iJewel3D Platform instance, replace `ijewel3d.com` with the supplied domain.
You can also copy the iframe from the editor **Embed (`>`)** tool.
See [Create an iJewel viewer embed](../integrations/embedding) for the complete editor steps.
If you copy the generated iframe, make sure that its `allow` attribute includes `camera`.
## Option 2: Load the model with Mini Viewer
Use Mini Viewer when the website needs direct JavaScript access to the viewer.
Register the hosting domain with iJewel3D before you publish the page.
See [Host and domain setup](../viewer/tutorial-embed-drive#host-and-domain-setup) for the domain requirements.
::: info Public file access
The file must be **Public** in its share settings. `loadModelById` cannot load a private file from your Drive.
:::
### Add the complete Mini Viewer page
Copy this example into an HTML file.
```html
Ring Try-On
```
### Edit the Mini Viewer example
Change only the values that apply to your page.
| Value | Action |
| --- | --- |
| `MODEL_ID` | Replace `MODEL_ID` with the model file ID. |
| `DRIVE_BASENAME` | Keep `drive` unless iJewel3D gives you an enterprise basename. |
| `#viewer` size | If the viewer fills only part of the page, change the CSS. |
The viewer container must have a width and height.
A container without a height can make the viewer appear blank.
### Understand the Mini Viewer code
The first script loads WebGi `0.22.0`.
The `window.webgi` assignment gives Web VTO access to the same WebGi instance.
The second script loads Mini Viewer `0.6.18`.
`loadModelById` gets the model or configurator project and its saved configuration from iJewel3D Platform.
Mini Viewer `0.6.18` sends configurator-owned ring geometry to Try-On without a separate model file.
The standard integration does not need a Web VTO script tag.
Mini Viewer loads Web VTO after the customer selects the Try-On button.
### `loadModelById` parameters
| Parameter | Description |
| --- | --- |
| `MODEL_ID` | The unique file ID of the model or configurator project. |
| `DRIVE_BASENAME` | The iJewel3D Platform instance. Standard accounts use `drive`. |
| `document.getElementById("viewer")` | The element that contains Mini Viewer. |
| `showUiButtons: true` | Shows the Mini Viewer control bar. |
| `hideTryOn: false` | Keeps the Try-On button visible for a project that enables Try-On. |
If `tryonConfig.enabled` is not `true`, Mini Viewer does not show the Try-On button.
## Do the first browser test
1. Serve the page through HTTPS.
2. Open the product page.
3. Make sure that the 3D ring appears.
4. Select the Try-On button in the viewer controls.
5. When the browser asks for permission, allow camera access.
6. Move a hand into the camera view.
The ring must follow the selected finger and keep the saved project placement.
## Solve common problems
| Problem | Cause | Action |
| --- | --- | --- |
| The viewer area is blank. | The container has no height, or the project did not load. | Give the container a height. Then inspect the browser console for a loading error. |
| Mini Viewer shows a CORS or `403` error. | The hosting domain is not registered. | Send the exact production domain to iJewel3D support. |
| The Try-On button is missing. | The project does not enable Try-On, or the viewer hides the controls. | Make sure that `tryonConfig.enabled` is `true`. Use `showUiButtons: true` and `hideTryOn: false`. |
| The camera does not start. | The page is insecure, or the browser blocks camera access. | Use HTTPS. Then allow camera access in the browser. |
| Try-On works outside an iframe only. | The iframe does not have camera permission. | Add `camera` to the iframe `allow` attribute. |
| The camera view shows an iJewel3D attribution watermark. | Try-On is not purchased and enabled for the domain. | Purchase Try-On for the domain. Then turn on **Enable TryOn** under **Settings → Domains**. |
If you need branded controls or product switching, continue to the [advanced integration](./advanced).
For a project JSON hosted on your own server, continue in the matching
configurator guide:
- [Using Ring Configurator](../ring-configurator/using-ring-configurator#option-4-fully-self-hosted-project)
- [Self-Hosted Wedding Band Builder](../wedding-band-builder/integration-self-hosted)
---
# Advanced Integration
::: info Plan requirement
Advanced Integration requires an iJewel3D Enterprise plan at the Silver tier or above.
:::
If your website needs different controls, use this integration.
Examples include branded buttons, finger selection, image saving, and product switching.
Mini Viewer still creates the viewer and loads every model from iJewel3D Platform.
Your code controls the Try-On plugin through the existing WebGi `ViewerApp`.
Before you add these controls, [prepare and save the Try-On model](./prepare-model).
The [Web VTO demo](https://demo.ijewel3d.com/web-vto/) shows one possible advanced Try-On experience.
::: warning Configurator projects
This custom-control example targets a standalone model. For a Ring Configurator
or Wedding Band Builder, call the public
[Configurator Try-On helpers](../viewer/viewer-class#configurator-try-on-helpers)
after applying `tryonConfig` and before `tryon.start()`. The helper prepares the
selected assembled ring and restores the configurator after the session.
:::
## Understand the two viewer objects
The integration uses two related objects.
| Object | Purpose |
| --- | --- |
| `miniViewer` | The Mini Viewer wrapper returned by `loadModelById`. Use it for product changes. |
| `viewerApp` | The WebGi viewer from `ijewel-viewer-ready`. Use it to get or add plugins. |
Do not create another `ViewerApp`.
A second `ViewerApp` creates another canvas and another render loop.
## Load the libraries
The custom integration loads Web VTO with the other libraries.
Keep these versions and this script order.
```html
```
WebGi provides the viewer.
Mini Viewer loads the model from iJewel3D Platform.
Web VTO `0.3.3` provides `RingTryonPlugin` and `TryonUIPlugin` on `window.ij_vto`.
## Use the Mini Viewer events
Mini Viewer provides the data that the custom integration needs through window events.
| Event | Data | Use |
| --- | --- | --- |
| `ijewel-file-data` | The model file and its saved configuration. | Read `tryonConfig` for the current model. |
| `ijewel-viewer-ready` | The WebGi `ViewerApp`. | Add or get the Try-On plugins. |
| `ijewel-scene-ready` | The completed model scene. | Apply the saved configuration after the model is ready. |
Register the event listeners before you call `loadModelById`.
`ijewel-file-data` can occur before the `loadModelById` promise returns.
## Add the Try-On plugins
[RingTryonPlugin](./ring-tryon-plugin) controls the camera, hand tracking, ring placement, and image capture.
[TryonUIPlugin](./tryon-ui-plugin) shows the loading screen, hand prompt, and camera error messages.
It does not add the main Start, Stop, Flip, or Save buttons.
Add `RingTryonPlugin` first because `TryonUIPlugin` requires an existing Try-On plugin.
```javascript
const tryon = await viewerApp.getOrAddPlugin(
ij_vto.RingTryonPlugin
);
const tryonUi = await viewerApp.getOrAddPlugin(
ij_vto.TryonUIPlugin
);
```
Use `configure()` to change only the required interface values.
```javascript
tryonUi.configure({
loading: {
title: "Preparing Try-On",
subText: null
},
handPrompt: {
text: "Show the back of your hand"
}
});
```
See the [TryonUIPlugin API Reference](./tryon-ui-plugin) for all interface properties and messages.
## Add the complete custom integration
The example contains a full custom integration in one HTML file.
Edit these three areas:
1. Replace `MODEL_ID` with the model file ID.
2. Change `DRIVE_BASENAME` only for an enterprise iJewel3D Platform instance.
3. Replace the control markup and CSS with your product design.
Keep the event order and plugin initialization unchanged.
```html
Custom Ring Try-On
```
## Apply the saved model configuration
`ijewel-file-data` can contain the configuration as an object or a JSON string.
If the file configuration is empty, the example uses `defaultConfig`.
`tryon.fromJSON()` applies the saved placement values to the plugin.
The `type` value tells WebGi which plugin owns the configuration.
See [RingTryonPlugin configuration](./ring-tryon-plugin#configuration) for all configuration groups.
## Select the active finger
Web VTO `0.3.0` and later use the `finger` setter.
Set the finger after `tryon.start()` initializes hand tracking.
```javascript
await tryon.start();
tryon.finger = "ring";
```
You can also change the finger while Try-On is active.
```javascript
if (tryon.running) {
tryon.finger = "index";
}
```
The supported values are `thumb`, `index`, `middle`, `ring`, and `pinky`.
`assignMainRingToFinger` is deprecated. Do not use it in a new integration.
See [RingTryonPlugin placement](./ring-tryon-plugin#placement) for the complete placement API.
## Add controls to the Try-On interface
Use `tryon.running` to check whether Try-On is active.
| Action | API |
| --- | --- |
| Start Try-On | `await tryon.start()` |
| Stop Try-On | `await tryon.stop()` |
| Read the state | `tryon.running` |
| Change the finger | `tryon.finger = "ring"` |
| Set digital zoom | `tryon.videoScale = 1.5` |
| Request hardware camera zoom | `tryon.cameraZoom = 2` |
| Flip the camera | `await tryon.flipCamera()` |
| Select the next camera | `await tryon.selectNextCamera()` |
| Save an image | `await tryon.saveImage(options)` |
| Check the save state | `tryon.saveImageInProgress` |
| Get an image for upload | `await tryon.getImageBlob()` |
See the [RingTryonPlugin API Reference](./ring-tryon-plugin) for all lifecycle, camera, placement, and image APIs.
### Add a zoom slider
Use `videoScale` for a zoom control that works without camera hardware support.
The value scales the camera view and keeps the ring aligned with the hand.
If your interface controls zoom, turn off automatic interaction zoom.
```html
```
```javascript
const zoomInput = document.getElementById("tryon-zoom");
zoomInput.addEventListener("input", () => {
if (!tryon) {
return;
}
tryon.interactionZoom.enabled = false;
tryon.videoScale = Number(zoomInput.value);
});
```
`cameraZoom` requests optical or hardware zoom from the active camera.
Camera support and available values differ between devices.
Use `videoScale` as the main website zoom control.
### Respond to plugin events
Use plugin events when controls can change from more than one part of the page.
```javascript
tryon.addEventListener("initialized", updateControls);
tryon.addEventListener("stop", updateControls);
tryon.addEventListener("error", (event) => {
console.error(
"Try-On error:",
event.detail?.error ?? event.detail
);
updateControls();
});
```
See [RingTryonPlugin events](./ring-tryon-plugin#events) for the complete event list.
## Switch products without another viewer
Stop Try-On before you change the model.
Then call `loadModelById` with the existing `miniViewer` in the `viewer` option.
```javascript
async function loadProduct(nextModelId) {
tryonButton.disabled = true;
fingerSelect.disabled = true;
try {
if (tryon?.running) {
await tryon.stop();
}
const fileDataReady = waitForWindowEvent("ijewel-file-data");
const sceneReady = waitForWindowEvent("ijewel-scene-ready");
const loadedViewer = await window.ijewelViewer.loadModelById(
nextModelId,
DRIVE_BASENAME,
container,
{
viewer: miniViewer // Reuses the ViewerApp from ijewel-viewer-ready.
}
);
if (!loadedViewer) {
throw new Error("The next model did not load.");
}
const fileDataEvent = await fileDataReady;
await sceneReady;
await applyTryonConfiguration(
fileDataEvent.detail.iJewelFileData
);
} finally {
updateControls();
}
}
```
The `viewer` option reuses the canvas, WebGi viewer, and Try-On plugin.
Each new model must contain its own saved Try-On configuration.
## Stop Try-On before the view closes
Stop the plugin before your application hides or removes the viewer container.
```javascript
async function closeTryonView() {
if (tryon?.running) {
await tryon.stop();
}
// Close the modal or change the route here.
}
```
This action releases the camera and restores the normal 3D viewer state.
## Allow camera access in an iframe
If the integration runs in an iframe, add camera permission to the iframe.
```html
```
Serve the parent page and the iframe page through HTTPS.
The parent website permission policy must also allow camera access.
## Solve advanced integration problems
| Problem | Cause | Action |
| --- | --- | --- |
| `window.ij_vto` is undefined. | The Web VTO script did not load, or the script order is wrong. | Use the four script blocks from this page in the same order. |
| The saved configuration is undefined. | The `ijewel-file-data` listener was added too late. | Register the event promise before `loadModelById`. |
| The ring uses the wrong placement. | The code did not apply `tryonConfig` after the scene became ready. | Wait for `ijewel-scene-ready`. Then call `tryon.fromJSON()`. |
| The finger does not change. | The code set `tryon.finger` before hand tracking started. | Set the finger after `await tryon.start()` or during an active session. |
| Product changes create extra canvases. | The code creates a new Mini Viewer for each product. | Pass `{ viewer: miniViewer }` to `loadModelById`. |
| The camera stays active after a modal closes. | The application removed the view before it stopped Try-On. | Call `await tryon.stop()` before you remove the viewer container. |
---
# RingTryonPlugin API Reference
`RingTryonPlugin` is the try-on engine. It takes over the WebGi viewer while running: it opens the camera, tracks the user's hand, and places the loaded ring model on the chosen finger with matching occlusion, shadows and reflections.
It is a standard WebGi plugin, so everything you already know about plugins applies - `addPlugin`, `getPlugin`, `fromJSON` / `toJSON`, `addEventListener`.
```javascript
const tryon = await viewer.addPlugin(ij_vto.RingTryonPlugin);
await tryon.start();
```
::: info Where the plugin comes from
The plugin lives on the `ij_vto` global from the `web-vto` bundle, not on
WebGi. See [Load the libraries](./advanced.md#load-the-libraries) for the script
tags and required order.
:::
## Adding the plugin
#### `viewer.addPlugin(ij_vto.RingTryonPlugin, options?)`
| Option | Type | Default | Description |
|---|---|---|---|
| `preload` | `boolean` | `true` | Start downloading the hand-tracking model and WASM runtime as soon as the plugin is added, instead of on the first `start()`. Makes starting feel instant, at the cost of a background download every page view. |
```javascript
// Defer the download until the user actually presses the try-on button.
const tryon = await viewer.addPlugin(ij_vto.RingTryonPlugin, { preload: false });
```
#### `RingTryonPlugin.preload()`
Static. Warms the same assets without adding the plugin - useful to trigger on hover or when a product page scrolls into view.
```javascript
ij_vto.RingTryonPlugin.preload();
```
#### `RingTryonPlugin.PluginType`
Static. The string `"RingTryonPlugin"`, for `viewer.getPluginByType(...)` and for the `type` field when calling `fromJSON`.
## Lifecycle
#### `async start()`
Starts try-on. Prompts the user for camera access, initialises hand tracking, and switches the viewer from turntable mode into the live camera view.
Must be called from a user gesture - browsers only grant camera access in response to a click or tap.
```javascript
startButton.onclick = () => tryon.start();
```
#### `async stop(force = false)`
Stops try-on, releases the camera and restores the viewer to its normal 3D state. Pass `force: true` to tear down even if the plugin is mid-start.
#### `get running: boolean`
`true` between a successful `start()` and the matching `stop()`. Use it to drive a toggle button.
#### `async pause()` / `async resume()` / `async togglePause()`
Freezes the camera feed while keeping try-on active, so the user can inspect a still frame, then resumes the live view. Cheaper than a full stop/start cycle.
#### `get paused: boolean`
Whether the feed is currently frozen.
## Camera
#### `async flipCamera()`
Switches between the front (`user`) and rear (`environment`) camera. On devices with only one camera this is a no-op - check `paused`/`running` before offering the control.
#### `selectNextCamera()`
Cycles through every camera the browser reports, rather than just flipping the facing mode. Falls back to `flipCamera()` when the device list can't be resolved. Useful on desktops with several webcams.
#### `async setVideoSize(x: number, y: number)`
Requests a specific camera resolution. Lower values reduce tracking cost on weak devices.
#### `videoScale: number`
Zoom applied to the camera feed itself. Default `1.35`.
#### `cameraZoom: number`
Zoom applied to the 3D camera. Default `1`.
## Placement
#### `finger: number | string`
Which finger the ring sits on. Accepts a `Finger` index (`0`–`4`) or a name - any string containing `thumb`, `index`, `middle`, `ring` or `pinky` (case-insensitive). Anything unrecognised falls back to the ring finger.
```javascript
tryon.finger = "index";
tryon.finger = 3; // ring finger
tryon.finger = (tryon.finger + 1) % 5; // cycle
```
::: warning Set it after `start()`
The setter needs a loaded model and a live hand tracker, so it silently does nothing before `start()` resolves. Apply your default finger straight after starting, not while wiring up the page.
:::
Reading it back always returns the numeric index:
| Index | Finger |
|---|---|
| `0` | Thumb |
| `1` | Index |
| `2` | Middle |
| `3` | Ring (default) |
| `4` | Pinky |
The default can also be baked into the model - set `finger` in the model's `userData` in the editor and the plugin picks it up on load.
#### `getJewelryScreenPosition()`
Returns the ring's current anchor as `{ x, y }` in canvas CSS pixels, or `null` if it isn't on screen. Use it to pin your own HTML overlay - a size label or a tooltip - to the ring as it moves.
```javascript
const pos = tryon.getJewelryScreenPosition();
if (pos) {
label.style.transform = `translate(${pos.x}px, ${pos.y}px)`;
}
```
#### `resetInteractionZoom()`
Cancels the automatic zoom-in that happens after the hand has been tracked steadily, returning to the default framing.
## Setup mode
Setup mode is the authoring tool used to position a model on a reference finger. It is normally driven from the editor UI, but is available programmatically.
#### `enterSetupMode(options?): boolean`
Suspends try-on and shows the reference finger cylinder, the center-line plane and a transform gizmo. Returns `false` if the plugin is currently running or starting.
| Option | Type | Default | Description |
|---|---|---|---|
| `showGizmos` | `boolean` | `true` | Show and enable the transform gizmo. Set it to `false` to create the gizmo hidden and disabled; it reappears on the next transform-mode change. |
#### `exitSetupMode(): boolean`
Leaves setup mode and restores the camera position saved on entry.
#### `inSetupMode: boolean`
Whether setup mode is currently active.
See [Prepare a Try-On Project](./prepare-model.md) for the full authoring workflow, including exporting the resulting JSON.
### Prepare a configurator ring
A Ring Configurator or Wedding Band Builder builds its ring at runtime, so hand
the assembled ring to the plugin before setup mode or `start()`:
```javascript
const session = ijewelViewer.prepareConfiguratorTryon(
viewerApp,
tryon
);
if (!tryon.enterSetupMode()) {
session.restore();
throw new Error("Try-On setup mode could not be opened.");
}
tryon.setup.autoFit();
```
Calling `tryon.exitSetupMode()` restores the complete configurator. Pass a
`ringId` when a Wedding Band Builder has several rings. See
[Configurator Try-On Helpers](../viewer/viewer-class.md#configurator-try-on-helpers)
for ring choices and the custom runtime flow.
## Configuration
Placement and visual settings live on grouped config objects. Every field is serialized, so `toJSON()` / `fromJSON()` round-trip them - this is exactly how the settings authored in the editor reach the plugin at runtime.
```javascript
// Apply settings authored in the editor.
tryon.fromJSON({ ...tryonConfig, type: ij_vto.RingTryonPlugin.PluginType });
// Or set individual values.
tryon.setup.modelScaleFactor = 1.1;
tryon.contactShadow.intensity = 0.45;
```
For a configurator, call
[`prepareConfiguratorTryon()`](../viewer/viewer-class#configurator-try-on-helpers)
after `fromJSON()` and before `start()`.
### `setup` - model placement
| Property | Type | Default | Description |
|---|---|---|---|
| `modelScaleFactor` | `number` | `1` | Uniform scale applied to the model. |
| `modelPosition` | `Vector3` | `(0,0,0)` | Position offset. |
| `modelRotation` | `Vector3` | `(0,0,0)` | Rotation offset in **radians**. |
These three are also mirrored directly on the plugin as `modelScaleFactor`, `modelPosition` and `modelRotation`.
::: warning Radians here, degrees in `tracking`
`setup.modelRotation` is applied straight to the model's Euler rotation, so it is in radians - the editor converts for display. The separate [`tracking.offsetRotation`](#tracking-advanced-tuning) *is* in degrees. Use `MathUtils.degToRad()` when you have a degree value for `modelRotation`.
:::
### `contactShadow` - shadow where the ring meets the finger
| Property | Type | Default | Description |
|---|---|---|---|
| `enabled` | `boolean` | `true` | Draw the contact shadow. |
| `intensity` | `number` | `0.6` | Shadow strength. |
| `distance` | `number` | `0.15` | How far the shadow reaches from the ring. |
| `smoothness` | `number` | `0.55` | Softness of the shadow edge. |
| `angle` | `number` | `0` | Light direction in screen space, in degrees. `0` puts the light above. |
| `elevation` | `number` | `70` | Light elevation toward the camera, in degrees. `90` is head-on, casting no visible shadow. |
| `skinWarmth` | `number` | `0.1` | Warm halo bleeding into the shadow, approximating light scattering in skin. |
| `color` | `Color \| string` | black | Tint added inside the shadow. |
### `ssao` - ambient occlusion and skin shading
| Property | Type | Default | Description |
|---|---|---|---|
| `enabled` | `boolean` | `false` | Enable ambient occlusion. |
| `intensity` | `number` | `0.2` | Occlusion strength. |
| `radius` | `number` | `1.07` | Sampling radius. |
| `falloff` | `number` | `0.33` | How quickly occlusion fades with distance. |
| `smoothEnabled` | `boolean` | `true` | Blur the occlusion result. |
### `ssr` - screen-space reflections
| Property | Type | Default | Description |
|---|---|---|---|
| `enabled` | `boolean` | `true` | Reflect the hand and surroundings in the metal. |
| `intensity` | `number` | `1.5` | Reflection strength. |
| `radius` | `number` | `2` | Ray-march radius. |
| `tolerance` | `number` | `5` | Depth tolerance when matching a reflection hit. |
### `environmentReflection`
| Property | Type | Default | Description |
|---|---|---|---|
| `enabled` | `boolean` | `true` | Apply the scene environment map to the ring while in try-on. |
| `scale` | `number` | `1.67` | Environment scale. |
| `stretch` | `number` | `2.675` | Environment stretch. |
### `motionBlur`
| Property | Type | Default | Description |
|---|---|---|---|
| `enabled` | `boolean` | `false` | Blur the ring along its motion as the hand moves. |
| `intensity` | `number` | `1.5` | Blur strength. |
| `edgeSmear` | `number` | `0.2` | How far the blur smears past the ring's edges. |
### `interactionZoom`
After the hand has been tracked steadily for a moment, the view zooms in on the ring automatically.
| Property | Type | Default | Description |
|---|---|---|---|
| `enabled` | `boolean` | `true` | Enable the automatic zoom. |
| `targetScale` | `number` | `1.5` | Zoom level to settle at. |
| `delayMs` | `number` | `1000` | Delay before the zoom starts. |
| `durationMs` | `number` | `1250` | Length of the zoom animation. |
### `tracking` - advanced tuning
Defaults suit most catalogues; change these only when a model consistently sits wrong.
| Property | Type | Default | Description |
|---|---|---|---|
| `minHandDistance` | `number` | `10` | Hide the ring when the hand is farther than this. |
| `snappiness` | `number` | `0.9` | Tracking responsiveness. `0` is heavily smoothed, `1` is instant and jittery. |
| `locationOffset` | `number` | `0.65` | Where along the finger segment the ring sits. |
| `offsetScale` | `number` | `1` | Multiplier on the detected finger width - effectively ring size. |
| `offsetPosition` | `Vector3` | `(0,0,0)` | Extra position offset applied every frame. |
| `offsetRotation` | `Vector3` | `(0,0,0)` | Extra rotation offset in degrees, mirrored for the left hand. |
| `zOffset` | `number` | `-3.25` | Depth offset from the finger surface. |
| `worldZFactor` | `number` | `1` | Scaling applied along the depth axis. |
## Events
Standard WebGi events - subscribe with `addEventListener(type, handler)`.
| Event | Detail | Fired when |
|---|---|---|
| `start` | `{}` | `start()` was called and initialisation has begun. |
| `initializationProgress` | `{ progress }` | Loading progress, `0`–`1`. Drive your own progress bar with this. |
| `initialized` | `{}` | Tracking is live and the ring is ready to appear. |
| `interaction` | `{}` | The hand has been tracked steadily - this is what triggers the automatic zoom. |
| `stop` | `{}` | Try-on has stopped and the camera is released. |
| `error` | `{ reason, error, isCameraError? }` | Something failed. See below. |
### Handling errors
```javascript
tryon.addEventListener("error", ({ detail }) => {
if (detail.isCameraError) {
showMessage("We couldn't access your camera.");
} else {
showMessage("Try-on couldn't start. Please try again.");
}
console.error(detail.reason, detail.error);
});
```
`detail.reason` is one of:
| Reason | Meaning |
|---|---|
| `startupFailed` | Initialisation threw - not camera-related. |
| `noSupport` | The browser has no webcam API. |
| `permissionDenied` | The user declined camera access. |
| `notFoundError` | No camera matches the requested constraints. |
| `notReadableError` | The camera is in use by another application. |
| `overconstrainedError` | The camera can't satisfy the requested settings. |
| `abortError` | Camera access was aborted. |
| `invalidStateError` | The page was inactive when access was requested. |
| `securityError` | Camera access is blocked by browser or page security settings. |
| `typeError` | The camera request was rejected as invalid. |
| `mediaDevicesError` | Any other failure starting the camera. |
Camera reasons arrive with `isCameraError: true`. [`TryonUIPlugin`](./tryon-ui-plugin.md) already renders a message for each of these - add your own handler only if you want different behaviour.
## `canRunVTO()`
A standalone pre-flight check, exported alongside the plugin. Call it before showing a try-on button so users on unsupported hardware never hit a dead end. It creates and discards a throwaway WebGL context, so it's cheap enough to call on page load.
```javascript
const result = ij_vto.canRunVTO();
if (!result.ok) {
tryOnButton.remove();
console.warn("Try-on unavailable:", result.reason, result.details);
} else if (result.warning) {
console.warn(result.warning); // runs, but may be slow
}
```
### Result
| Field | Type | Description |
|---|---|---|
| `ok` | `boolean` | Whether try-on should be offered. |
| `reason` | `string?` | Present when `ok` is `false`. One of `no_webgl2`, `weak_or_software_renderer`, `insufficient_cores`, `insufficient_memory`. |
| `warning` | `string?` | Present when try-on will run but performance may suffer - for example an integrated GPU on Chrome for Windows. |
| `details` | `object` | What was measured: `webgl2`, `renderer`, `vendor`, `cores`, `memoryGB`. Worth logging for support. |
### Options
| Option | Type | Default | Description |
|---|---|---|---|
| `minCores` | `number` | `4` | Minimum CPU cores. A reported `0` (browser withheld it) never fails the check. |
| `minMemoryGB` | `number` | `4` | Minimum device memory in GB, treated the same way. |
| `weakRendererPatterns` | `RegExp[]` | built-in list | Renderer strings to reject - software rasterisers and known-weak GPUs. |
| `powerPreference` | `string` | `"high-performance"` | Power preference used for the probe context. |
```javascript
// Be stricter than the defaults.
const result = ij_vto.canRunVTO({ minCores: 6, minMemoryGB: 8 });
```
---
# TryonUIPlugin API Reference
`TryonUIPlugin` is the ready-made overlay for the try-on session. It listens to [`RingTryonPlugin`](./ring-tryon-plugin.md) and renders three things over the canvas:
- a **loading box** with a title, optional subheader, optional logo and a progress bar, shown while hand tracking initialises;
- a **hand prompt** - an outlined hand and a line of copy - once try-on is live but no hand has been detected yet;
- **error messages** for every camera and startup failure the plugin can report.
Using it is optional. Everything it does can be built from the plugin's [events](./ring-tryon-plugin.md#events), but it saves you writing loading and error states for a dozen camera failure modes.
```javascript
const tryon = await viewer.addPlugin(ij_vto.RingTryonPlugin);
await viewer.addPlugin(ij_vto.TryonUIPlugin);
```
::: warning Add it after the try-on plugin
`TryonUIPlugin` looks for a try-on plugin on the viewer when it is added, and throws if there isn't one. Always add `RingTryonPlugin` first.
:::
::: info Alias
The plugin is exported both as `ij_vto.TryonUIPlugin` and as `ij_vto.RingTryonUIPlugin`. They are the same class - the second name exists for older integrations.
:::
## Configuring
Pass a config to the constructor, or update it later with `configure()`. Both take a deep-partial object that is merged onto the defaults, so you only specify what you want to change.
```javascript
await viewer.addPlugin(new ij_vto.TryonUIPlugin({
loading: {
title: "Preparing your try-on",
subText: null, // hide the subheader
logo: "https://example.com/logo.svg",
align: "center",
background: "#111",
textColor: "#fff",
progressColor: "linear-gradient(90deg, #c9a227, #f0d878)",
},
handPrompt: {
text: "Show the back of your hand",
},
}));
```
#### `configure(partial)`
Merges a partial config onto the current one and re-applies it to the live DOM immediately - safe to call while try-on is running.
```javascript
const ui = viewer.getPlugin(ij_vto.TryonUIPlugin);
// Switch to a different message mid-session.
ui.configure({ handPrompt: { text: "Move your hand a little closer" } });
```
#### `config`
The full, resolved config object. Read it to inspect current values; mutate through `configure()` so changes reach the DOM.
#### `enabled: boolean`
Set to `false` to suppress the whole overlay without removing the plugin.
## `loading`
The box shown while hand tracking initialises.
| Property | Type | Default | Description |
|---|---|---|---|
| `enabled` | `boolean` | `true` | Render the loading box at all. Set to `false` if you show your own loading state. |
| `title` | `string` | `"Loading..."` | Main heading. |
| `subText` | `string \| null` | `"Loading models..."` | Subheader. `null` or `''` hides it. |
| `logo` | `string \| null` | `null` | Logo above the title. Either an image URL / data-URI, or a raw SVG or HTML string. |
| `size` | `'card' \| 'half' \| 'full'` | `'card'` | Preset box size - a centered card, roughly half the container, or a full-canvas overlay. |
| `width` | `string \| null` | `null` | Explicit CSS width, e.g. `'320px'` or `'60vw'`. Takes precedence over `size`. |
| `align` | `'start' \| 'center' \| 'end'` | `'start'` | Horizontal alignment of logo, title and subheader. |
| `background` | `string` | white, near-opaque | Any valid CSS `background` value. |
| `textColor` | `string` | `'#000000'` | Title colour. |
| `subTextColor` | `string` | `'#4a4a4a'` | Subheader colour. |
| `showProgressBar` | `boolean` | `true` | Show the progress bar. |
| `progressColor` | `string` | dark gradient | CSS colour or gradient for the progress fill. |
```javascript
// Full-bleed dark loading screen with a logo and no subheader.
ui.configure({
loading: {
size: "full",
align: "center",
background: "#0b0b0b",
textColor: "#ffffff",
subText: null,
logo: "https://example.com/logo-light.svg",
},
});
```
## `handPrompt`
The overlay shown once try-on is live but no hand has been detected yet.
| Property | Type | Default | Description |
|---|---|---|---|
| `enabled` | `boolean` | `true` | Show the prompt. |
| `text` | `string \| null` | `"Show your hand to start"` | Prompt copy. `null` or `''` leaves just the outline. |
| `showHandOutline` | `boolean` | `true` | Draw the outlined hand graphic. |
| `handSvg` | `string` | built-in outline | Replace the outline with your own SVG markup. |
| `color` | `string` | near-white | Colour of the prompt text. |
#### `showHandPrompt()` / `hideHandPrompt()`
Show or hide the prompt imperatively. `showHandPrompt()` respects `handPrompt.enabled` and does nothing when the prompt is disabled.
```javascript
// Text-only prompt, no outline.
ui.configure({
handPrompt: { showHandOutline: false, text: "Hold your hand up to the camera" },
});
```
## `messages`
Every user-facing string the plugin can display. Override any subset - for translation, or to match your store's tone.
| Property | Description |
|---|---|
| `initialization` | Loading title (mirrors `loading.title`). |
| `initializationSubText` | Loading subheader. |
| `error.noSupport` | The browser has no webcam API. |
| `error.permissionDenied` | The user declined camera access. |
| `error.startupFailed` | Initialisation failed for a non-camera reason. |
| `error.mediaDevicesError` | Generic camera start failure. |
| `error.runtimeError` | Try-on failed while already running. |
| `error.abortError` | Camera access was aborted. |
| `error.invalidStateError` | The page was inactive when access was requested. |
| `error.notFoundError` | No camera matched the requested constraints. |
| `error.notReadableError` | The camera is in use by another application. |
| `error.overconstrainedError` | The camera can't satisfy the requested settings. |
| `error.securityError` | Camera access is blocked by security settings. |
| `error.typeError` | The camera request was rejected as invalid. |
| `error.unknown` | Fallback for unrecognised failures. |
| `error.unknownCameraError` | Fallback for unrecognised camera failures. |
```javascript
// Localise the strings users are most likely to see.
ui.configure({
messages: {
initialization: "Chargement…",
initializationSubText: "Préparation de l'essayage virtuel.",
error: {
permissionDenied: "Vous avez refusé l'accès à la caméra. Autorisez-le puis réessayez.",
notReadableError: "Votre caméra est utilisée par une autre application.",
},
},
});
```
## Full example
```javascript
const tryon = await viewer.addPlugin(ij_vto.RingTryonPlugin);
const ui = await viewer.addPlugin(new ij_vto.TryonUIPlugin({
loading: {
title: "Preparing your try-on",
subText: "This takes a few seconds the first time.",
logo: "https://example.com/logo.svg",
size: "full",
align: "center",
background: "#0b0b0b",
textColor: "#ffffff",
subTextColor: "#a0a0a0",
progressColor: "linear-gradient(90deg, #c9a227, #f0d878)",
},
handPrompt: {
text: "Show the back of your hand",
color: "#ffffff",
},
}));
await tryon.start();
```
---
# Changelog for @ijewel3d/web-vto
## [0.3.3] - 2026-09-15
### Fixed
- Hand detection now works on phones with an Adreno 8xx GPU, such as the Galaxy S25 Ultra. MediaPipe's GPU delegate returns no hands on these GPUs, so hand detection uses the CPU delegate there. All other devices keep the GPU delegate (IJ-249).
## [0.3.2] - 2026-09-07
### Fixed
- AR Setup no longer darkens editor backgrounds. The AR color conversion now applies only while an AR background is active.
## [0.3.1] - 2026-09-01
### Fixed
- Camera stop now restores the canvas scale. The canvas stayed mirrored after the rear camera stopped.
## [0.3.0] - 2026-08-02
### Added
- On-device engine ported from Pyodide/Python to TypeScript: ~15 MB smaller download.
- Ribbon edge fit.
- Depth-normalization fallback when edges are missing, flagged as `depthNormFallback`.
- `pauseRendering` hook so inference no longer contends with the render loop.
## [0.2.9] - 2026-07-20
### Added
- Wristwear: Onbody front-end loading and support.
## [0.2.8] - 2026-07-13
### Added
- Onbody front-end loading and support.
### Changed
- Move onbody handling from back-end to on-device engine.
## [0.2.7] - 2026-06-18
### Added
- `TryonUIPlugin` (`RingTryonUIPlugin`) is now fully configurable via a `TryonUIConfig` object — pass it to the constructor (`new RingTryonUIPlugin({ ... })`) or update it at runtime with `uiPlugin.configure({ ... })`, which re-applies to the live DOM.
- Loading box: `enabled` (disable entirely), `title`, `subText` (`null`/`''` hides the subheader), `logo` (image URL/data-URI or raw SVG/HTML), `size` (`'card' | 'half' | 'full'`), `width` (custom CSS override), `align` (`'start' | 'center' | 'end'` for logo/title/subheader), `background`, `textColor`, `subTextColor`, `showProgressBar`, `progressColor`.
- Hand prompt: `enabled` (show/hide the "show your hand" overlay), `text` (`null`/`''` for outline only), `showHandOutline`, `handSvg` (override the outline markup), `color`.
- Customizable `messages` strings (initialization, save error, and all camera/error messages).
- `TryonUIPlugin.showHandPrompt()` / `hideHandPrompt()` to imperatively control the hand-prompt overlay.
### Changed
- `TryonUIPlugin` no longer hardcodes loading text, logo, box size/background, alignment, hand SVG, or prompt text — all driven by config (existing defaults preserved when no config is passed).
## [0.2.6] - 2026-06-18
### Added
- Try-on save-image UI with a smoother image-saving animation (ultra mode).
### Changed
- Ultra-mode save: crop size now sized relative to the ring's bounding-sphere radius.
- Fade shader: ring distance fade-out with more smoothness; reduced finger fade occlusion factor and increased circle fade factor.
### Fixed
- Ultra-resolution save mode artifacts.
- Fade shader circle fade-out being incorrect during zoom.
- Ring non-uniform rotation depending on aspect ratio.
- Reset on window resize.
## [0.2.5] - 2026-06-12
### Added
- High-resolution image export using camera.setViewOffset(): Super-sampled ring crop composited onto the original.
- Downloading/loading image bake files for importing accurate onbody image data (for using try-on backend data such as finger edges, finger width, depth rotation, occlusion mask)
- `maxSize` option to `saveImage` for ultra-mode output.
### Fixed
- SSAO options not properly resetting when entering and then exiting the try-on.
## [0.2.4] - 2026-06-10
### Added
- `shadowColor` for SSS contact shadows.
### Fixed
- apply/restore zoom in `_setCameraSettings()`
## [0.2.3] - 2026-06-04
### Added
- `enterSetupMode({ showGizmos: false })`: enter setup mode with the transform gizmo created but hidden/disabled. Calling `setTransformMode()` re-shows it.
### Fixed
- Auto-fit: original child transforms now restored when fit fails (no inner boundary or validation failure) instead of leaving them zeroed.
- Setup mode: camera position is now saved on enter and restored on exit.
- Image-mode transform gizmo could disappear after resize/render-scale changes; now detaches on resize so the next update rebinds it.
## [0.2.2] - 2026-05-29
### Fixed
- Set webcam state throwing error if camera background plugin is not set.
## [0.2.1] - 2026-05-29
### Fixed
- Setting video scale changed video aspect ratio unexpectedly.
## [0.2.0] - 2026-05-28 - Try-On Backend Integration
### Added
- Try-on backend: comprehensive server-side pipeline for ring placement: edge detection,
depth-based yaw/pitch, finger-width estimation, per-finger visibility scoring, and
health warmup, roll + many more misc additions. Opt in via `backendUrl` config or the `?backend` query parameter.
- Improvements for the wristwear try-on: wrist velocity calculations and motion-prediction features in `MPHand` and `MPBody` for more stable wristwear tracking.
### Fixed
- Ring landmarks no longer fade when try-on backend is in use.
- Ring position and finger width mismatch when using backend predictions.
- `offsetRotation` was incorrectly displacing ring position.
- Incorrect transform where only the ring model was scaled, not the full setup.
- Ring alignment now uses a single reference edge for consistent placement.
- Fist pitch correction when backend is active.
- Occluded ring finger now shows an explicit error instead of silently failing.
- Cylinder occluder size reduced in image mode to prevent over-occlusion.
- Auto-fit placement accuracy after the onbody-depth merge.
- Share button now downloads via `getImageBlob()` with a proper filename.
- Various setup mode issues and toolbar regressions.
## [0.1.11] - 2026-05-04
### Added
- Setup mode: shift key snapping override for transform controls.
- Setup mode: reset functionality for all transform modes.
- Setup mode: transform mode selector and auto-fit controls exposed in viewer setup (`index.ts`, `watch-index.ts`).
- Watch occluder estimator: new `WatchOccluderDepthPass` for top-down depth map approach; greatly improves occluder accuracy for rings auto-fit as well.
- Wrist velocity calculations and motion-prediction features in `MPHand` and `MPBody` for more stable wristwear tracking.
### Changed
- Wristwear placement now uses `TrackingConfig` offsets (consistent with ring try-on).
- Pose landmarker: reduced smoothing for faster response; disabled for back camera to save resources.
- Pose landmarker: slightly faster convergence for still poses.
- Default `videoScale` changed from 1.0 to 1.35.
- Wrist width calculation in `HandAnalyzer` refined for better size estimation.
- SSAO power no longer influences SSS gamma (separated concerns); SSS parameters tuned for wristwear.
- Watch occluder estimation rewrote using circle-fitting for improved auto-centering and scaling.
### Fixed
- Severe animation lag in `TryonUIPlugin` animations.
- Incorrect wristwear yaw when hand deviates radially/ulnarly while the arm remains still.
- `borderColor` / `borderImage` not applied in wristwear image mode.
- Inconsistent relative wristwear placement across frames.
- Transform gizmo rendering artifacts caused by `FadeShaderExtension`.
- Watch occluder losing its material after estimation.
- Camera depth alignment in setup mode auto-fit.
## [0.1.10] - 2026-05-01
### Fixed
- `TryonUIPlugin` failing to attach in obfuscated builds; reverted plugin lookup to use `PluginType` strings instead of mangled class names.
## [0.1.9] - 2026-05-01
### Added
- `canRunVTO()` pre-flight helper exported from the lib. Returns WebGL2/GPU/device capability check plus an optional `warning` for Chrome/Windows on integrated GPUs.
### Removed
- License/key system removed from `BaseTryonPlugin`; licensing is now handled solely by the underlying webgi runtime.
## [0.1.8] - 2026-04-21
### Fixed
- Fix race condition in `stop` method by setting `_running` to `false` right away.
## [0.1.7] - 2026-04-16
### Added
- `getImageBlob(type?, quality?)` method to retrieve the current try-on image as a `Blob` (auto-cropped in image mode).
- `saveImage` now accepts a file format/MIME type parameter.
- Vertical border support in image mode.
- Crop image in image mode when saving it.
### Changed
- `startWithImage` and `setImage` now accept any `CanvasImageSource` (not just `HTMLImageElement`).
- Hand analyzer resets on window resize to prevent stale tracking state.
## [0.1.6] - 2026-04-09
### Added
- Side fade-out at cylinder edges in live try-on mode to prevent floating shadow artifacts.
### Changed
- Unified SSAO and contact shadows into a single SSS computation pipeline — both now drive the same warm-skin shading path independently.
- Improved orbit-normal line smoothing (`irregularSmoothing`) with a refined distance mapping function.
- Refactored `SSSFingerCylinderShadow`: eliminated duplicated material/uniform/extension blocks; added `updateRingTransform()` for a single-call per-frame update.
- Removed SSS wrap strength and saturation boost config parameters; simplified shader accordingly.
### Fixed
- Contact shadow Z-fighting artifacts between shadow cylinder and sphere end-caps.
- SSAO warm-shading had no effect when contact shadows were disabled; AO now correctly activates the full SSS colour path.
## [0.1.5] - 2026-04-07
### Added
- Pose-based wristwear try-on integration for more independent wrist transform.
- Screen-space contact shadows (SSCS) for more realistic shadow rendering.
- Alternating tracking and model inference for better performance.
- Preliminary API documentation.
### Fixed
- Fix try-on running always in "IMAGE" mode.
- Fix shadow rendering in wrist wear try-on.
- Fix static image resize, fade shader, and default transform controls.
- Fix borderColor and borderImage styling.
- Fix camera moving in image mode.
### Changed
- Adjust wristwear size and snappiness.
- Use average landmarks for body tracking.
- UI clean-ups and code refactoring.
## [0.1.4] - 2026-03-11
### Fixed
- Jewelry object visible in the first frame after entering try-on mode.
## [0.1.3] - 2026-03-11
### Fixed
- Inconsistent AO setting.
## [0.1.2] - 2026-03-08
### Fixed
- Video scale not applied correctly.
- Quaternion filters improved.
## [0.1.1] - 2026-03-08
### Fixed
- Video texture lagging behind during zoom on invisible elements.
- Error messages being to short.
- Restore older hand tracking smoothing functions in MPHand to address degraded tracking.
## [0.1.0] - 2026-03-06
### Added
- WristwearTryonPlugin: Add a watch and bracelet try-on.
- Major refactoring of the codebase.
- Refactor to support future try-on plugins.
- Automatic zoom in on interaction (closer zoom of 1.5 for better experience).
### Fixed
- UX improvements: preloading, polling in-store try-on plugin.
- Fix occlusion for bigger jewelry like the billion dollar ring demo ring.
- Various improvements for artifacts in fade shader and motion blur.
## [0.0.41] - 2026-03-01
### Added
- `preferBackCamera` option on RingTryonPlugin to allow selecting the back (environment) camera on start.
## [0.0.40] - 2026-02-16
### Fixed
- Support for larger rings (e.g. billion dollar ring demo ring) with proper occlusion (faded and SSR occluders) and shadow SSAO.
- Less visual occlusion artifacts for poses like fist.
- Ring try-on UI: no specific error message for most common error (camera permission denied) shown.
- Enable quaternion filters for smoothing rotation flickering which was especially noticeable for larger rings like the billion dollar ring demo one.
- Fix strong display artifacts when entering AR mode due to interpolation with unclamped tonemapped output color.
## [0.0.39] - 2026-01-16
### Added
- A static preload function to the RingTryonPlugin.
## [0.0.38] - 2025-12-26
### Fixed
- Disable DollyFov in camera settings.
## [0.0.37] - 2025-10-02
### Fixed
- In-store: Shader crash when using segmentation.
- In-store: Address not selecting the correct camera.
### Changed
- In-store: More proper syncing of MP and Leap.
## [0.0.36] - 2025-08-29
### Changed
- Demo page: css changes, changed 3d model.
- minDistance change in `RingTryonConfig`
## [0.0.35] - 2025-08-27
### Changed
- Demo page: check for 'edit' query parameter to show UIConfig for TryOn.
- Removed setup mode UI
- static variables for mediapipe libraries
## [0.0.34] - 2025-08-15
### Fixed
- Minor fix: proper button display in demo when try-on start failed.
## [0.0.33] - 2025-08-15
### Changed
- Demo page: setup mode UI, try-on buttons only showing when try-on running.
### Fixed
- Setup mode UI: proper updating in scene when config changed.
## [0.0.32] - 2025-08-06
### Changed
- Update demo link and WebGi version to 0.15.2.
## [0.0.31] - 2025-08-03
### Changed
- Disable motion blur by default.
- Update WebGi version to 0.15.0.
### Fix
- Add backwards compatibility for motion blur and WebGi pre-0.11.0.
- Resolved issues with ring fading and hiding for certain hand poses.
## [0.0.30] - 2025-08-03
### Changed
- Refactored configuration system for improved structure and maintainability.
- Improved motion blur effect; cleaned up and refactored related code.
- Removed `lil-gui` dependency; moved GLSL code to separate files; improved code obfuscation workflow.
### Fixed
- Addressed an issue where the asset was not being hidden entirely, causing an outline to be visible.
- Camera near/far planes are now constant to address a performance issue and to prevent possible clipping artifacts.
## [0.0.29] - 2025-06-17
### Fixed
- Fix camera near/far based clipping at close range.
## [0.0.28] - 2025-06-17
### Fixed
- Revert web camera background plugin to recent version. Fix scene background reset issue introduced by reverting.
## [0.0.27] - 2025-06-06
### Fixed
- Check first for video full HD resolution.
## [0.0.26] - 2025-06-06
### Fixed
- Reverted to old web camera plugin for now.
## [0.0.25] - 2025-06-06
### Fixed
- Reverted to old web camera plugin for now.
## [0.0.24] - 2025-06-06
### Fixed
- Applied custom configs and checking for in-store plugin.
### Added
- Check for in-store availability in index.ts
## [0.0.23] - 2025-06-02
### Fixed
- Revert some scene config (SSR, SSAO).
## [0.0.22] - 2025-06-01
### Fixed
- Instore build deployment.
## [0.0.21] - 2025-05-31
### Fixed
- Integrate latest development changes.
- Deprecate segmenter hand analyzing. Finger width detection is now based on landmarks.
- Adjust config and smoothing.
## [0.0.20-dev.10] - 2025-05-30
### Fixed
- Setup mode cylinder.
## [0.0.20-dev.9] - 2025-05-15
### Added
- Deployment
---
# Ring Configurator in iJewel3D

iJewel3D Ring Configurator is a powerful tool that lets you create interactive, customizable ring configurators for your jewelry business. By combining modular ring components (heads and shanks), customers can explore hundreds of ring variations in real-time 3D choosing diamond shapes, carat sizes, shank styles, and materials.
Whether you want to embed a configurator on your website, share it directly with customers, or self-host it on your own server, Ring Configurator makes it simple.
### How It Works
Ring Configurator uses a modular approach: instead of modeling every ring variation, you create separate **Head** and **Shank** components that iJewel combines dynamically. This means fewer 3D files to manage and endless possibilities for your customers.
## Getting Started
Follow these three steps to set up your Ring Configurator:
### [1. Prepare 3D Models](./prepare-components)
Learn how to prepare your ring components, assign proper layers, and set up anchor points for automatic alignment.
[](./prepare-components)
**What you'll learn:**
- Separating rings into Head and Shank components
- Creating variations (prong counts, diamond shapes, shank styles)
- Setting up anchor-based auto placement
- Naming conventions and layer assignment in Rhino
### [2. Set Up in iJewel3D Platform](./ring-configurator-in-ijewel3d)
Upload your components to the iJewel3D platform and configure your Ring Configurator with variations, materials, and settings.
[](./ring-configurator-in-ijewel3d)
**What you'll learn:**
- Uploading and syncing 3D files
- Configuring head and shank variations
- Setting up materials and finishes
- Organizing your component library
### [3. Share, Embed, or Self-Host](./using-ring-configurator)
Deploy your Ring Configurator to reach customers embed it on your website, share direct links, or use templates for self-hosting.
[](./using-ring-configurator)
**What you'll learn:**
- Embedding the configurator on your website
- Sharing direct links with customers
- Using ready-made templates
- Self-hosting options for full control
---
# Prepare Ring Components
When building rings in iJewel, you don't need to model every variation from scratch. By separating a ring into **Head** and **Shank** components, you can dynamically combine them inside iJewel to generate dozens or even hundreds of unique ring designs from a small set of files.

### Why Separate Components?
| Benefit | Description |
|---------|-------------|
| **Mix and Match** | Combine any head with any shank |
| **Fewer Models** | Reduce total files needed |
| **Easy Updates** | Add new variations without remodeling the entire ring |
## Creating Variations
Each component should have multiple variations to maximize configurability.
### Head Variations
| Property | Examples |
|----------|----------|
| **Prong Count** | 4-prong, 5-prong, 6-prong |
| **Diamond Shape** | Round, Princess, Pear, Oval, Marquise |
| **Carat Size** | 0.5 ct, 1 ct, 2 ct, 3 ct |
### Shank Variations
| Style | Description |
|-------|-------------|
| **Plain** | Simple, smooth band |
| **Pave** | Small diamonds set into the band |
| **Channel** | Diamonds set in a channel groove |
| **Split Shank** | Band splits near the head |
| **Cathedral** | Arched supports rising to meet the head |
By combining these, iJewel can automatically generate dozens or hundreds of ring combinations from a small set of files.
## Two Methods for Creating Components
These guidelines work with any modelling software, but examples here use **Rhino** and **MatrixGold**, as they are most commonly used in the jewelry industry.
### Method 1: Pre-Positioned Components
In this method:
- Each Head and Shank is modeled separately
- They are positioned correctly relative to each other in 3D space
- When combined, they already form a complete ring

::: tip When to Use
- Fixed designs with limited variations
- Simple setups
- When exact manual positioning is preferred
:::
---
### Method 2: Anchor-Based Auto Placement (Recommended)
In this method, exact positioning is handled by iJewel automatically using an **anchor object**.
#### Steps (Rhino Example)
1. Create a cube or simple shape (anchor object)
2. Place it on top of the shank, exactly where the head should sit
3. Assign the anchor object to a layer named `placeholder:head` likewise it can be anything which you want to place it over `placeholder:`

Once this is done:
- iJewel detects the `placeholder:head` layer
- Any head variation is placed exactly on top of the anchor
- When shank or head changes, alignment updates automatically
#### How the component is seated
iJewel aligns the component to the anchor by **geometry, not by pivot**:
- The component is **centred over the anchor** horizontally (X/Z)
- Its **base rests on the anchor** vertically (Y)
This means a head whose pivot sits below (or away from) the mesh still seats
correctly on the anchor instead of floating above or sinking into it — you don't
need to reset or re-centre pivots before exporting.
::: info Advantages
- **No manual repositioning** – Heads snap to the correct location
- **Perfect alignment** – Consistent across all variations
- **Pivot-independent** – Works regardless of where the model's origin/pivot is
- **Highly scalable** – Ideal for large catalogs with many combinations
:::
#### Multiple anchors on one shank
A single shank can expose **more than one anchor**, and each component snaps to
its own anchor independently. Add one anchor object per component you want to
place and name each anchor layer `placeholder:`.
For example, a three-stone shank that anchors both a centre head and a side
component would carry two anchors:
| Anchor layer | Seats the component named |
|--------------|---------------------------|
| `placeholder:head` | `head` |
| `placeholder:second` | `second` |
When variations load, `head` snaps to `placeholder:head` and `second` snaps to
`placeholder:second`. Components that have **no** matching anchor on the current
shank (for example the shank itself) stay where they are.
::: tip Switching shanks
Anchor positions belong to the shank. When you switch to a shank that doesn't
expose a given anchor, the affected component is reset back to the model origin
so it never keeps the previous shank's placement, and is then re-seated on
whatever the new shank does anchor.
:::
## Naming Conventions (Recommended)
Good naming makes files easier to manage especially in large libraries.
### Suggested Format
```
-
```
### Example
```
H123-Rd20
```
| Part | Meaning |
|------|---------|
| `H123` | Head SKU identifier |
| `Rd` | Round diamond shape |
| `20` | 2.0 carat size |
::: tip
This naming convention is **not mandatory**, but strongly recommended for clean, organized workflows.
:::
## When Component Separation Is Not Needed
If you want to create complete ring variations (not configurable parts):
- Head and shank separation is **not required**
- Each variation should be a separate full ring model
### Comparison Example
**5 head styles × 5 shank styles:**
| Approach | Total Models |
|----------|--------------|
| Without separation | 25 full ring models |
| With separation | 10 models (5 heads + 5 shanks) |
::: warning
Component separation becomes extremely valuable as variations grow. For catalogs with many options, modular components save significant modeling time.
:::
## Assigning Layers in Rhino
Every 3D model in Rhino is divided into objects, and each object can have an associated layer. Proper layering is essential for iJewel to correctly identify and apply materials to different parts of your ring.

And all layers present in the 3D model:

### Layer Guidelines for Ring Configurator
When preparing ring components for the Ring Configurator:
- **Name layers consistently** across all files
- **Separate diamond shapes** – Put unique shapes (round, pear, marquise) in separate layers for accurate diamond cuts
- **Group similar diamonds** – Similar diamond shapes with transforms (rotation/scale/translation) should be in the same layer when possible
- **Separate for materials** – Use different layers when different materials need to be assigned
- **Multi-tone metals** – Create separate layers for parts that need different metals (e.g., `Head`, `Shank`)
### Recommended Layer Names
| Material Type | Layer Name Format |
|---------------|-------------------|
| Metals | `Metal 01`, `Metal 02`, ... |
| Diamonds/Gemstones | `Gem 01`, `Gem 02`, ... |
| Pearls | `Pearl 01`, `Pearl 02`, ... |
| Ceramic/Enamels | `Ceramic 01`, `Ceramic 02`, ... |
### Special Layers for Ring Configurator
| Layer Name | Purpose |
|------------|---------|
| `placeholder:` | Anchor point for automatic placement of the component named `` (e.g. `placeholder:head`). Add one per component you want auto-placed. |
| `Head` | The head component (top part holding the center stone) |
| `Shank` | The shank component (ring band) |
## General Tips for Preparing 3D Models
- **Use Block Instances** for identical parts (similar diamonds, chain links, prongs)
- **Optimize mesh resolution** – Not too high (large file size), not too low (poor quality)
- **Keep polygon count manageable** - Aim for under 200,000 polygons per model
- **Use face normals** for diamonds/gems to produce accurate cuts
- For high-resolution meshes, use Rhino's `ReduceMesh` command to lower polycount while maintaining quality
::: warning Render vs Production CAD
Production CAD files are optimized for manufacturing, not rendering. Common issues include:
- Sharp edges and prongs
- Seam artifacts
- Combined metal parts
- Penetrating surfaces
Fix these issues before using in Ring Configurator for best results.
:::
## Exporting from Rhino
1. **Switch to Shaded Mode** before exporting (converts NURBS surfaces to meshes)

2. **Export as `.3dm`** format
3. **Do NOT enable "Save small"** option – this removes meshes and iJewel needs meshes to render properly

## Next Steps
Once your components are prepared:
1. [Upload and sync files to iJewel](./ring-configurator-in-ijewel3d) – Learn how to import your components
2. Configure variations and combinations in the Ring Configurator plugin
---
# Ring Configurator inside iJewel3D

The iJewel3D platform provides an intuitive interface for managing your ring configurator project. Follow these detailed steps to upload your 3D models and configure your Ring Configurator.
### Step 1: Access iJewel3D
Log in to [iJewel3D platform](https://ijewel3d.com/drive/login) using your account credentials. If you don't have an account, [create](https://ijewel3d.com/drive/signup) one first.
::: info Plan requirements
Every plan includes the Ring Configurator, from Free upward. On any plan you
can create a Ring Configurator project, upload your components, and publish it.
Whitelabeling — an embed with the iJewel branding removed — needs the
**Silver** plan or above. See
[Whitelabeling and Branding](../integrations/whitelabeling).
To upgrade, go to Settings → Billing. To request a demo, contact us at
[contact@ijewel3d.com](mailto:contact@ijewel3d.com).
:::
### Step 2: Create a New Ring Configurator Project
From the My Files root folder, locate and click the **Add New** button, then select **New Ring Configurator** from the dropdown menu.

### Step 3: Name Your Project
Enter a descriptive name for your configurator project. This name will help you identify and manage the project in your dashboard. Choose a name that reflects the ring collection or product line.
**Example project names:**
- Solitaire Ring Collection
- Diamond Engagement Rings 2025
- Custom Band Configurator

### Step 4: Open the Configurator Folder
Double-click on your newly created configurator project to open it. This will display the project's folder structure where you can add and manage ring components.

### Step 5: Create Component Folders
Create new component folders for each part of your ring design. Common components include:
- **Head**: The setting that holds the gemstone
- **Shank**: The band portion of the ring
- **Band**: Alternative band styles or widths
The folder names you create will appear directly in the configurator UI, so organize and name them carefully to provide a logical user experience.

### Step 6: Upload Your 3D Files
For each component folder:
1. Double-click the component folder to open it
2. Click the **Upload** button
3. Select your prepared 3D model files (from Step 1)
4. Wait for the upload to complete
Repeat this process for each component and its variations.

### Step 7: Automatic Synchronization
The configurator will automatically sync your uploaded models. You can monitor the sync progress in the interface. For manual synchronization, click the **Sync Configurator** button located within the ring configurator project settings.

### Step 8: Configure Advanced Settings and Try-On
Select the Ring Configurator project. Then choose **Open In → Editor** or **Open In → Playground**. Both options open the project editor.
Use the editor to:
- **Configure HDR Maps**: Set up environment lighting and reflections
- **Adjust Materials**: Define material properties such as colour, texture, etc
- **Set Background**: Choose or upload a custom background image
- **Fine-tune Lighting**: Adjust brightness, shadows, and light direction
- **Configure Camera**: Set default zoom, rotation, and pan parameters
- **Configure Try-On**: Fit the ring assembled from the currently selected components to the AR finger guide
To configure Try-On:
1. Assemble the ring that you want to use for calibration.
2. Open **TryOn Settings** in the editor.
3. Turn on **Enable AR**.
4. Select **Enter Setup**.
5. Use **Auto Fit**, then correct the size, position, and rotation if necessary.
6. Select **Exit Setup** and **Preview in AR**.
7. Save the project.
The saved Try-On fit belongs to the Ring Configurator project. The customer can try on any ring assembled from its components. You do not need a separate Try-On model file.
See [Prepare a Try-On Project](../tryon/prepare-model) for the fitting controls and test procedure.
Save all other editor changes too. The saved settings appear in the Viewer.

### Step 9: Deploy Your Configurator
Once you've completed all configurations, proceed to [Using Ring Configurator](./using-ring-configurator) to learn about deployment options including embedding, sharing, and custom templates.
## Advanced Configuration: Tags
Tags allow you to organize and filter variations within components. This is especially useful for **Head** components where you have multiple diamond shapes and carat sizes.
### How Tags Work
Tags are key-value pairs assigned to each 3D file in the iJewel3D platform. The Ring Configurator uses these tags to:
- Group variations by diamond shape
- Filter available sizes within each shape
- Display organized UI options to customers
### Setting Up Tags
1. Right-click on a 3D file (variation) in your component folder
2. Click **Edit Tag** from the context menu
3. Add tags in the format `key:value`
4. Click **Save** to apply the tags

### Tag Format
| Tag Type | Format | Example |
|----------|--------|---------|
| Shape | `shape:` | `shape:round` |
| Size | `size:` | `size:1ct` |¬¬
**Example:** A 1-carat round diamond head would have both tags:
- `shape:round`
- `size:1ct`
### Complete Example
For a head component with multiple shapes and sizes:
| File Name | Tags |
|-----------|------|
| `H001-Rd05.3dm` | `shape:round`, `size:0.5ct` |
| `H001-Rd10.3dm` | `shape:round`, `size:1ct` |
| `H001-Rd20.3dm` | `shape:round`, `size:2ct` |
::: tip Best Practice
Always tag **all** head variations with both `shape:` and `size:` tags. This ensures the UI can properly filter and display options.
:::
To learn how to use these tags in your custom template code, see [Using Tags for Filtering](./using-ring-configurator#advanced-using-tags-for-filtering).
## Advanced Configuration: Icons
To update the thumbnail/icon for a variant:
1. Open the variant in **Playground** and make your adjustments
2. Save the changes
3. Return to the platform, right-click on the variant
4. Click **Update Thumbnail** to capture the new icon
---
# Using Ring Configurator

This guide covers how to deploy and use your ring configurator after setting it up in the iJewel3D platform.
## Deployment Options
Once your Ring Configurator is configured, choose how the page and project are
hosted:
| Option | Best For | Complexity |
|--------|----------|------------|
| **Direct Embedding** | Quick integration | Low |
| **Share Link** | Sending to customers | None |
| **Custom page with a Drive project** | A custom storefront UI while Drive continues to store the project | Medium |
| **Fully self-hosted project** | Hosting the project JSON and assets on your own infrastructure | Advanced |
### Make Your Configurator Public
Direct embedding, share links, and `loadModelById` require the Drive project to
be **Public**. By default, configurators are accessible only inside iJewel3D
Platform. To make a Drive project available to a website:
1. Right-click on your Configurator file in the iJewel3D platform.
2. Select **Make Public**.

A fully self-hosted project does not load the Drive file at runtime. Its project
JSON, component assets, and scene resources must instead be publicly readable
from the host or CDN.
## Option 1: Direct Embedding
Embed your ring configurator directly on any webpage using an iframe.
```html
```
Learn more about [embedding configurators](/viewer/tutorial-embed-drive).
## Option 2: Share Link
Share your configurator directly with customers using the link from the iJewel3D platform. This requires no coding.
Just right click on Ring configurator. Click on share. Copy the link and share it with your customers.

## Option 3: Custom Page with a Drive Project
Host the page and custom controls yourself while Mini Viewer loads the public
Ring Configurator project from iJewel3D Drive.
### Prerequisites
- Your **File ID** from the iJewel3D platform
- Your **Instance Name** (provided by iJewel, e.g., `dev-2`)
### Required Scripts
The mini-viewer needs **webgi** to run. Load webgi **first**, then the mini-viewer
`nowebgi` build (the `nowebgi` bundle does not include webgi, so it must be
provided separately):
```html
```
::: tip Multiple anchors per shank
Support for **multiple anchors on a single shank** (each component snapping to its
own `placeholder:` mesh) requires **mini-viewer 0.6.10 or later**. Use the
latest version shown above to get it. See
[Prepare Ring Components](./prepare-components#multiple-anchors-on-one-shank) for
how to author the anchors.
:::
### Basic Setup
Create an `index.html` file with this minimal structure:
```html
Ring Configurator
Controls
```
### Configuration Variables
| Variable | Description |
|----------|-------------|
| `fileId` | Your ring configurator's unique ID from the iJewel3D platform |
| `instance` | Your client identifier provided by iJewel (e.g., `drive`) |
### Add Try-On to the custom page
Configure Try-On on the Drive project with **Open In → Editor** or **Open In →
Playground**, then save it. `loadModelById` receives the saved top-level
`tryonConfig`; do not duplicate that configuration in the page. Mini Viewer
`0.6.18` or later groups the visible head, shank, stones, and other components
as one assembled ring for the Try-On session and restores the configurator
afterward.
The example already uses `showUiButtons: true` and `hideTryOn: false`, so the
button appears when the Drive project enables Try-On. See
[Prepare a Try-On Project](../tryon/prepare-model) for fitting instructions.
## Option 4: Fully Self-Hosted Project
If your website also hosts the Ring Configurator project JSON and component
assets, pass that complete project object to `new ijewelViewer.Viewer(...)`.
Add the saved `tryonConfig` at the top level of that project. Mini Viewer uses
the configuration and prepares the customer's assembled ring when its standard
Try-On button is selected.
Create the fit with **Open In → Editor** or **Open In → Playground**, then copy
the saved `tryonConfig` through your normal project export. If the project does
not pass through iJewel3D Platform, see
[RingTryonPlugin setup mode](../tryon/ring-tryon-plugin#setup-mode).
For a custom Try-On button, use the public
[Configurator Try-On helpers](../viewer/viewer-class#configurator-try-on-helpers)
after loading the saved configuration with `tryon.fromJSON()`.
## Core Concepts
### The RingConfigurator Plugin
The `RingConfiguratorPlugin` manages ring components (heads, shanks, bands) and their variations.
```javascript
// Get the plugin
const ringConfigurator = viewer.getPluginByType('RingConfigurator');
// Access components
ringConfigurator.components.forEach(component => {
console.log(component.name); // "Heads", "Shanks", etc.
console.log(component.variations); // Available variations
console.log(component.selectedIndex); // Currently selected index
});
// Apply a variation
await component.applyVariation(variation);
```
### The MaterialConfigurator Plugin
The `MaterialConfiguratorPlugin` handles material changes (metals, gems, finishes).
```javascript
// Get the plugin
const materialPlugin = viewer.getPluginByType('MaterialConfiguratorPlugin');
// Access material groups
materialPlugin.variations.forEach(group => {
console.log(group.title); // "Metal", "Gem", etc.
console.log(group.materials); // Available materials
});
// Apply a material
await materialPlugin.applyVariation(group, material.uuid);
```
### Events
| Event | Plugin | Description |
|-------|--------|-------------|
| `componentProcessed` | RingConfigurator | All components finished loading |
| `refreshUi` | MaterialConfigurator | Materials updated, refresh UI |
| `ijewel-viewer-ready` | Window | Viewer is initialized and ready |
## Viewer Options
Customize the viewer by passing options to `loadModelById`:
```javascript
ijewelViewer.loadModelById(fileId, instance, container, {
showConfigurator: false, // Hide default configurator UI
showCard: false, // Hide product card
transparentBg: false, // Use solid background
showLogo: true, // Show brand logo
hideFullScreen: true, // Hide fullscreen button
hideResetView: true, // Hide reset view button
hideFitScene: true, // Hide fit scene button
hideRotateCamera: true, // Hide camera rotation controls
hideCameraViews: true, // Hide camera view presets
brandingSettings: {
enable: true,
showLoadingScreenLogo: true
}
});
```
## Advanced: Using Tags for Filtering
Variations can include tags for filtering (e.g., by shape or carat size):
```javascript
function parseVariationTags(variation) {
const tags = variation.tags || [];
let shape = null, size = null;
tags.forEach(tag => {
if (tag.startsWith('shape:')) shape = tag.split(':')[1];
if (tag.startsWith('size:')) size = tag.split(':')[1];
});
return { shape, size };
}
// Usage: Group heads by diamond shape
const groups = {};
component.variations.forEach(variation => {
const { shape } = parseVariationTags(variation);
if (shape) {
if (!groups[shape]) groups[shape] = [];
groups[shape].push(variation);
}
});
```
## Ready-Made Templates
All templates are open-source and available on GitHub: [iJewelTemplates/ringconfigurator](https://github.com/ijewel3d/iJewelTemplates/tree/main/ringconfigurator)
We provide pre-built templates that you can use instantly — just pass your `fileId` and `instanceName` as query parameters in the URL. No coding required to get started!
### How It Works
Append your credentials to any template URL like this:
```
https://ijewel3d.github.io/iJewelTemplates/ringconfigurator/simple/ring-configurator.html?fileId=YOUR_FILE_ID&instanceName=YOUR_INSTANCE_NAME
```
Replace `YOUR_FILE_ID` and `YOUR_INSTANCE_NAME` with the values from your iJewel3D platform.
### Available Templates
#### Simple Ring Configurator

A minimal, clean configurator with basic component and material controls.
[Open Template](https://ijewel3d.github.io/iJewelTemplates/ringconfigurator/simple/ring-configurator.html)
---
#### Configurator with Size & Shape

Adds size and shape filtering using tag-based grouping.
[Open Template](https://ijewel3d.github.io/iJewelTemplates/ringconfigurator/simple/configurator-with-size-shape.html)
---
#### Advanced Template

A feature-rich configurator with a polished UI and advanced controls.
[Open Template](https://ijewel3d.github.io/iJewelTemplates/ringconfigurator/advanced/template.html)
---
#### Advanced Template v2

The latest version of the advanced template with an updated design and improved UX.
[Open Template](https://ijewel3d.github.io/iJewelTemplates/ringconfigurator/advanced/template-v2.html)
::: tip Quick Start
Pick any template above, append `?fileId=YOUR_FILE_ID&instanceName=YOUR_INSTANCE_NAME` to the URL, and open it in your browser to instantly preview your ring configurator with your own 3D models.
:::
### Example
If your File ID is `abc123` and your instance name is `drive`, open:
```
https://ijewel3d.github.io/iJewelTemplates/ringconfigurator/advanced/template-v2.html?fileId=abc123&instanceName=drive
```
This will load the Advanced Template v2 with your ring configurator data rendered in real-time.
## Next Steps
- Review the full [RingConfigurator Plugin API](./plugin-detail)
- Learn about [embedding configurators](/viewer/tutorial-embed-drive)
::: details Contact
For questions or assistance, email us at [contact@ijewel3d.com](mailto:contact@ijewel3d.com)
:::
---
# RingConfigurator Plugin API Reference

The `RingConfiguratorPlugin` is a iJewel3D plugin that enables dynamic ring configuration by managing multiple components (like heads, shanks, and bands) with interchangeable model variations. It provides the foundation for building interactive ring configurators.
## RingConfiguratorPlugin
### Plugin Type
```typescript
RingConfiguratorPlugin.PluginType = 'RingConfigurator'
```
### Properties
| Property | Type | Description |
|----------|------|-------------|
| `enabled` | `boolean` | Whether the plugin is enabled |
| `components` | `Component[]` | Array of ring components managed by the plugin |
| `rootScale` | `number` | Scale factor applied to all models in the scene |
### Methods
#### `setRootScale(value: number)`
Sets the scale of the entire ring model root and refreshes the view.
```typescript
const ringConfigurator = viewer.getPluginByType("RingConfigurator");
ringConfigurator.setRootScale(1.5);
```
#### `matchBaseHeight(comp1: Component, comp2: Component, seperation?: number)`
Aligns two components by matching their base heights and optionally setting separation distance. It can be used to add matching Bands to current Ring.
- **Parameters**:
- `comp1`: The reference component
- `comp2`: The component to align
- `seperation`: Optional distance between components (defaults to 2× width of comp1)
```typescript
const shank = ringConfigurator.getComponent("Shank");
const band = ringConfigurator.getComponent("Band");
ringConfigurator.matchBaseHeight(shank, band, 0.5);
```
#### `autoPositionSet(componentName?: string, modelObject?: ISceneObject)`
Snaps components onto their anchors. For every component that has a matching
anchor mesh in the scene — a mesh whose material is named
`placeholder:` — the component is seated on that anchor by
geometry (centred in X/Z, base resting on the anchor in Y, so a model's pivot
offset doesn't matter). A shank can expose several anchors (e.g.
`placeholder:head` and `placeholder:second`), and each named component snaps to
its own. Components without a matching anchor (such as the shank itself) are left
in place.
This runs automatically when variations are applied, so you rarely need to call
it directly. Pass a `componentName`/`modelObject` pair to register a freshly
loaded model before positioning.
```typescript
// Re-seat everything against the current anchors
ringConfigurator.autoPositionSet();
```
#### `resetComponentPositions(componentNames?: string[])`
Resets components back to their model origin `(0, 0, 0)`, undoing any anchor
auto-positioning. With no argument every component is reset; pass an array of
component names to reset only those.
Call this before switching shanks so a component (e.g. a head) doesn't keep the
previous shank's anchor position on a shank that has no matching anchor;
`autoPositionSet` then re-seats whatever the new shank does anchor.
```typescript
// Reset a specific component before loading a new shank
ringConfigurator.resetComponentPositions(["head"]);
// Reset all components
ringConfigurator.resetComponentPositions();
```
#### `createComponent(name: string): Component`
Creates a new component with the specified name and adds it to the plugin.
```typescript
const headComponent = ringConfigurator.createComponent("Head");
```
#### `removeComponent(name: string)`
Removes and disposes of a component by name.
```typescript
ringConfigurator.removeComponent("Head");
```
#### `getComponent(name: string): Component | undefined`
Retrieves a specific component by name.
```typescript
const shank = ringConfigurator.getComponent("Shank");
if (shank) {
await shank.applyVariation(shank.variations[0]);
}
```
#### `getComponents(): Component[]`
Returns all components managed by the plugin.
```typescript
const allComponents = ringConfigurator.getComponents();
allComponents.forEach(comp => console.log(comp.name));
```
### Events
| Event | Description |
|-------|-------------|
| `componentProcessed` | Fired when all components have finished loading their variations |
```typescript
ringConfigurator.addEventListener("componentProcessed", () => {
console.log("All components are ready!");
});
```
## Component Class
The `Component` class represents a single configurable part of the ring (e.g., head, shank, band).
### Properties
| Property | Type | Description |
|----------|------|-------------|
| `name` | `string` | Unique identifier for the component |
| `title` | `string` | Display title for UI |
| `selectedIndex` | `number` | Index of the currently selected variation (-1 if none) |
| `position` | `Vector3` | Position offset of the component |
| `rotation` | `Euler` | Rotation of the component |
| `visible` | `boolean` | Visibility state |
| `variations` | `ModelVariation[]` | Array of available model variations |
| `fileId` | `string \| number` | File identifier for the component |
### Methods
#### `setPosition(position: Vector3)`
Sets the position of the component in 3D space.
```typescript
import { Vector3 } from 'webgi';
component.setPosition(new Vector3(0, 1, 0));
```
#### `setRotation(rotation: Euler)`
Sets the rotation of the component.
```typescript
import { Euler } from 'webgi';
component.setRotation(new Euler(0, Math.PI / 4, 0));
```
#### `setVisible(visible: boolean)`
Shows or hides the component.
```typescript
component.setVisible(false); // Hide
component.setVisible(true); // Show
```
#### `isVisible(): boolean`
Returns the current visibility state.
```typescript
if (component.isVisible()) {
console.log("Component is visible");
}
```
#### `getBounds(): Box3B`
Returns the bounding box of the component.
```typescript
const bounds = component.getBounds();
const size = bounds.getSize(new Vector3());
console.log(`Width: ${size.x}, Height: ${size.y}, Depth: ${size.z}`);
```
#### `addVariation(variation: ModelVariation)`
Adds a model variation to the component's available options.
```typescript
component.addVariation({
name: "round-diamond",
title: "Round Diamond",
modelUrl: "https://cdn.example.com/models/round-diamond.glb",
fileId: "abc123",
iconUrl: "https://cdn.example.com/icons/round-diamond.png"
});
```
#### `removeVariation(variation: ModelVariation)`
Removes a variation from the component.
```typescript
const variation = component.findVariationByName("round-diamond");
if (variation) {
component.removeVariation(variation);
}
```
#### `findVariationByName(name: string): ModelVariation | undefined`
Finds a variation by its name.
```typescript
const variation = component.findVariationByName("solitaire-head");
```
#### `applyVariation(variation: ModelVariation, applyMaterial?: boolean): Promise`
Applies a variation to the component, loading the 3D model and optionally applying materials.
- **Parameters**:
- `variation`: The variation to apply
- `applyMaterial`: Whether to reapply materials (default: `true`)
```typescript
const variation = component.findVariationByName("princess-cut");
if (variation) {
await component.applyVariation(variation);
}
```
---
#### `dispose()`
Disposes of the component and frees resources.
```typescript
component.dispose();
```
## ModelVariation Interface
Defines the structure for a model variation option.
```typescript
interface ModelVariation {
name: string; // Unique identifier
title?: string; // Display name for UI
tags?: string[]; // Tags for filtering/categorization
selected?: string; // Selection state identifier
uuid?: string; // Unique identifier
modelUrl: string; // URL to the 3D model file
iconUrl?: string; // URL to the thumbnail/icon
fileId: string | number; // File identifier
}
```
## Integration with MaterialConfiguratorPlugin
The RingConfiguratorPlugin works seamlessly with the `MaterialConfiguratorPlugin` to handle material changes. When a variation is applied, materials are automatically reapplied unless explicitly disabled:
```typescript
// Apply variation without reapplying materials
await component.applyVariation(variation, false);
// Apply variation with materials (default behavior)
await component.applyVariation(variation, true);
```
::: tip
For optimal performance, set `applyMaterial` to `false` when making multiple rapid changes, then manually trigger material application once all changes are complete.
:::
## Next Steps
- Learn how to [embed your configurator](/viewer/tutorial-embed-drive) on your website
- Check out the [Ring Configurator setup guide](./ring-configurator-in-ijewel3d)
::: details Contact
For questions or assistance with the RingConfigurator integration, email us at [contact@ijewel3d.com](mailto:contact@ijewel3d.com)
:::
---
# Wedding Band Builder
### A real time wedding band configurator with physically based rendering.
No pre rendered catalog. No static images. Every ring your customers design is generated in real time: unique geometry, real materials, accurate pricing, directly in the browser.
## Three Pillars
### Photorealistic 3D in the Browser
Customers see a real time 3D model with physically accurate materials, lighting, and reflections. White gold looks like white gold. A hammered finish catches light differently than polished. Material properties are tuned to match real metal alloys.
### Parametric Design, No 3D Models to Manage
Every ring is built from parameters, not pre made files. The current Drive
starter provides 7 profile shapes, 3 metals, 7 finishes, 3 partition modes, 4
diamond settings, and continuous width/height dimensions. You can replace or
extend those catalogs in your project, and the engine generates the selected
geometry on demand.
### From Screen to CNC
Every design your customers create can be exported as a detailed specification sheet: profile cross section, exact dimensions in millimeters, ring size (US/EU/UK), metal composition, diamond count and carat weight, and pricing breakdown. Ready for your CAD team or CNC machine.
## Who Is This For?
| | |
|---|---|
| **Jewelry Brands** | Offer a premium, interactive wedding band experience on your website. Your customers design their own rings with real time photorealistic preview. |
| **Online Retailers** | Drop a configurator into your Shopify, WooCommerce, or Magento store. Customers configure, see the price, and add to cart, all without leaving your site. |
| **Luxury Jewellers** | Build a fully custom interface that matches your brand identity. Use the headless SDK to control every pixel while the engine handles the 3D. |
| **Manufacturers** | Customers design. You manufacture. The spec sheet bridges the gap: accurate dimensions and materials, ready for production. |
## What Makes It Different
| Traditional Configurators | Wedding Band Builder |
|---|---|
| Pre rendered image swaps | Real time 3D geometry generation |
| Fixed catalog of options | Parametric: every combination is unique |
| Separate pricing spreadsheets | Volume based pricing from actual 3D geometry |
| Desktop-only or app-required | Web based, mobile ready, AR capable |
| Generic white label UI | Fully customizable SDK with theming |
| Single pricing model | Western markup, Indian making charges, Gulf per-gram |
## Get Started
Want runnable code first? Open the
[Wedding Band starter templates](./templates), where every example includes
both a live page and its GitHub source.
---
# Why Wedding Band Builder
## The Problem
Most online jewelry stores present wedding bands as static image catalogs with a fixed set of pre made options. This creates several issues for jewellers:
- **Lost sales**: customers can't visualize exactly what they want, so they hesitate or leave
- **Returns and remakes**: what looked good in a photo doesn't match expectations
- **Limited catalog**: every new option requires new photography, new 3D models, new SKUs
- **No at-home experience**: customers still need to visit a store to see the ring in context
## The Solution
The Wedding Band Builder replaces static catalogs with a **real time design engine**. Customers design their ring by adjusting dimensions, materials, and details that update live in 3D. The rendered preview reflects physically based materials and lighting.
## Competitive Advantages
### Runs in the Browser, No App Needed
The configurator runs entirely in the browser on desktop, tablet, and phone. No app install or plugin is required. Reducing friction between browsing and purchasing tends to improve conversion rates.
### AR Try On
Customers can preview their designed ring on their hand using camera-based live
hand tracking. This gives a sense of scale and appearance before purchasing.
### Spec Sheets for Manufacturing
Every design produces a precise specification sheet: profile cross section diagram, dimensions in millimeters, ring size across three international systems, metal composition, diamond count and carat weight, and complete pricing breakdown. Your CAD team or CNC machine gets exactly what was designed on screen.
### His & Her Paired Band Configuration
Customers design both bands together. Linked mode keeps both rings in sync: change the metal on one, both update. Independent mode lets each band be unique. The pricing shows individual and combined totals.
### Global Pricing
Not every jeweller prices the same way. The engine supports:
- **Western model**: markup multiplier (1.5×–2.5×) covering all costs
- **Indian model**: explicit making charges (8–35% of metal cost)
- **Gulf model**: per-gram making charges ($5–$50/gram)
Per-metal pricing (white gold costs more than yellow due to palladium), finish surcharges, diamond setting labor costs, and configurable rounding are all built in.
### Physically Based Rendering
The 3D engine uses PBR materials with image-based lighting and real time gem refraction. White gold has the reflectance of a palladium alloy. A hammered finish displaces the surface geometry. Diamonds refract light through computed facets. This isn't a texture swap on a generic 3D model.
### No Vendor Lock In
Your configuration data is JSON. Export it, store it, migrate it. The headless API means your frontend is yours: your team or agency builds and maintains the UI without depending on a third party for every change. Switch hosting, switch CMS, switch developer. The data and the integration stay portable.
### Works With Any Manufacturer
The spec sheet is manufacturer-independent. It outputs profile cross sections, exact dimensions in millimeters, ring size across three international systems, metal composition, and diamond specs. Send it to any workshop, any CAD team, any CNC machine.
### Your Brand, Your Design
Use the built-in UI with one of 11 theme presets, or build your own interface from scratch using the headless SDK. The configurator is a white label engine. Your customers see your brand, not ours. No billable hours to a vendor for branding changes or layout updates.
### Mobile Optimized
The 3D engine is optimized for mobile GPUs. Touch gestures such as pinch to
zoom and swipe to rotate work natively. On compatible devices, camera Try-On
lets customers preview the ring on their hand in current Safari on iOS and
Chrome on Android.
### Predictable Costs
One-time onboarding plus an annual subscription. No opaque project pricing, no change orders for every UI tweak. You know what you'll pay.
### Dedicated Onboarding
Setup assistance is included. Documentation, email support, and a partner network for integrations. You're not left to figure it out from a wiki.
### Ecommerce Ready
Drop in integrations for the platforms your business already uses:
| Platform | Integration |
|---|---|
| **Shopify** | Liquid section, iframe embed, add-to-cart bridge |
| **WooCommerce** | Shortcode or custom product template |
| **Magento** | Custom block with Storefront API |
| **BigCommerce** | Stencil theme template |
| **Wix** | HTML embed with Velo integration |
Or integrate directly with any website using a `
```
Best for: custom websites, React/Vue/Angular apps, full API access.
→ [Full script tag guide](./integration-direct) · [Framework examples](./frameworks/vanilla)
## What's Next?
Choose your path based on what you need:
| I want to... | Go to |
|---|---|
| Customize the look and feel | [Theming & Branding](./theming) |
| Build my own UI from scratch | [Custom UI (Headless)](./integration-headless) |
| Set up pricing | [Pricing Engine](./pricing) |
| Add to Shopify / WooCommerce / etc. | [E-Commerce Platforms](./ecommerce/shopify) |
| See the full API | [API Reference](./api-reference) |
| Understand the measurement system | [Ring Measurements Guide](./measurement-guide) |
---
# Wedding Band Starter Templates
Use these maintained examples as implementation starting points. Every row
includes a live GitHub Pages build and the exact source currently published
from the `main` branch of
[`iJewelTemplates`](https://github.com/ijewel3d/iJewelTemplates).
| Template | Use it when | Live | Code |
| --- | --- | --- | --- |
| Built-in Wedding Band UI | You want to load a complete Wedding Band project and use the standard iJewel3D interface. | [Open live](https://ijewel3d.github.io/iJewelTemplates/wedding-band/wedding-band.html) | [View HTML](https://github.com/ijewel3d/iJewelTemplates/blob/main/wedding-band/wedding-band.html) |
| Published Drive project | You have a public Drive file ID and want the smallest `loadModelById` example. | [Open live](https://ijewel3d.github.io/iJewelTemplates/wedding-band/wedding-band-default.html) | [View HTML](https://github.com/ijewel3d/iJewelTemplates/blob/main/wedding-band/wedding-band-default.html) |
| Custom UI | You want same-page controller access and a fully custom storefront interface. | [Open live](https://ijewel3d.github.io/iJewelTemplates/wedding-band/custom-ui/index.html) | [Browse source](https://github.com/ijewel3d/iJewelTemplates/tree/main/wedding-band/custom-ui) |
| iframe host integration | You want custom host-page controls around a published Drive embed using `postMessage`. | [Open live](https://ijewel3d.github.io/iJewelTemplates/wedding-band/iframe-demo/index.html) | [Browse source](https://github.com/ijewel3d/iJewelTemplates/tree/main/wedding-band/iframe-demo) |
The folder-based examples depend on their adjacent JavaScript, CSS, JSON, and
image assets, so copy the whole folder rather than only `index.html`.
::: info Release baseline
The documentation examples use Mini Viewer `0.6.18`, which adds configurator
Try-On on top of the material variants, outside and inside material features,
and Modern Metals layout from `0.6.17`. The linked templates are maintained in
a separate repository and may still show an earlier pinned version. Check the
script URL in the source you copy and use `0.6.18` or later when the project
offers Try-On.
The hosted iframe uses the Viewer version deployed by `ijewel3d.com`.
:::
::: warning Hosted iframe version requirement
The iframe host controls require the `ijewel3d.com` embedded application to be
deployed with Mini Viewer `0.6.11` or newer. If the rings render inside the
iframe but the host remains on **Loading iframe…**, the hosted application is
still serving an older Viewer. Update that deployment or use the self-hosted
iframe viewer from the [iframe guide](./integration-iframe).
:::
## Choose the right starting point
- Start with **Published Drive project** when your Wedding Band configurator
already exists in iJewel Drive. Replace its `fileId` and `instance`. If it
does not exist yet, start with [Create a Project](./drive-setup).
- Start with **Built-in Wedding Band UI** when you are loading a complete
project JSON and want the standard controls.
- Start with **Custom UI** when your controls and viewer run on the same page.
The implementation reads catalogs from the controller instead of hard-coding
profile, material, variant, finish, and diamond choices.
- Start with **iframe host integration** when the viewer and host page have
different origins or when a CMS owns the outer page.
## Before production
1. Replace demo project URLs, Drive file IDs, instance names, prices, and cart
behavior with your own values.
2. Compare the template's pinned SDK URL with the version required by this
documentation. Configurator Try-On requires Mini Viewer `0.6.18` or later.
3. For iframe integrations, restrict `postMessage` to the exact viewer origin.
4. Serve the page over HTTPS and retain `allow="camera"` if Try-On runs inside
an iframe.
5. Test desktop and mobile layouts with the actual catalog and project size.
Continue with [Assets Setup](./assets-setup) to prepare your own profiles,
materials, icons, and models, or go directly to the
[integration guides](./deployment).
---
# Setting Up Assets on iJewel Platform
Before deploying your Wedding Band Builder, you need to configure all the building blocks on the iJewel platform. This page covers each asset type and how to prepare it.
When these assets are ready, [Create a Project](./drive-setup)
shows the complete creation flow, the generated folder structure, exact Sync
rules, version migration, and which configuration fields Sync preserves.
## 2D Profiles
Profiles are **2D cross section curves** that define the shape of the wedding band. The builder extrudes these curves along a circular torus path to generate the 3D ring geometry in real time.
The platform includes several built-in profiles:
| Profile | Description |
|---------|-------------|
| D-Shape | Classic rounded exterior, flat interior |
| Flat | Flat exterior and interior |
| Comfort | Rounded on both exterior and interior |
| Knife Edge | Pointed peak on the exterior |
| Beveled | Angled flat facets on the exterior |
| Concave | Inward-curving exterior surface |
| Round | Fully circular cross section |
**Custom profiles** can be uploaded as `.3dm` (Rhino) files containing a single closed 2D curve. The curve defines the cross section shape, which the builder then extrudes and scales based on the user's width and thickness settings.
Custom profile upload needs the **Silver** plan or above. The profiles in the
table above are the built-in library, available on every plan. See
[Create a Project](./drive-setup) for the upload steps.
::: warning
The 2D profile curve must be drawn in accurate millimeter dimensions. The engine uses the curve's actual size as the base measurement for width and thickness. If your profile is drawn at the wrong scale, all dimensions, weight calculations, and pricing will be incorrect.
:::
## Material Library
The material library models the real combinations your catalog offers instead
of assuming a complete metal-by-finish grid:
```text
base material → variant/quality → finish PMAT
```
Examples include Yellow Gold → 14k/18k/22k → Polished/Brush/Hammered,
Carbon → pattern 1/pattern 2 → a single default PMAT, and Wood → species → a
single default PMAT.
The standard Drive folder layout is:
```text
materials///.pmat
```
Each `.pmat` is a self-contained PBR material that controls color,
reflectivity, roughness, maps, and embedded textures. Variant folder names are
the qualities shown in the UI, so carat/karat choices belong between the base
colour and surface finish axes rather than being encoded in the finish name.
### Material roles
`materials//material.json` classifies a material:
```json
{
"name": "Yellow Gold",
"kind": "metal",
"usage": ["band", "inlay", "overlay", "sleeve"],
"defaultVariant": "18k",
"defaultFinish": "polished"
}
```
| Role | Where it appears |
| --- | --- |
| `band` | Main ring colour/body picker |
| `inlay` | Inlay material picker |
| `overlay` | Overlay material picker |
| `sleeve` | Inside/bore sleeve picker |
Omitting `material.json` does not prevent Sync, but the fallback exposes the
material to every role. Always add metadata for role-specific materials.
The reference Viewer material library uses these classifications:
| Material | Usage |
| --- | --- |
| Yellow, White, and Rose Gold | `band`, `inlay`, `overlay`, `sleeve` |
| Carbon | `band` |
| Marble and Wood | `inlay`, `overlay` |
| Ceramic and Turquoise | `sleeve` |
These roles explain why the main color picker can contain only the three gold
colors and Carbon while the Outside and Inside pickers expose other materials.
### Surface finishes
Surface finishes control the texture and appearance of the ring's exterior. Common finishes include:
| Finish | Description |
|--------|-------------|
| Polished | Mirror-smooth reflective surface |
| Hammered | Hand-hammered texture with organic dimples |
| Brush | Fine directional brushing lines |
| Ice | Crystalline frost-like texture |
| Nature | Organic bark like texture |
| Sand | Fine granular matte texture |
| Linear | Straight-line brushing pattern |
The PMAT filename is the finish ID. For example,
`materials/yellow/18k/hammered.pmat` offers Hammered only for Yellow Gold 18k.
The `finishes/hammered/` Drive folder supplies its picker icon; it does not hold
the PMAT.
Use `default.pmat` when a variant has no finish axis. Prefix a PMAT with `_`
when the renderer needs it structurally but it must stay out of the picker;
`_polished.pmat` is the common polished-interior fallback. If an explicit
`polished.pmat` also exists, it takes precedence.
### Sources versus published assets
`materials/_sources/` is optional authoring storage and is ignored by Drive
Sync. It is not required on Packs/CDN and is never referenced by the runtime
manifest. Publish only the current PMATs inside visible base/variant folders,
plus their icons and metadata.
PMAT files are runtime assets, not JavaScript dependencies. Mini Viewer and
Mini Editor builds contain URL strings, not the PMAT bytes. The browser loads
the selected PMAT from iJewel Drive, Packs, or your CDN when required.
::: details Reference repository material scripts
The Viewer development fixture has two maintainer scripts with different jobs:
- `materials/_sources/build-tree.py` derives the reference runtime tree from
authored PMAT sources. It creates gold karats, finish variants, role metadata,
and hidden polished-interior files. It replaces generated gold PMAT files, so
do not run it against a manually curated customer tree.
- `build-materials.mjs` scans the completed runtime tree, validates PMAT texture
references, derives swatches and catalogs, then rewrites the material blocks
in the development `wedding-band-project.json`.
Drive users do not run either script. Drive Sync performs catalog publication
from the uploaded folder tree. Neither script runs as part of a Mini Viewer or
Mini Editor bundle build.
The reference gold catalog preserves `brush` and `linear` as separate saved
finish IDs. It does not rename either one to `satin`. Ceramic can define its own
independent `satin.pmat` finish.
:::
## Ring Catalog
Pre-modelled rings that customers can add to the compilation next to the parametric wedding bands. The catalog lives in the project manifest under `ringCatalog`, with one list per ring type:
```json
"ringCatalog": {
"engagement": [
{
"id": "ring-1",
"name": "Solitaire I",
"file": "engagement/ring-1.glb",
"thumbnail": "engagement/ring-1.png"
}
],
"memoire": [
{
"id": "eternity-1",
"name": "Eternity I",
"file": "eternity/eternity-1.glb",
"thumbnail": "eternity/eternity-1.png",
"scaleAdjust": 1.12
}
]
}
```
| Field | Description |
|-------|-------------|
| `id` | Stable identifier, used by the API and for model swapping |
| `name` | Display name shown in the picker and on selection |
| `file` | The `.glb` model — absolute URL or relative to `assetBaseUrl` |
| `thumbnail` | Preview image for the picker (optional; a generic glyph is shown without it) |
| `scaleAdjust` | Optional multiplier on the automatic size matching. Use when the model's bounding box overstates the hoop — for example, eternity prongs pointing outward |
**Preparing the models:**
- Export as `.glb` with real-world millimeter dimensions. The builder auto-scales each model so its hoop matches the wedding bands, but sane authoring scale keeps the measurement logs meaningful
- **Name the metal material** `Metal` (or any name starting with `Metal`/`Material`). Those materials are swapped when the customer picks white, yellow, or rose gold — using the same `.pmat` files as the wedding bands, so colors always match
- **Leave diamond materials unnamed or gem-named** and apply the diamond material before export. Every stone mesh must have it — a stone left on the metal material will be recolored with the metal
- Merging all stones into one mesh (or instancing one stone) keeps files small and loading fast
## Option Catalogs
Every option list the UI shows has a built-in default. A manifest key overrides
one list. Omit the key and the built-in catalog applies, so a project declares
only the lists it wants to rename, reorder, or restrict.
Each entry round-trips through the project JSON, so the Mini Editor can edit any
value here and `editor.getConfig()` persists it.
| Key | Controls | Entry shape |
|---|---|---|
| `settingTypes` | Stone-setting types on top of the band | `{ id, name, iconUrl? }` |
| `sideSettingTypes` | Stone settings on the flat side face | `{ id, name, iconUrl? }` |
| `diamondSpans` | How far a stone run reaches around the ring | `{ id, name, iconUrl? }` |
| `diamondSpacings` | Gap rule between stones | `{ id, name, iconUrl? }` |
| `diamondPositionSnaps` | Snap presets above the fine-position slider | `{ id, name, value }` |
| `eyeOrientations` | Eye-setting orientations | `{ id, name, value }` |
| `freeStonePresets` | Curated free-stone patterns | `{ id, name, stones, iconUrl? }` |
| `edgeTypes` | Edge treatments applied to both edges | `{ id, name, iconUrl? }` |
| `edgeSides` | Which edges an edge treatment covers | `{ id, name, iconUrl? }` |
| `sideEdgeTypes` | Treatments for one independent edge | `{ id, name, iconUrl? }` |
| `grooveTypes` | Groove cross sections | `{ id, name, type?, angle?, iconUrl? }` |
| `grooveFinishes` | Interior finish of a groove or joint | `{ id, name, iconUrl? }` |
| `grooveDirections` | Groove direction around or across the band | `{ id, name, iconUrl? }` |
| `divisionTypes` | Color-division orientations | `{ id, name, partitionCount?, iconUrl? }` |
| `relationshipPresets` | Named segment-width ratios, such as 2:1:1 | `{ name, ratios }` |
| `ringTypes` | Ring types a compilation accepts | `{ id, name, iconUrl? }` |
`id` is the value the API accepts, and `name` is the label the UI prints. A
`grooveTypes` entry adds `type`, which names the engine groove, and `angle`,
which sets the opening angle of a V groove. A `divisionTypes` entry adds
`partitionCount` to restrict an option to one exact partition count.
```json
{
"grooveTypes": [
{ "id": "v60", "name": "V 60°", "type": "v", "angle": 60 },
{ "id": "u", "name": "U-round", "type": "u" },
{ "id": "convex-u", "name": "Dome", "type": "convex-u" }
],
"relationshipPresets": [
{ "name": "Even", "ratios": [1, 1] },
{ "name": "Wide left", "ratios": [2, 1] }
]
}
```
Read any catalog back at runtime with its matching `getAvailable…()` method. See
the [API reference](./api-reference#catalog-methods).
## Scene Settings
Scene settings control the 3D preview environment:
- **Lighting** controls the environment map, light intensity, and shadows
- **Camera** sets the default viewing angle, zoom level, and orbit constraints
- **Ground** configures the ground plane appearance and shadow baking
- **Post-processing** handles tone mapping, bloom, and other visual effects
Scene settings are stored as `.vjson` files and can be configured through the iJewel platform or uploaded directly.
The manifest points at that file with the `sceneSettings` key, which holds a
URL, absolute or relative to `assetBaseUrl`.
## Pricing Configuration
Pricing parameters determine how ring prices are calculated based on material weight and diamond specifications:
- **Metal prices** set the price per unit for each metal type (supports grams, ounces, and troy ounces)
- **Metal density** is the density in g/cm3 for accurate weight calculation (e.g., 15.5 for 18K gold)
- **Diamond pricing** sets the price per carat for diamond settings
- **Markup** is a multiplier applied to the subtotal
For programmatic pricing control, see the [Pricing API](./pricing).
::: tip Continue on iJewel3D
See [Create a Project](./drive-setup) for step-by-step project
creation and folder-backed catalog management. For help preparing custom assets, contact
[contact@ijewel3d.com](mailto:contact@ijewel3d.com).
:::
---
# Deployment & Integration
Once you've created a Wedding Band Configurator on the iJewel platform, you can deploy it in several ways. This page gives an overview, and each approach has its own detailed guide linked below.
If the project does not exist yet, start with [Create a Project](./drive-setup).
## Make Your Configurator Public
Before embedding or sharing, make your configurator public:
1. Open **iJewel3D Dashboard**
2. Right-click your Wedding Band Configurator file
3. Select **Make Public**
## Share Link
The simplest option is to share your configurator directly with customers:
1. Open **iJewel3D Dashboard**
2. Right-click your Wedding Band Configurator
3. Select **Share** and copy the link
The link opens the configurator in a standalone page with the full built-in UI. No code required.
## Integration Options
For embedding on your website, choose the approach that fits your needs:
| Approach | What You Get | Effort | Best For |
|----------|-------------|--------|----------|
| [**Direct Integration**](./integration-direct) | 3D viewer + built-in config panel on your page | Add script tags + a few lines of JS | Your own website with full control |
| [**iframe Embedding**](./integration-iframe) | Self-contained viewer in an iframe | Drop in an `