Wie man natürlich aussehendes Voxel macht

11

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 Geben Sie hier die Bildbeschreibung ein

Wie wird das erreicht?

KaareZ
quelle
Weißt du welches Spiel das ist? Wie können Sie sicher sein, dass es Voxel sind? Ok, ich habe es selbst gefunden, das Spiel heißt Blockscape: indiedb.com/games/blockscape
Babis
Unter procworld.blogspot.com gibt es einen Blog, der alle möglichen detaillierten Blog-Beiträge darüber enthält, wie seine Voxel-Engine erstellt wurde. Die Beiträge reichen mehrere Jahre zurück, als der Motor noch in den Kinderschuhen steckte, bis jetzt, als er derzeit für Everquest Next lizenziert wird.
stokastic

Antworten:

14

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.

Philipp
quelle
Vielen Dank! Kennen Sie einen Ort, der erklärt, wie dies in OpenGL, Light Weight Java Game Library, gemacht wird? Bearbeiten: Und wenn Sie eine gute Technik kennen, wie man Kollisionserkennung für das marschierende Gelände hinzufügt, wäre das auch dankbar.
KaareZ
@KaareZ Sorry, ich habe nie mit LWJGL gearbeitet.
Philipp
@Philipp Sie könnten an dieser Antwort
1
Oder Sie können den Marschwürfel ganz überspringen und zu dem viel interessanteren, weniger komplizierten frankpetterson.com/publications/dualcontour/dualcontour.pdf gehen. Sie können auch einfach die Rauschfunktion als Versatz zum Scheitelpunkt des endgültigen Chunks hinzufügen. Sie haben immer noch einen Block, aber jetzt haben sie die Eigenschaft, sanfte Hügel zu bilden, indem sie nicht streng in einer geraden Linie ausgerichtet sind. Kombinieren Sie die doppelte Konturierung und dies für ein noch interessanteres Ergebnis (mit einem Modifikator am Scheitelpunktversatz, um mehr oder weniger organische Erzeugung zu steuern). .
user29244
forum.unity3d.com/attachments/captura-jpg.23795 hier ist ein Bild von "Rolling Block" (Versatz als vertikale Verschiebung angewendet) Hier ist mehr Bild, aber mit Verschiebung in jeder Richtung forum.unity3d.com/attachments/t1- jpg.23871 forum.unity3d.com/attachments/t2-jpg.23872 vimeo.com/27976287
user29244
6

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 .

concept3d
quelle
Das ist fantastisch! Schauen Sie sich auch sauerbraten.org an , es verwendet eine ähnliche Technik (implementiert jedoch keine
Marschwürfel