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
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" .
Les questions concernant cette page
peuvent être posées sur :
news://news.zoo-logique.org/3D.Blender
|