Mesh Generation/de

Netze sind eine Möglichkeit, 3D-Formen als eine Reihe von Grundflächen zu modellieren, die durch Kanten und Punkte begrenzt sind. In der Regel handelt es sich dabei nicht um die Standarddarstellung von Formen in 3D-CAD-Programmen, da sie keine exakte Geometrie in Form von parametrischen Kurven und Flächen modellieren kann (solche Darstellungen werden als Boundary representation, B-rep, oder Begrenzungsflächenmodell bezeichnet). Dennoch hat ihre Einfachheit (zur Darstellung einer Form werden nur Punkte, Liniensegmente und einfache Flächen verwendet) Netze zur bevorzugten Darstellung für viele Anwendungen wie Rendering, Slicing für den 3D-Druck usw. gemacht. Wir haben bewusst die Verwendung von Netzen für FEM-Analysen (Finite-Elemente-Methode) nicht erwähnt, da Netze in diesem Fall nicht mehr wegen ihrer Einfachheit verwendet werden, sondern wegen ihrer Fähigkeit, Informationen durch Körper zu transportieren und zu verbreiten.

Die meisten parametrischen CAD-Modellierungsprogramme bieten Möglichkeiten zur Netzgenerierung und -bearbeitung, und FreeCAD bildet da keine Ausnahme. FreeCAD beherbergt eine Arbeitsbereich, spezialisiert auf die Arbeit mit Netzen das viele nützliche Werkzeuge und Funktionen bietet, und wir werden uns auf das konzentrieren, mit dem sich aus FreeCAD-Formen Netze generieren lassen: Mesh NetzAusPartForm.

Das Werkzeug ermöglicht die Verwendung von vier verschiedenen Vernetzungsalgorithmen: Standard, GMSH, NetGen und Mefisto. Wir konzentrieren uns auf den ersten, da die drei anderen für FEM-Analyse-Netze vorgesehen sind und nicht intern verwendet werden.

Der Standard-Algorithmus

Das Ziel dieser Seite ist es, einen Einblick in die Funktionsweise und Einrichtung von Netzwerken aus einer übergeordneten Perspektive zu geben, ohne dabei auf die komplexen Vorgänge bei der Netzgenerierung einzugehen. Der Standardalgorithmus steht für den Netzalgorithmus von OCCT, dem geometrischen Modellierungskern von FreeCAD. Dieser Algorithmus generiert unstrukturierte Oberflächennetze und funktioniert im Wesentlichen in zwei Schritten:

  1. Die Kanten der Formen werden zunächst diskretisiert, d. h. Kurven werden in Polylinien umgewandelt (geschlossene Konturen werden somit zu Polygonen).
  2. Anschließend werden die Oberflächen tesselliert, d. h. sie werden mit geometrischen Formen bedeckt, in unserem Fall mit Dreiecken.

Das Erzeugen eines Netzes aus einer Form ist ein komplexer Vorgang, der versteckte Aktionen und Parameter beinhaltet, die zu Verhaltensweisen führen können, die nicht trivial zu verstehen sind, insbesondere hinsichtlich der Einstellung der drei Parameter, auf die wir Zugriff haben. Schauen wir uns ihren Einfluss anhand praktischer Beispiele an, um besser zu verstehen, wie man gute Einstellungen definiert und schließlich gute Netze erzeugt.

Winkelabweichung

Die Winkelabweichung wird hauptsächlich beim Schritt der Kantendiskretisierung verwendet. Dieser Parameter trägt dazu bei, die Glätte von Polylinien, die Kurven darstellen, sicherzustellen, indem er scharfe Winkel zwischen aufeinanderfolgenden Liniensegmenten verhindert. Die Kantendiskretisierung hat einen großen Einfluss auf die gesamte Vernetzung der Formen, da die in diesem Schritt erzeugten Punkte (am Übergang zwischen Liniensegmenten) als Basisknoten für die Konstruktion von Dreiecken dienen, die wiederum zur Tessellierung der durch die Kanten begrenzten Flächen verwendet werden.

