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.