Idée d' "algorithme" pour dessiner un paysage à base de couleurs ?

a marqué ce sujet comme résolu.

Bonjour tout le monde,

Bon j’vous explique le bail vite fait, je dispose de diverses couleurs. Chacune d’elles définit un et un seul type de dessin : une rivière, un arbre, de la terre, de la roche, du gravier, de l’herbe, du buisson, des fleurs, le ciel, des nuages, etc.

Je veux les mettre dans un canvas vierge et ainsi construire un paysage à base de couleurs, pour des raisons que je ne souhaite pas dévoiler mais qui sont facilement devinables avec un léger background en ML. :ninja: Le topic ne porte pas du tout sur "comment passer d’une couleur à une photo de l’entité qu’elle représente". (ça je sais déjà le faire en ML et ça marche bien)

L’idée est donc de faire une composition cohérente avec ces couleurs : d’une génération de canvas à une autre, il faut donc :

  • Ne pas utiliser toutes ces couleurs sinon ce serait trop chargé.

  • La proximité entre les différentes couleurs doit être cohérente (pas de nuage au niveau du sol, c’est à peu près la seule contrainte de ce type que je vois).

  • Le paysage doit être cohérent (ressembler à des paysages qu’on a l’habitude de voir, pas trop imaginaires donc incohérents).

  • Le nombre d’occurrences doit être pris en compte d’une génération de canvas à une autre pour produire des paysages différents à chaque fois : en effet on peut avoir un groupe de fleurs à gauche, un autre à droite et au milieu un groupe de terre (donc ici on a deux couleurs de fleurs et une couleur de terre dans le canvas).

  • La localisation d’une couleur donnée doit différer d’une génération de canvas à une autre pour produire des paysages différents à chaque fois.

Pour l’instant mon algorithme (Python) consiste en :

  1. Définir avec random integer quel type d’affichage ("layout") utiliser. En gros je pense que je vais définir 2 ou 3 layouts. Un layout définit dans les grandes lignes quelles couleurs peuvent être utilisées et détermine leur localisation (qui sera tout de même légèrement changée par la suite, cf. ci-dessous). Cela permet de satisfaire les points 1, 2 et 3. Un layout dira donc : dans le coin bas gauche on aura une couleur "terrain" (donc roche, ou bien terre, gravier, etc.), dans le coin bas droit et milieu droit une couleur de "végétal" (donc fleurs, ou bien buisson, etc.).

  2. Utiliser random integer pour définir la couleur d’un type : c’est là qu’on choisit si la couleur de type "terrain" utilisée sera une roche, ou bien une terre, ou bien un gravier.

  3. Utiliser un random integer pour bouger un petit peu la localisation définie par le layout : on satisfait donc le dernier point.

Ma question

Que pensez-vous de ce petit algo ? Y voyez-vous des pbs qui en résulteront lorsque je générerais mes canvas ? Connaissez-vous d’autres façons de faire plus simples, plus rapides et/ou plus efficaces à mettre en place ? Avez-vous connaissance d’études/prototypes/papiers de recherche qui s’y sont déjà intéressés ?

Merci bien. Bonne journée.

+0 -0

Salut,

Il y a énormément de travaux de ce genre qui existent. Tu peux trouver des infos en cherchant des mots clés comme procedural landscape generation ou procedural terrain generation. C’est très utilisé dans les jeux vidéo notamment. Certaines techniques peuvent utiliser de l’apprentissage automatique, mais ce n’est pas nécessaire.

Le défi de ce genre de techniques est de faire des choses intéressantes à regarder. Souvent les procédures automatiques ont tendance à faire des choses relativement barbantes si elles ne sont pas guidées un minimum.

Salut,

Il y a énormément de travaux de ce genre qui existent. Tu peux trouver des infos en cherchant des mots clés comme procedural landscape generation ou procedural terrain generation. C’est très utilisé dans les jeux vidéo notamment. Certaines techniques peuvent utiliser de l’apprentissage automatique, mais ce n’est pas nécessaire.

Le défi de ce genre de techniques est de faire des choses intéressantes à regarder. Souvent les procédures automatiques ont tendance à faire des choses relativement barbantes si elles ne sont pas guidées un minimum.

Aabu

On parle bien de juste répartir les couleurs hein ? Pas d’associer une couleur à une image :)

Là, ce que tu vas générer, c’est juste trois dégradés superposés, au mieux. Faut te renseigner selon ce que @Aabu a dit.

dvbmgr

Mais on est d’accord que je parle juste d’afficher des bouts de couleurs dans un canvas hein ?