Winkelabweichung und lineare Abweichung gemäß Darstellung in der OCCT-Dokumentation
Winkelabweichung und lineare Abweichung gemäß Darstellung in der OCCT-Dokumentation

Dieser Parameterwert ist relativ zur Größe der zu vernetzten Form: Unabhängig von der Größe der Form kann ein hoher Winkelwert zu scharfen Übergängen zwischen aufeinanderfolgenden Liniensegmenten führen, während ein niedriger Wert für glattere Übergänge sorgt.

Um das Verhalten des Standardalgorithmus hinsichtlich der Winkelabweichung zu veranschaulichen, variieren wir diesen Parameter beim Vernetzen einer einfachen kreisförmigen Oberfläche. Da auch der Oberflächenabweichungsparameter eine Rolle in diesem Prozess spielt, wurde er auf einen Wert gesetzt, der hoch genug ist, um jegliche Beeinträchtigung unserer Demonstration zu vermeiden: Der Durchmesser unseres Kreises beträgt 50 mm, ebenso wie die Oberflächenabweichung.

Top: Original BRep circular face (blue) delimited by outer circle (red)

Unten: Detail oben links

Oberflächenabweichung: 50mm

Winkelabweichung: 90°

Oberflächenabweichung: 50 mm

Winkelabweichung: 30°

Oberflächenabweichung: 50 mm

Winkelabweichung: 5°

Die Reduzierung der Winkelabweichung hat einen erheblichen Einfluss auf das Erscheinungsbild des Netzes, da sie scharfe Winkel bei der Darstellung der Gesichtskontur begrenzt. Sie ermöglicht zwar eine höhere Genauigkeit des Netzes im Verhältnis zur ursprünglichen Form, liefert jedoch keinen absoluten Wert für die maximal zulässige Abweichung zwischen beiden.

Oberflächenabweichung

To do so, surface deviation is a better pick. It allows specifying the maximum deviation the mesh should be present compared to the original shape. Let’s get back to our circular surface to understand its influence.

Surface deviation: 50mm

Winkelabweichung: 90°

Oberflächenabweichung: 10 mm

Winkelabweichung: 90°

Oberflächenabweichung: 1 mm

Winkelabweichung: 90°

Oberflächenabweichung: 0,1 mm

Winkelabweichung: 90°

Der Einfluss der Oberflächenabweichung ist in unserem Beispiel aufgrund seiner absoluten Natur deutlich sichtbar und leicht verständlich. Er ist besonders nahe am Rand sichtbar: Hohe Werte (50 mm – 10 mm) haben keine Auswirkungen, während viele Dreiecke hinzugefügt werden, um die Toleranz von 0,1 mm sicherzustellen.

Kombinierter Einfluss von Winkel- und Oberflächenabweichung

Decreasing either angular deviation or surface deviation has a similar impact on the mesh. This redundancy can lead to undesired behavior when bad parameter combinations are used: the following example shows the generation of unnecessary, oddly shaped triangles when both angular and surface deviation are set to low values.

Surface deviation: 10mm

Winkelabweichung: 30°

Oberflächenabweichung: 3 mm

Winkelabweichung: 7°

Oberflächenabweichung: 1 mm

Winkelabweichung: 5°

Oberflächenabweichung: 0,1 mm

Winkelabweichung: 1°

Erste Synthese

Die obigen Beispiele zeigen, dass es mithilfe von Winkel- und Oberflächenabweichung möglich ist, Netze innerhalb der geforderten Toleranz der ursprünglichen Form zu erhalten und die gewünschte Glätte bei der Darstellung von Kurven zu erreichen. Sie zeigen auch, wie wichtig eine angemessene Einstellung ist und dass die einfache Einstellung niedriger Werte möglicherweise nicht zu den besten Netzen führt.

Der Teufel steckt im Detail

While our circular shape provided a good understanding of the influence of the parameters on mesh generation, it is unfortunately too simplistic compared to real-life meshing challenges. A common case is the presence of fine details on bigger shapes. Let’s add a detail to our circular shape: a smaller circular edge at the top.

