Connexion
Menu Principal
Recherche
Menu secondaire
Image Aléatoire
deaglefb.jpg
Publicité
Formation Blender ElephormBlender 3d Elephorm


     






Addon : Import Textures as Material
Clan Afficionado
Inscrit:
30/07/2016 16:40
Post(s): 70
Salut, et très bonne année 2018 !

Je commence tout juste le scripting sur Blender , donc excusez-moi par avance si je dis ou fais des conneries, je n'ai pas encore vu beaucoup de tutos sur le sujet (juste lu toute la doc officielle).

J'aimerais faire un addon qui automatise l'import de textures dans un node tree avec un principled shader : en effet je fais tout le temps la même chose, à savoir importer les textures dans des noeuds image texture, puis les relier au principled shader avec d'éventuels traitements (invert color pour une texture glossiness, multiply pour la height quand elle est trop forte, etc.) Je ne sais pas si ça existe déjà mais sinon j'en serais très étonné tellement ça me paraît indispensable ! Ça permettrait d'importer des textures exportées de Substance ou Quixel, ou trouvées sur le net. Bref, j'ai vraiment envie et besoin de faire ça, et ça me sert d'exercice.

En résumé mon addon devrait faire les choses suivantes :
- un panneau dans l'onglet materials avec un bouton pour importer les images (toutes d'un coup tant qu'à faire)
- ensuite suivant le suffixe de chaque image (ex: NORM, ROU, DIFF, etc), les ajouter dans le node tree et les relier correctement, et ajouter d'autres noeuds précédemment cités.

Pour l'instant j'ai ma classe Panel, très simple pour l'instant, je l'étofferai plus tard :
class MaterialPanel(bpy.types.Panel):
    bl_label = "Material from textures"
    bl_space_type = "PROPERTIES"
    bl_region_type = "WINDOW"
    bl_context = "material"
        
    def draw(self, context):
        self.layout.operator("image.open", text="Open images", icon="FILESEL")
        
    @classmethod
    def poll(cls, context):
        return context.scene.render.engine == 'CYCLES' and \
    context.active_object.material_slots.data.active_material

Ce qui permet de charger plusieurs images avec l'UI de Blender, mais ça n'en fait rien ensuite.

J'ai aussi un début de code qui génère mon node tree (code un peu fouillis j'en conviens...):
active_mat = bpy.context.active_object.active_material
active_mat.use_nodes = True
active_mat.node_tree.nodes.clear()    
preview_type = active_mat.preview_render_type

materialOutput = active_mat.node_tree.nodes.new("ShaderNodeOutputMaterial")
materialOutput.location = (450, 0)

principledShader = active_mat.node_tree.nodes.new("ShaderNodeBsdfPrincipled")

active_mat.node_tree.links.new(principledShader.outputs[0], materialOutput.inputs[0])

def addImageTexture(name, location):
    """ add an image texture node """
    imageTexture = active_mat.node_tree.nodes.new("ShaderNodeTexImage")
    imageTexture.location = location
    imageTexture.label = name
    return imageTexture

def addLink(node1, outputId, node2, inputId):
    """ add a link between the node1 and the node2 """
    active_mat.node_tree.links.new(node1.outputs[outputId], node2.inputs[inputId])
    
diffuse = addImageTexture("Diffuse", (-500, 200))
ambientOc = addImageTexture("Ambient Occlusion", (-500, -50))
roughness = addImageTexture("Roughness", (-280, -170))
normal = addImageTexture("Normal", (-500, -480))

mixShader = active_mat.node_tree.nodes.new("ShaderNodeMixShader")
mixShader.location = (-280, 50)

normalMap = active_mat.node_tree.nodes.new("ShaderNodeNormalMap")
normalMap.location = (-280, -480)


    
addLink(diffuse, 0, mixShader, 0)
addLink(ambientOc, 0, mixShader, 1)
addLink(mixShader, 0, principledShader, 0)
addLink(roughness, 0, principledShader, 8)
addLink(normal, 0, normalMap, 0)
addLink(normalMap, 0, principledShader, 17)