J’obtiens déjà des paysages très convaincants sinon hein.

+0 -0

Salut,

Il y a un truc qui n’est pas très clair, c’est si le paysage que tu arrives à générer pour l’instant est déjà typé ou non.

Si il est déjà typé, je ne comprends pas ta question : il suffit de colorer les composantes suivant la palette dont tu disposes, il n’y a rien de particulier là-dedans.

Si il n’est pas déjà typé, j’ai l’impression que tu mélanges deux choses orthogonales : le type et la couleur des terrains. Tu as intérêt à générer un paysage typé sans te soucier de la couleur finale du tout, puis le colorier en utilisant la palette désirée ensuite. Ce sont deux problèmes différents, et tu gagneras en clarté en les séparant.


PS : j’ai pris la liberté d’enlever le tag "algorithm", la version française suffit.

+2 -0

Tu dis que

J’obtiens déjà des paysages très convaincants sinon hein.

Si tu fais ton paysage après avoir mis des couleurs, quelle est l’étape qui te pose problème ?

Par ailleurs, ça me semble un peu étrange comme manière de procéder… Si je comprends bien, tu colories puis tu utilises les couleurs pour transformer en paysage ? C’est très curieux, comment tu fais si par hasard tu as la même couleur pour deux types de terrain différents ? Ou à l’inverse plusieurs couleurs pour le même type de terrain (comme des fleurs de plusieurs couleurs) ? Ou bien si tu veux améliorer le rendu et passer à des textures plutôt que des choses monochromatiques ? Tu devrais plutôt procéder dans l’autre sens, générer un terrain composé de fleurs, de terre, d’herbe, etc, puis seulement ensuite appliquer les couleurs souhaitées suivant le type de terrain.

Ce que mentionne @Aabu (procedural terrain generation) va te permettre de produire un terrain typé (i.e. une carte disant que tel endroit est tel catégorie de terrain). La question de la couleur (i.e. de quelle couleur doit être tel type de terrain) doit venir à la fin, c’est un "détail" d’ordre cosmétique une fois que tu as généré le terrain.

+0 -0

Si tu fais ton paysage après avoir mis des couleurs, quelle est l’étape qui te pose problème ?

la répartition des couleurs dans le canvas vierge, nécessaire à l’obtention des paysages. Tout simplement parce qu’elle détermine le paysage généré, je cherche à diversifier cela.

Par ailleurs, ça me semble un peu étrange comme manière de procéder… Si je comprends bien, tu colories puis tu utilises les couleurs pour transformer en paysage ? C’est très curieux, comment tu fais si par hasard tu as la même couleur pour deux types de terrain différents ?

Une couleur = une entité, genre marron = rocher, vert = buisson, jaune = fleurs etc

Ou bien si tu veux améliorer le rendu et passer à des textures plutôt que des choses monochromatiques ?

C’est du ML, les paysages générés sont 100% réalistes et les couleurs, formes etc utilisées semblent dépendre de ce qu’il y a juste à côté, j’sais pas comment mon script marche mais il fonctionne très bien

Donc pas besoin d’améliorer le rendu et les textures, c’est déjà nickel

Tu devrais plutôt procéder dans l’autre sens, générer un terrain composé de fleurs, de terre, d’herbe, etc, puis seulement ensuite appliquer les couleurs souhaitées suivant le type de terrain.

j’comprends pas ^^ là mon but c’est juste de générer des terrains réalistes, pas de passer à des bouts de couleurs.

Notez juste un truc : chaque fois que je parle de couleurs, c’est genre des rectangles, ronds etc. pleins et dont la seule couleur est celle qui définit l’entité, y a pas de dégradés, et il ne s’agit pas de dessiner une fleur avec plusieurs couleurs ou même une seuel couleur. Il s’agit de dessiner un rectangle, un rond, un truc, avec cette couleur, et mon script placera à cet endroit autant de fleurs d’autant de formes et d’autant de couleurs qu’il le veut. (Machine learning)

La question de la couleur (i.e. de quelle couleur doit être tel type de terrain) doit venir à la fin, c’est un "détail" d’ordre cosmétique une fois que tu as généré le terrain.

ouais non justement j’ai donc mal expliqué, il faudra que j’édite l’OP. C’est ce que je craignais. Vous pensez que la couleur que j’applique colorie les terrains etc. Non du tout.

Un groupe de pixels d’une même couleur dit juste au programme "essaie de mettre à cet endroit des fleurs" (par exemple). Après le programme se débrouille je sais pas comment, c’est une boîte noire mon truc, mais ça marche. Il y met les fleurs.

