Zwei Oberflächen-Rundungen kombinieren
Verfasst: 28.01.2026, 11:10
Moin,
mal wieder ein Problem bei meinem Surface-Generator, an dem ich mir die Zähne ausbeiße. Ich kann Kanten runden, indem ich die Normale und eine Versatztiefe abhängig zur Nähe des Randes überblende:
Im Bild nur eine Half Edge, die an der Stelle halt bis 45° krümmt und erwartet, dass das andere Element sie dort deterministisch trifft. Ich berechne für jede Kante die Halbnormale plump als Mischung der beiden Quad-Normalen, und einen daraus resultierenden Versatz. Dadurch hebt sich die Oberfläche an, je näher man zur Kante kommt, und die Krümmung ergibt sich. Das klappt.
Das Problem sind jetzt die Ecken. Für jede Ecke berechne die Summennormale aller anliegenden Quads, und ebenso einen durchschnittlichen Versatz. Das Problem ist jetzt die Oberfläche nahe einer Ecke, wo sich die Einflüsse zweier Kanten überlagen. Ich versuche das auch mal zu zeichnen.
Der Corner Case:
Das soll ein Würfel sein. Von links nach rechts die orange Kante gibt eine (in diesem Beispiel 45°) Krümmung vor. Innerhalb des Krümmungsradius der Ecke wird die Krümmung noch zusätzlich zur Ecke abgeknickt. Das klappt, die Punkte genau auf der Kante verlaufen exakt wie gewollt.
Von schräg oben zur Ecke hin die blaue Kante hat ebenso 45° Krümmung und knickt kurz vor der Ecke zusätzlich in die Eck-Krümmung ab. Auch das klappt.
Das Problem sind die Punkte in der Nähe, zum Beispiel das kleine Kreuz. Da hat man so ein bissl Einfluss der Orange-Kante und ein bissl Einfluss der Blau-Kante. Eine Kante für sich allein hat da halt nur so einen halben Versatz. Die andere Kante hat da auch so einen halben Versatz. Mische ich beide Versätze, kommt da halt so ein halber Versatz zustande. Aber nach Pythagoras müsste dort halt ein bisschen mehr als halber Versatz wirken.
Das Ergebnis ist, dass es mir in diesen Übergangsbereichen nahe Ecken die Oberfläche anhebt (nicht genug senkt).
Der Edge Case:
Besser sichtbar wird es bei durchgehenden Kanten. Hier haben wir zwei Würfel aneinander, die orange Kante würde theoretisch glatt durchgehen. Aber da ist noch die blaue Kante. Ich habe deren Krümmung mal anzudeuten versucht: hinten gar keine Krümmung, vorne in der Nähe zur Ecke dann abknickend zu ner 45°-Krümmung. Mathematisch sauber, exakt auf der Kante passt das auch.
Aber wieder sind die Punkte in der Umgebung der Ecke das eigentliche Problem. Da zaubert die orange Kante ne saubere 45°-Krümmung hin. Aber dann wird der Einfluss der blauben Kante mit reingerechnet, und die hat halt Null Krümmung. Mit dem Ergebnis, dass es mir wieder den Versatz "verwässert", also zu wenig Versatz liefert. Da hebt sich dann wieder die Oberfläche an, und das sieht echt komisch aus:
Hat jemand ne Idee? Wie könnte ich die Wirkung zweier Kanten verrechnen, so dass sich überall nahe der Ecken der korrekte Versatz ergibt? Oder gibt's irgendne andere Art, wie ich Krümmung darstellen könnte, so dass ich sie sinnvoll interpolieren könnte?
Die KI meint, es gibt kein richtiges Maß für "Curvature". Man würde die Oberflächennormale interpolieren. Das habe ich auch schon gemacht, und für Kanten funktioniert das super. Bei Ecken aber versagt es schnell. Denn um den Versatz aus einer Normale zu berechnen, muss man die Normale gegen die unausgelenkte Flächennormale rechnen. Und das geht an einfachen Ecken gut, wo die Normale exakt in der Mitte zwischen allen Flächennormalen liegt. An ner komplexen Ecke wie im Screenshot rechts unten ergibt sich je nach Fläche ein anderer Versatz an der Ecke, und es reisst die Flächen auseinander.
mal wieder ein Problem bei meinem Surface-Generator, an dem ich mir die Zähne ausbeiße. Ich kann Kanten runden, indem ich die Normale und eine Versatztiefe abhängig zur Nähe des Randes überblende:
Im Bild nur eine Half Edge, die an der Stelle halt bis 45° krümmt und erwartet, dass das andere Element sie dort deterministisch trifft. Ich berechne für jede Kante die Halbnormale plump als Mischung der beiden Quad-Normalen, und einen daraus resultierenden Versatz. Dadurch hebt sich die Oberfläche an, je näher man zur Kante kommt, und die Krümmung ergibt sich. Das klappt.
Das Problem sind jetzt die Ecken. Für jede Ecke berechne die Summennormale aller anliegenden Quads, und ebenso einen durchschnittlichen Versatz. Das Problem ist jetzt die Oberfläche nahe einer Ecke, wo sich die Einflüsse zweier Kanten überlagen. Ich versuche das auch mal zu zeichnen.
Der Corner Case:
Das soll ein Würfel sein. Von links nach rechts die orange Kante gibt eine (in diesem Beispiel 45°) Krümmung vor. Innerhalb des Krümmungsradius der Ecke wird die Krümmung noch zusätzlich zur Ecke abgeknickt. Das klappt, die Punkte genau auf der Kante verlaufen exakt wie gewollt.
Von schräg oben zur Ecke hin die blaue Kante hat ebenso 45° Krümmung und knickt kurz vor der Ecke zusätzlich in die Eck-Krümmung ab. Auch das klappt.
Das Problem sind die Punkte in der Nähe, zum Beispiel das kleine Kreuz. Da hat man so ein bissl Einfluss der Orange-Kante und ein bissl Einfluss der Blau-Kante. Eine Kante für sich allein hat da halt nur so einen halben Versatz. Die andere Kante hat da auch so einen halben Versatz. Mische ich beide Versätze, kommt da halt so ein halber Versatz zustande. Aber nach Pythagoras müsste dort halt ein bisschen mehr als halber Versatz wirken.
Das Ergebnis ist, dass es mir in diesen Übergangsbereichen nahe Ecken die Oberfläche anhebt (nicht genug senkt).
Der Edge Case:
Besser sichtbar wird es bei durchgehenden Kanten. Hier haben wir zwei Würfel aneinander, die orange Kante würde theoretisch glatt durchgehen. Aber da ist noch die blaue Kante. Ich habe deren Krümmung mal anzudeuten versucht: hinten gar keine Krümmung, vorne in der Nähe zur Ecke dann abknickend zu ner 45°-Krümmung. Mathematisch sauber, exakt auf der Kante passt das auch.
Aber wieder sind die Punkte in der Umgebung der Ecke das eigentliche Problem. Da zaubert die orange Kante ne saubere 45°-Krümmung hin. Aber dann wird der Einfluss der blauben Kante mit reingerechnet, und die hat halt Null Krümmung. Mit dem Ergebnis, dass es mir wieder den Versatz "verwässert", also zu wenig Versatz liefert. Da hebt sich dann wieder die Oberfläche an, und das sieht echt komisch aus:
Hat jemand ne Idee? Wie könnte ich die Wirkung zweier Kanten verrechnen, so dass sich überall nahe der Ecken der korrekte Versatz ergibt? Oder gibt's irgendne andere Art, wie ich Krümmung darstellen könnte, so dass ich sie sinnvoll interpolieren könnte?
Die KI meint, es gibt kein richtiges Maß für "Curvature". Man würde die Oberflächennormale interpolieren. Das habe ich auch schon gemacht, und für Kanten funktioniert das super. Bei Ecken aber versagt es schnell. Denn um den Versatz aus einer Normale zu berechnen, muss man die Normale gegen die unausgelenkte Flächennormale rechnen. Und das geht an einfachen Ecken gut, wo die Normale exakt in der Mitte zwischen allen Flächennormalen liegt. An ner komplexen Ecke wie im Screenshot rechts unten ergibt sich je nach Fläche ein anderer Versatz an der Ecke, und es reisst die Flächen auseinander.