Je n'ai pas encore trouvé de question sur ces lignes, corrigez-moi si je me trompe.
Les arbres (et la faune en général) sont courants dans les jeux. De par leur nature, ils sont un bon candidat pour la génération procédurale.
Il y a bien sûr SpeedTree , si vous pouvez vous le permettre; pour autant que je sache, cela ne donne pas la possibilité de générer vos maillages d'arbre au moment de l'exécution. Ensuite, il y a SnappyTree , un générateur d'arborescence en ligne basé sur webgl basé sur proctree.js, qui représente environ 500 lignes de javascript.
On pourrait utiliser l'une des méthodes ci-dessus (ou un autre générateur d'arbre sur lequel je ne suis pas tombé) pour créer quelques dizaines de maillages d'arbre au préalable - ou les modéliser à partir de zéro dans un modélisateur 3D - puis les mettre en miroir / redimensionner au hasard pour quelques autres variantes ..
Mais je préfère avoir un générateur de maillage d'arbre gratuit et pouvant être lié.
Solutions possibles:
- Portez proctree.js en c ++ et gérez la licence open source (ne semble pas être gpl, donc cela pourrait être faisable; l'auteur peut également être disposé à coopérer pour rendre la licence encore plus gratuite).
- Rouler le mien sur la base des systèmes L.
- Ne vous embêtez pas, utilisez simplement des arbres générés hors ligne.
- Utilisez une autre méthode que je n'ai pas encore trouvée.
Mise à jour 2015 : a fini par porter proctree.js sur c ++ https://github.com/jarikomppa/proctree
la source
Réponses:
J'ai fait pas mal de travail dans ce domaine, bien que la plupart de mes démos soient plus anciennes:
(flash 2010)
http://genesisbbs.com/appstem.html (cliquez et faites glisser la souris)
http://genesisbbs.com/appstem2.html
(directX 2006)
http://vimeo.com/5206795
Je vous encourage fortement à rouler le vôtre, si vous le faites pour le plaisir. Vous aurez presque certainement besoin de travailler avec Quaternions . Les comprendre est très difficile, mais vous n'avez pas besoin d'aller trop loin pour les utiliser. Considérez un quaternion comme un vecteur avec une composante supplémentaire: la rotation. Si vous voulez que vos plantes se tordent et se tournent au fur et à mesure de leur croissance, elles auront besoin de quaternions.
Autres choses à apprendre:
Chiffres de Lichtenberg Diagrammes de Voronoi de
croissance laplacienne Algorithmes de voisin le plus proche (google them)
Je (personnellement) découragerais l'utilisation des L-Systems, autrement que peut-être pour dicter une grammaire pour ce qui pousse où, c'est-à-dire [graine -> [racine] / [tronc-> branche -> [fleur / feuille]]. Les systèmes L ne sont pas bons pour répondre aux stimuli environnementaux tels que la direction du soleil, la gravité, les obstacles, etc.
Quant aux problèmes de vitesse, un seul arbre peut être généré en temps réel. Pour des raisons de mémoire et de performances, vous ne souhaiterez probablement générer qu'un petit ensemble d'arbres et les créer un peu si vous avez affaire à des forêts.
La plupart des générateurs d'arbres existants ne sont pas très bons (à mon humble avis), à part ceux haut de gamme utilisés pour Maya et autres.
Je recommande également fortement, fortement d'utiliser des voxels pour générer l'arbre (puis une peau avec un maillage si nécessaire). L'avantage des voxels est que vous pouvez facilement simuler des algorithmes de croissance en utilisant des choses comme la croissance laplacienne et divers automates (pas le jeu de la vie de Conway, mais d'autres règles produisent des résultats intéressants).
la source
Personnellement, je commencerais probablement par des arbres pré-générés et seulement une fois que j'aurais un moteur de rendu de forêt kick-ass - complet avec des buissons, de l'herbe, des champignons et des trucs - devrais-je commencer à chercher si j'ai besoin de plus de maillages d'arbres variables.
Cela étant dit, vous pouvez jeter un œil à ngPlant . Il comprend une application de modélisation d'arborescence procédurale GPL, mais les bibliothèques qui effectuent tous les travaux lourds sont sous licence BSD. Il est écrit en C ++.
Pour le rendu de la forêt, il existe un moteur de rendu (sous licence MIT) Géométrie paginée pour Ogre .
la source
Le principal problème avec les arborescences procédurales n'est pas de les générer, mais de les rendre toutes à chaque image au moment de l'exécution. C'est la raison pour laquelle vous verrez de nombreux arbres identiques dans les jeux AAA, ce n'est pas qu'ils ne pouvaient pas implémenter ou écrire une technologie qui a créé des arbres uniques, c'est que cela signifierait que vous auriez à supprimer une charge d'autres fonctionnalités pour le jeu courir.
Si vous avez plusieurs arbres identiques, vous pouvez les faire pivoter et éventuellement les mettre à l'échelle uniformément pour les rendre différents sous tous les angles, et comme ils sont identiques, vous pouvez les instancier afin d'économiser de précieuses millisecondes à chaque image.
En pensant à ce problème pendant une seconde, il pourrait y avoir un juste milieu - que diriez-vous de générer quelques parties d'arbres différentes, des troncs, des branches, des feuilles, etc. mais celles qui s'emboîtent toutes de manière modulaire, comme l'arbre lego. Ensuite, vous pouvez avoir de nombreuses combinaisons et donc des arbres tout à fait uniques, mais vous pouvez également créer toutes les nombreuses parties pour un jeu plus rapide.
la source
Je suis tombé sur l'arbre [d] il y a quelque temps ... Je ne l'ai utilisé que pendant une petite période pour tester un projet, mais seulement parce que j'ai arrêté le développement - l'outil vous offre un large éventail d'options de générateur pour jouer avec et , d'après ce dont je me souviens, est assez rapide. Un lien est ci-dessous.
L'inconvénient est que ce n'est pas un générateur d'arbres que vous pouvez intégrer. Vous devrez pré-générer quelques arbres, puis modifier les données lors de leur placement au moment de l'exécution pour modifier leur unicité.
la source
Ceci est une petite solution intéressante, et je l'ai utilisée dans un projet et je peux vous dire qu'elle est assez rapide pour générer des arbres à la volée pourquoi le jeu fonctionne. Ce n'est certainement pas détaillé, mais si vous vous débarrassez des panneaux d'affichage, cela pourrait être assez soigné.
http://ltrees.codeplex.com/
la source