Altitude, Voxel, Polygone (géométrie) terrains

15

En ce qui concerne les terrains Heightmap, Voxel et Polygon (géométrie):

  1. Quelles sont les principales différences entre ces trois?
  2. Pouvez-vous former un terrain "lisse" avec des Voxels, je veux dire, pouvez-vous par exemple obtenir une montagne lisse avec des Voxels, ou les Voxels sont limités à des cubes?
  3. En ce qui concerne les performances, un monde de 2000 x 2000 unités, quel serait un terrain d'altitude plus rapide, un terrain de Voxel ou un terrain de géométrie basé sur un polygone? (En supposant qu'il y ait des gains / optimisation de performances "raisonnables" pour le rendu pour chacune des possibilités)
  4. Y a-t-il d'autres techniques utilisées pour la création de terrain?
  5. Des bons titres représentant chacun des types?

Le terrain basé sur le polygone PS doit être entièrement traçant, pas de trucs carrés.

joltmode
la source

Réponses:

30

Cartes de hauteur

Avec une carte de hauteur, vous stockez uniquement la composante de hauteur pour chaque sommet (généralement sous forme de texture 2D) et ne fournissez la position et la résolution qu'une seule fois pour l'ensemble du quad. La géométrie du paysage est générée à chaque image à l'aide du shader de géométrie ou de la tessellation matérielle. Les cartes d'altitude sont le moyen le plus rapide de stocker des données de paysage pour la détection de collision.

Avantages:

  • Utilisation de mémoire relativement faible : vous n'avez besoin de stocker qu'une seule valeur par sommet et aucun indice. Il est possible d'améliorer encore cela en utilisant des cartes détaillées ou un filtre de bruit pour augmenter les détails perçus.

  • Relativement rapide : le shader de géométrie pour les cartes de hauteur est petit et fonctionne rapidement. Ce n'est pas aussi rapide qu'un terrain géométrique.
    Sur les systèmes sans accélération 3D basée sur des triangles, les cartes de hauteur de défilement des rayons sont le moyen le plus rapide de rendre le terrain. Cela a été appelé graphiques voxel dans les anciens jeux.

  • LOD / terrain dynamique : il est possible de modifier la résolution du maillage généré en fonction de la distance de la caméra. Cela entraînera le déplacement de la géométrie si la résolution chute trop loin (environ 0:40), mais peut être utilisé pour des effets intéressants.

  • Génération / création de terrain facile : les cartes d'altitude peuvent facilement être créées en mélangeant des fonctions de bruit comme le bruit Perlin fractal et les éditeurs de carte d'altitude sont rapides et faciles à utiliser. Les deux approches peuvent être combinées. Ils sont également faciles à utiliser dans un éditeur.

  • Physique efficace : une position horizontale correspond directement à (généralement) une à quatre positions en mémoire, de sorte que les recherches de géométrie pour la physique sont très rapides.

Les inconvénients:

  • Exactement une hauteur par coordonnée x / y : il ne peut généralement pas y avoir de trous dans le sol ou de falaises en surplomb.

  • Moins de contrôle : vous ne pouvez contrôler la hauteur précise de chaque point que si la taille de la grille correspond aux coordonnées de la texture.

  • Artefacts : si les quatre sommets qui définissent un sous-quad ne sont pas sur le même plan, la division entre les deux sommets deviendra visible. Cela se produit généralement sur des falaises abruptes avec des bords qui ne suivent pas une direction cardinale.

Les cartes d'altitude sont de loin le moyen le plus efficace de rendre le terrain et sont utilisées dans de nombreux jeux plus récents qui ne reposent pas sur des fonctionnalités de terrain avancées et disposent de vastes espaces extérieurs. Wikipedia a une liste de programmes qui utilisent des cartes d'altitude , mais je ne sais pas si cela signifie qu'ils ne les utilisent que comme ressources ou aussi pour le rendu, alors voici quelques jeux qui sont susceptibles de les utiliser:

  • Just Cause 2: les régions sont chargées dans des secteurs carrés et il n'y a pas de trous dans le terrain. Dans la démo, il y a un trou profond avec des triangles étirés le long des bords où il y aurait normalement un bâtiment. (La zone est normalement inaccessible, mais il existe des mods pour supprimer certaines des limitations de la démo ...)

  • Sims 2 ( peut-être ): le terrain du quartier est chargé en hauteur, mais il y a des trous où les lots (chantiers) sont placés. Il existe cependant des artefacts typiques si vous créez beaucoup de falaises, et il est assez fastidieux d'ajouter une cave à une maison (et de cacher la falaise sous une véranda).

  • Jeux du moteur Source de Valve: les brosses rectangulaires (géométrie de niveau statique) peuvent avoir un terrain mappé en hauteur sur leurs faces. Dans ces jeux, les bizarreries habituelles sont souvent cachées avec d'autres pinceaux ou accessoires.

