An approach to make Seifert surfaces with Blender
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.)
If you use sverchok add-on, you can use 'Curve formula' node.
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.
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).
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.)
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.
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.
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.
Subdivide and Smooth again
Finally, if the surface still have room for improvement, apply Subdivision modifier and Smooth Laplacian modifier again.
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.
Next image is not Seifert Surface (not orientable), but this technique can be used.
References
- Visualization of Seifert Surfaces https://www.win.tue.nl/~vanwijk/seifertview/
- Sverchok minimal surface example https://blenderartists.org/t/wip-sverchok-parametric-nodes-for-architects/557250/2347
-
Download SeifertView https://www.win.tue.nl/~vanwijk/seifertview/download_seifertview.htm↩
-
Visualization of Seifert Surfaces (pdf) https://www.win.tue.nl/~vanwijk/knot_tvcg.pdf↩
-
Grasshopper forum page, Minimal surfaces https://discourse.mcneel.com/t/minimal-surfaces/87241/21↩
-
kangaroo physics tweet https://twitter.com/KangarooPhysics/status/1303804642866982915↩
-
Sverchok add-on https://github.com/nortikin/sverchok↩
-
Lissajous knot https://mathcurve.com/courbes3d.gb/lissajous3d/noeudlissajous.shtml↩