Skip to content

Commit 964af1d

Browse files
committed
Add drawings, view protocols, provenance/Croissant and randomization (1.11.0)
Engineering drawings - Front/Top/Right SVGs and a three-view sheet (third or first angle), 1:1 in the product's source millimetres - Feature edges (creases, silhouettes, boundaries) tested against a depth render along their length; hidden stretches drawn dashed - Overall dimensions per view; drafting-correct view orientation View protocols - MVCNN-12, SyncDreamer-16, Zero123++ v1.2, MVDream-4, Zero-1-to-3 (seeded), TRELLIS-150 and a 15-degree catalogue rig, with their fields of view and fixed camera distances Provenance - manifest.json provenance block: versions, render settings, times and a snapshot of every setting; source_sha256 per row - Optional croissant.json (MLCommons Croissant 1.0), validated with mlcroissant; written by --merge for sharded runs - CITATION.cff Randomization - Seeded per product and view: camera jitter, light rig turn and strength, random HDRIs, materials, and distractors placed behind the product in Full renders only - Every pass of a view and its cameras.json/BOP pose share the jittered camera; everything is restored afterwards Tests - test_drawings.py and test_protocols_random.py
1 parent 820b608 commit 964af1d

6 files changed

Lines changed: 1583 additions & 38 deletions

File tree

‎CITATION.cff‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
cff-version: 1.2.0
2+
message: "If you use MultiView Product Renderer in your research, please cite it as below."
3+
title: "MultiView Product Renderer"
4+
type: software
5+
authors:
6+
- given-names: Danyal
7+
family-names: Sarfraz
8+
version: 1.11.0
9+
license: MIT
10+
repository-code: "https://github.com/Danyals-code/Addon-for-MultiView-Rendering-AMVR"
11+
abstract: >-
12+
A Blender add-on that turns CAD (STEP, IGES) and mesh files into standardized
13+
multi-view image sets and datasets: canonical camera rigs or published
14+
protocols, studio lighting, clay, line-art, depth, normal and part-ID passes,
15+
camera poses, COCO and BOP annotations, vector engineering drawings, seeded
16+
randomization, and a provenance manifest with Croissant metadata.
17+
keywords:
18+
- Blender
19+
- CAD
20+
- STEP
21+
- multi-view rendering
22+
- synthetic data
23+
- dataset generation
24+
- engineering drawings

‎README.md‎

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ every view in one click, with predictable file names like `AA_01_Widget_Front_cl
88

99
- **Blender:** 4.0 and newer
1010
- **Panel location:** `3D Viewport → Sidebar (N key) → MultiView`
11-
- **Version:** 1.10.0
11+
- **Version:** 1.11.0
12+
- **Cite:** see [`CITATION.cff`](CITATION.cff)
1213

1314
---
1415

@@ -294,6 +295,28 @@ Need an angle that isn't in the presets? Add a **Custom View** with an X/Y/Z dir
294295
vector and an ortho/perspective toggle, and it gets built alongside the rest. The checkbox at
295296
the start of its row switches it off without deleting it.
296297

298+
#### Published protocols
299+
300+
**Protocol** replaces the View Set with the camera rig of a published dataset or method, so
301+
a render set can match what a benchmark or model expects:
302+
303+
| Protocol | Views | Field of view | Distance | Source |
304+
| --- | --- | --- | --- | --- |
305+
| **MVCNN, 12 views** | 12 around the product, 30 degrees apart, 30 degrees up | MultiView's | Shared framing | Su et al., ICCV 2015 |
306+
| **SyncDreamer, 16 views** | 16 around, 22.5 degrees apart, 30 degrees up | MultiView's | Shared framing | Liu et al., ICLR 2024 |
307+
| **Zero123++ v1.2, 6 views** | Azimuths 30, 90, ..., 330; elevations alternating 20 and -10 | 30 degrees | Shared framing | Shi et al., v1.2 README |
308+
| **MVDream, 4 views** | Front, right, back, left at 15 degrees up | 37.5 degrees | Shared framing | Shi et al., ICLR 2024 (middle of its random ranges) |
309+
| **Zero-1-to-3, 12 random views** | Uniform on the sphere, seeded | 49.1 degrees | 1.5-2.2 object sizes, seeded | Liu et al., ICCV 2023 |
310+
| **TRELLIS, 150 views** | Hammersley sequence on the sphere, seeded offset | 40 degrees | 2 object sizes | Xiang et al., CVPR 2025 |
311+
| **Catalogue, 15 degree plunge** | Front at 0 and 15 degrees; front-right, right, back, left, front-left at 15 | MultiView's | Shared framing | After the GS1 Product Image Specification's preferred plunge (names are MultiView's, not GS1 codes) |
312+
313+
Azimuth 0 is the Front view, so protocols follow **Front Axis** like the built-in views.
314+
Distances given in object sizes assume the product is normalized into a unit cube, as these
315+
works do, and are multiplied by **Target Size**: with **Fit Each** and a Target Size of
316+
`1.0` they are the published numbers. Random protocols take a **Seed**, so the same rig can be
317+
built again exactly. MVDream samples its elevation and field of view at random; the preset
318+
fixes them at the middle of its ranges, and the paper should say so if it matters.
319+
297320
#### Orient Products
298321

299322
**Front Axis** fixes the whole batch at once, which only helps when every product was
@@ -603,6 +626,28 @@ Rendering part of a batch updates the rows for those products and keeps the rest
603626
manifest always describes everything in the output directory. Rows for files that have
604627
since been deleted are dropped.
605628

629+
Every row also carries `source_sha256`, the SHA-256 hash of the file it was rendered from.
630+
`manifest.json` opens with a `provenance` block holding enough to make the output again:
631+
- MultiView's version, repository and citation
632+
- the Blender version and the `.blend` file
633+
- render engine, samples, resolution, file format and view transform
634+
- start and finish times
635+
- a snapshot of every setting in the panels, including protocol and randomization seeds
636+
637+
**Croissant** (in the Manifest section) also writes `croissant.json`: an
638+
[MLCommons Croissant 1.0](https://docs.mlcommons.org/croissant/docs/croissant-spec.html)
639+
description of the output as a dataset, which the NeurIPS datasets track asks for.
640+
- The manifest CSV is its record set, one field per column, with its checksum.
641+
- Each file type in the output (PNG, EXR, SVG, ...) is a file set.
642+
- Name, description, licence, URL and citation come from the fields under the checkbox.
643+
Without a citation, the dataset cites MultiView itself.
644+
- The Responsible AI fields are filled with what the tool knows for certain: synthetic
645+
renders of the listed files, no personal data. Intended use and limitations are left for
646+
you to add.
647+
648+
Croissant always writes the CSV manifest, whatever **Write** is set to. After a sharded
649+
command-line run, `--merge` writes `croissant.json` for the merged whole.
650+
606651
---
607652

608653
#### Annotations for research
@@ -653,6 +698,53 @@ source units converted to mm, and depth is written in the same mm, with a `depth
653698
image so large parts still fit in 16 bits. Only perspective views go into BOP, because the
654699
format has no orthographic camera.
655700

