Aller au menu du forum Aller au contenu du forum Aller à la recherche dans le forum
Logo Khaganat
Menu principal

Technologie pour créer les terrains

YannK

Bonjour à toutes,
comme l'alpha de Godot 4 approche à grands pas, il faudrait qu'on réfléchisse à la façon dont on va implémenter le premier milestone et arrêter juste de faire mumuse avec les nouvelles fonctionnalités :)

D'où ma question : quelle technologie va-t-on utiliser pour les terrains ?

Je résume très grossièrement ci-dessous pour celles qui ne connaissent pas nos options.

Option 1 : Heightmaps

Il s'agit d'une solution qui calcule le relief d'une plaque de terrain découpée en petits carrés à partir d'une texture en noir et blanc, et qui va soulever chaque petit carré plus ou moins haut en fonction du niveau de blanc/noir qui correspond à sa position sur la texture.

Ses avantages :

- facile à mettre en œuvre techniquement
- peut-être relativement léger en terme de puissance de calcul
- aisé de créer des textures pour avoir des terrains avec les formes souhaitées, facile de les retoucher/modifier

Ses inconvénients :
- pas de possibilité de faire des tunnels, grottes ou surplombs, il faut y ajouter des objets pour créer ce genre d'effets
- pas simple de superposer des niveaux les uns au-dessus des autres, il faut prévoir des objets passerelle
- nécessité d'uniformiser la façon dont les plaques se joignent les unes aux autres pour éviter les « crevasses »

Option 2 : Voxels


Il s'agit d'une solution qui défini l'espace en 3D et qui conserve la trace de savoir pour chaque point s'il est plein ou vide, quelles sont ses matériaux etc.

Ses avantages :

- continuité de toutes les zones entre elles, pas de système de plaques reliées
- aisé de créer des grottes, passages souterrains, superpositions, etc.

Ses inconvénients :

- plus complexe techniquement à tous points de vue (collisions, shading...)
- plus lourd en terme de puissance de calcul et complexe à optimiser
- besoin d'un outil de génération pour contrôler parfaitement le résultat ?

Option 3 (ou pas) : Courbes
Il pourrait y avoir une option 3, qui est celle retenue par Ryzom, et que Halo utilisait aussi, qui est de créer par courbes dans l'éditeur et de laisser le moteur transformer ensuite le résultat en triangles. Je ne sais pas si cela a déjà été implémenté dans Godot. Si quelqu'un a des pistes, on peut se l'ajouter comme option.

Je tiens à préciser que entre l'option 1 et l'option 2, on a des pistes d'implémentations déjà existantes pour Godot, grâce au fabuleux Zylann :)
- Heightmap : https://github.com/Zylann/godot_heightmap_plugin
- Voxel : https://github.com/Zylann/godot_voxel

Donc la question est plutôt d'anticiper la façon dont on arrivera à s'emparer de la technologie et à l'adapter au client de jeu Khanat en 3D que de se demander comment on va faire à court terme, car grâce à Zylann, dans les deux cas, il y a des bases :)

EDIT du 10/08/2022 :
- Conseils sur l'usage des voxels dans la documentation du plugin voxel de Zylann, pour référence : Is Voxel tools for you ?
Dernière édition: 10 Août 2022 à 11:17:07 par YannK

Lyne

Discussions comme ça du 11/08/2022

Spoiler for Hiden:

