Comment faire un voxel naturel

11

Je développe un jeu de voxel, mais je pense que j'utilise la mauvaise technique. J'utilise actuellement des tuiles plates, pour faire des blocs, et je pense qu'il y a un moyen meilleur et plus efficace.

J'ai vu un jeu de voxels, qui a un terrain d'apparence naturelle. J'entends par là sans blocs. Le jeu a 4 * 4 * 4 blocs par mètre cube, et des blocs comme la saleté, le sable et la pierre, ont des bords arrondis et fondent ensemble (comme dans les jeux ordinaires). Voici une capture d'écran entrez la description de l'image ici

Comment y parvient-on?

KaareZ
la source
savez-vous de quel jeu il s'agit? comment pouvez-vous être sûr que ce sont des voxels? Ok, je l'ai trouvé moi-même, le jeu s'appelle Blockscape: indiedb.com/games/blockscape
Babis
Il y a un blog sur procworld.blogspot.com qui contient toutes sortes d'articles de blog détaillés sur la façon dont son moteur voxel a été créé. Les publications remontent à plusieurs années, de l'époque où le moteur en était à ses balbutiements à celui où il est actuellement sous licence pour Everquest Next.
stokastic

Réponses:

14

Ceci est réalisé en interpolant des rampes entre des cubes de hauteur différente.

Lorsque vous avez un paysage comme celui-ci (vu de côté)

  #
 ####   ##
############

vous ajouteriez des polygones pour que cela ressemble à ceci:

 /#\
/####\ /##\
############

Un algorithme pour calculer ces rampes est l' algorithme des cubes de marche .

Lorsque vous voulez qu'il soit encore plus beau, n'utilisez pas seulement des polygones simples pour interpoler entre les cubes, utilisez des courbes de plusieurs polygones. Mais gardez à l'esprit que cela ajoutera beaucoup de polygones à votre scène, vous ne devez donc le faire que pour les cubes proches de la caméra.

Philipp
la source
Je vous remercie! Connaissez-vous un endroit qui explique comment faire cela dans OpenGL, Light Weight Java Game Library? Edit: Et si vous connaissez une bonne technique pour ajouter la détection de collision pour le terrain en marche, cela serait apprécié aussi.
KaareZ
@KaareZ Désolé, je n'ai jamais travaillé avec LWJGL.
Philipp
@Philipp vous pourriez être intéressé par cette réponse
1
Ou vous pouvez ignorer complètement le cube de marche et aller sur le site frankpetterson.com/publications/dualcontour/dualcontour.pdf beaucoup plus intéressant moins compliqué, vous pouvez également simplement ajouter la fonction de bruit comme décalage au sommet du morceau final. Vous avez toujours des blocs mais ils ont maintenant la propriété de rouler les collines en n'étant pas strictement alignés en ligne droite austère ... combinant un double contour et cela pour un résultat encore plus intéressant (avec un modificateur sur le vertex offset pour contrôler la génération plus ou moins organique) .
user29244
forum.unity3d.com/attachments/captura-jpg.23795 voici une image de "bloc roulant" (offset appliqué comme déplacement vertical) Voici plus d'images mais avec un déplacement appliqué dans toutes les directions forum.unity3d.com/attachments/t1- jpg.23871 forum.unity3d.com/attachments/t2-jpg.23872 vimeo.com/27976287
user29244
6

Il y a deux obstacles à surmonter pour obtenir une qualité similaire à celle de l'image, le premier est artistique et le second technique (mémoire, traitement). Je suppose d'abord que vous avez déjà résolu votre problème artistique, vous pouvez faire les modèles, l'art et les shaders, etc. (en partie parce que je ne peux pas répondre aux problèmes artistiques)

Le problème technique majeur est que lors de la voxélisation de ces modèles que vous avez créés avec un niveau de détail élevé, vous vous retrouverez avec un grand nombre de minuscules voxels. Le traitement et le rendu d'un grand nombre de voxels n'est pas anodin. La réponse à cela s'appelle Sparse Voxel Octrees

SVO vous donnera la possibilité de rendre des modèles très détaillés sans traiter tous les voxels, mais seulement ceux visibles. Notez que pour rendre le SVO, vous devrez utiliser le lancer de rayons plutôt que la technique de tramage habituelle.

Plus de détails sur SVO dans cet article

Voici un open-source avec mise en œuvre de la licence BSD de SVO https://code.google.com/p/efficient-sparse-voxel-octrees/

Voici une vidéo qui explique le rendu basé sur polygone vs SVO (avantages et inconvénients).

concept3d
la source
C'est génial! Jetez également un œil à sauerbraten.org , il utilise une technique similaire (mais n'implémente pas de cubes de marche, cette partie est laissée au concepteur de niveaux)
Kroltan