Skip to content

Expand render pipeline, outputs, lighting, import and pre-flight (1.9.0) - #5

Merged
Danyals-code merged 3 commits into
mainfrom
standardize-panel-and-orient-products
Oct 26, 2026
Merged

Danyals-code merged 3 commits into
mainfrom
standardize-panel-and-orient-products

Conversation

@Danyals-code

Copy link
Copy Markdown
Owner

Render pipeline

  • Render All runs modally: status bar progress and time left, Esc stops after the image in flight, scene state always restored
  • Skip Existing resumes a crashed or cancelled batch
  • Per-product render ticks and Render Active; labels stay stable when products are unticked
  • Per-view checkboxes (Custom view set) and per-custom-view toggles
  • Reframe Before Rendering rebuilds cameras at render time

Outputs

  • Naming templates for files and folders ({label} {prefix} {number} {product} {view} {mode}), with clash detection
  • Contact sheet per product with captions
  • Turntables: frames plus H.264 MP4 and looping GIF
  • Post-processed copies: trim, pad to square, flatten, PNG/JPEG/WebP, max size and extra sizes; originals untouched
  • CSV/JSON manifest, merged across partial runs

Look and lighting

  • Lights follow the camera so every view is lit like Front
  • Ground: shadow catcher or floor, placed under each product
  • HDRI background, optionally hidden from camera
  • Line art, mask and AO passes
  • Material presets for the batch or per product, applied through a temporary Geometry Nodes modifier
  • Save and delete your own lighting presets

Import and geometry

  • STEP parts import as separate named objects with their CAD colours, read from the STEP file since console FreeCAD drops them
  • IGES via FreeCAD; OBJ, PLY, glTF/GLB, FBX via Blender; 3MF via a small built-in reader
  • Add a whole folder, optionally recursive
  • Real size and units recorded at import; Keep Proportions scale mode; Rest on Floor
  • Auto Orient (lay flat or principal axes) and Reset Orientation

Pre-flight

  • Checks the batch before rendering, with one-click fixes; errors stop Render All, warnings ask first; empty products are skipped

Fixes

  • FreeCAD import meshed assembly containers and origin planes, duplicating every part of a multi-part STEP
  • Stray-object check crashed on stale view layer entries
  • Stop setting deprecated use_nodes on Blender 5

Render pipeline
- Render All runs modally: status bar progress and time left, Esc
  stops after the image in flight, scene state always restored
- Skip Existing resumes a crashed or cancelled batch
- Per-product render ticks and Render Active; labels stay stable
  when products are unticked
- Per-view checkboxes (Custom view set) and per-custom-view toggles
- Reframe Before Rendering rebuilds cameras at render time

Outputs
- Naming templates for files and folders ({label} {prefix}
  {number} {product} {view} {mode}), with clash detection
- Contact sheet per product with captions
- Turntables: frames plus H.264 MP4 and looping GIF
- Post-processed copies: trim, pad to square, flatten, PNG/JPEG/WebP,
  max size and extra sizes; originals untouched
- CSV/JSON manifest, merged across partial runs

Look and lighting
- Lights follow the camera so every view is lit like Front
- Ground: shadow catcher or floor, placed under each product
- HDRI background, optionally hidden from camera
- Line art, mask and AO passes
- Material presets for the batch or per product, applied through a
  temporary Geometry Nodes modifier
- Save and delete your own lighting presets

Import and geometry
- STEP parts import as separate named objects with their CAD
  colours, read from the STEP file since console FreeCAD drops them
- IGES via FreeCAD; OBJ, PLY, glTF/GLB, FBX via Blender; 3MF via a
  small built-in reader
- Add a whole folder, optionally recursive
- Real size and units recorded at import; Keep Proportions scale
  mode; Rest on Floor
- Auto Orient (lay flat or principal axes) and Reset Orientation

Pre-flight
- Checks the batch before rendering, with one-click fixes; errors
  stop Render All, warnings ask first; empty products are skipped

Fixes
- FreeCAD import meshed assembly containers and origin planes,
  duplicating every part of a multi-part STEP
- Stray-object check crashed on stale view layer entries
- Stop setting deprecated use_nodes on Blender 5
…0.0)

Annotations
- cameras.json per product: per-view K (perspective) or pixel size
  (orthographic), c2w in OpenGL and w2c in OpenCV axes, image paths
- Track each product's source-to-world transform through every move
  MultiView makes, so renders map back to CAD coordinates and units
- nerfstudio-style transforms.json for perspective views and for
  turntables (equivalent orbiting cameras)
- Depth and camera-space normal passes: single-sample Cycles, 32-bit
  EXR, no filter blending
- Part-ID pass: 16-bit PNG label map numbering a product's parts
- COCO export: per-part instance masks (RLE) with part names
- BOP export from perspective views: rgb, depth (mm), masks,
  scene_camera/gt/gt_info, PLY models and models_info, with rigid
  poses in source-model millimetres

Command line
- cli.py runs a JSON/TOML job headless without installing the add-on:
  import, standardize, auto-orient, scene setup, render
- --shard i/n with job-wide labels and per-shard lists, --merge to
  combine them, --check for pre-flight only, --list-settings
- Exit codes 0/1/2 and a MULTIVIEW_SUMMARY line

Tests
- tests/ suite run inside background Blender, with a runner and
  STEP/IGES fixtures; FreeCAD checks skip when it is absent
- GitHub Actions workflow running the suite on Blender 5.0.0

Fixes
- JSON outputs are rewritten only when their content changes
…(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
@Danyals-code
Danyals-code merged commit f1bf85f into main Oct 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant