Blender (jusqu'à 2.49)
Materiaux et Textures
Activer tous les canaux Mapto
    Début   Index
précédentScript Python
Script python Suivant

Quelques explications sur la méthode d'activation des canaux Mapto
 

Activer
Désactiver
Tester si un canal est actif
Combiner les canaux sur une texture en particulier

Activer 
 

 from Blender import Texture,Image,Material
 mat = Material.Get('Material')
 mtextures = mat.getTextures()
 for mtex in mtextures:
      if mtex!=None:
         for n in range(0,13):
              mtex.mapto|=1<<n

mtex.mapto est une variable de type "drapeau", c'est-à-dire que chaque bit correspond à un état des canaux : [COL, NOR, CSP, CMIR, REF, SPEC, HARD, ALPHA, EMIT,...] 13 en tout . Donc 13 bits  activables mais tous à zéro au départ : 00000000000 . 

Pour les activer, on utilise l'opérateur "|"   qui effectue un "ou" logique sur les bits de deux variables . Si un bit est égal à zero et le bit  correspondant égal à 1, alors il renvoie 1 .  Le bit pour COL est le premier à droite . Pour l'activer  il faut faire :

     mtex.mapto|=1  ou  mtex.mapto = mtex.mapto | 1

Le résultat vaut :

     00000000001 = 00000000000 | 00000000001

La boucle :
 

...
    for n in range(0,13):
              mtex.mapto|=1<<n
...

déplace le bit 1 tout à droite de 13 places vers la gauche en utilisant l'operateur de rotation de bit : << 

     00000000011 = 00000000001 | 00000000010  :  1<<n, n vaut 1
     00000000111 = 00000000011 | 00000000100  :  1<<n, n vaut 2
     00000001111 = 00000000111 | 00000001000  :  1<<n, n vaut 3
     ... 

Pour activer nominativement les canaux mapto, on utilise un dictionnaire qui contient ces valeurs : Blender.Texture.MapTo .

{'DISP': 4096, 'CSP': 4, 'AMB': 2048, 'EMIT': 64,  'HARD': 256, 'COL': 1, 'TRANSLU': 1024, 'RAYMIR': 512, 
 'ALPHA': 128, 'CMIR': 8, 'REF': 16, 'SPEC': 32, 'NOR':2}
 

...
     mtex.mapto|= Blender.Texture.MapTo['COL']
....

est équivalent à :
 

... 
   mtex.mapto |= 1
....

Désactiver 
Pour désactiver un canal mapto, on fait une inversion des bits suivi d'un ET  logique avec les opérateurs "~&"sur le bit  correspondant . 
 

... 
     mtex.mapto &=~ Blender.Texture.MapTo['COL']
....

 
Pour comprendre le processus utilisez le bout de code suivant pour faire apparaître les bits du canal CSP, soit  4 :
 
a=4
for b in  [(a & 1<<n)>>n for n in range(15,-1,-1)]:print b,

Résultat :
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0    (4)

Modifiez la variable a  en utilisant l'opérateur d'inversion 
 

a=~4
for b in  [(a & 1<<n)>>n for n in range(15,-1,-1)]:print b,

vous obtiendrez :
1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1  (-5)

Superposez les deux résultats et effectuez le calcul et sachant que 

ET 0 1
0 0 0
1 0 1

 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
    ET
 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1
donne
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Pour résumer l' inversion des bits crée un masque qui protège tous les autres bits de mapto et permet de n'atteindre que le seul et unique bit du bouton  CSP .

Tester si un canal est actif
 

... 
     if mtex.mapto & Texture.MapTo['COL']==Texture.MapTo['COL']:
....   # 

Combiner les canaux sur une texture en particulier
 

import Blender
mat = Blender.Material.Get('bar') 

# masque d'effacement 
nonMT=0
for mt in dir(Blender.Texture.MapTo):
 nonMT|=Blender.Texture.MapTo[mt]

mtextures = mat.getTextures() 
if mtextures[0]!=None: 
   mtextures[0].mapto&=~nonMT
   mtextures[0].mapto|=Blender.Texture.MapTo['COL'] 

if mtextures[1]!=None: 
   mtextures[1].mapto&=~nonMT
   mtextures[1].mapto|=Blender.Texture.MapTo['NOR'] |\
            Blender.Texture.MapTo['SPEC'] 

if mtextures[2]!=None: 
   mtextures[2].mapto&=~nonMT
   mtextures[2].mapto|=Blender.Texture.MapTo['ALPHA'] 


 
précédentScript Python
 Script python 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