In meiner (Minecraft-like) 3D-Voxel-Welt möchte ich die Formen glätten, um eine natürlichere Optik zu erhalten. Schauen wir uns zuerst dieses Beispiel in 2D an.
Links ist, wie die Welt ohne Glättung aussieht. Die Geländedaten sind binär und jedes Voxel wird als Würfel in Einheitsgröße gerendert.
In der Mitte sieht man eine naive kreisförmige Glättung. Es werden nur die vier direkt benachbarten Blöcke berücksichtigt. Es sieht immer noch nicht sehr natürlich aus. Außerdem möchte ich flache 45-Grad-Pisten haben.
Auf der rechten Seite sehen Sie einen Glättungsalgorithmus, den ich entwickelt habe. Es berücksichtigt die acht direkten und diagonalen Nachbarn, um die Form eines Blocks zu erhalten. Ich habe den C ++ - Code online. Hier ist der Code, der mit den Kontrollpunkten kommt, dass die Bezier-Kurve gezeichnet wird.
%Vor%Dies ist jedoch immer noch in 2D. Wie übersetzt man diesen Algorithmus in drei Dimensionen?
Sie sollten sich wahrscheinlich den Algorithmus für marschierende Würfel ansehen und von dort aus arbeiten. Sie können die Glätte des resultierenden Blobs leicht kontrollieren:
Um das Aussehen / die Glätte zu ändern, ändern Sie die Dichtefunktion und die Schwelle des Marching-Cubes-Algorithmus. Eine mögliche Erweiterung zu marschierenden Cubes, um glattere Meshes zu erzeugen, ist die folgende Idee: Stellen Sie sich vor, dass Sie zwei Punkte an einer Kante eines Würfels treffen, wobei ein Punkt innerhalb Ihres Volumens (über einem Schwellenwert) und der andere außerhalb (unter dem Schwellenwert) liegt. In diesem Fall legen viele Marsch-Cubes-Algorithmen die Grenze genau in der Mitte der Kante an. Man kann den exakten Begrenzungspunkt berechnen - das beseitigt Aliasing.
Ich würde auch empfehlen, dass Sie danach einen Netzvereinfachungsalgorithmus ausführen. Die Verwendung von Marching Cubes führt zu Netzen mit vielen unnötigen Dreiecken.
Als Alternative zu meiner obigen Antwort: Sie könnten auch NURBS oder einen beliebigen Algorithmus für Unterteilungsflächen . Insbesondere die Unterteilungsflächenalgorithmen sind auf glatte Netze spezialisiert. Je nach Algorithmus und Konfiguration erhalten Sie mit
glattere Versionen Ihres ursprünglichen Meshesund so weiter.