Und die Lösung, die dir vermutlich vorschwebte, nennt sich Filterung, und ist von einem Blur-Filter wie bei Bitmaps kaum zu unterscheiden
. Zu Blur-Filtern finden sich wohl einige Quellen in der
DP (Blur, Smooth(ing), Weichzeichnen/-er, Gauss (Filter) - alles passende Suchbegriffe), und diese wendest du dann statt auf Pixel eines Bitmaps, auf die Y-Koordinaten deiner Vertices an.
Edit: Aber aufpassen! Wenn dein Mesh von oben gesehen nicht ein regelmäßiges Gitter ist, musst du X und Z mit beachten für die Faktoren, wodurch ein paar schöne Optimierungen durch LUTs weg fallen.
Das wäre, besonders wenn man einen Gauss-Filter nimmt, der übliche Weg um ein Mesh zu "smoothen", ohne etwas am Shading zu machen, und wobei die Topologie völlig unangetastet bleibt (vorausgesetzt, man betrachtet die Länge der Verbindungen in einem Netz nicht der Topologie zugehörig
)
Hubis Vorschläge sind nicht falsch, aber
1) Setzt hier an der falschen Stelle an, da über diesen Ansatz, wie er schrieb, die Geometrie unangetastet bleibt, und du hast definitiv ein Problem in der Geometrie. Weitet man die Idee aber aus, so lässt sich das o.g. Filtering dank Adjacency-Infos tatsächlich im Shader machen, allerdings nur im Geometry-Shader. (Und mit viel Trickserei sogar noch im Vertex-Shader, aber auch nur unter OGL, und auch nur wenn im VS Texture-Reads zugelassen sind - was nicht gerade so der Standard ist. Oooooder wenn man Unmengen an TexCoords dazu dichtet, die die Adjacency-Infos tragen - auch bitter
)
2) Fällt unter Tesselation
3) Dito
4) Tesselation!
Von "Haus aus" können sie das nicht wirklich, man muss den Shader schon noch selber bauen, wo man dann u.a. 2) und 3) implementieren könnte. (Zumindest ist mir nichts der Art bekannt, ich bin aber bei den aller neusten Chips auch nicht mehr ganz so up to date.) Aber den Geometry-Shader (und somit Adjacency-Infos frei Haus) gibt's erst seit DX10. Allerdings bringt glaube ich der eine oder andere Treiber so eine Option für generische Tesselation mit. Die kann einem dann aber auch gewaltig in die Suppe spucken kann ich mir vorstellen, da man ja so gar keine Kontrolle drüber hätte.
Lange Rede, kurzer Pin: Was du im Hinterkopf hast, ist fast sicher einfaches Filtering. Und das muss bei statischen Meshes zum Glück nur ein Mal gemacht werden, d.h. es tut sogar eine langsame (lesbare) implementierung =)
Oh, es gibt noch eine Variante die teilweise angewendet wird, eine iterative:
Diffusion. Wenn ich nicht völlig irre, nähert Gauss-Filterung aber Diffusion an, und das iterative Verfahren ist nur nötig, wenn man Grenzen innerhalb des Feldes hat, über die nicht hinaus diffundiert werden darf, bzw. Materialen unterschiedlicher "Leitfähigkeit" dabei sind (bei dir z.B. Sand und Stein in einem Mesh, und du willst Erosion "faken"). (Ja, diese Erosion wäre nicht wirklich realistisch, aber zu einem gewissen Grad sehr ähnlich - nur falls da einer gleich mit kommt
)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)