Ich entwickle ein Voxel-Spiel, aber ich denke, ich verwende die falsche Technik. Ich verwende derzeit flache Fliesen, um Blöcke herzustellen, und ich denke, es gibt einen besseren und effizienteren Weg.
Ich habe ein Voxelspiel gesehen, das natürlich aussehendes Terrain hat. Damit meine ich nicht blockig. Das Spiel hat 4 * 4 * 4 Blöcke pro Kubikmeter und Blöcke wie Schmutz, Sand und Stein, runde Kanten und eine Art Schmelze (wie bei normalen Spielen). Hier ist ein Screenshot
Wie wird das erreicht?
opengl
rendering
voxels
terrain-rendering
KaareZ
quelle
quelle
Antworten:
Dies wird durch Interpolation von Rampen zwischen Würfeln unterschiedlicher Höhe erreicht.
Wenn Sie eine solche Landschaft haben (von der Seite gesehen)
Sie würden Polygone hinzufügen, damit es so aussieht:
Ein Algorithmus zur Berechnung dieser Rampen ist der Marschwürfel-Algorithmus .
Wenn Sie möchten, dass es noch schöner wird, verwenden Sie nicht nur einzelne Polygone, um zwischen Würfeln zu interpolieren, sondern verwenden Sie Kurven mehrerer Polygone. Beachten Sie jedoch, dass Ihre Szene dadurch eine Menge Polygone erhält. Sie sollten dies daher nur für die Würfel tun, die sich in der Nähe der Kamera befinden.
quelle
Es gibt zwei Hindernisse, mit denen Sie sich befassen müssen, um eine ähnliche Qualität wie im Bild zu erzielen. Das erste ist künstlerisch und das zweite technisch (Speicher, Verarbeitung). Zuerst gehe ich davon aus, dass Sie Ihr künstlerisches Problem bereits gelöst haben, Sie können die Modelle, die Kunst und die Shader usw. herstellen (teilweise, weil ich Kunstprobleme nicht beantworten kann)
Das größte technische Problem besteht darin, dass beim Voxelisieren der von Ihnen erstellten Modelle mit hoher Detailgenauigkeit eine große Anzahl winziger Voxel entsteht. Das Verarbeiten und Rendern einer großen Anzahl von Voxeln ist nicht trivial. Die Antwort darauf heißt Sparse Voxel Octrees
Mit SVO können Sie sehr detaillierte Modelle rendern, ohne alle Voxel zu verarbeiten, sondern nur die sichtbaren. Beachten Sie, dass Sie zum Rendern von SVO Raycasting anstelle der üblichen Rastertechnik verwenden müssen.
Weitere Details zu SVO finden Sie in diesem Dokument
Hier ist eine Open-Source-Implementierung mit BSD-Lizenz für SVO https://code.google.com/p/efficient-sparse-voxel-octrees/
Hier ist ein Video, in dem Polygon- und SVO-basiertes Rendering (Vor- und Nachteile) erläutert werden .
quelle