701+
#### Engineering drawings
702+
703+
Tick **Drawings** for vector three-view drawings of each product: Front, Top and Right as
704+
separate SVGs (`AA_01_Widget_Front_drawing.svg`, ...), and all three on one sheet
705+
(`AA_01_Widget_Drawing.svg`).
706+
707+
- **True scale.** One SVG unit is one millimetre of the original part: a 120 mm housing
708+
is drawn 120 mm wide at 1:1, whatever Target Size it was rendered at. MultiView takes back
709+
out every scale it applied.
710+
- **Hidden lines dashed.** Lines are the mesh's feature edges, found geometrically: creases
711+
sharper than **Crease Angle**, silhouettes and open boundaries. Each is then tested
712+
against a depth image of the same view, along its whole length, so a line that passes
713+
behind something turns dashed exactly where it disappears. **Accuracy** is that depth
714+
image's size; raise it for very fine detail.
715+
- **Drafting layout.** The views use cameras of their own, oriented the way a drawing
716+
needs. The plan is seen with the front at the bottom, so its width lines up with the front
717+
elevation's, and the side view stands upright. **Third Angle** puts the plan above and the
718+
right view on the right; **First Angle** puts the plan below and the right view on the
719+
left.
720+
- **Dimensions** print each view's overall width and height in millimetres.
721+
722+
Because lines come from the mesh, a curved face's tessellation can add short creases where
723+
the facets are coarse. A higher Crease Angle, or a finer Tessellation Deflection at import,
724+
removes them. The drawings have no centre lines or detailed dimensioning; they are
725+
a faithful outline, not a finished drawing.
726+
727+
#### Randomization
728+
729+
**Randomize** varies each image for training data while keeping every annotation exact:
730+
731+
| Setting | What varies |
732+
| --- | --- |
733+
| **Camera Jitter**, **Distance Jitter** | Each view's camera swings up to this far off its canonical direction, and moves nearer or farther |
734+
| **Lights** | The rig turns about the vertical by up to **Light Turn**, and each light changes strength by up to **Light Strength** |
735+
| **HDRI** | Each image is lit and backed by a random HDRI from **HDRI Folder** (empty: the studio HDRIs that ship with Blender), turned and scaled at random |
736+
| **Materials** | The product gets a random material preset and colour per image, in Full renders |
737+
| **Distractors** | Random shapes in random colours, placed behind the product as each camera sees it, in Full renders |
738+
739+
Every draw comes from the **Seed**, the product's label and the view, so the same settings
740+
always give the same images. A product or view added later does not shift anyone else's
741+
numbers. A view's image, mask, depth, normals and part IDs are all rendered from the same
742+
jittered camera, and that is the camera `cameras.json`, `transforms.json` and BOP record.
743+
Distractors are only ever placed on the far side of the product from the camera, so they
744+
never cover it, and they appear only in Full renders. Masks, part IDs, COCO instances and BOP
745+
visibility therefore stay exactly the product. Turntables are not randomized. Everything is
746+
put back afterwards: lights, world, cameras, and the distractors are deleted.
747+
656748
## Command line
657749

658750
Everything the panels do can run without Blender's window, from a job file:

0 commit comments

Comments
 (0)