Bonsoir,
Ça faisais longtemps que j’avais pas fait de notes (et je dois en faire sur quelques uns de mes projets qui sont fini).
Mais pour changer, ce soir, ça sera une note un peu 36-15 malife, et présentation de quelques trucs trouvés sur internet (au programme génération procédurale, moteur 3D, générateur de sons et surtout, Dwarf Fortress).
Pour commencer, parlons de la génération procédurale.
Qu'est ce que c'est ? C'est un moyen de générer (a la volée ou non) du contenu de manière pseudo aléatoire.
Mais ça sert a quoi ? C'est principalement utilisé en graphismes et dans les jeux vidéos, principalement pour générer des textures réalistes,
ou des environnements (a base de heightmap).
C'est beaucoup utilisé Dans des jeux "bac a sable" par exemple (qui a dit Minecraft ?), ou dans les demoscènes ou l'espace est trop limité pour intégrer des textures.
Mais la question qu'on se pose tous (ou du moins que je me suis posé, moi, pendant longtemps), c'est comment ça marche ?
Le plus important est l'aspect pseudo aléatoire, qui va donner l'aspect naturel a la texture ou a l’environnement.
On l'obtient grâce a divers algorithmes, mais je vais ici détailler les deux qui m'ont l'air les plus utilisés, j'ai cité : DiamondSquare et Perlin noise.
- DiamondSquare : l'algorithme est récursif, en deux étapes a chaque itération : carré et losange.
- Étape carré : on fait la moyenne des 4 points du carré et on élève son centre de cette moyenne plus un nombre aléatoire, le tout multiplié par la distance aux points du carré et par une variable de lissage (variable entre 0 et 1 permettant d'éviter un terrain en dents de scie).
- Étape losange : pour chaque losange formé par les points du carré et son centre, on élève le centre de la moyenne des points formant le losange + un nombre aléatoire, le tout multiplié par la distance entre le cercle et les points et par la variable de lissage.
- On réitère pour tout les carrés formés par l'ancien carré, son centre et les centres des losanges. Vous trouverez un lien vers un article bien plus détaille dans les liens de bas de page. Cet algorithme est tres utilisé pour la génération d’environnements, surtout montagneux. Il est utilisé par le logiciel Terragen par exemple.
- Perlin noise : La c'est nettement plus compliqué, je vais juste me contenter de le décrire et de dire pourquoi il est super bien. C'est en fait un algorithme qui va générer une heightmap composé d'éléments ayant tous la même taille. C'est un algorithme qui fait partie de la famille des gradient noise, la génération du bruit étant basé sur un gradient (une amélioration de cet algorithme est par exemple basée sur des simplexes plutôt que des gradients).
La particularité de l'algorithme est d’être valable pour n dimensions (bien qu'optimisé pour 4 dimensions maximum), ce qui permet, si l'on choisit une dimension de plus que celle qu'on souhaite représenter, de faire une animation fluide en effectuant une simple translation dans la dernière dimension.
Mais l'algorithme prend toute sa force lors d'une utilisation fractale : si on somme cette fonction avec elle même a différentes échelles, on obtient alors un bruit bien plus inégal, plus naturel ! On a alors presque fini, il suffit de jouer un peu avec le résultat pour avoir beaucoup d'effets différents (par exemple du feu, des nuages, du marbre ! ...). Mais l'article Wikipédia, et surtout son premier lien externe en parle bien mieux que moi :).
Vous avez maintenant les deux plus grandes clés de la génération procédurale, et les moyens d'en trouver d'autres, voir même, et c'est la force de telles fonctions, les mixer entre elles très facilement.
La génération procédurale étant survolée, on peut passer a Dwarf Fortress, le jeu le plus chronophage auquel j'ai joué depuis Minecraft, réussissant même l'exploit d’être encore plus moche !
Le topo : Dans un monde procéduralement généré on incarne un groupe de 7 nains (au début, le nombre augmente avec le temps) devant construire un avant poste, destiné a devenir une forteresse.
Il faudra alors jongler entre les différents métiers et possibilité pour fournir a manger et a se loger a tout le monde, ainsi que pour construire sa forteresse (ou devrais je dire creuser).
Le jeu est en ASCII art (de très bonne qualité) : "c" est un chat, "," de l'herbe, etc... , et représenté sur deux dimensions, mais il est possible également de monter et descendre sur l'axe des z.
Il faut donc dans un premiers temps trouver de quoi nourrir tout le monde et de quoi loger tout le monde, et pour cela il faut mettre en place les premières industries : charpentier, maçon...
Cependant le jeu est a réserver a une élite, la difficulté de prise en main (après peut être 10h de jeu, je suis encore loin de connaître 1/4 des possibilités et des besoins, et je joue toujours avec le wiki et un traducteur a coté), et le style graphique en rebouterons plus d'un. A réserver aux meilleurs :D
A part ça, au gré de mes pérégrinations, j'ai trouvé un utilitaire super bien fichu pour fournir des sons a vos jeux, ou même a vos applications qui sait :p.
Il s’appelle "sfxr" et a l'air d’être pas mal connu et apprécié dans le milieu des GameJam.
Il permet d'exporter toute une série de son tirés aléatoirement et personnalisables a souhaits, le tout en quelques clics, et cerise sur le gâteau, est Cross plates-formes ! Le lien est en bas du billet
Enfin, dernier truc trouvé sur le net, un moteur 3D basé non pas sur les surfaces, mais sur les volume. C'est une idée que j'avais eu il y a longtemps et dont je me demandais si une implémentation existais quelque part, et bien oui. Ce n'est pas entièrement ce a quoi je pensais, mais ça gère déjà une bonne partie de l'idée. En particulier l'altération d'une surface, qui peut être très coûteuse et longue a calculer pour un moteur basé sur les surfaces, qui est géré Piece of cake par ce moteur. Et encore une fois, cerise sur le gateau, il peut facilement s'interfacer avec lesdits moteurs "a surfaces" comme OpenGL.
Ce moteur s'appelle Termite3D, et est basé sur la bibliothèque de stockage / utilisation de volumes PolyVox.
Je vais regarder ça de très près et je vous tiens au courant.
Sur ce je vais bosser un peu avant la fin de ce week-end (qui se déroulera demain vers 15h15)
See ya all.
deneb
Les liens :
DiamondSquare
Perlin noise (le lien anglais est plus détaillé).
Dwarf Fortress (une communauté française existe, le lien est sur ce site).
sfxr (site du créateur, il y a d'autres programmes intéressants).
Termite3D (site de Thermite3D, contenant des exemples sympas).