Christmas Ornament for 2025, or an introduction to 3D Printing with Blender Geometry Nodes

For Christmas 2025 I created a little Christmas tree ornament using Blender's Geometry Nodes and 3D printed it to give to friends and family. Here is a 3D preview (you can rotate and zoom in/out):

Concept

I wanted to create a small, fairly easy to print gift. I initially tried to create a mini tree to hang on a tree, but pivoted to a wreath ornament as it seemed to be easier to create a nice stylised version.

What you will learn here

This isn't a comprehensive tutorial on any of the topics but a quick overview of what is possible combining these tools. I will cover:

  • a simple demo of how to create a wreath and berries with Blender Geometry Nodes
  • exporting the model for 3D printing
  • preparing the model for display on the web with React Three Fiber

Geometry Nodes

Blender has the concept of modifiers, which allow for non-destructive editing. Actually you don't even need to really apply to any base geometry, you can procedurally build complex shapes from boolean operations on primitives (along with few other tricks).

The main idea was to take a icosahedron as a base shape (to be the leaves), then by a combination of scaling and rotating it would create a nice stylised wreath shape. The least obvious part is aligning each part, via rotating, to match its position.

Basic Wreath

Creating a small loop on top for a ribbon to hang was a little fiddly, building together a few primitives. Note the use of the 'exact' boolean operation as we want things to be clean/ready for 3D printing.

Hook

These are then combined with more boolean operations. To make a stable base for printing I sliced out the bottom part of the wreath.

Combining

I omitted the berries/baubles part of the graph. I put far too much effort into making them a slightly irregular, perturbing their positions a little; doing something simple would have been fine.

This can then be easily exported as an STL file which the 3D printer software can read.

3D Printing

This has become so much easier and faster than it used to be, though is still dramatically less reliable and harder than 2D printing. I used a Creality K2 Pro printer using a sparkly green PLA for the leaves and different colours for the berries, in each batch. The design was set up so I can easily just change the filament colour towards the top of the print for the berries.

Preparing it for Web

I also wanted to show it off here. To do this I exported from Blender as a glTF binary (.glb) file.

Blender Export

and used the gltfjsx tool to convert it into a React component that will work with @react-three/fiber and @react-three/drei.

npx gltfjsx model.glb --transform

Here is the main code to show it is below. Drei's Stage provides a nice way of spotlighting and ground shadowing a model. The OrbitControls allow for mouse/touch interaction.

import { Canvas } from '@react-three/fiber'
import { OrbitControls, Stage } from '@react-three/drei'
import { Wreath } from './Wreath'

export function Christmas2025() {
  return (
    <div className="h-[480px] rounded-lg shadow-lg">
      <Canvas>
        <ambientLight intensity={0.2} />

        <OrbitControls />
        <Stage intensity={0.3}>
          <Wreath />
        </Stage>
      </Canvas>
    </div>
  )
}

Concluding Thoughts

Blender Geometry Nodes are powerful, providing a relatively free-form, yet non-destructive way to create 3D models. This can relatively simply be exported for use in both 3D printing and web display.

They are a bit fiddly and limited compared to a more programmatic approach e.g. Replicad.

Learn More

  • I mostly learnt about Geometry Nodes from Ducky 3D.
  • An AI chat tool, I was using Gemini, was useful in figuring out some aspects of Geometry Nodes, particularly of the 'how to do X' flavour. But Blender 5 has changed some things so many answers were a bit out of date.
  • React Three Fiber and Drei are great for 3D web stuff. An introduction can be found here.