[MY-AL] Placement d'objets sur terrain procédural

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Narkos
Messages : 46
Inscription : 15 Août 2017 10:22
Localisation : Localisation impossible

[MY-AL] Placement d'objets sur terrain procédural

Message par Narkos » 29 Déc 2017 16:54

Bonjour les gens!!!

Je me tapote le neurone depuis maintenant quelques jours, du coup je me suis dit qu'il y aurait peut-être quelqu'un avec une idée par ici ;)

J'ai réalisé une génération de terrain procédurale qui comprend:
- Hauteur du terrain
- Textures du terrain
- Placement de ressources (Arbres, plantes, etc)

Mon problème concerne le placement des arbres et des plantes.
Actuellement le placement fonctionne bien, mais les positions X et Z sont générées via Random.
En solo c'est pas un problème, mais au final le jeu sera en multi (Pour pouvoir jouer avec madame ;))
Et du coup avec la méthode actuelle, pour avoir les objets placés au même endroit chez les 2 joueurs, je vais devoir envoyé les positions de toutes mes ressources en début de game, et je trouve ça un peu moche comme façon de faire.

Du coup quelqu'un connaitrai t’il une façon de faire pour avoir un placement COHERENT de la végétation?
Je sais pas si c'est la bonne façon d'exprimer la chose, je dis cohérent, car en rapport avec par exemple PerlinNoise (Tant qu'on donne la même valeur on obtient le même résultat).

Voilà merci d'avance pour les idées et n'hésite pas à demander une reformulation si mon post n'est pas assez clair.
Voici un screen de mon terrain actuel:
Image

Avatar de l’utilisateur
ZJP
Messages : 5745
Inscription : 15 Déc 2009 06:00

Re: [MY-AL] Placement d'objets sur terrain procédural

Message par ZJP » 30 Déc 2017 15:43

Narkos a écrit :
29 Déc 2017 16:54
Et du coup avec la méthode actuelle, pour avoir les objets placés au même endroit chez les 2 joueurs, je vais devoir envoyé les positions de toutes mes ressources en début de game, et je trouve ça un peu moche comme façon de faire.
Pas d'autres méthodes que celle-ci.
Au mieux, une simplification du processus en "demandant" à chaque joueurs de placer les éléments qui sont dans leur entourage/rayon et d'en envoyer les coordonnées aux autres joueurs.

Il reste toute fois la solution que j'ai choisi après de nombreux (vraiment) essais : la réalisation du base altimétrique des élévations, ce qui implique un programme qui en amont qui relève la topographie du terrain pour la stocker dans une base de données. Solution réellement "applicable" si le jeu ne comporte qu'un seul terrain (ou dans mon cas, une seule planète).


Bon courage pour la suite.

Narkos
Messages : 46
Inscription : 15 Août 2017 10:22
Localisation : Localisation impossible

Re: [MY-AL] Placement d'objets sur terrain procédural

Message par Narkos » 30 Déc 2017 20:12

Salut ZJP,

Merci pour ta réponse.
Mais je vais devoir continuer à chercher car je ne veux pas devoir transmettre les positions des ressources.
Perso je suis dans l'idée que les ressources sont présentes en début de game et sont statiques, donc on ne devrait pas avoir besoin de les envoyer, mais de trouver une façon de les générer de la même façon chez tous les joueurs.

Narkos
Messages : 46
Inscription : 15 Août 2017 10:22
Localisation : Localisation impossible

Re: [MY-AL] Placement d'objets sur terrain procédural

Message par Narkos » 30 Déc 2017 20:19

ZJP a écrit :
30 Déc 2017 15:43
la réalisation du base altimétrique des élévations, ce qui implique un programme qui en amont qui relève la topographie du terrain pour la stocker dans une base de données.
Je ne comprends pas trop l'utilité d'une base de données avec les infos du terrain? Tu stockais quoi comme info? Tu peux développer un peu stp ça m'intéresse ;)

Avatar de l’utilisateur
ZJP
Messages : 5745
Inscription : 15 Déc 2009 06:00

Re: [MY-AL] Placement d'objets sur terrain procédural

Message par ZJP » 31 Déc 2017 05:58

Un terrain généré procéduralement (idem pour un "récurent" avec le même SEED) se "déploie" au fur et a mesure : la construction du terrain suit un point de "génération". Il est donc impossible de connaitre l'altitude d'un point X,Z quelconque sans y "allez" (ou de s'y approcher).

Autrement dit, tu ne peux connaitre l'altitude d'un point se trouvant à la distance "D" de ton point actuel sans déplacer le "pointeur" (généralement associé à la caméra) qui sert à la génération du terrain. Dans un jeu solo, pas de souci : le joueur avance avec ce pointeur/marqueur et le "monde" se créé (ou re-) autour de lui.

En multi en revanche (ou simplement en solo avec de la "vie en temps réel" loin du joueur), chaque joueur génère le terrain autour de lui et se doit de "partager" avec les autres les élévations environnantes. De fait, chaque joueur doit prendre en charge les IAs et NPCs de son entourage. ;-)

De toute façon, même avec des ressources statiques, il faut générer le terrain en entier au moins une fois pour relever leurs emplacements . Donc, base.

C'est comme cela que j'ai résolu mon souci (Honnêtement, pas certain qu'il existe une autre solution viable. En tout cas, pas pour mon projet, après des longs mois de recherche) : 480 robots terrestres, 800 IAs "Mécanisées Roulants/Volants", et 2-3000 NPCs sur une planète générée procéduralement ( diamètre de 38000 unités équivalent à 170000 terrains de foot).

Dans les 1000-3300 "unités" de distance à la caméra, le procédural permet encore (avec plus ou moins de LODS et grâce à la Physique - un autre GROS pb en vu pour toi-) un placement "standard."

Au delà de cette distance , les altitudes s'aplatissent (pire, au point antipodal du "marqueur de génération" les élévations disparaissent : altitude zéro !!!), mais il faut pourtant que tout ce petit monde puisse évoluer en temps réel comme si de rien n'était : C'est là, qu'intervient la base d'alti. Tout ceux qui sont éloignés du point de génération s'en servent.

C'est avec ce genre de problématique que tu comprends pourquoi c'est compliqué les trucs procéduraux en multi (N'est-ce pas No Man Sky?... -par exemple- :mrgreen: )

Narkos
Messages : 46
Inscription : 15 Août 2017 10:22
Localisation : Localisation impossible

Re: [MY-AL] Placement d'objets sur terrain procédural

Message par Narkos » 01 Jan 2018 18:47

Hello!

Merci pour ta réponse!
ZJP a écrit :
31 Déc 2017 05:58
Un terrain généré procéduralement (idem pour un "récurent" avec le même SEED) se "déploie" au fur et a mesure : la construction du terrain suit un point de "génération". Il est donc impossible de connaitre l'altitude d'un point X,Z quelconque sans y "allez" (ou de s'y approcher).
Si par tout hazard t'as un chti screenshot... je suis bien curieux de voir le résultat de ton type de génération ;-)
ZJP a écrit :
31 Déc 2017 05:58
En multi en revanche (ou simplement en solo avec de la "vie en temps réel" loin du joueur), chaque joueur génère le terrain autour de lui et se doit de "partager" avec les autres les élévations environnantes. De fait, chaque joueur doit prendre en charge les IAs et NPCs de son entourage. ;-)
Wouha j'aurais jamais osé séparer la gestion des IA, NPC sur plusieurs joueurs :aille: , ça doit devenir une usine à gaz pour gérer les synchro entre tout le monde... Et quand 2 joueurs éloigné se rejoignent, qui prendra le contrôle des NPC etc?? T'as du bien t'amuser :diable:
ZJP a écrit :
31 Déc 2017 05:58
Dans les 1000-3300 "unités" de distance à la caméra, le procédural permet encore (avec plus ou moins de LODS et grâce à la Physique - un autre GROS pb en vu pour toi-) un placement "standard."
Heu je comprends pas, tu veux parler de quoi comme problème physique?
ZJP a écrit :
31 Déc 2017 05:58
Au delà de cette distance , les altitudes s'aplatissent (pire, au point antipodal du "marqueur de génération" les élévations disparaissent : altitude zéro !!!), mais il faut pourtant que tout ce petit monde puisse évoluer en temps réel comme si de rien n'était : C'est là, qu'intervient la base d'alti. Tout ceux qui sont éloignés du point de génération s'en servent.

C'est avec ce genre de problématique que tu comprends pourquoi c'est compliqué les trucs procéduraux en multi (N'est-ce pas No Man Sky?... -par exemple- :mrgreen: )
Ouai le multijoueur et les grands terrains c'est pas tout simple ;)

Sinon pour le placement des arbres et ressources j'ai une piste, j'ai pas encore pu mettre en place et tester, mais j'expose brièvement l'idée, dites moi ce que vous en pensez.

1. Pour la 1ère partie on se sert de perlinnoise pour obtenir une heightmap, sur laquelle on trie les points qui sont plus haut qu'une hauteur donnée (par ex: 0.9).
2. Ensuite on trie les points pour faire ressortir des "zones".
Image
3. On calcule le point central de chaque zone.

Chaque point central = un point de spawn.
En configurant le scale des points que l'on envoi à perlinnoise on devrait pouvoir modifier en conséquence la densité des points de spawn.
Et au final pour chaque ressource à spawn on utilise un offset différent avec perlinnoise pour avoir une série de points différents.

Répondre

Revenir vers « (C#) CSharp »