python cherche algo génération procedurale de heightmap/alpha

a marqué ce sujet comme résolu.

Bonjour, je cherche un algo/une méthode pour crée de manière procédural des heightmap. voila comment je voudrais l’implémenter :Image utilisateur

le point rouge représente ou je suis. Je voudrais que l’algo crée 9 heightmap au tour de moi (la zone bleu), quand je me déplace l’algo crée de nouvelle heightmap et supprime celle qui sont éloigné.

La ou je bloque c’est que je cherche un algo capable de me créer ces 9 heightmaps qui doivent s’emboiter entre elle comme un puzzle. J’aimerais que vous me donniez un nom d’algo ou un code capable de les générer.

par avance merci pour vos pistes.

merci pour ta réponse. Cette apres midi j’ai fait pas mal de recherche sur le bruit de Perlin… mais je ne vois que des exemple ou l’on crée juste une heightmap par plusieurs cohérente entre elles. C’est bien cela qui m’interesse, de générer des heightmap aléatoires mais qui puisse s’emboiter entre elles.

dans le bruit de perlin comme je le comprend on joue sur la fréquence (le sons qui est une onde) mais je ne vois pas comment prendre compte les "autres sons" (mes autres heightpmap déjà généré)

+0 -0

Avec le bruit de Perlin, tu créés une heightmap de taille infinie. Du coup, tu as juste à en extraire des "morceaux" correspondant aux zones que tu veux générer. Donc au final tu n’aurais qu’une seule et unique fonction qui pourrait générer la totalité de ton terrain si tu le souhaitais, mais tu ne génères que les parties qui t’intéressent.

Ce qui fait que si tu fais "demi-tour" les zones seront régénérées à l’identique de ce que tu avais eu dans le passé.

+0 -0

A ok j’avais pas compris ! du coup la c’est bon j’ai réussie à faire ce que je voulais !

voila mon code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import sys
from noise import pnoise2, snoise2


Xstart=0
Xend=0

for i in range(0,2):
    name="./heightmap"+str(i)+".pgm"
    print(name)
    f = open(name, 'wt')
    octaves = 10
    freq = 16.0 * octaves
    f.write('P2\n')
    f.write('256 256\n')
    f.write('255\n')
    Xend=Xend+256
    for y in range(0,256):
        for x in range(Xstart,Xend):
            f.write("%s\n" % int(snoise2(x / freq, y / freq, octaves) * 127.0 + 128.0))
    f.close()
    Xstart=Xstart+256
    print(Xstart)
    print(Xend)
    print("...")

Un exemple simple, on peut voir que cela fonctionne en alignant la 1ere à gauche et la 2ieme image à droite, elles s’emboîte parfaitement.

Par contre j’obtiens un truc assez monotone… J’ai essayer de jouer sur les octave et la fréquence mais j’arrive à rien d’intéressant.

Es ce possible tous en ayant un emboîtement cohérent de générer des forment plus intéressante comme des rivières et des îles un peu dans ce style : Image utilisateur Image utilisateur

Pour info zds a un tuto sur les heightmap https://zestedesavoir.com/tutoriels/334/panda3d-et-heightmap/#2-10428_synthese-dune-heightmap

Eskimon

oui il y’a aussi le memesur openclassroomhttps://openclassrooms.com/courses/bruit-de-perlin

mais ces tutos arrive a la fin avec la même image que moi, un truc random qui ressemble à rien

j’ai regardé du coté de marble noise mais j’obtiens un résultat la aussi "qui ressemble rien" j’obtiens un truc dans ce style :Image utilisateur

j’ai effectivement des "rivières" mais c’est pas un paysage naturel

Ben, c’est dommage.

Il faut jouer avec les paramètres, faire des sommes des différents bruits. Utiliser un bruit comme facteur de blending entre d’autres bruits, etc. .

Et, ces bruits sont déjà utilisés dans de nombreux jeux, et ils n’ont pas l’air d’avoir de problèmes majeurs (cf Minecraft, Terraria, AoE et consorts).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte