Kukan Kogei -空間工芸-

Notes about my 3d printing artcrafts

An approach to make Seifert surfaces with Blender

f:id:asahidari:20201011231429p:plain

Overview

To make Seifert surfaces, SeifertView1 is one of the most powerful tool. The algorithm to make the surface is written in related document2 (and in this blog entry, mainly chapter '2.3 Seifert Surfaces' will be referred). If you have Rhinoceros and Grasshopper, you can find some examples online (for example, Grasshopper's forum page3 or Daniel Piker's tweet4).

In this blog post, One approach will be written to implement the algorithm with Blender. Unlike Grasshopper, Blender currently seems to have no features to make minimal surfaces. But With other mesh operation tools, Blender can get similar surfaces.

Preparation

Enable Extra Object Add-on in advance. And if you can use sverchok5 (parametric node tool) add-on, you might get better result with the add-on.

In this article, an example of a Seifert Surface will be made from Lissajous knot6. You can also make other Seifert Surfaces and other non-oriented surfaces (Seifert Surfaces must be orientable) using this approach.

Steps to make a Seifert Surface

Create a knot

At first, Make a knot (or knots) for the surface boundary.

Select Mesh->Math functions->XYZ function. Though XYZ function is originally for making surfaces, it can be used to make curve-shape meshes (, but you need to remove double vertices by selecting Mesh->Clean up->Merge distances after generating a mesh.)

f:id:asahidari:20201011231527p:plain

If you use sverchok add-on, you can use 'Curve formula' node.

f:id:asahidari:20201011232526p:plain

Split the knot around the crossings

After generating a knot mesh, press '7' key to switch view from upper point, and you can see some crossing points. Then, connect vertices around the crossings to separate twisted parts.

f:id:asahidari:20201011233149p:plain

Divide the object

Next, separate twisted parts from the rest parts. (There might be no need to separate it, but it will be easy to make faces for each boundaries later) In edit mode, select all twisted parts, press 'p' and separate 'selection'. (After separating, the rest parts are needed to be modified to close each surface boundaries).

f:id:asahidari:20201011233923p:plain

Make faces

After splitting the parts, make faces for each boundaries of the two objects. To do this, simply select each boundaries in edit mode (with alt key + select one of the boundary edges) and push 'f' key.

Rejoin the parts and adjust face orientations

Then, rejoin the parts with ctrl + j key and Mesh->Clean up->Merge by distance. After getting them united, adjust all face orientations with selecting each face and alt + n key->flip in edit mode. (Or if the surface is Seifert surface, which means orientable, selecting Mesh->Normals->Recalculate Inside/Outside is easier way to do the same.)

f:id:asahidari:20201012191949p:plain

Make surface relaxed and remeshed

To make relaxed and smooth surface close to ideal minimal surface, select Mesh->Clean up->Split concave faces and Mesh->Clean up->Split non-planar faces. (Though other better ways might exist, this is my current best way I've found.) At this time, the result might be still imperfect, but this will be more smooth after proceeding next steps.

f:id:asahidari:20201012192307p:plain

If you can use sverchok add-on, Plug physics node will help to generate minimal surfaces. Though you might need to adjust some parameters and some modifications, this approach might create more beautiful results. Minimal surface with Plug physics example is here.

Subdivide and Smooth

After dividing faces, subdivide and get more smooth surface with Subdivision modifier and Smooth Laplacian modifier. (Probably Smooth or Smooth Corrective modifier might have similar effects.) Parameters of these modifiers can be changed until the output gets satisfied mesh.

f:id:asahidari:20201013000028p:plain

Extract edge curve

To get clear boundary, copy and separate the mesh boundary by selecting Select->Select All by Trait->Non Manifold, push 'p' key to separate and Object->Convert To->Curve from Mesh/Text. Then increase 'depth' parameters to show the edge parts more clearly.

f:id:asahidari:20201013001155p:plain

Subdivide and Smooth again

Finally, if the surface still have room for improvement, apply Subdivision modifier and Smooth Laplacian modifier again.

f:id:asahidari:20201013001635p:plain

Other Examples

Using this approach, other Seifert Surfaces and non-orientable Surfaces can be generated from knot curves.

This Seifert Surface below is from two torus links. f:id:asahidari:20201013004357p:plain

Next image is not Seifert Surface (not orientable), but this technique can be used. f:id:asahidari:20201013004413p:plain

References