OK, donc ce que tu appelles couleur, ce sont les types directement, en fait. D’où la confusion.

Donc ton problème, c’est bien celui de la génération d’un terrain typé, pas de son rendu. La piste d'@Aabu est donc exactement ce qu’il te faut.

Il va être difficile d’être plus précis, la génération procédurale est un domaine extrêmement vaste…

+2 -0

@Fantasio : ah oui pas bête mais ça n’existe pas en pré-entraîné, jveux pas les entraîner

TumulteClassicisme

Regardes mieux : https://github.com/NVlabs/SPADE. Pour passer des paramètres c’est tout de même plus simple que de jouer avec un Canvas intermédiaire.

Yarflam

Ah merci j’vais voir s’ils mettent à dispo un truc qui génère direct le paysage à partir du hasard, sans segmentation map !! ça pourrait être super sympa çaaaa nickel merci bcp bg

Tu arrives vraiment à avoir des résultats corrects avec ce genre d’outils ?

Parce que tous ceux que j’ai eu l’occasion d’essayer (celui mentionné, ceux qui génèrent des façades, des chats, des sacs…), les images de présentation sont intéressantes mais dès que tu essaies de faire quelque chose tu n’obtiens qu’une bouillie de pixels ou un bordel qui n’a aucun sens.

Ce que je comprends surtout c’est que TumulteClassicisme cherche depuis déjà deux posts à générer des photos de paysages qui pourraient être utilisés pour l’apprentissage de son SRGAN … pourquoi ne pas prendre des photos sur une banque d’images ?

Plutôt que :

  • Générer des photos avec un GAN ou une génération procédurale.
  • Chercher une méthode magique sur Photoshop pour améliorer n’importe quelle photo.
  • Passer par du canvas ou des nombres aléatoires avant de le servir à un GAN.

J’ai envie dire : prends ce qui existe déjà. Des photos de paysages sur internet, c’est pas ce qui manque ! :) et t’auras plus vite fait de coder/utiliser un mini web scraper pour récupérer tout ce que tu as besoin. C’est une idée parce que j’ai l’impression que tu passes un peu vite sur l’acquisition de connaissances ; avant d’utiliser un outil (ici un GAN) il faut un minimum comprendre les fondamentaux (et là encore y’a des milliers de tutos sur internet).

+0 -0

@Fantasio : ah oui pas bête mais ça n’existe pas en pré-entraîné, jveux pas les entraîner

TumulteClassicisme

Regardes mieux : https://github.com/NVlabs/SPADE. Pour passer des paramètres c’est tout de même plus simple que de jouer avec un Canvas intermédiaire.

Yarflam

@Yarflam il semblerait après relecture de la page GitHub, qu’il faille quand même passer une segmentation map sous forme de dessin, dans un répertoire dédié aux inputs (nom du répertoire : "data").

Tu arrives vraiment à avoir des résultats corrects avec ce genre d’outils ?

Parce que tous ceux que j’ai eu l’occasion d’essayer (celui mentionné, ceux qui génèrent des façades, des chats, des sacs…), les images de présentation sont intéressantes mais dès que tu essaies de faire quelque chose tu n’obtiens qu’une bouillie de pixels ou un bordel qui n’a aucun sens.

SpaceFox

Ouais ouais bg ça le fait en vrai ça va ! on peut obtenir de beaux trucs faut tester

Ce que je comprends surtout c’est que TumulteClassicisme cherche depuis déjà deux posts à générer des photos de paysages qui pourraient être utilisés pour l’apprentissage de son SRGAN … pourquoi ne pas prendre des photos sur une banque d’images ?

Plutôt que :

  • Générer des photos avec un GAN ou une génération procédurale.
  • Chercher une méthode magique sur Photoshop pour améliorer n’importe quelle photo.
  • Passer par du canvas ou des nombres aléatoires avant de le servir à un GAN.

J’ai envie dire : prends ce qui existe déjà. Des photos de paysages sur internet, c’est pas ce qui manque ! :) et t’auras plus vite fait de coder/utiliser un mini web scraper pour récupérer tout ce que tu as besoin. C’est une idée parce que j’ai l’impression que tu passes un peu vite sur l’acquisition de connaissances ; avant d’utiliser un outil (ici un GAN) il faut un minimum comprendre les fondamentaux (et là encore y’a des milliers de tutos sur internet).

Yarflam

Nan par contre c’est une bonne idée mais inapplicable vis-à-vis de mon projet, mais merci chef

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