BLENDER TRIBU
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -20%
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, ...
Voir le deal
399 €

Aller en bas
blendman
blendman

Attente BAking : créer et sauvegarder les images automatiquement

Dim 23 Avr - 9:18
Salut

Pour mes jeux 3D, j'utilise blender comme level editor.
Donc, j'essaie de faire un baking sur tous les objets de chaque "niveau", pour avoir les ombres, lumieres statiques etc.

Voici comment j'opère : (pour le moment, dans blender 2.79, car j'utilise le renderer interne, qui est plus rapide que cycle, mais j'ai fait des tests avec cycle et je peux utiliser une version plus récente pour faire tout ça). :
- je crée mes objets "uniques" (par exemple tree01, tree02, etc..) : en général, ils ont tous un uvmap pour la texture (soit peinte, soit elle-même bakée)
- je crée ensuite mon niveau en créant des instances de chaque objet , que je positionne, rotation, scale, etc. (par exemple, un objet dupliqué de tree01 donne tree01.001),
- j'exporte le niveau sous forme d'un fichier texte (sans le lighting donc). Ce fichier texte est simple, pour chaque objet, il inidique sur une ligne : le type d'objet, le nom de l'objet, puis ses paramètres : x, y, z, rotx,roty, rotz, scalex, scaley, scalez. Ensuite, je loade avec ce fichier de niveau le niveau dans mon jeu et si besoin, je peux corriger ce niveau jusqu'à ce qu'il soit ok
- une fois le niveau créé et validé, je crée un second fichier identique pour le baking et je rend chaque objet unique  : pour avoir une texture unique d'ombre/ao sur chaque objet en fonction du lighting (et donc obtenir une image par objet pour le lightmap).

C'est ici que je cherche à trouver un système automatique (sans doute via un script python) :
- avec blender renderer internal (blender 2.79) : je créé une image par objet dans l'uvediteur en mode edit pour le baking et je l'enregistre, pour chaque objet, pour le baking lightmap : je voudrais automatiser ce processus, car si j'ai 500 objets dans mon niveau, je dois faire 500 fois la manipulation.
- avec cycle (blender 2.79 ou supérieur) : j,'ajoute une image dans le node material et je la sauvegarde. PAreil, je voudrais automatiser ça avec un script python.

En suite, ça dépend du renderer :
- si j'utilise blender 2.79, je clique sur bake, ça crée les images
- puis dans l'uv editor je fais "save all images" et ça me sauvegarde toutes les images, ce qui est cool. car je n'ai pas à trouver comment sauvegarder toutes les images d'un coup.

Mais avec cycle c'est différent (blender 2.79 ou supérieur (2.8 ou 3) :
- je clique sur bake, ça crée les images (comme avec l'internal)
- MAIS ensuite, si je clique sur save all images, ça ne fonctionne pas, car les images ne sont pas dans l'uveditor, mais dans le node material si j'ai bien compris, et je dois donc les sauvegarder une à la fois... ce qui est trop long (500 images par niveau, avec 40 niveaux..)


J'aimerais savoir s'il est possible de faire ceci automatiquement :
avec blender 2.79, avec le renderder internal :
- créer toutes les images (sur chaque objet sélectionné) pour le baking. Donc :  créer pour tous les objets selectionnés une image dans l'uveditor et l'enregistrer (même si elle n'est pas encore bakée, car ensuite je pourrais utiliser le bouton save all images).

Avec blender version > 2.8 et cycle :
- creéer une image par objet, dans son material avec les nodes
- après baking, sauvegarder toutes les images bakées d'un coup.


J'ai essayé de créer 1 script python pour faire ça de manière automatique, mais pour le moment, je n'ai pas encore réussi.
Donc, si vous avez des pistes ou si vous connaissez des scripts qui font ça, ça m'intéresse.

merci beaucoup.
Redstar
Redstar
Localisation : Belgique

Attente Re: BAking : créer et sauvegarder les images automatiquement

Lun 8 Mai - 9:26
Salut blendman,

Comme tu le sais,  les images générée dans Cycles ne sont pas sauvegardées automatiquement dans l'UV Editor, car elles sont générées à partir des nodes de matériaux plutôt que des UV maps. Pour Blender 2.79:

Code:

import bpy
import os

# Récupérer le dossier de sortie
output_folder = bpy.context.scene.render.filepath

# Parcourir les nodes de matériaux pour récupérer les textures générées
for mat in bpy.data.materials:
    for nt in mat.node_tree.nodes:
        if nt.type == 'TEX_IMAGE':
            # Créer le nom de fichier à partir du nom du node
            filename = nt.image.name + ".png"
            # Sauvegarder l'image dans le dossier de sortie
            nt.image.save_render(os.path.join(output_folder, filename))


Ce script parcourt tous les nodes de matériaux dans ta scène Blender et récupère toutes les textures générées à partir de nodes de type 'TEX_IMAGE'. Pour chaque texture trouvée, le script crée un nom de fichier basé sur le nom de l'image du node et sauvegarde l'image sous forme de fichier PNG dans le dossier de sortie spécifié dans les paramètres de rendu.

Essaie celui-là pour toutes les versions citées.

blendman aime ce message

blendman
blendman

Attente Re: BAking : créer et sauvegarder les images automatiquement

Jeu 25 Mai - 18:30
merci beaucoup je vais tester ça
Contenu sponsorisé

Attente Re: BAking : créer et sauvegarder les images automatiquement

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum