Comment débuter avec la génération procédurale?


147

La génération procédurale a été mise à l'honneur récemment (par Spore, MMO, etc.), et cela semble être une technique de programmation intéressante / puissante.

Mes questions sont les suivantes:

  • Connaissez-vous des projets de taille moyenne qui utilisent des techniques de génération procédurale?
  • Quelle langue / classe de langues est la meilleure pour la génération procédurale?
  • Pouvez-vous utiliser la génération procédurale pour du code «sérieux»? (c'est-à-dire pas un jeu)

1
Vous vous demandez si cet article de X-Team vous serait utile? x-team.com/blog/…
Adam Gerard

Réponses:


117

Vous devriez probablement commencer par un peu de théorie et des exemples simples tels que l' algorithme de déplacement du point médian . Vous devriez également en apprendre un peu plus sur Perlin Noise si vous souhaitez générer des graphiques. J'ai utilisé cela pour me lancer dans mon projet de dernière année sur la génération procédurale.

Les fractales sont étroitement liées à la génération procédurale.

Terragen et SpeedTree vous montreront des possibilités étonnantes de génération procédurale.

La génération procédurale est une technique qui peut être utilisée dans n'importe quel langage (elle n'est certainement pas limitée aux langages procéduraux tels que C, car elle peut être utilisée dans les langages OO tels que Java et les langages logiques tels que Prolog). Une bonne compréhension de la récursivité dans n'importe quelle langue renforcera votre compréhension de la génération procédurale.

En ce qui concerne le code `` sérieux '' ou non-jeu, des techniques de génération procédurale ont été utilisées pour:

  • simuler la croissance des villes afin de planifier la gestion du trafic
  • pour simuler la croissance des vaisseaux sanguins
  • SpeedTree est utilisé dans les films et les présentations architecturales

Ce bruit de Perlin ressemble beaucoup au filtre "nuages" de Photoshop.
doubleOrt

Premier lien rompu
Jean Carlo Machado

Certaines musiques électro utilisent la génération procédurale pour être créées
Poyda

50

Wiki de génération de contenu procédural:

http://pcg.wikidot.com/

si ce que vous voulez n'est pas là, ajoutez-le;)


11
Je ne peux pas copier le wiki entier ici! Il n'y a pas de «partie essentielle».
Martin

12

La génération de contenu procédural est désormais entièrement écrite pour le GPU, vous devrez donc connaître un langage de shader. Cela signifie GLSL ou HLSL. Ce sont des langages liés respectivement à OpenGL et DirectX.

Bien que ma préférence personnelle soit pour Dx11 / HLSL en raison de la vitesse, d'une courbe d'apprentissage plus facile et de Frank D Luna , OpenGL est pris en charge sur plus de plates-formes.

Vous devriez également consulter WebGL si vous voulez vous lancer directement dans l'écriture de shaders sans avoir à passer le temps (considérable) nécessaire pour configurer un moteur de jeu OpenGL / DirectX.

Le contenu procédural commence par le bruit.

Vous devrez donc vous renseigner sur le bruit Perlin (et son successeur Simplex noise ).

Shadertoy est une superbe référence pour apprendre la programmation des shaders. Je vous recommanderais d'y venir une fois que vous avez essayé vous-même le codage des shaders, car le code n'existe pas pour les mathématiciens, mais c'est ainsi que le contenu procédural est conçu.

Shadertoy a été créé par un génie procédural, Inigo Quilez , un produit de la scène démo qui travaille chez Pixar. Il a quelques vidéos youtube ( excellent exemple ) de sessions de codage en direct et je peux également les recommander.


17
Que voulez-vous dire "la génération de contenu procédural est désormais entièrement écrite pour le GPU"? Vous parlez simplement de brins d'herbe? Vous ne parlez pas de la génération de cartes ou de villes pour les jeux, par exemple, n'est-ce pas?
Dronz

2
Oui, je pense que le commentaire «tous» ici est une sur-généralisation, mais dans le domaine de la génération de paysages (qui, je suppose, est le type le plus courant), c'est une réponse utile. Bien que je ne puisse pas imaginer qui voudrait regarder quelqu'un taper du code dans une vidéo.
Nate CK

1
Quelqu'un qui veut apprendre à écrire du code complexe, tel que des shaders, ou apprendre à utiliser des modèles complexes dans leur conception. Et cela ne fait qu'effleurer la surface.
Ultroman the Tacoman

