A Blender add-on for turning CAD products into consistent, batch-rendered image sets.
Import STEP and STL files, standardize them at the world origin, build a rig of orthographic and
perspective cameras plus 3-point studio lighting, then render every product across every
view in one click, with predictable file names like AA_01_Widget_Front_clay.png.
- Blender: 4.0 and newer
- Panel location:
3D Viewport → Sidebar (N key) → MultiView - Version: 1.4.0
- Go to the Releases page and download
multiview_product_renderer.zip. - In Blender:
Edit → Preferences → Add-ons.- Blender 4.2+:
Install from Disk...(in the top-right dropdown menu) - Blender 4.0 / 4.1:
Install...
- Blender 4.2+:
- Pick the zip you downloaded. Do not unzip it first.
- Tick the checkbox next to MultiView Product Renderer to enable it.
- Press
Nin the 3D viewport and open the MultiView tab.
git clone https://github.com/Danyals-code/Addon-for-MultiView-Rendering-AMVR.gitCopy the multiview_product_renderer folder into your Blender add-ons directory:
| OS | Path |
|---|---|
| Windows | %APPDATA%\Blender Foundation\Blender\4.x\scripts\addons\ |
| macOS | ~/Library/Application Support/Blender/4.x/scripts/addons/ |
| Linux | ~/.config/blender/4.x/scripts/addons/ |
Restart Blender and enable the add-on as in step 4 above.
You only need this if you want to import .step / .stp files directly. If you already
have meshes in your scene, skip it. The add-on works with any geometry.
.stl files need none of this. An STL already holds a mesh, so it is imported straight
through Blender and never touches FreeCAD or STEPper, whatever the STEP Import Mode is set
to. From the moment it lands it is treated exactly like a converted STEP file: same product
collection, same Fit on Import, same standardizing, same batch render and file naming.
Open Edit → Preferences → Add-ons → MultiView Product Renderer and expand the
preferences:
| Setting | What it does |
|---|---|
| STEP Import Mode | Auto tries the STEPper add-on first, then falls back to FreeCAD. Or force one. STEP only; STL ignores it. |
| FreeCAD Executable | Path to freecadcmd.exe (Windows) or freecadcmd (macOS/Linux). STEP only. |
| Tessellation Deflection | FreeCAD mode only. Lower = finer mesh, bigger files. Default 0.1. |
FreeCAD route: install FreeCAD and point the preference at its console binary, typically:
C:\Program Files\FreeCAD 0.21\bin\freecadcmd.exe
The add-on shells out to FreeCAD, tessellates each solid into a mesh, writes a temporary OBJ, and imports that. Nothing is left behind in your FreeCAD install, and the scratch directory is removed even if you cancel. FreeCAD is run with its standard input closed, so a build that stops to ask a question fails immediately instead of stalling the import. Any single conversion is given 15 minutes before it is stopped.
STEPper route: if you own the STEPper add-on, install and enable it; MultiView detects and uses its import operator automatically.
The sidebar is laid out in the order you should use it.
Pick a lighting preset and a background, then Apply Scene Setup. This builds an
MV_Lighting collection and switches the scene to the add-on's own MV_World.
Your existing world is left intact. It is only deselected, not edited, so an HDRI setup you built yourself survives and can be picked again from World properties.
| Lighting preset | Look |
|---|---|
| Studio Soft | Large soft area lights, even fill. Default. |
| Studio Hard | Smaller lights, crisper shadows and highlights. |
| Dramatic | Strong key, deep falloff, minimal fill. |
| High Key | Bright, near-shadowless, white-on-white product look. |
Intensity multiplies the preset's light energies. Transparent Background renders
alpha instead of the Background Color. Rebuild Lighting and Apply Background re-run
either half on its own.
Add one or more .step / .stp / .stl files to the list and click Import CAD Files.
Each file becomes its own collection under MV_Products. That grouping is what the batch
renderer iterates over. You can mix STEP and STL freely in one list; each file is routed by
its extension, and a file that fails does not stop the ones after it.
Import runs in the background: the status bar shows MultiView: 3/12 housing.step (converting), Blender stays responsive, and Esc cancels after the file in flight.
Files that fail are skipped rather than stopping the batch, and FreeCAD's own error
message is reported instead of a generic failure -- run Window > Toggle System Console
to see the full list.
STL files skip the conversion step entirely, so they land immediately rather than showing
(converting). A .stl that Blender cannot read is reported and skipped rather than
becoming an empty product collection that would render as blank frames.
You can also click Add Empty Product Collection and drag existing meshes into it, which is how you use MultiView with geometry that didn't come from a CAD file.
Everything that makes products comparable to each other lives in this panel.
Fit on Import (on by default) does it automatically: as each file lands, the
product is uniformly scaled so its largest dimension equals Target Size (default
1.0 m, i.e. it fits inside a 1x1x1 m cube) and its bounding box is centred on the world
origin. Turn it off if you want to place and scale products yourself.
Standardize Products applies the same fit to everything already under MV_Products,
which is what you want after dragging in your own meshes or importing with the option off:
-
Recenter: moves each product's bounding box centre onto the world origin.
-
Rescale: uniformly scales each product so its largest dimension equals Target Size. This is what makes a tiny screw and a large housing frame read identically in the final images.
-
Auto Smooth: fixes the faceted look a tessellated CAD import arrives with. FreeCAD writes per-face normals that Blender keeps as custom split normals, and some Blender versions also mark most edges sharp on import; either one pins the flat shading no matter what you set. This clears both, then re-derives hard edges from the angle between faces (Smooth Angle, default 30 degrees -- raise it to keep fewer hard edges, lower it to keep more).
Both operate on the product as one rigid assembly, so multi-part STEP files keep their parts in the right places relative to each other.
Sharpness is baked into the mesh rather than left to a Smooth by Angle modifier, so a large batch costs nothing extra at render time. Running Standardize again is safe -- it is idempotent.
Afterwards the transform is baked down: scale values read 1.0 and every object origin sits
on the world origin, so the product rotates about its own centre and the N panel is clean.
Geometry does not move during that step. Objects on multi-user or linked data cannot be
edited by Blender, so those keep their transform and are counted in the status message.
Choose a view set and click Build Cameras. Cameras land in MV_Cameras, named
MV_Cam_<View>.
| View set | Cameras |
|---|---|
| All | Front, Back, Top, Bottom, Right, Left + 3 perspectives (9) |
| Orthographic | Front, Back, Top, Bottom, Right, Left (6) |
| Standard | Front, Top, Right, Perspective (4) |
| Minimal | Front, Top, Right (3) |
Front Axis tells the add-on which world axis points out of the front of your product.
CAD exports usually land on +X (the default); Blender's own convention is -Y. Getting
this right is what makes the "Front" render actually the front.
Framing Padding is the margin around the product in frame. 1.4 leaves 40% headroom
on the tightest axis; 1.0 fits the product exactly to the frame edge. Framing accounts for
your output resolution's aspect ratio, so a 16:9 or portrait render is not cropped.
All orthographic views share one framing, and all perspective views share another, so a product reads at the same scale across the whole sheet rather than being re-fitted per view.
Need an angle that isn't in the presets? Add a Custom View with an X/Y/Z direction vector and an ortho/perspective toggle, and it gets built alongside the rest.
Front Axis fixes the whole batch at once, which only helps when every product was modelled the same way. In practice a few arrive facing the wrong way, and this is where you turn them by hand.
Isolate Active Product (on by default) means you only ever see the one you are working on. Rotating or stepping hides the others, so a product is never obscured by the rest of the batch while you are trying to orient it. The checkbox applies the moment you tick it, and unticking it brings everything back.
That is the same isolation Render All uses, so what you see is what that product's render will contain. It is viewport state only: a batch render saves it, isolates each product in turn, and puts it back afterwards, so leaving it switched on never changes what gets rendered.
Previous and Next step through the batch one product at a time. The list wraps, so you can keep pressing Next all the way round. Show All reveals every product and switches the checkbox off, so the next rotation does not immediately hide them again.
Left, Right, Up and Down turn the product that is currently showing:
| Button | What it does |
|---|---|
| Left / Right | Spins the product about the vertical axis. This is the turntable move that swings a sideways product round to face front. |
| Up / Down | Tips the product about whatever axis is horizontal on your screen, for something lying on its back or standing on its nose. |
Up and Down follow the camera, so they mean the same thing whichever view you are looking through. Rotation is about the product's own centre, so it never drifts out of frame, and a multi-part assembly turns as one rigid piece. Rotate Step sets how far one press turns it, 90 degrees by default, so four presses of the same button return to where you started.
Turning a product changes its bounding box, so click Build Cameras again once you are done orienting. Framing is measured across the whole batch, and it is measured before you start rotating.
Set an Output Directory, choose a Render Mode, and hit Render All.
| Render mode | Output |
|---|---|
| Full Render | Uses your current engine (Cycles/EEVEE) and materials. |
| Clay (Workbench) | Fast single-colour clay pass with cavity shading. Default. |
| Both | Writes a _render and a _clay image per view. |
Every product is isolated in turn (all others excluded from the view layer), so nothing bleeds between shots. Progress prints to the system console.
Only products are isolated. Geometry that lives outside MV_Products is not a product,
so it is never hidden and turns up in every shot of every product. The usual offender is the
cube Blender starts a new file with: two metres across, sitting on the world origin exactly
where a fitted product lands, and quite capable of filling the frame and hiding the product
behind it -- which reads as a blank render with no obvious cause.
The panel warns before you spend the render time:
[!] 1 object(s) outside MV_Products
appear in every render:
Cube
Delete them, move them into a
product, or switch off their
render visibility (camera icon).
Objects you have already switched off for rendering are not listed, so a deliberate backdrop or staging rig does not keep setting the warning off.
Render engine, sample count, resolution, and file format stay in Blender's own Output and Render Properties. MultiView only drives cameras, visibility, and file paths. It never overwrites your render settings, and the clay pass restores your engine when it finishes.
Output is organised per product and named deterministically. The suffix comes from
the render mode: Clay writes _clay, Full Render writes no suffix, and Both
writes _render and _clay side by side. Clay is the default, so a first run looks
like this:
renders/
AA_01_Widget/
AA_01_Widget_Front_clay.png
AA_01_Widget_Top_clay.png
AA_01_Widget_Persp_FTR_clay.png
AA_02_Bracket/
AA_02_Bracket_Front_clay.png
...
The AA_01 label is controlled by three fields:
- Start Prefix: the letter pair for the first product (
AA,BB, ...). Only the first character is read, since the label just repeats it, so typingABgivesAA. - Start Number: the number the batch starts at, so a second batch can continue from
AA_11instead of restarting atAA_01. - Products per Letter: how many products before the prefix rolls over to the next
letter pair. After
ZZthe label grows a character rather than wrapping, so it runsAAA,BBB, ... and every product keeps a folder of its own.
| Collection | Contents |
|---|---|
MV_Products |
One child collection per product. This is what gets iterated and isolated. |
MV_Cameras |
Generated cameras, named MV_Cam_<View>. |
MV_Lighting |
The lights from the active lighting preset. |
It also creates one world datablock, MV_World, for the background.
Rebuilding cameras or lighting clears and regenerates only that collection, discarding the camera and light datablocks it made last time rather than leaving them behind. Your products, and any other world in the file, are never touched.
"No cameras. Build cameras first.": run Build Cameras in the Cameras / Views panel.
Renders come back blank, or with something unexpected in them: check the warning above
Render All. Anything outside MV_Products is rendered along with every product, and a
large object near the origin can hide the product completely. Delete it, move it into a
product collection, or turn off its render visibility.
"No product collections under 'MV_Products'.": import a STEP or STL file, or add an empty product collection and put your meshes inside it. Meshes sitting loose in the scene collection are not seen as products.
STEP import does nothing: check that the FreeCAD path in add-on preferences points at
freecadcmd, not the GUI freecad binary. Open Window → Toggle System Console (Windows)
to see the subprocess output.
Products are all different sizes in the renders: run Standardize Products in the Standardize panel with Rescale enabled.
The "Front" view isn't the front: change Front Axis in Cameras / Views and rebuild the cameras. If only some products are wrong, Front Axis will not help, because it moves the whole batch. Use Orient Products to turn the offenders individually, then rebuild.
Only one product is visible in the viewport: Isolate Active Product is on, which is the default while orienting. Click Show All in Cameras / Views, or untick the box. Renders are unaffected either way.
Renders are cropped after rotating products: rotating changes the bounding box the framing was measured from. Click Build Cameras again.
Imported STEP geometry is blocky: lower Tessellation Deflection in preferences
(try 0.02) and re-import.
MIT. See LICENSE.