Skip to content

brianlow/lego-rendering

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

grid of parts

Lego Rendering Pipeline

Render semi-realistic, individual parts. Primarily used to train machine learning models for detection, part classification and color classification.

This uses LDraw's part models and Blender to produce a render.

A single render typically takes 10-15s on an M1 Pro. There is a draft mode that takes a few seconds.

Parts

In theory this can render any LDraw part. However I've only tested with typical plastic Lego parts. Parts are specified using their LDraw ID. In many cases this will be same as the mold number on the part but not always. Keep in mind there may be multiple molds over time.

Materials

Currently supports plastic, transparent and rubber. Not supported yet: pearlescent, glitter, neon colors, metal and cloth.

grid of materials

Colors

Colors are specified with hex codes in sRGB. Included is a list of named colors from Rebrickable.

grid of colors

Rotation

Parts can be rotated to various angles. The parts are moved up/down to remain touching the ground.

grid of various rotations

Lighting

Lighting Styles: default, bright, hard

grid of lighting styles

Lighting angle around the part

grid of light angles

Camera

Camera height: degrees from 0-90

grid of various camera angles

Camera zoom

grid of various zoom levels

Instruction Look

By default they are rendered with a transparent background. Use PNG format (format=Format.PNG).

grid of various parts in line art style

Setup

Run

Build script:

renderer = Renderer(ldraw_path="./ldraw")

renderer.render_part("6126b", RenderOptions(
    image_filename = "renders/test.jpg",
    part_color = RebrickableColors.Blue.value.best_hex,
    material = Material.PLASTIC,
    lighting_style = LightingStyle.BRIGHT,
    light_angle = 160,
    part_rotation = (0, 0, 270),
    camera_height = 45,
    zoom = 0.1,
    look = Look.NORMAL,
    width = 244,
    height = 244,
))

See lib/renderer/render_options.py for the full list of options. See docs-*.py to see how the images on this page were genereated.

Run in Blender's Python environment:

./run.sh test.py         # renders to renders/test/png

./run-watch.sh test.py   # run test.py each time a .py file is saved

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published