Par où commencer lors de la construction d'un éditeur de terrain 3D? [fermé]

22

Je cherche à construire (pour commencer) un outil simple, qui pourrait élever, abaisser, lisser et texturer le terrain.

Alors, quelles sont les choses que je dois traverser pour créer un tel éditeur de terrain?

Et peut-être existe-t-il des ressources précieuses sur le sujet?

Oui, j'ai oublié de mentionner que je suis intéressé par un éditeur de terrain 3D.

joltmode
la source

Réponses:

24

Pour un éditeur de terrain 3D «classique», les étapes pourraient être celles-ci:

Générez un maillage (par exemple une grille de carrés, chaque carré composé de deux triangles), tous les sommets sont partagés entre les triangles (de sorte qu'il n'y a qu'une seule normale par intersection). entrez la description de l'image ici

Cela devrait être un 3DMesh et rendu dans votre programme.

Créez un outil pour élever et abaisser (de plus en plus petites) les parties de la grille (vous devez calculer où se trouve le curseur de la souris et modifier les sommets des mailles, mais uniquement de haut en bas).

Créez une grande texture (comme 1024x1024x4 ou mieux) et texturez-la avec ce qu'on appelle un splat-map: entrez la description de l'image ici

Permettre de le peindre (avec R, G, B OU Alpha, pas rose par exemple) et de choisir des textures remplaçant ces vilaines couleurs primaires (Rouge, Bleu, Vert, Alpha), ou en plus, être représentées par elles:

Le shader (que vous devrez créer) devrait multiplier ces belles textures (par exemple la pierre, l'herbe, ...) avec l'intensité dans la splatmap (la laide), puis mélanger l'ensemble pour qu'il ressemble, par exemple (avec comme seulement 2 couleurs), comme ceci: entrez la description de l'image ici

Désolé pour les grandes images, j'ai fouetté cela au travail ...

Valmond
la source
Ah, cela a rendu les choses un peu plus claires. Théoriquement, après le maillage 3D, c'est simplement le repositionnement des sommets (haut / bas) et la texturation de cet exemple, vous avez fait la manière "splatmap", après quoi le shader lui ressemble en un terrain "3D"?
joltmode
1
Correct pour le maillage 3D. Le shader ne fait rien de spécial avec le maillage (le vertex shader), le gros travail est dans le fragment-shader (le "pixel shader") où la recherche de texels de la splatmap donne la quantité d'herbe, de pierre, etc., le pixel final doit obtenir (vous pouvez bien sûr également avoir une texture «de base», comme la pierre par exemple qui est toujours à 100% et d'autres textures y sont éclaboussées).
Valmond
6

La première chose est d'être clair sur la structure des données de votre terrain et ce que vous attendez d'un éditeur. Est-ce un maillage? Un éventail de hauteurs? Une sorte de système de voxels de style Minecraft? Devez-vous pouvoir ajouter des éléments de terrain maillés comme des arbres et des bâtiments? Manuellement, automatiquement ou les deux? Je pourrais continuer, mais vous voyez l'idée.

Un éditeur de terrain de base n'est pas si difficile à écrire, mais les détails varient beaucoup en fonction du jeu que vous créez, et donc du type de terrain que vous souhaitez créer.

SimonW
la source
Eh bien, un maillage / tableau et des hauteurs / voxels, etc. n'est qu'un moyen de stocker les données associées, j'étais plus intéressé par la façon d'écrire les outils pour remplir ces données. En fait, je n'ai aucune idée de l'apparence d'un éditeur de terrain "dans les coulisses". Je peux le réviser, mais seulement à ma façon, je parie qu'il y a quelques directives que je dois suivre ...
joltmode
2
-1. Cela ne ressemble pas vraiment à une réponse pour moi. Vous posez des questions, qui auraient mieux valu un commentaire.
bummzack
5

Il s'agit principalement d'un suivi de la réponse de Valmond, mais il ne semble pas assez court pour ajouter un commentaire.

Une fois que vous aurez commencé à créer un éditeur de base, vous voudrez peut-être expérimenter en générant la carte de hauteur entièrement sur le GPU. C'est complètement facultatif mais c'est un bon moyen de décharger le travail sur le GPU pour un terrain en constante évolution. Valmond a déjà mentionné que l'éclaboussure de texture est effectuée sur le pixel shader, mais le vertex shader peut également être utilisé, en utilisant une recherche de texture pour augmenter et abaisser les sommets de la grille. Voici un tutoriel sur la façon d'accomplir cela avec le vertex shader. Le truc non shader est spécifique à C # et XNA, mais le truc important est dans le code du shader.

Dans ce cas, votre code côté CPU traitera simplement de la modification de la texture en niveaux de gris stockée en mémoire. Votre grille de maillage reste plate, les sommets ne sont pas mis à jour par le CPU. Chaque fois que la texture est modifiée, la nouvelle texture peut être transmise au GPU.

Gardez à l'esprit que tous les modèles de shader ne prennent pas en charge l'échantillonnage de texture sur le vertex shader (par exemple, dans HLSL, vous avez besoin d'au moins le shader model 3.0).

ChrisC
la source
0

Vous pouvez jeter un œil à l'ETM Ogre http://www.ogre3d.org/addonforums/viewforum.php?f=16 , qui devrait vous donner quelques idées. Artifex Terra est basé sur lui si vous voulez le voir en action.

Johann
la source
2
Je vous suggère de fusionner vos réponses et de supprimer celles qui ne sont pas utilisées.
joltmode
Pour les terrains créés / manipulés par GPU, consultez les articles Scape de Gilliam de Carpentier, lecture très informative sur le sujet. decarpentier.nl/scape-render
Johann
Comme Tom l'a déjà suggéré, les articles Scape ont peut-être déjà servi de référence intéressante sur la génération et le rendu du terrain. Mais depuis cette suggestion, j'ai publié un autre article Scape qui est encore plus pertinent pour ce sujet, couvrant entièrement son pipeline d'édition basé sur les pinceaux. Je pensais donc que je vous le ferais savoir. www.decarpentier.nl/scape-brush-pipeline