Carte de hauteur vs maillage du modèle 3D

8

Je travaille actuellement sur un jeu PC 3D (écrit en C ++ et DirectX 9.0) et j'essaie de trouver la meilleure façon de stocker des données de niveau dans la mémoire.

L'action du jeu se déroule sous le sol, il y a donc toujours un plafond au-dessus du joueur. Le sol est plutôt cahoteux et il y a des choses comme des stalagmites présentes en tout temps. Les niveaux sont de petite taille et ressemblent principalement à des couloirs. Voici les options que j'ai réussi à trouver jusqu'à présent:

Deux cartes de hauteur stockées sur le disque dur sous forme de fichier bitmap ou binaire / texte. Une carte de hauteur pour le plafond (en haut), une pour le sol.

OU

Un seul maillage 3D dans un certain format de modèle 3D (par exemple, .fbx, .x, .obj que ce soit).

Comment dois-je aborder le stockage de données de niveau? Quelle serait ma meilleure option, en termes de performances? J'ai également des problèmes pour texturer un niveau chargé via une carte de hauteur; l'utilisation d'un modèle 3D fait de la texturation un jeu d'enfant.

Merci!


la source

Réponses:

4

En termes de performances, les deux options doivent être équivalentes car tout sera converti tôt ou tard en modèle.

Cartes de hauteur:
+ Facile à stocker et à éditer
+ Facile à calculer les coordonnées de texture si elles ne sont pas précalculées
-Mauvaise texture sur les surfaces escarpées
-Nécessite des modèles compagnons pour de meilleurs détails
-Ne permet pas le chevauchement du terrain (pas de surplombs).

Modèles:
+ Plus de contrôle sur le déplacement horizontal
+ Le terrain se chevauchant est possible
+ Contrôle maximal sur les textures
-Collision est un peu plus compliqué
-CPeut utiliser un peu plus de mémoire sur le disque

D'après mon expérience, il est préférable d'utiliser une carte de hauteur quelque peu plate pour le terrain de base et d'utiliser des modèles pour des choses comme les stalagmites, et vous pouvez même utiliser des modèles répétitifs pour de tels objets (pour économiser de la mémoire).

Bien sûr, vous pouvez utiliser un champ vectoriel, mais il s'agit essentiellement d'un modèle avec une texturation plus facile.

Pommes
la source
1

Cela pourrait aider si vous nous disiez de quel genre est le jeu, ce que la caméra voit, etc. Je suppose que vous parlez d'un FPS mais je ne suis pas sûr.

Quoi qu'il en soit, voici un lien vers une discussion sur le terrain dans Halo Wars que j'ai trouvé intéressant et qui peut vous donner des idées: http://www.gdcvault.com/play/1277/HALO-WARS-The-Terrain-of . Il traite de certains des problèmes et des solutions possibles que vous avez mentionnés.

malmener
la source
0

Vous n'avez pas nécessairement à choisir l'un plutôt que l'autre, les deux peuvent être efficaces et il n'y a aucune raison pour que vous ne puissiez pas combiner les deux.

Si vous utilisez des images de hauteur, je choisirais personnellement un format bitmap. Directx devrait être en mesure de faire tout le chargement de bitmap pour vous et de le transformer en une ressource que vous pouvez utiliser. Si vous utilisez un fichier texte brut, vous devrez l'analyser vous-même. Bien sûr, cela vous donne un peu plus de liberté dans l'interprétation du fichier, et pourrait être un bon point de départ pour faciliter l'expérimentation.

Cependant, une chose à considérer est qu'une carte de hauteur vous laissera une résolution fixe, de sorte que les stalagmites que vous mentionnez peuvent être difficiles à bien représenter, sauf si vous augmentez la densité de pixels de la carte entière.

En général, je dirais qu'une carte de hauteur est un moyen efficace de stocker votre terrain, mais ajouter des détails comme des stalagmites serait beaucoup plus flexible avec les modèles.


la source