Bulk-Add Materials by Category
Expose your entire material library as swatches in seconds. The Select Material option block has a second authoring mode — From Category — that auto-populates one swatch per material in a category. Adding a material to the category later makes it appear in the share view on next load, with no editor change required.
When to use it
- You have a library of 20+ materials (woods, fabrics, metals, …) and don't want to click "Add Material" once per material.
- The materials all apply to the same set of 3D objects/parts — and you can now pick multiple target objects at once (e.g., every wood option goes on both the main roof and the extra roofs).
- A flat per-material price works for your pricing model (option b in the design — one fixed amount whenever any material is selected).
- You expect to add/remove materials from the category over time without re-editing the project.
Step-by-step
- 1Open Dashboard → Materials. Create or pick a category (e.g., "Woods") and assign every material that belongs to it.
- 2Open your project, switch to Options mode, and add a Select Material option block (or open an existing one).
- 3At the top of the block properties panel, switch the Source segmented control from "Manual" to "From Category".
- 4Pick the category from the dropdown. The "Live Preview" panel below shows the swatches end users will see, including a live count badge.
- 5Pick one or more Target Objects (check the 3D models the materials apply to). Leave none checked to apply to every loaded object. Optionally scope each object to specific mesh parts via the parts list — parts are grouped by object + subgroup, with nested groups shown at any depth. Leave a target’s parts empty to cover every mesh in it.
- 6Set Sort Materials By (Name / Newest / Oldest). Hover an object or a part to see the affected meshes outline-highlight in the viewport so you can verify your target across all selected objects.
- 7Click Preview to verify the swatch list and 3D application work as expected. The Preview modal renders the synthesized variants identically to the share view.
- 8Optional: switch to Pricing mode and add a Price Group / Variable / Price Table / Unique Price block linked to this Select Material block to author per-material pricing.
What changes vs Manual mode
| Aspect | Manual mode | From Category mode |
|---|---|---|
| Variant authoring | Per variant via Add Material | Automatic — one swatch per material in the chosen category |
| Per-variant pricing | Price Group / Variable / Price Table | Same — link a pricing block to this option block in Pricing mode |
| Per-variant conditional rules | Yes | No — target the entire block, 3D objects/parts, or materials instead |
| Adding materials later | Re-edit the project and click Add Material | Just assign the material to the category — appears automatically on next share-view load |
| Per-variant target | Each variant has its own target object/parts | One shared target — supports multiple 3D objects (+ nested subgroups) — for every material in the block |
Pricing
Pricing for a category-mode block lives in Pricing mode, exactly like Manual mode. Add a Price Group, Variable (For Options), Price Table axis, or Unique Price block and link it to this Select Material block. The Pricing panel automatically shows one price row per material in the category so you can author per-material prices. The pricing key uses the stable synthesized variant value (auto:{materialId}), so renaming a material in the library does not break the price.
Conditional logic
Other blocks can hide or show a category-mode Select Material block at the block level, and the block's materials can be referenced by 3D Objects / 3D Parts / Materials targeting scopes. Per-variant conditional targeting is unavailable in category mode (runtime variant IDs change with category contents). Switch back to Manual if you need per-variant rules.
dropdownVariants stay in storage but are ignored while in category mode (and vice-versa). Switching back resurfaces the other mode's authoring.materialSource: 'category' plusmaterialCategoryId and the shared target — categoryTargetObjectIds (the selected objects) and categoryTargetParts (per-object mesh names). Runtime variants are synthesized asauto:{materialId}; with two or more target objects each variant carries a per-modelselectedTargetParts map so the right meshes get the material in every targeted object. The public share viewer lazy-fetches referenced categories in one batchedGET /share/:projectId/:token/category-materials?ids=cat1,cat2 request on first paint, whileGET /share/:projectId/:token/category-materials/:categoryId remains available for a single category. The initial share payload stays light even for large libraries.