BRep circular face (blue) with a circular detail at the top
BRep circular face (blue) with a circular detail at the top
Close view of the circular detail
Close view of the circular detail

Winkelabweichung /

Surface deviation

90° 30°
5mm
Nb of triangles 10 32 149
1mm
Nb of triangles 18 34 188
0.1mm
Nb of triangles 53 59 207

Winkelabweichung /

Surface deviation

90° 30°
5mm
Nb of triangles 10 32 149
1mm
Nb of triangles 18 34 188
0.1mm
Nb of triangles 53 59 207

Lowering angular deviation results in a rapid increase in fidelity between the mesh and the original shape. This is done at the expense of rapidly increasing the number of triangles. On the other hand, lowering the surface deviation allows generating meshes that just meet a requested tolerance, with as many triangles as needed, but the smoothness of the curve representation may be crude.

Again, one may note the redundancy between the respective influences of angular and surface deviation, and that some sort of convergence is achieved regarding mesh fidelity, even as more triangles are added, particularly when lowering angular deviation. This underlines once again that finding a good setting is better than simply choosing a low parameter value.

Beispiel für einen versteckten Parameter

High values of surface and angular deviations do not lead to the suppression of detail at the top of our shape during mesh modeling. This is an example of the effect of hidden operations and parameters within the meshing algorithms: particular types of edges, and circular edges, among others, have a lower limit of points for their polyline representation. In this case, the minimum of 4 points will result in at least three segments within the polyline. This can be highlighted by meshing a similar shape, but instead of a circular curve, a spline has been used to model the detail at the top. The minimal number of points then does not apply, and the detail is totally inhibited when high values of surface deviation are used.

Geometrical nature of the detail The shape The mesh A close view
Arc of circle
Spline curve

Zweite Synthese

Diese Beispiele, einschließlich Details innerhalb größerer Formen, die im realen Leben sehr häufig vorkommen, zeigen, dass die Anpassung der Diskretisierungsgenauigkeit an die Größe der zu vernetzten Objekte zu einem besseren Kompromiss zwischen Netzgenauigkeit und Komplexität führen kann. Manchmal kann dies sogar zwingend erforderlich sein, beispielsweise bei automatisierten Vernetzungsvorgängen, bei denen der Benutzer nicht eingreifen kann, um die Oberflächenabweichung basierend auf der Formgröße festzulegen.

Relative Oberflächenabweichung

A solution is to set the surface deviation as a function of the edge length, which is achieved using the relative surface deviation parameter. The principle is to scale the acceptable tolerance between the mesh and the original shape as a function of the shape's size. For instance, a value of 0.1 will lead to a surface deviation of 10cm on a 1m edge, and a 1m surface deviation on 10m edge. Let’s take a look on the results on our test shape.

Relative surface deviation parameters
Relative surface deviation parameters

Oberflächenabweichung (relativ)

& Angular deviation

The mesh A close view A closer view
0.1 - 30°
0.001 - 30°

The evolution of the surface deviation parameter (which is now a relative parameter, so the ‘mm’ unit when setting it in FreeCAD may be confusing) applies the same way to the discretization of both the long and short edges. The side effect of using the relative surface deviation is that it does not guarantee an absolute maximum deviation between the mesh and the original shape.

Oberflächen-Mosaikbildung

Our first thoughts focused on shapes and contours because they are the first entities to be discretized and have a significant influence on face meshing. Let’s dive a little bit more in surface tesselation using the standard algorithm. It applies Delaunay triangulation, using the Watson algorithm. Delaunay (from a Russian mathematician) triangulation is a way to generate points on a surface in a way that ensures triangles formed using the points will not intersect.

In addition, it optimizes triangle generation so that the angles are not too small, making them look well-shaped. That being said, as often, practical implementation to address real-world problems is complex and presents many challenges. OCCT meshing algorithms have been designed to mesh shapes generated with the BRep modeler, most often mechanical and engineering designs, which were the primary use cases the geometric modeler was initially developed for.