YannK Ce serait cool d'avoir aussi l'avi de Alcyone et/ou isilin car ils bossaient sur un moteur avec voxels pour leur projet
Lyne Sur les terrains, vu que je me contente de rêver, la possibilité d'avoir des tunnels ou des zones qui passent les unes au dessus des autres me paraît importante. En particulier pour Natca
Lyne Je pense en particulier à la description de Sovrok, je crois
Zatalyz De ce que Zylann dit, ça semble possible avec les deux systèmes. En fait, le voxel sera intéressant surtout si on veut que les joueurs puissent modeler le sol (je ne pense pas ?). Sinon la heightmap semble plus légère à gérer, demandant des ordis moins puissants aussi
Zatalyz YannK : j'oublie un truc ?
Lyne Les deux permettent de poser des choses au sol, de gérer l'altitude, d'envisager de sauter du bord de la falaise, ce genre de choses ?
YannK Oui, on peut tout faire avec les deux, c'est juste la technologie qui est complètement différente
Zatalyz Il semblerais que dans le cas de la heightmap, ça se fasse bien que ce soit en ajoutant une couche spécifque (là où le voxel l'intègre bien de base). Mais on passe sur des ponts dessous/dessus dans le Canyon Interdit de Ryzom :)
Lyne Et laquelle a la plus de chances d'être connue dans le monde des Maj ?
YannK Avec les heightmap, on fait des plaques contigues et/ou superposées pour faire le niveau normal de sol et on les connecte
Zatalyz (et le Z est foireux en plus)
Lyne Je croyais que Ryzom, c'était la 3ème solution
YannK Le Z sera toujours bien géré, c'est le moteur qui le fait, et Godot le gère parfaitement :)
Zatalyz disons que oui, ça ne sera pas du 100% heightmap mais la solution 3 :D
YannK La moins connue des techniques est celle employée par Godot (ou Halo) : des surfaces de courbes qui sont triangulées en faces dans le moteur
YannK *Godot -> Ryzom
YannK Heightmap et Voxels sont bien connues, et les deux présentent des intérêts dans la programmation, donc ça dépend de ce que les développeuses aiment/ont envie de faire
Lyne Par contre, j'imagine que c'est pas compatible
Lyne Si on en choisit un, c'est pour le monde entier
Zatalyz pour moi, ce qui peut décider, c'est presque plus : sur quoi Zylann va continuer de bosser ? car ça semble évident que son travail sera notre base
YannK La grosse différence, en dehors de la possibilité de modeler comme on le souhaite le terrain dans tous les sens, c'est la continuité spatiale
YannK En gros, quand tu as un monde en voxels, tu as une base de données avec le statut de chaque points d'une grille 3D : vide ou rempli d'un truc (à spécifier)
YannK Et donc tu peux avoir aisément des surplombs, des grottes, etc. et tu parcoures librement les zones, sans interruption
YannK Avec les heightmaps, tu as des plaques qui doivent s'interconnecter correctement et qui doivent être chargées/déchargées dynamiquement au fur et à mesure des avancées
Zatalyz Mais on ne sent pas forcément les interruptions, les "portails" sur Ryzom. On peut passer sur/sous le pont et en tant que joueur, c'est transparent (même si ça mouline derrière)
YannK Et les surplombs/grottes, superpositions demandent de faire des objets dédiés pour connecter les « étages » de Heigthmaps
YannK Oui, il y a moyen de cacher les jointures, mais si tu veux faire le Désert du Ponant, il faudra plusieurs cartes juxtaposées correctement, on ne pourra pas aisément cacher toutes les coutures
YannK Et oui Lyne, il faut choisir un modèle au début et s'y tenir car tout refaire demandera beaucoup de boulot
YannK Et mélanger les deux n'aurait pas de sens au niveau du développement, il faudrait à la fois gérer les deux techniques et en plus leur cohabitation, le pire des deux mondes quoi ^^
Lyne Ouais :D
Lyne De ce que je comprends, pour des grandes zones sans limites (comme les vortex de Ryzom), la première solution (heightmap) est pas top. C'est ça ?
YannK Si, ça peut le faire, c'est juste qu'on n'a pas de code pour gérer la couture et le streaming des plaques de heightmaps dans Godot pour le moment. Zylann prévoit de le faire dans son plugin, mais rien n'est certain, il fait ça par passion en tant que bénévole :)
Lyne Je comprends mieux le commentaire de Zat, alors :-)
YannK Zylann bosse sur les deux, mais à son rythme et ses dispos, donc difficile de se baser là-dessus
YannK On a encore le temps de voir de toute façon Godot 4 n'est pas encore sorti, ni même en beta...
YannK J'aurais aimé avoir des retours techniques si des gens se sont frottés à l'un ou l'autre, c'est pour ça que j'ai posté sur le forum, que le message ait le temps d'être vu/lu
Lyne n'est pas compétente pour la technique :-p
YannK ^^
YannK Si tu as l'occasion de voir des vidéos du jeu Satisfactory, tu pourra y découvrir qu'un jeu avec des Heightmaps peut parfaitement proposer des cartes complexes en terme de niveaux imbriqués, autant que pourrait le faire un système de voxels. C'est une question de travail de leveldesign et de pipeline graphique adapté :)
Lyne Mouais... Avons-nous un leveldesign et une pipeline graphique adaptés ?
YannK Les gros jeux en monde ouvert où le joueur ne modifie pas le sol sont en général basés sur cette technique, car ils ont les outils de stitching/streaming disponibles :)
Zatalyz Satisfactory est en heightmaps ?
YannK regarde autour de lui où peuvent bien être les trucs dont parle Lyne
Lyne Il me semblait bien :D
YannK Oui, et il est développé sous Unreal 4, Zatalyz
Zatalyz Ha, ok. Bon, ben la techno marche :D
YannK Ouais, tout marche, c'est juste que dans les deux cas, on va avoir besoin de développeuses de toute façon ^^
Zatalyz hum... et tant qu'on n'a pas de dev.. on peut faire quoi ?
YannK Il faudra se contenter de mes bidouilles corrigées par Alea ^^
YannK Je dirais que sauf si quelqu'un ici nous dit « Oh lala, arrêtez tout, malheureuses, il faut faire du voxel parce que ceci et cela », on va partir sur des Heightmaps car on pourra plus facilement bricoler :-°
[...]
YannK Le plugin Voxel est plus avancé que celui de heightmap quant à son intégration dans Godot 4 je crois, K'Deed, mais je ne suis pas certain qu'il soit complètement fonctionnel out of the box
K'Deed j'hésite peut-être faire 3.4 , 3.5 et 4.0 et tester les 3
K'Deed le plugin heightmap, j'ai fait le tour à mon niveau et j'ai du mal à relier 2 maps (mais facile pour le reste)
YannK oui, il ne manque que le stitching et le streaming pour qu'il soit fonctionnel (à optimiser ensuite en passant en C++ certains aspect peut-être, mais dans un second temps)

Licences Mentions légales Accueil du site Contact