# Rendering Borromean rings

The Borromean rings are a set of three rings that are linked, but do not interlock:

The structure cannot be pulled apart, but cutting any one of the rings allows you to separate the other two. They cannot be physically constructed with regular tori in three dimensions, you have to deform the rings like this:

Or this:

Which might look like perfect circles from one viewpoint only.

These are not Borromean rings, whatever the listing says, as they actually interlock and cutting one of them does not release the other two:

I would like to render an 'alien artefact' that appears to be a set of Borromean rings made out of perfect circles, indicating that they somehow stretch into additional dimensions. The rings don't need to move in relation to each other (although that would be amazing), but the camera does need to pan around them, showing them from several angles. I was thinking to use the geometry of the 'false rings' from the last link, but shade them in such a way that they render some parts of the structure in the wrong layer order to create the Borromean effect, but I couldn't think where to begin to make something like that happen. Any suggestions? Any rendering engine would be acceptable.

• Hi :). Do you want a perfect result using deformed rings (second+third example), or slightly imprecise result but perfectly round rings (last example)? May 24, 2023 at 8:38
• It's more important that the rings appear perfectly round, although I'd be interested in either approach. The rings don't have to actually be perfectly round in the geometry as long as they can be made to appear so. May 24, 2023 at 9:01
• Before anybody goes on a wild-goose chase: "It turns out that rigid Borromean rings composed of real (finite thickness) tubes cannot be physically constructed using three circular rings of either equal or differing radii. However, they can be made from three congruent elliptical rings." mathworld.wolfram.com/BorromeanRings.html May 24, 2023 at 9:13
• @MarkusvonBroady.. instinctively that's what I thought too.. but by that logic, it couldn't be done with rigid ellipses either? I think 'above' isn't as clean a concept, here, as in the stairs. Free rotations have to be considered. May 24, 2023 at 9:25
• @RobinBetts you're correct, ellipses as shown in the question have the ability to slide inside each-other. May 24, 2023 at 9:37

Here's one idea: bend the rings locally, maintaining their dimensions not parallel to the camera's ray; the easiest way to do this is to position the rings on $$z = 0$$ plane and orthographic camera looking perfectly vertically down - this way all camera rays are looking down, and so the displacements can be safely done if they're limited to the $$z$$ axis:

Custom Group:

While the apparent thickness and position of the rings is as if they were flat, you can still see deformations through both Eevee shadows and shading (brightness based on surface angle regardless of how many light rays can hit the surface):

Falloff: 0.150, Displace: 1.237

Of course the above is the worst example, it gets better with larger falloff and reasonable displace:

Falloff: 0.400, Displace: 0.105

The falloff can overlap (though if it overlaps by A LOT then it starts to have the same effect as decreasing the displace):

Falloff: 0.550, Displace: 0.105

You can decrease the displace so that the rings overlap, if I decreased the displace any further below, the rings would start to visibly overlap:

Falloff: 0.550, Displace: 0.044

Unfortunately such overlap severely reduces the shadows which you actually might want… Here's a GIF of two last operations seen from a side:

You could join the curves before displacing (and in the same order as after displacing!), and bevel them, then after displacing and beveling sample the normal from non-displaced tori (learned this word here) - remember to use the nor attribute in your shader:

Falloff: 0.550, Displace: 0.105

And finally if you go from Render shading to Viewport Shading, which has simpler rendering not involving shadows:

Falloff: 0.550, Displace: 0.044

## To consider

• If you don't need the rings to cast shadows on themselves, but would like them to reflect the environment, I'd go for compositing, rendering each ring separately, and then overlaying on on top of each-other by a few checks (if not red: display green, if not blue: display red, if not green: display blue).
• If you want to use perspective camera, the setup should still work, you just need to calculate the ray direction and displace the vertex along that direction, rather than $$z$$ axis.
• You can add more rings, though positioning and fine-tuning the falloff and the displace isn't exactly trivial:

• Or... do it in Inkscape. (Just kidding,, nice answer :) ) May 25, 2023 at 7:21
• I tried Inkscape yesterday, I didn't even know how to change the page dimensions or rotate an element ☠ May 25, 2023 at 8:06

Here is a simple solution:

First I just create a circle and move two selected points. One up and one down. These points are the intersections between the circles. In order for the Z position to be smoothed, I also use the Blur Attribute node, which is available from version 3.5.

Then I simply instantiate this circle on the points of another circle which has only three points.

This is optional, but I think it looks even softer this way: You can convert the curves to Bezier so that they end up smoother.

And at the very end, I convert these curves into a mesh using Curve to Mesh.

(Blender 3.5+)