Il est impossible de dire avec certitude sans regarder les shaders car chaque terrain de la carte de hauteur peut être rendu sous forme de maillage.

Voxels

Le terrain Voxel stocke les données de terrain pour chaque point dans une grille 3D. Cette méthode utilise toujours le plus de stockage par détail de surface significatif, même si vous utilisez des méthodes de compression comme les octrois clairsemés.

(Le terme «moteur de voxel» était souvent utilisé pour décrire une méthode de cartographie des hauteurs de terrain de défilement des rayons commune dans les anciens jeux 3D. Cette section s'applique uniquement au terrain stocké sous forme de données de voxel.)

Avantages:

  • Données 3D continues : les voxels sont à peu près le seul moyen efficace de stocker des données continues sur des caractéristiques de terrain cachées comme les veines de minerai.

  • Facile à modifier : les données de voxel non compressées peuvent être modifiées facilement.

  • Fonctions de terrain avancées : il est possible de créer des surplombs. Les tunnels sont sans couture.

  • Génération de terrain intéressante : Minecraft le fait en superposant des fonctions de bruit et des gradients avec des caractéristiques de terrain prédéfinies (arbres, donjons). (Lire Terrain Generation, Partie 1 dans le blog de Notch pour plus d'informations. Il n'y a pas de partie 2 au 05.8.2011.)

Les inconvénients:

  • Lent : pour rendre les données de voxels, vous devez soit utiliser un traceur de rayons, soit calculer un maillage, par exemple avec des cubes de marche (il y aura des artefacts). Les voxels voisins ne sont pas indépendants pour la génération de maillage et les shaders sont plus compliqués et produisent généralement une géométrie plus complexe. Le rendu des données de voxels avec un LOD élevé peut être très lent.

  • Exigences de stockage énormes : le stockage des données de voxel utilise beaucoup de mémoire . Il est souvent impossible de charger les données de voxel dans la VRAM pour cette raison, car vous devrez utiliser des textures plus petites pour compenser cela, même sur du matériel moderne.

Il n'est pas pratique d'utiliser des voxels pour des jeux qui ne reposent pas sur des fonctionnalités de voxels comme un terrain déformable, mais cela peut permettre des mécanismes de jeu intéressants dans certains cas. Les moteurs Voxel sont plus courants dans les jeux plus anciens , mais il existe également des exemples plus récents:

  • Moteur Atomontage : rendu Voxel.

  • Worms 4: utilise des "poxels". Selon Wikipedia, c'est un mélange de voxels et de polygones.

  • Minecraft: utilise le voxel pour représenter le terrain en RAM, les graphiques sont des graphiques polygonaux. C'est surtout un logiciel calculé.

  • Terraria: un exemple pour les voxels 2D. Je ne sais pas comment ça se passe.

  • Voxels combinés avec la physique : pas un jeu. mais il met bien en valeur le potentiel de destruction.

  • Voxatron : un jeu utilisant des voxels pour presque tous les graphiques, y compris les menus et le HUD.

Mailles

Les maillages polygonaux sont le moyen le plus flexible et le plus précis de stocker et de rendre le terrain. Ils sont souvent utilisés dans les jeux où un contrôle précis ou des fonctionnalités de terrain avancées sont nécessaires.

Avantages:

  • Très rapide : vous n'avez qu'à faire le calcul de projection habituel dans le vertex shader. Un shader de géométrie n'est pas nécessaire.

  • Très précis : toutes les coordonnées sont stockées individuellement pour chaque sommet, il est donc possible de les déplacer horizontalement et d'augmenter la densité du maillage dans des endroits avec des détails plus fins.

  • Faible impact sur la mémoire : cela signifie également que le maillage aura généralement besoin de moins de mémoire qu'une carte de haut niveau, car les sommets peuvent être plus clairsemés dans les zones avec moins de petites fonctionnalités.
    (Voir Réseau irrégulier triangulé sur Wikipédia).

  • Aucun artefact : le maillage est rendu tel quel, il n'y aura donc pas de pépins ou de bordures étranges.

  • Fonctions de terrain avancées : il est possible de laisser des trous et de créer des surplombs. Les tunnels sont sans couture.

Les inconvénients:

  • LOD dynamique médiocre : possible uniquement avec des maillages précalculés. Cela provoquera des «sauts» lors du passage sans données supplémentaires pour mapper les anciens aux nouveaux sommets.

  • Pas facile à modifier : la recherche de sommets correspondant à une zone à modifier est lente.

  • Pas très efficace pour la détection de collision : contrairement aux cartes de hauteur et aux données de voxel, l'adresse mémoire d'un certain emplacement ne peut généralement pas être calculée directement. Cela signifie que la physique et la logique de jeu qui dépendent de la géométrie exacte de la surface fonctionneront probablement plus lentement qu'avec les autres formats de stockage.

Le terrain polygonal est souvent utilisé dans les jeux qui n'ont pas de grandes zones ouvertes ou ne peuvent pas utiliser le terrain de la carte de hauteur en raison de son manque de précision et de saillies. Je n'ai pas de liste, mais je suis sûr que

  • chaque 3D Zelda et

  • chaque jeu Mario 3D

utilisez ceci.

Autres méthodes

Il est possible de créer un terrain entièrement dans le pipeline de shaders. Si l'algorithme s'exécute uniquement dans le shader fragment / pixel, les détails peuvent être pratiquement illimités alors que l'impact sur la mémoire est presque nul. Les inconvénients évidents sont presque aucun contrôle sur la forme et les problèmes lorsque la caméra intersecte la surface de rendu d'origine. Il est toujours utile dans les jeux spatiaux où les joueurs n'interagissent pas avec la surface d'une planète. Les animations de paramètres fonctionnent mieux avec ce type de terrain.

Il devrait être possible de télécharger la géométrie du terrain générée à partir de la carte graphique pour l'utiliser pour le reste du moteur de jeu, mais je ne sais pas comment cela fonctionne ni si cela a été fait jusqu'à présent.

Conclusion

Il n'y a pas de méthode qui fonctionne bien pour chaque scénario, mais il est assez facile d'en choisir une pour une certaine tâche:

  • Les cartes d'altitude sont la meilleure solution si vous n'avez pas besoin de surplombs ou de trous dans la surface du terrain et que vous utilisez la physique ou le terrain dynamique. Ils sont évolutifs et fonctionnent bien pour la plupart des jeux.

  • Les maillages ont la plus haute précision et peuvent décrire des surplombs, des trous et des tunnels. Utilisez-les si vous avez un terrain complexe qui ne change pas souvent.

  • Les voxels sont bons pour décrire un terrain très dynamique avec de nombreuses fonctionnalités complexes. Évitez de les rendre directement car ils nécessitent de grandes quantités de mémoire et de traitement.

  • D'autres méthodes peuvent être meilleures que celles décrites ci-dessus si vous n'avez pas à interagir avec le terrain ou si vous avez besoin de graphiques très détaillés. Ils ne fonctionnent généralement que pour des scénarios très spécifiques.

Il est possible de combiner différentes méthodes pour obtenir des fonctionnalités de plusieurs, par exemple en tessellant le terrain maillé avec une carte de hauteur pour augmenter la structure de détail d'une falaise.

La génération de terrain dynamique est fortement utilisée dans la simulation d'espace procédural et certaines sont devenues vraiment avancées ces dernières années . Les forums de ces projets devraient avoir quelques ressources sur le sujet.

Tamschi
la source
3
Le moteur source n'utilise pas de cartes d'altitude pour son terrain. Ils utilisent des quadrilatères tesselés appelés "Déplacements" developer.valvesoftware.com/wiki/Displacement
Tetrad
1
Voilà une réponse douce là-bas, donnerait un +3 sur celui-ci, si c'était possible. Merci pour les informations détaillées, très appréciées.
joltmode
@Tetrad Les résolutions disponibles pour les déplacements sont des puissances de deux (une restriction courante pour les tampons de texture), la seule coordonnée enregistrée par sommet est la hauteur et les cartes de hauteur du terrain sont rendues sous forme de quadrilatères tesselés. Le wiki indique également que le coût de rendu des déplacements est inférieur à celui de la géométrie normale. Je pense qu'il est juste de supposer que c'est la même chose avec des noms différents.
Tamschi
1
@NickWiggill La signification de "voxel" semble avoir beaucoup changé au cours des 10 dernières années. Je vais avec la définition actuelle de Wikipedia des voxels en tant que valeurs sur une grille 3D régulière . L' entrée sur Outcast mentionne la différence de sens. J'ai ajouté à ma réponse pour clarifier cela.
Tamschi
2
Note latérale: Le "terrain polygonal" est également appelé " réseau irrégulier triangulé " ("TIN" en abrégé) dans le SIG; et il est généralement beaucoup moins gourmand en mémoire qu'un mappage de hauteur de la même résolution effective, car il ne prend pas la peine d'enregistrer des données non essentielles ou des endroits où il n'y a pas de données. Le premier jeu gothique l'a utilisé (pas sûr des autres).
Martin Sojka
8

Je voudrais souligner qu'aucun des termes que vous avez mentionnés ne s'excluent mutuellement - vous pouvez même avoir un jeu basé sur des voxels qui utilise des cartes de hauteur et qui est rendu à l'aide de polygones.

  1. Les cartes de hauteur sont des représentations bidimensionnelles de la hauteur du sol à chaque point spécifique. Ils sont souvent stockés sous forme d'images en niveaux de gris, où la luminosité représente la hauteur de ce point. Les voxels sont fondamentalement une image bitmap 3D. Il existe une variété de techniques utilisées pour rendre un espace voxel.

  2. Vous pouvez créer un terrain lisse avec des voxels, et ils ne sont pas limités aux cubes. Une telle façon consiste à utiliser un algorithme comme les cubes de marche , qui peut convertir une représentation de voxels en une liste de polygones.

  3. Celui avec le moins de triangles rendrait le plus rapide: 3

  4. Les algorithmes fractaux tels que le bruit Perlin peuvent être utilisés pour créer des paysages avec beaucoup de
    détails. Les surfaces paramétriques telles que les nurbs peuvent être utilisées pour créer des terrains lisses avec peu d'exigences de stockage permanent.

  5. Delta Force est un ancien jeu qui utilise des voxels. Minecraft peut utiliser le stockage de voxels pour représenter le paysage (incertain). Sacrifice par Shiny est un jeu qui utilise les cartes d'altitude à bon escient. La plupart des jeux avec des paysages utilisent des terrains de géométrie.

CiscoIPPhone
la source
1
Une remarque, au point 3, alors que le GPU ne se soucie que du nombre de polygones, il y a toujours le côté génération de la géométrie. La génération de géométrie pour un champ de voxels est généralement un processus plus lent (les blocs / cubes de marche sont tous les deux des processus plus complexes) que le terrain de la carte des hauteurs (qui est un processus simple), ou basé sur un polygone (qui est évidemment déjà des données de géométrie). Modifier: cela dépend également si vous souhaitez que le terrain soit déformable.
Michael
Pour le 3ème point ... Eh bien, heightmap doit encore être traité et seulement alors il se transforme en une géométrie, non? En gardant cela à l'esprit, un maillage polygonal serait un peu plus rapide? Pourriez-vous indiquer certaines des techniques utilisées pour rendre les voxels?
joltmode
2
Vous pouvez utiliser un ombrage de géométrie pour générer le maillage à partir d'une carte de hauteur. De cette façon, vous stockez uniquement la hauteur et les paramètres tels que la position et la résolution pendant que la géométrie est générée à chaque image dans le pipeline de shader. C'est plus rapide que les cubes de marche et plus lent qu'un maillage polygonal. L'avantage des heighmaps est la faible consommation de mémoire: seulement un peu plus du tiers de ce dont un maillage aurait besoin. L'inconvénient est qu'il n'est pas aussi flexible (pas de petits détails, pas de surplombs). Vous pouvez ajuster dynamiquement les détails du maillage généré, mais cela entraîne un déplacement de la géométrie.
Tamschi
@Tamschi, si seulement vous pouviez fournir une réponse, exactement ce que je cherchais. :)
joltmode
@ Tom, je vais voir si je peux obtenir ce format et trouver quelques autres exemples.
Tamschi