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.