Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.04.2014, 12:59

Dual Contouring Probleme

Hallo,
ich habe Dual Contouring (vorerst) in C# in Unity mit Hilfe diese Artikels implementiert. Zur Berechnung der Vertexe verwende ich die "Methode der kleinsten Quadrate".
Ich hab ein paar Tests mit unterschiedlichen Intersection-Punkten und Normals durchgeführt. Bei 3 Intersections und Normals auf der X-, Y- und Z-Achse scheint alles perfekt zu laufen.




Wenn ich aber mehr Intersection-Punkte habe, z.B. 4, dann läuft es nicht mehr wie erwartet:

Wenn alle Normals in genau die selbe Richtung zeigen, dann erhalte ich bei der Berechnung Matrizen, deren Determinante 0 ist, jedoch muss ich durch diese Determinante teilen. Somit erhalte ich auch keinen Punkt für den Vertex, weil man nicht durch 0 teilen kann.

Wenn ich die Normals aber ein kleines bisschen anders ausrichte, dann kann ich zwar den Vertex berechnen, aber dieser befindet sich dann in den aller meisten Fällen weit außerhalb des Würfels.



Kann mir jemand sagen, ob und was ich falsch gemacht habe?

Gruß
MazzMan
Hi

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MazzMan« (23.04.2014, 10:25)


2

22.04.2014, 13:30

Hilfe?
Hi

Tobiking

1x Rätselkönig

  • Private Nachricht senden

3

22.04.2014, 16:02

Das Problem + Lösungsansätze ist in dem von dir verlinkten Artikel bereits erläutert ;)

Zitat


In flat regions of the surface the normals will be nearly if not exactly the same, and the set of equations will be (nearly) singular.

One way to handle this is to add special-case code to check that the system is not singular, and if it is, solve a different system in 1D for the offset of the dual vertex in the normal direction that minimizes the fitting error. It is also possible to add a regularization term with low weight that prevents the system from being singular, but does not affect the results too badly in the event the system is well conditioned. I have done this by adding a (small) multiple of identity to the normal equations coefficient matrix, and the same small multiple of the original dual vertex position (i.e. the cell centroid) to the right hand side.

4

23.04.2014, 10:25

Oh, stimmt... Danke für den Hinweis :)
Ich habe diesen Teil gar nicht mehr beachtet.
Hi

SlinDev

Treue Seele

Beiträge: 142

Wohnort: Lübeck

Beruf: Programmierer

  • Private Nachricht senden

5

23.04.2014, 10:35

Ich hoffe mal, dass die Antwort dein Problem löst, von daher eine ganz andere Frage zum Thema:
Wenn du die Vertices hast, wie bestimmst du dann die face indices?
Denn ich könnte zwar die Indices für alle verschiedenen Kombinationen bestimmen, aber dann habe ich wieder eine etwas unschöne Lookup Tabelle. Ich versuche mich nämlich gerade an Constrained Elastic Surface Nets und verzweifel an dem Problem etwas. Das Netz selbst ist einfach, aber um da dann nur Oberflächen drin zu bestimmen fehlt mir irgendwie noch die richtige Idee.

6

23.04.2014, 14:46

Das ist für mich ein bisschen schwer zu erklären, aber ich versuche es mal ^^.

Ich schaue mir jeden Voxel an, der am Rand der "Voxel-Wolke" liegt. Diesen Voxel bestimme ich sozusagen als Zentrum eines Würfels, der aus 8 Zellen (in 2d sind es 4 Zellen) besteht.
Dann nehme ich die Voxel aus den Zellen und verbinde sie zu einem Viereck. Dann rücke ich den Würfel um einen Voxel weiter und mache wieder das Selbe. Hier ein Bild, welches dies in 2d verdeutlichen soll, hoffe du kannst damit was anfangen. Wenn etwas unklar sein sollte, helfe ich gerne ;)



Achja, das Problem, welches ich hatte als die Normals alle gleich waren, habe ich nun gelöst. Das andere Problem ist aber immer noch da. Bei 4 oder mehr Intersection-Punkten befindet sich der Voxel in den meisten fällen weit außerhalb der Zelle/des Würfels.
Hi

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MazzMan« (23.04.2014, 14:57)


SlinDev

Treue Seele

Beiträge: 142

Wohnort: Lübeck

Beruf: Programmierer

  • Private Nachricht senden

7

23.04.2014, 15:02

Danke für die Antwort, aber das ist der Teil den ich schon noch selbst hinbekommen habe. Ich habe aber vorhin noch etwas anders gesucht und hoffentlich endlich eine Lösung für mein Problem gefunden: http://www.inf.ufrgs.br/~comba/papers/th…ss-leonardo.pdf Auf Seite 46 sind alle Fälle die ich betrachten muss (und noch die Komplemente), damit ist es jetzt hoffentlich ziemlich einfach eine Tabelle aufzustellen die auch noch übersichtlich ist.

8

23.04.2014, 15:13

Ich verstehe das gerade nicht so richtig. Kann man das nicht auch ohne einen Lookup Tabelle machen?
Hi

SlinDev

Treue Seele

Beiträge: 142

Wohnort: Lübeck

Beruf: Programmierer

  • Private Nachricht senden

9

23.04.2014, 16:07

Ich habe jedenfalls keine Idee wie.
Man kann wie der von dir verlinkte Blogpost beschreibt mit Dual Contouring oder entsprechenden anderen Techniken ganz gut Punkte auf (oder zumindest nah) der Oberfläche der Voxeldaten bestimmen. Was man dann aber hat ist ein Haufen Punkte aus denen man noch ein Mesh bauen muss. Die Punkte kann man ziemlich gut so wie sie sind als Vertices nutzen und die Faces beschreibt man normalerweise mit Indizes auf die Vertices die dann das Face bilden. Diese Indizes zu bestimmen ist aber nicht ganz so trivial wie einfach immer drei nachfolgende zusammen zu packen oder so sondern erfordert ein paar Fallunterscheidungen, da es sonst bei mehr als nur Würfeln ziemlich schnell falsch ist.
Man kann natürlich auch einfach ein paar ifs bauen, aber so eine Lookup Tabelle ist etwas eleganter und sollte auch schneller sein. Ich habe jedenfalls bisher keinen Weg um so eine Fallunterscheidung herum gefunden.

10

23.04.2014, 21:22

Du meinst also, dass ich mit meiner Methode Probleme bekommen werde?
Hi

Werbeanzeige