Thus, dedicated surface tesselation routines are used for the most common surface types in mechanical design, e.g., planar, cylindrical, conical, spherical, … to ensure performance and optimal tesselation. If the parameter settings affect all surface types, let’s examine their influence on B-spline surface tesselation to avoid biases introduced by predetermined tesselation strategies.

[[File:3D_orig_vignette.png none|alt=A BRep shape with BSpline surfaces|A BRep shape with BSpline surfaces]]

Winkelabweichung /

Surface deviation

90° 30°
5mm
Nb of triangles 196 666 9730
1mm
Nb of triangles 376 790 26128
0.1mm
Nb of triangles 3002 3262 36366

Die Schlussfolgerungen stimmen mit unseren Beobachtungen bei Flächen überein: Winkelabweichungen haben einen erheblichen Einfluss auf das Aussehen des Netzes, während Oberflächenabweichungen ein hohes Maß an Genauigkeit bei geringsten Kosten hinsichtlich der Komplexität des Netzes gewährleisten, jedoch sichtbare Facetten erzeugen. Somit muss ein Kompromiss zwischen der Qualität des Netzes hinsichtlich Genauigkeit und Glätte und der Größe des Netzes hinsichtlich der Anzahl der Dreiecke gefunden werden.

If you are curious about the impact of growing the number of triangles, you can have a feel by playing with the Minimum angular deflection parameter of your favorite software (Edit → Preferences → Part/Part Design → Shape view), which defines the fidelity of meshes used for visualization. A too-low value will lead to higher loading times and jerky manipulation of complex shapes.

Another way to perceive the impact of parameters is to transform our meshes into real objects by 3D printing. Resin printing (SLA) with a 0.05mm layer height will reveal some details.

Oberflächenabweichung &

Angular deviation

0.1mm - 90° 5mm - 5° 0.1mm - 5°
Surface picture
Surface picture
Nb of triangles 3002 9730 36366

These close-up pictures reveal that focusing only on surface deviation, even at low values, may lead to visible artifacts on the part's surface (as the zoom level is high, meshing impacts are not to be confused with printing layers, which are also visible as iso-lines on the pictures). It is difficult to differentiate the 9730-triangle mesh from the 36366-triangle one in terms of visual quality. Then, if it is the criteria, the lighter mesh (487ko vs 1.8Mo) should be preferred, as the other one provides assurance that the 0.1mm tolerance is respected everywhere in the part.

Letzte Synthese

As a synthesis, meshing algorithms are complex by nature, and angular deviation and surface deviation are working together in an intricate way that is not trivial to understand. One could be tempted to lower these parameters so the mesh fits seamlessly to the original BRep shape. This would lead to meshes made of many triangles, which will take time to be generated, to be processed in further applications, and will produce heavy files.

Arbeitsabläufe zur Parametereinrichtung

From what we saw, a typical workflow to set the parameters is to first set surface deviation as a function of required fidelity between the mesh and the original shape, if any. Then, the angular deviation parameter can be used to adjust the smoothness of discretized surfaces to the required level, for visual or touch aspect, for instance. Another approach is to use a low enough angular deviation in order to achieve the desired smoothness, with no guarantee to fulfill an absolute geometric tolerance, and often at the cost of complex meshes. In those cases where no tolerance on fidelity is needed, another option is to use the relative surface deviation, which will adapt the size of the mesh elements to the original shape and the size of the details.

Festlegen der Netzkonfiguration als FreeCAD-Standard

As explained in the Preferences section of the function wiki, you can define your preferred surface deviation, angular deviation and relative surface deviation values as default, so you can mesh most of your shapes without even thinking about it!

Standardeinstellungen für Standardalgorithmusparameter
Standardeinstellungen für Standardalgorithmusparameter

Die Netze exportieren

Sobald die Netze mit den geeigneten Parametern generiert wurden, kann man sie schließlich mit Netz Exportieren in eine Datei im Format der Wahl aus den verschiedenen Optionen, die FreeCAD bietet exportieren!