PDA

Voir la version complète : Question Automatiser la création de matériaux



schnekie
15/04/2011, 01h47
Bonsoir,

Je me remets à faire de la 3d pour mes projets à l'école d'archi, et afin de gagner du temps je me crée des matériaux, persos, etc…
Ma question est la suivante, pour les matériaux en question je n'utilise souvent que 2 canaux, couleur et alpha, dans lesquels je charge la même image, travail qui devient vite répétitif, je voulais donc savoir si il existe un moyen pour "automatiser la tâche" en donnant a C4D par exemple le chemin d'accés a un dossier de texture et les canaux souhaités ?

Fluffy
15/04/2011, 03h55
Créé ton matériau et ajuste-le comme bon te semble (textures, canaux, etc...).
Puis sélectionne-le et vas dans le menu "file>Save material preset" dans le gestionnaire de matériaux.
Donne-lui un nom, et C4D te créera un preset du matériau avec un dossier qui contient les textures, dans ta médiathèque.

Pour y accéder, lance la médiatèque et clique sur l'icône "presets"(qui ressemble à un encrier). Il ne te reste plus qu'à glisser ce matériau de la médiathèque au gestionnaire de matériaux à chaque fois que tu en veux une copie.

Tu peux te créer autant de matériau que tu le souhaites.

oli_d
15/04/2011, 06h40
Il me semble que la question était plutôt pour la création elle-même du matériau, mais de toute façon le truc de Fluffy est super utile.

Si tu as la R12 tu peux coller le code ci-dessous dans Python/Gestionnaire de script et cliquer sur le bouton Exécuter.

Une première boîte de dialogue va te demander où est ton dossier, la deuxième si tu veux utiliser les chemins absolus (pour pas avoir besoin de mettre tes textures dans le dossier tex) et la troisième pour savoir si tu veux utiliser le canal alpha. (Dès que j'ai le temps je ferai une seule boîte de dialogue).

Le script va créer un matériau par image qu'il trouvera dans le dossier.

Si tu veux que le script apparaissent à chaque fois dans le menu Python/Scripts personnalisés clique sur le bouton créer script et donne lui un nom. Il apparaîtra lors du prochain démarrage de C4D.

Je n'ai pas encore testé sur mac... EDIT : j'ai testé, ça a l'air de fonctionner


import c4d
from c4d import gui
import os,glob

lst_ext = ['.jpg','.tif','.tga','.png','.psd','.b3d']

def creer_mat(fn,nom,alpha=True):
mat = c4d.BaseMaterial(c4d.Mmaterial)
mat.SetName(nom)
doc.InsertMaterial(mat)
shd = c4d.BaseList2D(c4d.Xbitmap)
shd[c4d.BITMAPSHADER_FILENAME] = fn
mat[c4d.MATERIAL_COLOR_SHADER] = shd
mat.InsertShader(shd)
mat[c4d.MATERIAL_USE_SPECULAR]=False

if alpha :
mat[c4d.MATERIAL_USE_ALPHA]=True
shda = c4d.BaseList2D(c4d.Xbitmap)
shda[c4d.BITMAPSHADER_FILENAME] = fn
mat[c4d.MATERIAL_ALPHA_SHADER]=shda
mat.InsertShader(shda)

mat.Message(c4d.MSG_UPDATE)
mat.Update(True, True)

def main():
dossier = c4d.storage.LoadDialog(flags=c4d.FILESELECT_DIRECT ORY)
absolu = c4d.gui.QuestionDialog('Utiliser le chemin absolu ?')
alpha = c4d.gui.QuestionDialog('Utiliser le canal alpha ?')
if not dossier :return
for fn in os.listdir(dossier):
nom,ext = os.path.splitext(fn)
if absolu : fn = os.path.abspath(fn)
if ext in lst_ext:
creer_mat(fn,nom,alpha)
c4d.EventAdd()



if __name__=='__main__':
main()

base80
15/04/2011, 08h10
Excellent oli_d !
Dit je pourrait pas faire un stage de 10 jours chez toi par hasard?

oli_d
15/04/2011, 09h16
Mais avec plaisir Base, mais je te préviens je suis un hérétique, j'aime pas la bière ! :icon_mrgreen: (mais beaucoup le vin !)

base80
15/04/2011, 09h19
C'est ou? ou veux tu passer au Pays Bas ! T'apporte ton vin dans ce cas

oli_d
15/04/2011, 09h29
J'habite à Genève, en Suisse, les Pays Bas ça me tenterait ...

base80
15/04/2011, 10h05
ben t'est le bienvenu, quand tu veux .

genghiskhan
15/04/2011, 10h16
ah bah si ces deux la s'apprennent des choses ca va etre beau tiens

on a pas fini de voir des scripts et des xpresso qui dechirent tout sur le forum

Philippe casu
15/04/2011, 11h26
J'habite à Genève, en Suisse, les Pays Bas ça me tenterait ...

un voisin !!! Je suis dans le Pays de Gex à St-Genis-Pouilly!!!! Mais bon je ne bois aucune goutte d'alcool ( c'est pire qu'hérétique ça non?):icon_mrgreen:

Vcyrille
15/04/2011, 12h56
Un script aussi pratique, faudrait le coller dans la section tut'minutes ou équivalent non ?

schnekie
15/04/2011, 17h34
Merci pour vos réponses,

Fluffy effectivement cela va mettre utile également. Oli_d c'est exactement ce que je cherchais à faire, je te remercie, avec vos 2 techniques je vais pouvoir me faire rapidement une sacrée médiathèque, je n'ai pas eu de problème avec le script sous OSX.
Je ne connais pas le python, mais j'avais étudié un peu le MEL dans Maya en Autriche, et une des choses bien c'est que dans Maya, quand on faisait une commande via l'interface graphique, on avait l'équivalent en MEL en même temps, je ne sais pas si c'est possible en Python dans C4D mais ça serait un bon moyen d'apprendre… si quelqu'un sait je suis preneur.

oli_d
16/04/2011, 07h08
Ce qui ressemble le plus à ce que tu décris dans Maya, passe encore par les scripts en COFFEE. Il y a un très bon tuto du côté de chez maître Fluffy : http://fluffy4d.com/?p=79 (en anglais, si jamais script log c'est historique de script en français)

C'est également possible en Python, mais il faut retoucher un petit peu le code, ce n'est pas juste du copier/coller.

schnekie
16/04/2011, 20h26
Encore une fois oli_d, c'est ce que je cherchais, merci beaucoup. Il va vraiment falloir que je me commence à regarder le python de prêt.

phidek
30/04/2011, 02h50
:icon_eek::icon_eek: J'ai entendu Genève?...:001_rolleyes::cool2: Y commence quand ce stage? :whistling: :)

J'ai pas une bonne cave mais j'amène les cigares :icon_boss: