Blender (jusqu'à 2.49)
Python: 
Copie les coordonnées UV d'un mesh 
à la place de ses coordonnées 3D
(dernière mise à jour : 28/12/2005)
Version Anglaise
    Début   Index
Précédent  Importer le format "SVG" 
Script Explosion Suivant
Objectif
Méthode
Moyens
Option modifiable
UV layout, export de la trame des coordonnées uv simples
      Attention : TAILLEIMAGE
Enregistrer l'éclairage local
Enregistrer une mappe de la radiosité 
      Attention : Cadre limite des coordonnées  UVs
      Attention : Liste des materiaux et option [vCol paint]
      Essayer le fichier exemple (7zip format, 443 kos)
Télécharger le script .
Fil de discussion sur Elysiun 
Mise à jour pour la version 2.40 de Blender : de l'absolu au relatif
Melanger une image uvmappée et l'éclairage local .
(Changelog )Enregistrement de conversion

Problème et objectif 

Les textures procédurales ne peuvent pas être conservées dans le systeme de jeu de Blender . Il est posssible cependant de conserver une certaine apparence en passant par Vertex colors .  Cette méthode multiplie le nombre de sommet et alourdit l'objet mesh  qui devient inutilisable si on souhaite avoir suffisamment de détails .

Ce script permet donc de garder une trace de toutes les  textures attribuées à un mesh, y compris les textures uvmappées et les vertex colors sous la forme d'une image qui représente le dépliage des coordonnées uv telles qu'on peut les voir dans la fenêtre UVeditor

Méthode
a) Sélectionnez le mesh . Entrez dans le mode FaceSelect, touche F,  en passant par  la fenêtre 3d ou par le menu qui se trouve dans la barre de tâche de cette même fenêtre.  Définissez des coordonnées UV pour votre mesh ce qui suppose que vous allez utiliser la touche U pour choisir un type de projection dans le menu qui apparaîtra .

b) Definissez les  materiaux et les textures;

c) Lancez le script  en passant par le menu Scripts/UV/Texture Baker de la fenêtre Scripts ou en passant par le menu UVs/Texture Baker qui se trouve dans la barre de tâches de la fenêtre UVeditor .

Moyens
Le script est basé sur une particularité des Relatives Vertex Keys . Ces derniers déforment non seulement la géométrie du mesh sur lequel ils sont appliqués mais aussi les textures procédurales qui y sont utilisées . 
Option modifiable 
Le script peut partiellement prendre en charge le recadrage des coordonnées UV quand ces dernières dépassent la limite 0.0 et 1.0.  Cependant ce recadrage imposé déphase les coordonnées quand les limites extrèmes ne sont pas celle d'un carré. Ce qui semble gêner les utilisateurs. Donc par défaut cette option est désactivée. Si malgré tout on souhaite l'essayer, il faut : 
 
Nouvelle Méthode : à partir de Blender 2.43 version CVS

appuyer sur le bouton limit quand la boite de dialogue du script apparaît, 

