Ich glaube, eine gängige Lösung besteht darin, die zum Projizieren des Rasters verwendete Kameratransformation von der zum Rendern des Rasters verwendeten Kameratransformation zu trennen. Bei Perspektiven in der Nähe von oben nach unten stimmen die beiden Kameras überein, aber wenn sich die Betrachtungskamera einer horizontalen Perspektive nähert, weicht die Projektionskamera ab und versucht, eine minimale Neigung beizubehalten, dh sie schwebt irgendwo über der Betrachtungskamera und schaut leicht nach unten.
Das Knifflige dabei ist, sicherzustellen, dass das Sichtfeld der Projektionskamera immer den Bereich der Szene abdeckt, der von der Renderkamera aus gesehen wird. Ich habe keine Ressource zur Hand, die ausführlich beschreibt, wie die entsprechenden Transformationen berechnet werden, und es ist möglicherweise mühsam, sie von Hand abzuleiten.
Eine andere Lösung besteht darin, die Toolbox für die Signalverarbeitung zu nutzen: Die in Ihrem Bild sichtbaren Artefakte sind im Wesentlichen Aliasing-Effekte, die auf eine unzureichende Abtastung des Wellenhöhenfelds durch das projizierte Gitter zurückzuführen sind. Daher besteht eine Lösung darin, das Höhenfeld in Abhängigkeit von der projizierten Fläche einer Gitterzelle angemessen zu filtern. Ich glaube, dies wird beim Offline-Rendern von Ozeanen verwendet und stellt im Wesentlichen sicher, dass die Wellen am Horizont flach werden. Ich bin mir jedoch nicht sicher, wie realisierbar dies beim Rendern in Echtzeit ist, da Sie eine hochwertige anisotrope Filterung benötigen würden, damit dieser Ansatz vernünftig aussieht.
Sie können sowohl realistisch als auch in Echtzeit sein. Das Geheimnis ist, die Darstellung jedes Mal zu ändern, wenn die Informationen unter die Shannon-Nyquist-Skala (dh das Raster) fallen: von der Geometrie über normale Karten bis hin zu Schattierungsmodellen. Dieses Papier ist für Sie gemacht: http://maverick.inria.fr/Publications/2010/BNH10/index.php (siehe auch Yoube Videos)
quelle
Einige Programme wie Maya lösen dieses Problem, indem Sie einen Polarkartesiker (oder einen Kartesiker, der sich in der Ferne polarisiert) verwenden. Dieses Setup fügt mehr Details hinzu, wo es am meisten zählt. Dann verlassen sie sich auf die normale Verarbeitung des Shaders in weiteren Bereichen. Es gibt Raum für Verbesserungen im Offcourse. Sie ändern diesen Ansatz ein wenig und haben jede andere Form, die die Maschendichte in Richtung der Kamera erhöht. Dies hat den Vorteil, dass Sie den Effekt bis zum Horizont ausdehnen können, ohne sich um die Naht kümmern zu müssen.
Der Trick, den Verschiebenden in diesem Fall nicht durcheinander zu bringen, besteht darin, dass Sie die Verschiebung allmählich verringern, wenn Sie sich weiter wegbewegen. Sie verwenden dann einfach die normale Modifikation im Pixel-Shader, wenn Sie weiter kommen. Dies ist einfacher zu filtern als eine genaue Shiluette-Kante zu filtern. Auch wenn Sie so weit weg sehen können, sind Ihre Augen wahrscheinlich ohnehin flach genug.
quelle
Die von Benedikt erwähnte Technik wird in Abschnitt 2.4.1 dieser Arbeit erläutert.
http://fileadmin.cs.lth.se/graphics/theses/projects/projgrid/projgrid-lq.pdf
Die Implementierung sollte Ihr Problem lösen.
quelle