In meinem Projekt erstelle ich ein System zum Verformen eines sehr detaillierten Netzes (Kleidung), so dass es zu einem konvexen Netz passt. Dazu benutze ich Tiefenkarten des Gegenstands und des Rumpfes, um zu bestimmen, an welchem Punkt im Weltraum die Abweichung auftritt und in welchem Ausmaß.
Das einfache Transformieren aller verdeckten Scheitelpunkte in die durch den "Rumpf" definierten Tiefen ist ziemlich effektiv und hat eine gute Leistung, leidet jedoch unter dem Problem, dass die Merkmale des Netzes nicht erhalten bleiben, und erfordert ein umfangreiches Keulen, um Fehlalarme zu vermeiden.
Ich möchte stattdessen aus der Tiefenabweichungskarte eine Reihe einfacher 'Deformierer' generieren, die * alle Eckpunkte des deformierten Netzes nach außen (im Weltraum) "drücken". Auf diese Weise bleiben alle Merkmale des Netzes erhalten, und es sind keine komplexen Heuristiken erforderlich, um unangemessene Scheitelpunkte auszusortieren.
Ich bin mir jedoch nicht sicher, wie ich dieses Deformer-Set erzeugen soll. Ich stelle mir so etwas wie einen Algorithmus vor, der versucht, eine sphärische Oberfläche an jeden Fleck zusammenhängender Abweichungen innerhalb eines bestimmten Bereichs anzupassen, weiß aber nicht, wo ich damit anfangen soll.
Kann jemand einen geeigneten Filter oder Algorithmus zur Erzeugung von Deformern vorschlagen? Oder anders ausgedrückt: Komprimieren einer Tiefenkarte?
)
Bearbeiten: Hier ist ein Bild / Diagramm zu Recht vorgeschlagen, das zeigt, was ich erreichen möchte.
Außerdem sollte ich sagen, dass ich, seit diese Frage gestellt wurde, viel mehr an diesem Problem gearbeitet habe, und obwohl ich nie gelöst habe, wie ich an die Deformierer komme, habe ich schließlich entschieden, dass Tiefenkarten dafür ungeeignet sind als:
- Wenn das deformierte Netz nicht vollständig ist, können Texel in der Karte angezeigt werden , die sich auf der anderen Seite des konvexen Netzes befinden sollen (da sie nicht durch diejenigen verdeckt werden, die sich auf der richtigen Seite näher an der Kamera befinden).
- Der Wirkungsgrad war nicht so hoch wie ich gehofft hatte, da pro Verformung 6 Karten benötigt wurden.
Nicht dass diese unlösbar wären, aber die andere Lösung, die Kollisionstests in Kerneln beinhaltete, die auf der GPU ausgeführt wurden, führte zu qualitativ besseren Ergebnissen und war viel einfacher, auch wenn sie möglicherweise nicht so schnell ist.
Ich denke immer noch, dass dieses Problem interessant ist und an Antworten interessiert wäre, da ich sicher bin, dass es Situationen gibt, in denen es bevorzugt wäre.
Antworten:
Sie haben eine Tiefenkarte, von der ich annehme, dass sie einfach der Abstand zwischen dem konvexen Netz A und dem neutral deformierten Netz B ist, und Sie haben Oberflächennormalen von Netz A.
Was Sie vermissen, sind Gewichte (oder Gruppierungen), wie sich jeder Vert auf Netz B auf seine Nachbarn auswirkt. Wenn der zentrale Vert beispielsweise verschoben wird, sollte er auch seine Nachbar-Verts um einen bestimmten Betrag (Prozentsatz) entlangziehen, wenn sie sich in derselben Gruppe befinden.
Wenn sich eine Gruppe von Verts zu 100% gegenseitig beeinflusst, werden sie alle um den weitesten Betrag aus Ihrer Tiefenkarte herausgedrückt, als wären sie alle Teil einer nicht biegbaren Stahlstruktur, die sich als Einheit bewegt. Stellen Sie diese Struktur auf 50% ein kann eher wie dicke Gummiplatten und 10% wie formschlüssige Plastikfolie wirken, da jeder Vert seinen Nachbarn kaum beeinflusst (was Sie jetzt haben.
Offensichtlich gibt es eine Mischung und Verschmelzung von Werten. Wie @Gajoo sagte: "Was ist falsch daran, die ganze Form zu bewegen?"
quelle