height = addImageTexture("Height", (220, -100))
addLink(height, 0, materialOutput, 2)


Ce que j'aimerais faire maintenant, c'est récupérer les dernières images importées en faisant une boucle en partant de la fin de bpy.data.images, et tant que le préfixe est le même (= nom du matériau), assigner chaque image à un noeud en fonction de son suffixe.
Mon problème (enfin) est que je ne sais pas où mettre ce bout de code qui fait la liaison : il faut qu'il soit appelé après l'import des images, ce que je ne sais pas faire. Est-ce que je dois faire une class custom qui hérite d'un opérateur ?

Merci de m'aiguiller sur ce point

Contribution le : 02/01 00:15:12
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Questions & Réponses [résolu] Belnder 2.79 et fractures. 3 154 Aujourd'hui 17:23:33
moonboots 
Questions & Réponses [non résolu] Travailler proprement avec Blender et ses UV/CarteUV 0 9 Aujourd'hui 17:23:03
Draenys 
Questions & Réponses Faire un angle en mode sculpture 1 48 Aujourd'hui 17:03:12
Deleatur 
Concours Défis du clan - semaine 1 : "Clair-obscur" 7 294 Aujourd'hui 16:48:27
Deleatur 
Questions & Réponses Drivers et proportional editing 0 47 Aujourd'hui 09:28:16
Jessicad 
[WIP] et travaux terminés [WIP] Lampe de mineur 6 282 Aujourd'hui 01:02:28
keltwookie 
Le coin des geeks Alerte sécurité : Kernel Update + Nvidia 4 242 Aujourd'hui 00:53:28
keltwookie 
Questions & Réponses [résolu] Carapace de tortue de mer - problème 2 182 Hier 19:41:52
Redstar 
Questions & Réponses Problème d'origine sur le personnage. et sur le rig 8 228 Hier 15:48:37
sap1 
Questions & Réponses [terminé] Tordre une partie d'un objet    [1][2] 10 400 Hier 12:48:48
moonboots 
Questions & Réponses [résolu] Comment faire une clôture en escalier    [1][2][3] 20 686 14/01 04:05:46
sebubo 
Graphisme alternatif Le topic des Sculpteurs    [1][2][3]...[173] 1723 390771 13/01 13:32:19
Deleatur 
Questions & Réponses Alléger un personnage 8 272 13/01 11:48:16
lum-san 
The Blender Clan 'tchat cherche premier cours sur blender par téléphone ou sur annecy 6 290 13/01 10:50:18
Rolix 
Questions & Réponses Impossibilité de faire un clic droit 4 219 12/01 11:26:33
bd66 
Questions & Réponses Shrink/Fatten bug 3 146 11/01 18:03:52
Zeraflut 
Questions & Réponses Gravure sur bouteille 5 203 11/01 16:01:21
sylvaintritri 
Le coin des geeks Renderfarm / ferme de rendu sur Cycles 0 138 11/01 07:57:36
Jaysc 
Concours Défis du clan - semaine 50-51 : "profondeur de champ"    [1][2][3][4] 36 1944 11/01 05:23:47
Stuf34 
Graphisme alternatif Le topic des trucs à télécharger    [1][2][3]...[25] 247 105851 10/01 21:30:52
origalde 

Qui est en ligne
24 utilisateur(s) en ligne (dont 15 sur Forums)

Membre(s): 1
Invité(s): 23


AlexandreAllard, plus...
Nouveaux membres
GayZimpel 16/1/2018
Draenys 16/1/2018
AdrianN96 16/1/2018
CherieDuFa 16/1/2018
ElinorReic 16/1/2018
ArnoldoCle 16/1/2018
OliveColvi 16/1/2018
ShellaHoll 16/1/2018
JulieFeuer 16/1/2018
KaylaReaso 16/1/2018
Dernier Ajout
DB11_Aston_Martin_2017_bothview.jpg

Evènements à venir
Fev 15
Anniversaire de Dany
Fev 23
anniversaire de windspirit
Mar 14
Anniversaire de AMV12
plus 308 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2017 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445