"La génération de contenu procédural est désormais entièrement écrite pour le GPU, vous aurez donc besoin de connaître un langage de shader." est tout simplement faux et 100% trompeur. (Je fais un projet de génération procédurale simple, j'ai écrit 0 ligne de code shader dans ma vie)
activité de réduction


8

Je ne suis pas un expert en la matière, mais je peux essayer d'apporter quelques réponses:

  1. NetHack et son réseau sont open source et reposent fortement sur la génération procédurale de niveaux (cartes). Lien vers les téléchargements de celui-ci. Si vous êtes plus intéressé par la génération de paysages / textures / nuages, je vous recommande de rechercher Gamasutra et GameDev qui ont pas mal d'articles sur ces sujets.

  2. AFAIK Je ne pense pas qu'il y ait beaucoup de différence entre les langues. La plupart du code que vous voyez sera en C / CPP car c'est toujours la langue officielle des développeurs de jeux, mais vous pouvez utiliser tout ce que vous voulez ...

  3. Eh bien, cela dépend si vous avez un projet qui peut bénéficier d'une telle technologie. J'ai vu la génération procédurale utilisée dans les simulateurs pour l'armée (qui peuvent être considérés comme un jeu, même s'ils ne sont pas très jouables :)).

Et une petite note - ma définition si la génération procédurale est quelque chose qui génère beaucoup de données à partir d'une petite quantité de règles ou de modèles et beaucoup de caractère aléatoire, vos résultats peuvent varier :)


8

Il existe un excellent livre sur le sujet:

http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486

Il est biaisé vers des effets visuels non en temps réel et la génération d'animation, mais la théorie et les idées sont utilisables en dehors de ces domaines, je suppose.

Il peut également être intéressant de mentionner qu'il existe un progiciel professionnel qui implémente un flux de travail procédural complet appelé Houdini de SideFX. Vous pouvez l'utiliser pour inventer et prototyper des solutions procédurales à des problèmes, que vous pourrez ensuite traduire en code.

Bien qu'il s'agisse d'un package assez coûteux, il dispose d'une licence d'évaluation gratuite, qui peut être utilisée comme un très bel outil éducatif et / ou d'ingénierie.


7

La génération procédurale est largement utilisée dans la démoscène pour créer des graphiques complexes dans un petit exécutable. Will Wright a même déclaré qu'il s'était inspiré de la démoscène lors de la création de Spore. C'est peut-être votre meilleur point de départ.

http://en.wikipedia.org/wiki/Demoscene


3

le plus important est d'analyser la structure des routes, des villes, des pâtés de maisons et des bâtiments. découvrez ce que tous les bâtiments, par exemple, ont en commun. regardez des photos, des cartes, des plans et la réalité. si vous faites cela, vous aurez une longueur d'avance sur les gens qui considèrent la construction de la ville comme une simple question de technologie informatique.

Ensuite, vous devez développer des solutions sur la façon de créer cette géométrie en petites étapes distinctes. vous devez définir des règles qui composent une ville crédible. si vous êtes dans la modélisation 3D, vous devez repenser beaucoup de ce que vous avez appris pour que l'ordinateur puisse suivre vos instructions dans n'importe quelle situation.

Afin de ne pas perdre de vue, vous devez configurer de nombreux opérateurs qui ne sont responsables que de petites parties de l'ensemble du processus. cela rend le débogage, l'expansion et l'amélioration de votre système beaucoup plus faciles. à l'étape suivante, vous devez lier ces opérateurs et vérifier les résultats en modifiant les paramètres.

J'ai vu trop de "générateurs de villes" qui se composent principalement de boîtes de forme aléatoire avec des textures de fenêtre dessus: (


3

(Plus de 10 ans plus tard ...)

La génération procédurale signifie uniquement que le code est utilisé pour générer les données au lieu d'être fabriqué à la main. Par exemple , si vous voulez générer une forêt avec des arbres que vous n'allez concevoir chaque arbre à la main , donc le codage est plus efficace pour générer les variations. Cela pourrait être la génération des graphiques de l'arbre, la taille, la structure, le placement ...

En général, il existe une sorte de interaction avec quelques règles , en plus de cela, vous pouvez ajouter un peu de hasard et de logique, combiner toutes ces techniques ... Tout ce qui est quelque peu chaotique mais pas trop chaotique peut donner des résultats intéressants.

Voici quelques techniques notables:

Quelques jeux célèbres pour leur génération procédurale:

Tutoriel vidéo sur la génération procédurale de terres .

Conférence sur la génération de contenu procédural pour les jeux, a beaucoup de vidéos sur le sujet: toutprocédural

S'amuser.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.