web-dev-qa-db-fra.com

Comment commence-t-on avec la génération procédurale?

génération procédurale a récemment été mis à l'honneur (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 utilisant 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 le code "sérieux"? (c'est-à-dire pas un jeu)
141
perimosocordiae

Vous devriez probablement commencer avec un peu de théorie et des exemples simples tels que le 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 de procédures.

Fractals sont étroitement liés à la génération procédurale.

Terragen et SpeedTree vous montrera des possibilités étonnantes de génération de procédures.

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

En ce qui concerne le code "sérieux" ou non lié au jeu, les techniques de génération de procédures ont été utilisées pour:

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

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

http://pcg.wikidot.com/

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

48
Martin

La génération de contenu procédural est maintenant entièrement écrite pour le GPU. Vous devez donc connaître un langage de shader. Cela signifie GLSL ou HLSL. Ce sont des langues liées à OpenGL et DirectX respectivement.

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

Vous devriez également consulter WebGL si vous souhaitez passer directement à l'écriture de shaders sans avoir à passer le temps (considérable) nécessaire à la configuration d'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 bruit simplex ).

Shadertoy est une excellente référence pour en savoir plus sur la programmation par shader. Je vous recommanderais d'y aller une fois que vous avez codé le shader vous-même, car le code n'existe pas mathématiquement, mais c'est ainsi que le contenu procédural est fait.

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

14
fishfood

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

  1. NetHack et ses partenaires sont open source et reposent fortement sur la génération procédurale de niveaux (cartes). Lien aux téléchargements de celui-ci. Si vous êtes plus intéressé par la génération de paysages/textures/nuages, je vous recommanderais de chercher Gamasutra et GameDev qui contient pas mal d'articles sur ces sujets.

  2. Autant que je sache, il n'y a pas beaucoup de différence entre les langues. La plupart du code que vous verrez sera dans C/CPP car il reste encore la langue officielle des développeurs de jeux, mais vous pouvez utiliser ce que vous voulez ...

  3. Cela dépend si vous avez un projet pouvant tirer parti de cette technologie. J'ai vu la génération procédurale utilisée dans les simulateurs pour l'armée (qui peut être considéré comme un jeu, même s'ils ne sont pas très jouables :)).

Et une petite remarque - ma définition si la génération procédurale est quelque chose qui génère beaucoup de données à partir d’un petit nombre de règles ou de motifs et de beaucoup d’aléatoire, vos résultats peuvent varier :)

8
Mikle

Il existe un excellent livre sur le sujet:

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

Il favorise les effets visuels et la génération d’animation en temps non réel, mais je suppose que la théorie et les idées peuvent être utilisées en dehors de ces domaines.

Il convient également 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 mettre au point des solutions procédurales aux problèmes, que vous pourrez ensuite traduire en code.

Bien qu’il s’agisse d’un package plutôt coûteux, il est fourni avec une licence d’évaluation gratuite, qui peut être utilisée comme un outil pédagogique et/ou technique très agréable.

8
beemtee

Si vous voulez un exemple de tectonique de plaques génératrices de monde, érosion, pluie-ombre, etc., consultez: https://github.com/ftomassetti/lands

À cela s’ajoute un simulateur d’évolution des civilisations:

https://github.com/ftomassetti/civs

Un blog complet sur une ressource intéressante est:

dungeonleague.com/

Il est abandonné maintenant mais vous devriez lire tous ses posts

8
Federico Tomassetti

La génération procédurale est fortement utilisée dans la demoscene pour créer des graphiques complexes dans un petit exécutable. Will Wright a même dit qu'il s'était inspiré de la demoscene pour fabriquer Spore. C'est peut-être votre meilleur endroit pour commencer.

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

7
anon

le plus important est d'analyser la structure des routes, des villes, des blocs 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 ceux qui considèrent la construction de villes comme une simple question de technologie informatique.

ensuite, vous devez développer des solutions pour créer cette géométrie en plusieurs étapes distinctes. vous devez définir des règles qui constituent une ville crédible. si vous aimez la modélisation 3D, vous devez repenser tout ce que vous avez appris pour que l'ordinateur puisse suivre vos instructions dans toutes les situations.

pour ne pas perdre la trace, vous devez configurer un grand nombre d'opérateurs qui ne sont responsables que de petites parties du processus. cela facilite beaucoup le débogage, l’extension et l’amélioration de votre système. à l'étape suivante, vous devez relier 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 consistent principalement en des boîtes de forme aléatoire avec des textures de fenêtres: (

3
stan