Ancienne Méthode (jusqu'à  Blender 2.42)
Ouvrir le script, trouver la variable LIMIT et lui assigner la valeur 1 .
UV layout, export de la trame des coordonnées uv simples 
Toute l'astuce consiste à sélectionner l'option Wire du matériau en ayant préparé une couleur qui contraste ...

(cliquez l'image pour l'agrandir)

...avec l'arrière plan .  Préparez un World adapté, par exemple blanc si la couleur tend vers un sépia foncé .


(cliquez l'image pour l'agrandir)

Lancez le script .
 

Nouvelle Méthode : à partir de Blender 2.43 version CVS

Par défaut, les paramétres sont réglés pour convenir à ce type d'export . Il est possible de modifier la résolution de l'image en utilisant le bouton Display Res . Ce dernier est limité à 16 en valeur minimale et 4096 en valeur maximale . 


 
 
Ancienne Méthode (jusqu'à  Blender 2.42)
Le premier dialogue vous demande s'il faut changer le nom de l'image .  Choisissez No Replace .

Choisissez la taille :


Attention : TAILLEIMAGE
par défaut la taille maximale de l'image est limitée à 2048 mais si vous souhaitez augmenter ou modifier cette valeur faites une recherche de texte sur la variable  TAILLEIMAGE et supprimez le "#"
N'oubliez pas d'en faire autant sur le test if juste en dessous .
   #...
   TAILLEIMAGE='TEXTURE OUT RESOLUTION : %t |'
   TAILLEIMAGE+='256 %x1 |'
   TAILLEIMAGE+='512 %x2 |'
   TAILLEIMAGE+='768 %x3 |'
   TAILLEIMAGE+='1024 %x4 |'
   TAILLEIMAGE+='2048 %x5 '
   #TAILLEIMAGE+='| 4096 %x6 ' 
   tres = Draw.PupMenu(TAILLEIMAGE)

   if (tres) == 1: res = 256
   elif (tres) == 2: res = 512
   elif (tres) == 3: res = 768
   elif (tres) == 4: res = 1024
   elif (tres) == 5: res = 2048
   # elif (tres) == 6: res = 4096
   else: res = 512
   #...

 Le script va se charger d'effectuer les réglages et laissera affiché la fenêtre de rendu :

La sauvegarde sera à votre charge .  Allez dans la fenêtre F10, Render, panneau Format :
:

Sélectionnez le format : 

Appuyez sur la touche F3 et enregistrez . L'image est toujours dispoinble à l' affichage avec le raccourci F11

Enregistrer l'éclairage local

Pour obtenir une copie de l'éclairage local sur le mesh, on peut utiliser ce script :
import Blender
MESH=Blender.Object.GetSelected()[0].getData()
MESH.update(0,0,1)
Ce qui revient a attribuer de nouveaux vertex colors au mesh .
Ensuite on doit obligatoirement activer l'option vcolpaint sur le matériau attribué à cet objet .


Attention : 
Si les coordonnées d'uvmapping n'ont pas encore été attribuées, ce procédé peut être remplacé par une opération réalisée à la main en passant par le mode Vertex Paint


(cliquez l'image pour l'agrandir)

On applique les coordonnées uvs : 


(cliquez l'image pour l'agrandir)

On exécute le script :

(cliquez l'image pour l'agrandir)
Enregistrer une mappe de la radiosité 
Le script Texture Baker ne permet pas de voir les ombre portées de l'éclairage ponctuel (spot ou autres) mais on peut y faire apparaître des ombres utilisables en passant par le calcul d'un éclairage de radiosité car ce dernier fonctionne avec les Vertex colors .

1/ Procédure Radio classique  :

           -> Sélectionner quelques meshes sans oublier d'attribuer un matériau doté d'un emit important à au moins l'un d'entre eux . Utiliser le  bouton [Collect Meshes]

           -> Lancer le calcul : bouton [go] (qui n'a pas la couleur ci-dessous)

           -> bouton [Add new mesh], pour éviter de perdre les données originales. 
           -> bouton [free radio data], pour tout remettre en état.

2/ Passer le nouveau mesh dans un autre calque, touche M, sélection

3/ -> Sélectionner le nouveau mesh, clic Droit Souris
    -> Entrer dans le mode edit, touche TAB
    -> Sélectionner chaque partie d'un bloc mesh, par exemple, un cube sera composé de 6 parties      séparées, donc il faut amener la souris sur chaque partie, sélectionner un des sommets puis      Maj-bouton droit et utiliser la touche L pour récupérer la sélection de tous les sommets liés au premier.

4/ Quand toutes les parties sont sélectionnées
   -> faire un separate, touche P

   -> sortir du mode edit, TAB
   -> sélectionner le mesh que l'on vient créer

5/ Passer en mode Faceselect, touche F
6/ Tout sélectionner, touche A
7/ Choisir le type de développé, touche u


(cliquez l'image pour l'agrandir)

Attention : Cadre limite des coordonnées  UVs

Suivant le choix de développé, les coordonnées uv peuvent dépasser des limites standards. Ce dépassement n'est pas vraiment génant en lui-même mais il faussera la prise de vue finale . Le script n'est pas prévu pour gérer ce dépassement, recalculer et réattribuer des coordonnées correctes.  Mais il peut faire un cadrage correct de l'ensemble sans toucher au mesh original si la variable LIMIT est égale à 1 .


(cliquez l'image pour l'agrandir)

Pour vérifier si les coordonées dépassent, il faut donner un peu plus de contraste au Background  de UVmapEditor en passant par l'attribution d'un nouveau Theme dans la fenêtre de préférences utilisateur


(cliquez l'image pour l'agrandir)

8/ Sortir du mode Faceselect, touche F

9/ Aller dans la fenêtre des matériaux , touche F5
  -> vérifier que l'option [vcol paint] dans le bloc material
     est  bien cochée


(visu avec le script uvpainter, 
cliquez l'image pour l'agrandir)

Attention : Liste des materiaux et option [vCol paint]

Si les meshes originaux contenaient chacun un materiau différent, ces matériaux seront regroupés dans le le mesh produit par la radiosité . Cela peut préter à confusion, car les vertex paints en seront peut-être pas localisés sur le premier matériau de la liste . 
Pour vérifier quel est le matériau actif, on peut utiliser l'index des matériaux qui se trouve dans la fenêtre d'édition, bloc Link and Material. On applique cette procédure à chaque matériau :

Mode Edit
Touche a pour tout déselectionner
bouton Select
Touche a pour tout déselectionner
Avancer dans la liste de matériau
Le matériau actif devrait colorier en jaune tous les sommets . 

  -> descendre la valeur d'emit à zéro (à moins que l'emit ne fasse partie du projetd etexture que l'on souhaite exporter).

10/ Passer dans la fenêtre de texte, shift-f11
11/ Charger la dernière version en date du script :
    http://jmsoler.free.fr/util/blenderfile/py/3d2uvbakerv032.py
12/ Alt-p dans la fenêtre de texte, choisir "no replace", la taille,
    etc.

Essayer le fichier exemple (7zip format, 443 kos mis à jour avec la version 0.2.9)

Fil de discussion sur Elysiun 

Mise à jour pour la version 2.40 de Blender : de l'absolu au relatif
A partir de cette livraison, 23 décembre 2005, le logiciel ne prend plus en charge les clefs de "morphing" absolues de manière automatique . Cette modification de la gestion pose un problème assez lourd au script qui ne peut plus effectuer de cliché de la map uv dépliée correctement . 
Le principe du  script consiste à créer deux  clefs : une de référence dont on a vraiment besoin pour obtenir une gestion les déformations des textures, et une autre, modifiée, plate donc, qui doit servir de modèle pour le cliché final . Mais dans le nouveau système de Shape key, la première clef reste visible car c'est celle qui est sélectionnée par défaut et affiché par le logiciel. Pour faire passer la seconde clef en avant, on doit lui attribuer une courbe ipo avec des valeurs maximales .  La procédure est relativement simple si on pense à ajouter un bezier point aux coordonées FRAME (un paramètre variable défini dans le script et qui correspond à la dernière image calculée pour l'animation dans le fichier blender courant)  et 1.0, ce qui correspond à 100% de la transformation pour cette clef . De cette manière elle apparaît  parfaitement plate devant la caméra  . 

La fonction suivante a été ajoutée pour effectuer ces opérations :

#----------------------------------- 
# release : 0.3.2 ,  2005/12/28 , 13h00
#----------------------------------- 
def Blender240update(MESH2,FRAME):
         """ 
# ---------------------------
# Function  Blender240update

#  IN : MESH2   a mesh data bloc
#       FRAME , the animation frame limit

#  ADD : an ipo curve to the shape key
#        named "Key 1" 

#  OUT : nothing
# --------------------------- 
         """
         # --------------------------- 
         #  recuperation des clefs de morphing pour ce mesh
         # --------------------------- 
         key = MESH2.getKey()
         # --------------------------- 
         #  recuperation de l'Ipo
         # --------------------------- 
         ipo = key.ipo
         # --------------------------- 
         #  si l'ipo n'existe pas on la cree 
         # --------------------------- 
         if ipo == None:
            noipo = Blender.Ipo.New("Key","keyipo")
            key.ipo = noipo
         # --------------------------- 
         #   raccourci de l'expression
         # --------------------------- 
         ipo = key.ipo
         # --------------------------- 
         #   identification de la clef de morphing
         # --------------------------- 
         keyidentity = "Key 1"
         # --------------------------- 
         #   recuperation de la courbe correspondante
         #  c'est toujours la courbe 0
         # --------------------------- 
         ipocurve = ipo.getCurve(0)
         # --------------------------- 
         #  si la courbe n'existe pas (normalement, elle n'existe pas mais
         # on gère le risque pour faciliter une eventuelle récupération de
         # cette fonction dans un autre script ou pour les cas , certe peu
         # probable, ou blender viendrait a etre modifie pour les ajouter 
         # automatiquement ) on la cree ...
         # --------------------------- 
         if ipocurve == None:
            ipocurve = ipo.addCurve(keyidentity)
         # --------------------------- 
         #  On applique l'attribut d'inetrpolation qui permet d'avoir
         # une ligne droite
         # --------------------------- 
         ipocurve.setInterpolation("Linear")
         # --------------------------- 
         #  On retire tous les sommets qui pourraient se trouver sur la 
         #  courbe (dans l'état actuel, cette opération est une sécurité 
         #  superflue ) .
         # --------------------------- 
         while len(ipocurve.getPoints()) > 0:
            ipocurve.delBezier(0)
            ipocurve.recalc()
         # --------------------------- 
         #  On ajouter les sommets necessaires ...
         # --------------------------- 
         ipocurve.addBezier((-1,1))
         # --------------------------- 
         #   ... ce dernire n'est peut-être pas absolument obligatoire .
         # --------------------------- 
         ipocurve.addBezier((FRAME+1,1))
#----------------------------------- 
# release : 0.3.2 ,  2005/12/28 , end
#----------------------------------- 

Melanger une image uvmappée et l'éclairage local .
Pour mixer les lumières et une image plaquée sur les coordonnées UV on doit être très méthodique . La procédure ne souffre pas de négligeance . Les  Vertex paint doivent être enregistrés avant  que les coordonnées uv ne soitent attribuées . C'est une nécessité liée à l'organisation des données dans Blender . En effet,  s'il n'y a pas d'uvmapping les couleurs sont traitées par rapport aux sommets . Dans le cas contraire, ce sont les faces qui sont les référents . Ce qui a pour conséquence de colorier toute la face de la même couleur . Dans la plupart des cas, c'est  totalement transparent pour l'utilisateur sauf si  on cherche un effet spécial ce qui oblige à faire quelques pirouettes pour obtenir le résultat attendu . 

1/ 

UVmap et vertex paint, fichier test .
(Changelog )Enregistrement de conversion(traduction en attente)
 
0.3.3
     blender 2.40 update to deal with the object module refactory
     some probleme with the relatif render directory
 
 0.3.2
     blender 2.40 update to deal with the new shape  
     key system . 

 0.3.1 
     stupid bug correction    

0.3.0
    -- ajout de la variable TAILLEIMAGE

0.2.9

    -- Suppression d'un test sur une variable inutilisée 

  0.2.8

   -- a été ajouté dans les données des faces les propriétés image qui avaient été oubliées. 
      C'est un peu plus long mais le résultat est meilleur. (un Remove Double (enlève les doublons)
      appliqué sur le mesh final peut être utile.) 
   -- le problème de la fonction data.update()  à également été corrigé.
   -- plus de problèmes de calques. Les objets CAM et MESH sont placés dans le calque 20 . Celui-ci
       étant le calque actif pour le rendu de l'image .
   -- la création du mesh est plus propre, les boucles en double ont été supprimées et la clé absolute
      est paramétré dans l'image 1 uniquement, ce qui résout un autre problème de déformation.
   -- si l'utilisateur ne veut pas une image auto-sauvegardé,  l'option "no replace"  laisse la fenêtre de 
      rendu affiché à l'écran 

0.2.7

     -- correction mineure sur la ligne 147: "!=-1" ajouté

0.2.6

     -- La création de l'objet LAMP a été supprimé et remplacé par l'utilisation de l'option Shadeless
        dans le matériau de l'objet.

     -- helpmsg corrigé : l'objectif du script  est de "bake" tous les types de textures de façon à ce qu'on ai pas besoin de faire un "mapinput"  de ses textures sur l' UV .

     -- la camera de type 'perspective' a été remplacée par une caméra de type 'orthogonale'. 

0.2.5

     -- Si il existe un  fichier image avec le même nom le système renvoit une erreur. 

0.2.4

    -- Une variable LIMIT est ajouté pour débloquer l'autoframing des uvcoords.

0.2.3

    Un grand merci à Apollux  qui à remarqué un grand nombre de ces problèmes.
   -- Chaque fois que vous lancez le script un nouvel ensemble d'objets est créé. La taille du fichier et la consommation de mémoire peuvent être assez importants si vous ne prenez pas en considération cet état de fait . Maintenant il ne créé que 3 objets, un mesh de type plan, une caméra et une lumière de type Lamp.
   -- Les 3 objets étaient créé dans le 1er calque, mais si ce calque n'était pas visible pendant que vous utilisiez le script tout ce que vous obteniez était un rendu vide et par conséquent tout noir.
Maintenant le calque est "tst" et activé avant le lancé du rendu. 
     --Le mesh de type Plan n'était vraiment plat qu'après l'image 100 (si vous faisiez un défilement arrière de l'animation, vous ne voyiez le mesh devenir plat que sur les 100 premières images et pas plus.
    -- Quand le script fonctionne, il passe temporairement à la nouvelle caméra, règle la sortie du rendu sur un carré (ex: 1024 x 1024 ou autre), effectue le rendu, et ensuite réinitialise la sortie du rendu et la caméra active sur la caméra d'origine. Attention, s'il ne trouve aucune caméra d'origine il renvoie une erreur. 

 0.2.2

     Si il existe un objet uv mesh il est utilisé, il n'y a pas création d'un nouveau mesh. De même pour la Lamp et la Caméra.

 0.2.1

    Ce script encadre et vise automatiquement le nouvel uv mesh . Le fichier image est sauvegardé dans le répertoire " /render" .

précédentScript import SVG
 Script Explosion Suivant
Vers le  Haut de page

Les questions concernant cette page  peuvent être posées sur  :
 news://news.zoo-logique.org/3D.Blender


 

 

Livre en français
Blender : apprenez, pratiquez, Créez, livre, Ed. Campus Press, coll. Starter Kit
Blender Starter Kit

Forum
FAQ
Lexique
Didacticiels
Compilations
Blender2KT
Débuter
Modelage
Blender python
Materiaux
Lumière
Animation
API python (eng)
Archives nzn
Statistiques
Doc flash Sculptris
Galerie Sculptris

mon site de démos sur youtube