Blending ULX4M - NLnet funded FPGA board

At the start of 2021. NLnet decided to sponsor development of modular FPGA board ULX4M (Successor of EMARD ULX3S).

As a part of this project NLnet is supporting us to discover the new world of 3D modeling and 3D animation as a possibility of presenting a product through visualization and animation in Blender.

Previous blender work

We already described some steps in our last article.

You can find more info here:

KiCad >> FreeCad >> Blender

Using FreeCAD to open the STEP file and export it as OBJ

ULX4M imported into freecad

import the file into Blender.

ULX4M imported into Blender shows gray board without any color and without any textures

ULX4M will be comaptible with many IO boards, and for example in this sample we will use Raspberry Pi Compute Module 4 IO Board with already described process export STEP file from KiCad and import in Blender.

CM4 IO board and ULX4M without any textures

Separate components: Edit Mode – P, By Loose Parts

Next, clean up the model with the same method (MBXL) in Edit Mode as previous time. You can read about on the link

It seems there is no difference between STL or OBJ file for use in Blender.

We discovered some new cleaning options but the one we used last time gave us the best result, with the most reduced geometry.

All components are Parent to the base of the board (Ctrl P)

Save:) file

Next step - create materials

This part mostly happens in Edit mode where you can reach each vertex, edge and face of the component. I did some basic colouring in Material Properties - created new material slot with similar surface properties as original ULX4M board.

It’s possible to use each material that is created on any other component or an object, which is helpful if you need to make some changes on specific material that was assigned to a lot of objects.


Board opened in UV-editing mode

Select faces on the front side of the board - right click - UV Unwrap Faces – Project form View (Bounds). That works fine if board is placed frontal in the View. On the left side is the UV editor where it’s possible to adjust texture precisely.

Belender menu UV unwarp faces

The texture has to be imported as .png and created as material slot. Under the Base Colour there is an option to pick Image texture or add it as node in the Shader editor.

All textures were applied this way, the texture for base of the board that contains flatten solder and copper layers from KiCad and labels for chips.

Creating animation

The way ULX4M board snaps into the Raspberry Pi was animated simply from the Timeline with keying position and rotation on certain frames.

I added a Curve Circle to be a motion path for Camera. Then, camera is parented to the Empty-Cube which is used as object/bone for following a path. Access this option trough Object Constrain properties and target Curve Circle within a Drop Down menu.

User perspective view of the ULX4M board resting on CM4 IO board

When the Follow Curve and Fixt position are enabled, there is the Offset Factor slider which controls position of the camera on the Curve Circle and it’s optional for keying.

Pressing I key will open Insert Keyframe Menu, selecting Location & Rotation & Scale will keyframe only these properties on the Timeline.

The last part - Blinking LED’s

Only Strength in the material slot was animated in the Emission Shader.

To get higher brightness and glowing effect Bloom needs to be checked in Render Properties.

We used Cycles engine for rendering.

Output Properties contain Format preferences for defining output Directory for animation.


In first render we did not have silkscreen - in next post we will write more about adding more layers to blender PCB - here's a board with added logos from v002

There are some visible glithes in render so lets add some background on next render.

We will use this free nebula world

World setup is really easy - you can check here:

Full render is here

By: Paula Bučar

Special thanks to:

This project is funded by NLnet

NLnet logo

© Intergalaktik