Une fois le système de structure mit en place, j'ai peu commencer à apporter un peu plus de complexité dans ma construction de building, ajouter des détails.

J'ai donc commencer a faire des test avec les "socket", le principe est asse simple. J'ajoute un "socket" sur un mesh et ensuite dans le blueprint je fais un "attach to" pour y placer un autre mesh et ainsi le second mesh ce retrouve sur la location du socket. Malheureusement dans mes tests cela fonctionnait avec des "Static Mesh" mais par soucie d'optimisation je devait utiliser des "instances" ce qui empêchait l'utilisation du node "Attach to".
Un socket est ajouté sur le mesh rouge. Je viens faire un "attach to" du cube sur le socket.

Pour contourner ce problème il a fallut que a chaque itération je récupère la position du socket et que je l'ajoute a la position du mesh qui a le socket. Cette addition de vector me donnera ma position final, celle qui sera également la position du mesh qui viendra ce positionner sur le socket.

Ici j'ai ajouté un mesh "rock" sur un "socket". Tout les meshs ici sont des instances !

A ce stade je n'ajoute qu'un socket par mesh, mais la suite fut un peu plus compliqué a mettre en place. Car mon but est bien d'avoir plusieurs socket sur un même mesh et ainsi avoir plus d'éléments qui puissent être modifié. Pour cela j'ai passé beaucoup de temps a chercher comment faire.

Puis je me suis demandé si ajouter dans ma structure une variable "Map" pouvait m'aider. Dans unreal la variable Map correspond a un dictionnaire. Il lui faut un valeur de "key" et une "value".
Je choisi donc de donner en "key" le nom du "socket" et en "value" de donner le mesh qui lui sera associé.

Il me sera facile dans le blueprint de récupérer les valeurs. A chaque itération, je regarde les sockets présent dans mon premier mesh, je fabrique une boucle a partir de cette liste de socket. Ensuite a chaque itération de socket je regarde son nom et le vais récupérer le mesh qui lui est associé dans ma variable "Map" c'est comme ca que je peu placer sur chaque socket, le mesh qui lui correspond.


Exemple de mesh avec plusieurs socket et leur mesh associé !
Dans l'image précédente j'ai rajouté dans mon code un pourcentage d'apparition. Selon la valeur que je donne pour chaque objets, ils peuvent apparaître ou non. C'est pour cela que la distribution des cubes est aléatoire sur toute la surface de mon bâtiment.



Whouaou !! Et un deuxième article arrive !!

Voici un aperçu du Blueprint qui sert a générer le rez de chaussé dans l'article précédent.


La dernière fois on en était resté à la construction des étages. Pour ce faire j'avais juste fais une boucle sur la création de mon rez de chaussé au rajoutant un offset en Z a chaque itération.

Pour la suite, comme je distingue bien le rez de chaussée et les étages, il me faut des modules spécifiques pour les étages. Ici, je choisi donc des modules de 800*400 unité pour le rez de chaussée et de 800*300 pour les étages.
J'utilise le blueprint "Structure" afin de gérer mes variables, que ce soit mes différents mesh de rez de chaussée, d'étages, de toit... Au début pour effectuer mes offset, je récupérais les informations de bounding box de mes mesh, mais cela n'avait pas trop d’intérêt et faisait du calcul supplémentaire. C'est pourquoi j'ai rajouté une variable vector pour le rez de chaussé et une pour les étages qui me permettent de rentrer directement les informations de bounding box sans devoir les calculer.
Une structure pour générer un batiment


Le blueprint de structure facilite grandement les choses et me font gagner beaucoup de temps. En effet, quand je me suis lancé sur le blueprint j'allais récupérer tous mes mesh grâce à un path(chemin d’accès) mais cela demander beaucoup trop de node et pouvais facilement me faire faire des erreurs.
C'est en regardant la vidéo de "Ammobox Studio" que j'ai vu cette manière de faire:


Après pas mal de travail sur le blueprint j'ai réussi a obtenir mon rez de chaussée et mes étages avec différents mesh. Pour bien me rendre compte lors du développement que tout fonctionne bien j'ai mis des shader différents en désaturant la couleur pour les étages.