Construire des villes en un clic de souris avec Houdini et Python



Dans le développement de jeux, des pipelines, des algorithmes et de petits processus sont constamment créés et appliqués, ce qui économise beaucoup de temps et d'efforts. Ces solutions sont souvent simples mais élégantes.

Cet article est à ce sujet. L'auteur a trouvé une méthode de construction de villes virtuelles, qu'il souhaite à l'avenir transformer en un outil à part entière de concepteur de niveaux.

Dans cet article, je vais passer en revue les paramètres de base de l'outil City Builder dans Houdini, qui peut créer des villes avec de simples clics de souris. Notez qu'il ne fonctionne qu'à l'intérieur de Houdini en utilisant les états de la visionneuse Python.

Référence


Oscar Stolberg a été pour moi la plus grande source d'inspiration . Son travail était impressionnant et m'a fait me demander s'il était possible de répéter cela à Houdini. Ma tentative peut également être considérée comme la preuve qu'il est assez réaliste de reproduire une idée dans un autre logiciel.



La configuration initiale


La première chose à faire est la grille ou l'avion sur lequel les maisons seront construites. Théoriquement, cela pourrait être n'importe quoi, par exemple, des triangles, des hexagones, etc. Le moyen le plus simple que j'ai trouvé est d'utiliser un quad mesh.

Commencez par le nœud du cercle et placez un nœud de maillage instantané en dessous (c'est à partir des outils Labs, alors assurez-vous de les avoir installés).



Après cela, placez le nœud d'extrusion - plus tard, il sera utilisé pour extruder les primitives sélectionnées par la souris.



La configuration sera minimisée en HDA, vous y créerez un paramètre pour travailler avec du code Python. Dans ce cas, vous devez contrôler le paramètre de groupe pour étendre et remplir les primitives sur lesquelles la souris clique.



États de la visionneuse Python


Vous pouvez maintenant accéder au code Python. Si vous êtes nouveau dans les états de visionneuse, j'ai déjà écrit une introduction de base .

Créez un nouvel état de visionneuse et commencez avec un modèle vide. Cela ne générera que le morceau de code qui est vraiment nécessaire.



Il y a quelques choses à ajouter. Vous pouvez les diviser en 2 parties:

  • Obtenir la géométrie à visualiser avec des clics de souris.
  • Obtenir primitif avec un clic de souris.

Pour commencer, dans la partie init, ajoutez une nouvelle variable pour la géométrie appelée self.geometry = None. Ajoutez ensuite la fonction OnEnter - cette méthode est appelée lorsque l'état est activé par l'utilisateur créant / sélectionnant le nœud et appuyant sur Entrée dans la fenêtre.

C'est là que la géométrie actuelle est stockée dans self.geometry lui-même. Fait en utilisant node.geometry ().



Maintenant, il y a un lien avec la géométrie.

La partie suivante obtient un nombre primitif basé sur la position de la souris sur le clic. Pour ce faire, créez la fonction OnMouseEvent - il s'agit du traitement des événements de la souris (tels que les clics ou la position de la souris).

Au début de l'événement de souris, créez des variables pour travailler. Obtenez ensuite l'intersection avec la géométrie à l'aide de la fonction GeometryIntersector et utilisez self.geometry.

De cette intersection, vous obtiendrez les informations dont vous avez besoin, découvrez et imprimez un nombre primitif.



Si tout est fait correctement, cela se révélera comme suit:



Le dernier réglage consiste à utiliser un nombre primitif dans le paramètre de groupe, ce que vous avez fait au début. Remplacez la chaîne par une nouvelle, appelez le paramètre group et définissez le nombre primitif comme valeur. Notez qu'il est également converti en chaîne, car group est un paramètre de chaîne.



Il en résultera ceci:



C'est l'idée principale avec laquelle j'ai commencé à créer un outil. À partir de maintenant, vous stockerez des informations, pas les réécrirez. Cette configuration fournira une base pour le démarrage et d'autres expériences.

Détail


Une fois que vous avez ces cubes, vous pouvez tout faire avec. Si vous avez besoin d'une ville, créez un générateur de maison - il existe de nombreux tutoriels sur ce sujet sur Internet. En attendant, mon exemple.

Un mur modulaire est copié de chaque côté du cube.



Une bordure biseautée et dépliée aux UV.



La performance est très importante ici. Pour que l'outil fonctionne rapidement et lorsque vous appuyez sur la maison apparaît instantanément, vous devrez faire une optimisation. Pour ce faire, vous pouvez essayer d'utiliser le nombre minimum de nœuds de boucle et de nœuds booléens sur le réseau.

L'avenir de l'instrument


Je veux aller plus loin et en faire un outil de création de niveaux. L'idée est que vous pouvez rapidement prototyper des niveaux finis en quelques clics. J'ai été inspiré par le Hob .



Enfin, une petite démo de ce que j'ai eu en ce moment:


All Articles