Create different Fresnel lenses from different curves using geometry nodes.

I'm trying to create different types of Fresnel lenses from different shaped curves (to see what they look like when "revolved" to a circle).

My thoughts:

  1. Use mesh island index (to get each split curve section)
  2. Use set position node to line them up then "revolve" into a circle.

The issue I'm having is getting each separated part / section of the curve. I'm trying to avoid using boolean difference since that can be heavy cpu wise (but if that's the only way I'll do it.)

Here's an example of the curve (in red I'm trying to section into parts to create the lens) img1

Main video Fresnel Lens simulation with audio: https://www.youtube.com/shorts/9JX0Zdc6MaU

Also how a Fresnel Lens works. https://youtu.be/_nBNnlu6Rqo

PS: I'm using geometry nodes so it can be parametric since I would like to try / swap in and out multiple different curves quickly (and these will be 3D printed).

So in the end it will look like this



There would have to be several of these "cutting intersection" nodes but I limited it to 1 and showed it in an animation.


Attached Blend File showing boolean cutting..

  • 1
    $\begingroup$ Convert to Mesh and Split Edges might be helpful. Can you share your blend file so we can look at it with a concrete example? $\endgroup$
    – quellenform
    May 13, 2023 at 13:00
  • $\begingroup$ @quellenform I uploaded the file with how I would get the sections using "boolean cutting". There would have to be several of these nodes but I limited it to 1 and showed it in an animation. $\endgroup$
    – Rick T
    May 13, 2023 at 14:14
  • $\begingroup$ Is this an aspherical or spherical lens? Does the lens have to be a mesh as a starting point, or can this also be created via GN? (Which would be easier in the case of a spherical lens). In short, does it have to be optically exact, or is it just about the appearance itself? $\endgroup$
    – quellenform
    May 13, 2023 at 18:44
  • $\begingroup$ @quellenform It's aspherical the curves can change curvature. The starting point can be GN but I thought it would be easier to do as an example just showing the curve. I'm trying to make it with accurate dimensions since it will be 3D printed. $\endgroup$
    – Rick T
    May 13, 2023 at 19:09
  • 1
    $\begingroup$ @quellenform I have access to a Resin-SLA and FDM (note this is for testing but I wanted to make it as parametric as possible so I could try different things out). The size that will be printed is 70mm diameter (the size of a magnifying glass) blog.prusa3d.com/… $\endgroup$
    – Rick T
    May 13, 2023 at 21:03

1 Answer 1



Here. A speedy (no booleans - under 3ms) parametric fresnel lens node group with Plano-Convex, Equi-Convex, and Bi-Convex options. You can adjust steps, scaling and width. Tip: At 1 step it makes a normal lens. Requires Blender 4.1 or above.

The basic workings:

Arc to Fresnel

Rather than boolean we can use an (Arc) curve primitive nodes and some trigonometry to draw separate pieces of the lens profile. And then a set position node to offset each piece.


As an example for the green segment above: the radius of the lens forms the hypotenuse of a triangle, whilst the origin to each segment gives the adjacent lengths.

  • Blue triangle (Arc) node start point
  • Red triangle (Arc) node end point

Because we have both a hypotenuse and the adjacent lengths we can use the trigonometry equation of cosine to get the angle for the arc inputs, that is: arccos(θ)= hypotenuse / adjacent

Fresnel Arc Segment In Blender: Arccosine and subtraction between each lens segment to get the arc start and end points.

Fresnel Lens Repeat Zone Organize this into a repeat zone with an offset and viola.

  • $\begingroup$ Wow!! Very Nice! $\endgroup$
    – Rick T
    Apr 6 at 4:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .