1. home >
  2. Large Language Artefacts >
  3. Mikaël >
  4. Générateur de nuage

December 2nd at 11:21am


Générateur de nuage

Mon premier projet personnelle se tourne sur l'utilisation des llms en lien avec les géometrie nodes de blender.

Pour faciliter l'utilisation, j'ai d'abord créer un arbre de géométrie nodes qui permet de créer différent style de nuage et, en exportant certain paramètre, les lier dans un scripts python et un fichier JSON pour que le llm puissent modifier les parametres, selon les demandes de l'utilisateur.

Ce que je trouve particulièrement intéressant avec cette méthode, c'est que les différents paramètre ne permettent pas une infinité de possibilité. Ducoup la description que va faire l'utilisateur ne pourra pas être précisement réaliser. Sauf que les llms vont toujours quand même essayer de les réaliser, ce qui peut générer une notion d'erreur et d'aléatoire, qui peut être trés intéressant dans une démarche de création numérique, qui est généralement précis et avec le moins d'erreur possible.

Script importation du fichier JSON :

import bpy import json

Chemin vers le fichier JSON

json_file_path = "D:/Boulot/Art et design (étude)/Workshop/Workshop ia/Nuage_fini/nuage_config.json"

def load_json(file_path): """Charge les paramètres depuis un fichier JSON.""" try: with open(file_path, "r") as f: return json.load(f) except Exception as e: print(f"Erreur lors du chargement du fichier JSON : {e}") return None

def apply_all_sockets(parameters): """Applique les paramètres JSON à toutes les sockets du modificateur Geometry Nodes.""" obj = bpy.context.active_object # Récupère l'objet actif if obj is None: print("Erreur : Aucun objet actif.") return

# Vérifie que le modificateur 'GeometryNodes' existe
geo_nodes_modifier = obj.modifiers.get("GeometryNodes")
if geo_nodes_modifier is None:
    print("Erreur : Le modificateur 'GeometryNodes' n'existe pas.")
    return

# Parcourt les sockets et applique les valeurs
for socket_name, value in parameters.items():
    if socket_name in geo_nodes_modifier.keys():
        try:
            geo_nodes_modifier[socket_name] = value  # Applique la valeur
            print(f"Socket '{socket_name}' mis à jour avec la valeur : {value}")
        except Exception as e:
            print(f"Erreur lors de l'application de la valeur '{value}' au socket '{socket_name}' : {e}")
    else:
        print(f"Le socket '{socket_name}' n'existe pas dans le modificateur.")

Charger les paramètres depuis le fichier JSON

parameters = load_json(json_file_path)

Appliquer les valeurs aux sockets

if parameters: print("Fichier JSON chargé avec succès.") print("Contenu des paramètres :", parameters) apply_all_sockets(parameters) else: print("Aucun paramètre n'a été chargé depuis le fichier JSON.")

Forcer une mise à jour sans manipuler directement les sockets

obj = bpy.context.active_object if obj is not None: obj.update_tag() # Indique à Blender que l'objet a changé bpy.context.view_layer.update() # Met à jour la vue 3D

Test%20cartoon Test_argile Test_organique


Liste des références associées au projet