Génération Procédurale de Terrain LEGO avec Houdini

Dans le cadre de la réalisation d’un mini-métrage LEGO, j’ai décidé de créer un asset procédural pour LEGO afin de répondre aux besoins de production. Compte tenu de la grande quantité de décors nécessaires pour le film, il m’a semblé logique de développer une solution permettant de générer ces environnements de manière automatisée.

Approche Technique pour la Génération Procédurale LEGO dans Houdini

Création de la Grille de Points

Le premier objectif était de structurer une grille de points à partir d’un modèle de terrain de base. J’ai utilisé un « pointfromvolume » pour répartir les points de manière régulière. Cette grille sert ensuite de guide pour le placement des blocs LEGO.

Création de l’attribut « available » pour le Placement des Briques

J’ai défini un attribut custom, « available », pour gérer dynamiquement l’occupation de l’espace. À chaque itération, cet attribut est mis à jour en fonction des blocs placés, ce qui permet de gérer les zones disponibles avec précision. Chaque point de la grille est initialement marqué comme « disponible » jusqu’à ce qu’une brique y soit positionnée.

Algorithme de Placement des Briques

L’algorithme de placement utilise un solver SOP pour itérer sur chaque point et déterminer où positionner les briques en fonction de leur taille (longueur, largeur). En plus de vérifier les dimensions des briques et l’attribut « available », j’ai ajouté un calque de hauteur pour générer des bordures. Ce calque permet de définir des limites précises, évitant ainsi que les briques soient placées en dehors du terrain, et prévenant toute incohérence structurelle.

Une fois l’algorithme appliqué à une brique, il est répété pour chaque brique de la scène, en tenant compte des briques déjà placées. Cela permet d’éviter les erreurs de génération.

Ensuite, l’ensemble du système est envoyé dans Solaris, où j’applique les shaders de manière procédurale en fonction des types de briques. Les shaders sont paramétrés pour correspondre aux matériaux LEGO, offrant ainsi un rendu réaliste tout en respectant les couleurs et textures propres à chaque bloc.

Pour l’optimisation des meshes, les briques sont représentées par des cubes avec un nombre très limité de polygones. J’utilise ensuite les curvature maps dans Karma pour simuler les bords arrondis des briques LEGO, donnant l’impression de courbes douces sans alourdir la géométrie. Cela permet de maintenir des performances élevées.

Cette version n’est qu’une v1 de l’asset, avec pour objectif de l’améliorer et de l’enrichir dans de futures mises à jour afin d’optimiser encore davantage le processus et d’ajouter de nouvelles fonctionnalités.

 

Autres publications