At Formnext 2023 I spent some unexpected time to discover a new class of procedural structure called “Spherene” (“sphere” + “graphene”), it’s a name as introduced by a company with the same name.
It’s main feature is isotropic (“all directions”) distribution of forces. Their service provides the creation of this structure based on:
density (ratio of material vs empty space), hence their term of Adaptive Density Minimal Surface (ADMS)
form
wall thickness
where all of them are freely definable in 3D space contained within an overall boundary. Their service “renders” a mesh which complies with such, like defining at some point a lower or higher density, and transits in 3D space from one to another.
Patent
My immediate impulse was to code the Spherene aside of the existing TPMS’s, but I realized their business core is the service of creating meshes based on their procedure as described in a patent:
at its core it describes 6 steps (abbreviations added for clarity)
creating envelope
creating density field
adaptive Voronoi tesselation (AVT),
1st skeleton graph (SG) associated to AVT (SG-AVT1)
generated from the edges of the Voronoi cells
2nd skeleton graph associated to SG-AVT1 (SG-AVT2)
generated using Delaunay tetrahedralization
minimal surface from SG-AVT1 and SG-AVT2, using equidistant from both skeleton graphs, with minimal wall thickness requirements
Abstract: A method of additively manufacturing a minimal surface structure of a three-dimensional article includes a computer executing the steps of recording, in the computer,
an envelope of the three-dimensional article; generating a density field across a volume enclosed by the envelope with densities of the density field corresponding to local requirement values of at least one physical parameter at respective positions of the three-dimensional article;
generating an adaptive Voronoi tessellation of the volume using the density field;
generating a first skeleton graph associated with the adaptive Voronoi tessellation;
generating a second skeleton graph associated with the first skeleton graph; and
generating a digital minimal surface model from the first and second skeleton graphs.
The method may further include a 3D printer additively manufacturing the minimal surface structure according to the digital minimal surface model.
I think if Spherene is truly as significant for Additive Manufacturing, and an essential invention, it has to move beyond the grip of a single company and its patents – time will tell.
Samples
Daniel Bachmann from Spherene Inc. kindly shared with me a few samples, 20x20x20mm cubes, and 20mm diameter spheres with Spherene infills, illustrating their properties:
Spherene 20mm, 15mm and 10mm sampleSpherene 40mm in white & grey resin (top row) and white, grey and black PLA/PLA+Spherene resin samplesSpherene resin samplesSpherene resin samples
A few support structures were required for the spherical samples, the cubic samples did not require such:
Lychee Slicer: spherical spherenes required support structure due overhangs
Additionally I printed a few cubic samples with FDM on my CoreXY Ashtar C without supports at 40x40x40mm scale.
Subtractive Manufacturing & Molding Usage
The structure cannot very well machined with subtractive manufacturing processes – or only if the piece is sub-divided so all indentations can be milled, and sequentially fused or welded again.
Another approach comes to my mind is to form dedicated bricks, e.g. for large scale application like a building, and have a limited kinds of bricks depending on their position and use case, and have molds to form those limited kinds in larger quantities.
In order to produce a mold one would inverse the original model, the negative volume, that would be produced using additive manufacturing and then produce lost-form casting molds, or highly simplify the form so one can remove the positive without destroying the mold.
2023/02/08: worked on text and illustrations a lot, many sample prints, multiple visualization approaches, details on f1 + f2 vs f1 * f2 and cylindrical and spherical transformation of TMPS
2023/01/05: adding mesh/voxel renderings, slicing geometry to generate G-code
2022/12/11: first FDM G-code generated using 2D / contour approach
2022/12/07: included many suitable periodic minimal surfaces
2022/12/02: start with implicit surface focus
As I progress I will update this blog-post.
Introduction
Infill geometries are geometries which are continuous, repetitive or periodic; they fill a boundary defined geometry aka outer form often defined via meshs. Let’s dive into some of the simple geometries and then looking at some more complex structures:
The Implicit Geometries
Implicit geometries are geometries defined via f(x,y,z) = 0 defining their surface, the boundary between inside and outside and they are ideal to define repetitive or periodic 3D infill geometries.
Sphere
Sphere: x2 + y2 + z2 – r2 = 0
When you ever tried to compose a sphere as a mesh, you know there are many ways to do so, and all are more complex than this simple description, and as you realize, the formula is perfect, it’s not an approximation – this is the nature of implicit formula. When you try to visualize an implicit formula, then you need to discretize and there the approximation takes place, as a mesh or as voxels.
Another nifty property of the sphere, it is the minimal surface to circumvent a volume, and through this blog-post, the minimal surface will become a common theme.
Cube
Cube: max(abs(x),abs(y),abs(z)) – w/2 = 0
Plane
Plane: z = 0
As I render only -10 to 10 to each axis, it creates a small plate:
Triply Periodic Minimal Surface (TPMS)
Let’s move to the world of minimal surfaces, so called Triply Periodic Minimal Surfaces (TPMS), those can be expressed in implicit form and have some properties as sought for infill geometries.
In differential geometry, a triply periodic minimal surface (TPMS) is a minimal surface in ℝ3 that is invariant under a rank-3 lattice of translations. These surfaces have the symmetries of a crystallographic group. Numerous examples are known with cubic, tetragonal, rhombohedral, and orthorhombic symmetries. Monoclinic and triclinic examples are certain to exist, but have proven hard to parametrise.
Let’s explore this form more thoroughly, we animate a, b, c, d, and e and see what it does, essentially we animate -1 to 1 in sinus, 0 eliminates of the chunk of the formula:
animating a (-1..-1)animating b (-1..1)animating c (-1..1)animating d (-1..1)animating e (-1..1)
P Skeletal: 10*(cos(x)+cos(y)+cos(z) – 5.1*(cos(x)*cos(y)+cos(y)*cos(z)+cos(z)*cos(x)) – 14.6
By changing the last substraction of 14.6 to 10 or 8, the structure get more dense – ideal to use.
P Skeletal, animating main subtraction -14.6(thin)..5.4(disconnected)
The P Skeletal connects 6 arms to each other.
IWP Skeletal
IWP Skeletal connects 8 arms to each other.
Schwarz D Skeletal
Schwarz D Skeletal connects with 4 arms to each other.
The above “skeletal” minimal surfaces are ideal for lattice structures, likely most usable in context of voxel-based 3D printing approaches, such as SLA, SLS, SLM and so forth, but less ideal for traditional FDM where the lattice is sliced Z-planar again kind of defeating the overall purpose of lattice structures.
D Surface
D Surface: cos(x)*cos(y)*cos(z) – sin(x)*sin(y)*sin(z)
As Juergen Meier created a variant, adding a, which gives these variants:
a=-0.5a=-sqrt(2)/2a=0.5a=0.5 (double density)
providing a structure using 4 arms to connect each other.
Miscellaneous
Bionic BoneBionic Bone 2Split PDKPIWPDouble GyroidDiamond Double 1Diamond Double 2Octo 1Octo 2Double PG Prime 1G Prime 2PN
Using Implicit Geometries as Infill Structures
Slic3r and Prusa Slicer are providing gyroid infill pattern since early version, but beyond that it seems no to little development happened since (2022/12).
Let’s see how implicit geometry can be transformed into slices (FDM) or voxels/pixels (SLA, SLS etc)
Algorithm A: 3D Cache
create point cloud of surface of implicit geometry
create surface of implicit geometry using marching cube
(optional) determine x, y, z size where it repeats itself
slice surface for infills at certain scale
clip inner surface with outer perimeter of slice
Pros
with caching: fast lookup of infill geometry
Cons
many steps
x, y, z repeatability must be given, hard to determine programmatically from outside
clipping to perimeter can be computational expensive depending
Algorithm B: 2D Cache
create 2D point cloud of a slice of implicit geometry based on clipped 2D area / slice
convert 2D point cloud to polylines (FDM) or pixels (SLA)
Pros
reduction to 2D problem at first stage
fast 2D point cloud creation as only one z-level is used
Cons
create 2D point cloud at arbitrary resolution, loss of curves unless refitted
caching without knowing repeatability of the geometry makes little sense
FDM G-code
Here some early G-code for FDM 3D printer using PyImplicit tool tracking the implicit surface as 2D contour:
The implicit surfaces only define the surface, either:
inside vs outside – a solid; or
certain thickness of such surface
In order to create watertight meshs the volume needs to be limited with a boundary box, and Marching Cube is performed from outside to get proper mesh to post-process afterwards.
Now you may wonder, what’s the fuss with all those forms, why doing this complicate implicit form, why not just create a few forms as meshs right away and repeat them orderly – well, here it comes why:
Frequency or Scale Gradients
Schwarz P scale=8..1 solidSchwarz P scale=8..1 thickness=0.2Schwarz D scale=8..1 solidSchwarz D scale=8..1 thickness=0.2Neovius scale=8..1 solidNeovius scale=8..1 thickness=0.8
Changing the frequency or scale s0 and s1 can be achieved by:
znorm = (z-zmin) / (zmax-zmin) s =(1-znorm)*s0 + znorm*s1 or s = lerp(s0, s1, znorm) f = surface(x*s, y*s, z*s)
This shows the power of generative geometries, we simply can define the scale or frequency of a geometry at any point, given we transit within reason and not too sharply to cause discontinuty.
Thickness Gardients
Schwarz P thickness: 2 .. 0.1Schwarz D thickness: 1.2 .. 0.2
Alike changing thickness:
znorm = (z-zmin) / (zmax-zmin) t = lerp(t0, t1, znorm) f = abs(surface(x,y,z)) – t
Form Gradients
Transit vertically from Schwarz D to Schwarz P (solid)Transit vertically from Schwarz D to Schwarz P (thickness=0.2)
What looks very complex is done quite simply with:
This is quite powerful property, to be able to morph from one implicit form to another with such a simple formula.
Contineous Transitions:
Schwarz D – Schwarz P
Schwarz D – Neovius
Schwarz P – Neovius
thickness: IWP Skeletal – Schwarz P
thickness: IWP Skeletal – Schwarz D
Discontinueous Transitions:
IWP Skeletal – P Skeletal
IWP Skeletal – Neovius
solid: IWP Skeletal – Schwarz P
solid: IWP Skeletal – Schwarz D
Combining Implicit Surfaces
Additions
Algebraic addition has the effect of apply one geometry within another, alike recursion:
Schwarz P 4f + Schwarz D 4fSchwarz P 1f + Schwarz D 4f
Multiplications
Algebraic multiplication has the effect of clipping, or geometrical intersection:
Schwarz P 4f x Schwarz D 4fSchwarz P 4f x Schwarz D 1f
Mapping Implicit Surfaces
One can map the coordinates, and create a cylindrical gyroid, where former X & Y become distance and rotation angle, and Z remains as is, and so spherical projection is possible as well, or even feed coordinates through implicit formula itself:
Next blog-post(s) I will go into further details utilizing TPMS in Additive Manufacturing (AM) like FDM/FFF, SLA, MSLA, SLS, MJF or SLM – each one of them have unique features and limitation for using those Parametric Generative Infill Geometries.
Appendix: Visualization
In case you wondered of the different styled visualization through this blog-post, let me show you the different approaches to discretize implicit defined surfaces.
Voxels
The code is rather simple with OpenSCAD yet rather slow: either skin is true or false, and delta determines the thickness of the skin if enable:
t = 1;
r = 20*t;
st = 1/2;
delta = 0.2;
function schwarz_p(x,y,z,s=1) = cos(x*s) + cos(y*s) + cos(z*s);
skin = true;
for(x=[-r:st:r])
for(y=[-r:st:r])
for(z=[-r:st:r]) {
f = schwarz_p(x,y,z,360/20/2);
if(skin && abs(f)<delta) // -- skin only
translate([x,y,z]) cube(st);
else if(!skin && f<delta) // -- inside/outside
translate([x,y,z]) cube(st);
}
Following experiments were done with Spirula/Implicit3 within the browser, the implicit formulas are rendered in realtime at 100-500 fps using OpenGL’s GLSL (GL Shader Language):
One has to clip the formulas with a cube in order to have a limited set, otherwise you get a full screen looking at infinite X, Y & Z, here Schwarz P:
Spirula/Implict3 realtime rendered Schwarz P TPMS in the browser
Meshs with Marching Cube
In order to create a mesh, I developed PyImplicit which utilizes Numpy library to calculate the implicit formula fast, and then run a Marching Cube algorithm over the result in order to get a discrete mesh like STL, OBJ, or 3MF to process further for 3D printing.
Foreground: 1st row: 90mm cube clipped of frequency gradients on Schwarz D, Schwarz P*, surface gradient between Schwarz D to Schwarz P (top) at certain thickness or solid, 2nd row: 2x IWP skeletal 90mm cubes at different frequency; Background: various 30/40mm cube clipped Triply Periodic Minimal Surfaces
*) some of my larger prints I attach RFID tags, e.g. as on top of the variable frequency Schwarz P print, which I store the print UID from my Prynt3r job which logs all my prints with all settings and webcam snapshots. In future blog-post I will illustrate my NFC/RFID setup.
And Polyviuw is a small mesh viewer using Polyscope Python as backend to display it as mesh:
Polyviuw (0.0.8)Polyviuw (0.0.7)
It is easy to create huge files when exporting an implicit generative infill geometry and one ends up with a 700MB binary STL file, which becomes hard to view at least on my system. To handle complex outer forms, with complex inner geometries I estimate reaching multiple gigabytes large files – let’s see.
References
3D-Meier.de: Juergen Meier’s excellent write-up on Triply Periodic Minimal Surfaces (german only) with formulas & references
Commercial Software:
nTopology.com: outer and inner geometry incl. simulation
GeoDict.com: digital material development, deep dive into designing interior geometries
Spherene.ch: Adaptive Density Minimal Surfaces (ADMS) software framework, startup