Non le problème vient du filename du shader Bitmap, l’expression prélève du shader le chemin du fichier pixel pour pouvoir accéder aux information de la taille du fichier* image. un exemple en image pour comprendre.Envoyé par Pé
dans le cas 2 il faut à chaque fois que c'a bloque recharger l'image en ouvrant la boite de dialogue.
[Fichier joint supprimé par l'administrateur]
Ok,
merci pour l'explication...
Mais je dois être maudit, passeque même si je recharge la texture ça change rien... si si si... je le jure, c'est pas de la mauvaise volonté...
pourtant mon Unité centrale est au milieu d'un pentacle de protection contre les démons du 9me cercle... je comprends pas...
Yann, NooProtégé... ;-)
salut yminh,
En regardant ton fichier, j’ai remarqué que dans le script que tu as collé, c4d interprète les espace blanc bizarrement, ton problème vient peut être du copier coller , le fait de les supprimer redonne vie à l’expression et elle fonctionne très bien.
Bizarre, bizarre* NooBizarre.
je te repasse ton fichier qui fonctionne chez moi.
http://perso.wanadoo.fr/archizone/fc...etieMajoul.c4d
Super, merci
je vais tester, j'étais en train de supprimer les espaces dans l'ancien, mais ça marchait pas mieux...
A toute...
Yann, SpaceKiller
j'ai modifié un peut le script juste pour essais, si l'expression fonctionne normalement l'objet prend le nom du fichier image de la premiére texture, le fait de changer l'ordre des textures d'un même objet le nom doit changer.
c'est le même lien.
Genial !!!!
ça marche enfin chez moi...* :-)* :bounce: :efface:
Enfin presque... ce fichier que tu as mis en téléchargement :
http://perso.wanadoo.fr/archizone/fc...etieMajoul.c4d
marche très bien sur le pc, par contre ça ne marche carrément pas du tout sur le mac... (version 9.5 pour les deux)* :?
Pour moi c'est pas grave, car pour l'instant je n'utilise C4d que sur le PC... (mais c'est dommage pour les utilisateurs mac...)
En tous cas bravo Majoul, c'est un coffee qui tue... je vais gagner un temps fou sur le décors que je suis en train de réaliser...
Un très très grand merci...
Yann, MajoulFan...* :prie:
PS: il se peut que les bugs que j'avais dans la première version du code, soient provoqués par le mac que j'utilise pour consulter le net, et que le copier/coller dans Safari (navigateur mac)* provoque l'insertion de caractères cachés ou de codes intempestifs dans le texte... ?* Bref, il me semble qu'il vaut mieux télécharger ton fichier, plutôt que de faire des copier/coller dans les navigateurs...
:cry:
2x6coreXéon2.66(24T);64Gram; GTX 1080; OSX10.13.6 ////
Mac Studio 128 Ram ; OSX 12.3.1 ; papiercrayoncerveau;S22Studio;Redshift;Zbrush2022; CS2022
///SHTL 2011 DEMO HERE : http://demo.shtl.org/ /// NEW! 2014 WIP
:mrgreen:
Bon, ça ne marche plus chez moi non plus...
pour le probleme PC/Mac, ca pourrait pas venir du format different du retour à la ligne ?
je m'explique : sur Windows, les retours à la ligne se font par la combinaison de 2 caracteres speciaux "\r\n" (retour au debut de la ligne puis passage à la ligne suivante), alors que sous les unix (enfin linux et solaris au moins, donc je pense que c'est generique unix), et donc mac OS est concerné c'est seulement codé par "\n", resultat c4d il a un caractere en trop à la fin de chaque ligne dont il ne connait pas la signification, et donc ca marche pas (quand vous etes programmeur et que vous passez de unix à windows sans arret, ca devient tres vite ennuyeux, mais bon y a des combines).
je ne dis pas que c'est LA raison, mais je pense que ca doit participer un peu.
Le rendu, c'est juste de l'intégration numérique sur un espââââââce de dimension infinie...trivial quoi
j'ai mis le tout dans un xpresso avec des DU, pour éviter l'accès en boucle au fichier image, j'ai mis une DU calculer le rapport.
il ne vous reste plus qu'a choisir entre Largeur et hauteur avec la case à cocher et de donner une dimension avec la DU Dim.
http://perso.wanadoo.fr/archizone/fc...ieMajoul_X.c4d
Les Mac User à vous de voir ci cela fonctionne avec la pomme.
:bounce: :bounce: :bounce:
:efface:
:poucehaut:
:love:
2x6coreXéon2.66(24T);64Gram; GTX 1080; OSX10.13.6 ////
Mac Studio 128 Ram ; OSX 12.3.1 ; papiercrayoncerveau;S22Studio;Redshift;Zbrush2022; CS2022
///SHTL 2011 DEMO HERE : http://demo.shtl.org/ /// NEW! 2014 WIP
Mmmmouais... pas mal... :?
Tu t'es pas foulé, manque la case à cocher qui donne le nom de la texture à l'objet... mais bon... je ferai avec...
Nnnnaaaan... je plaisante... :-)
Bravo, c'est une merveille... en plus il fonctionne aussi bien sur le PC que sur le Mac... impressionnant!!! :prie:
un énoooorme merci pour cette expression... c'est top de top... comme dit Pasto, j'ai carrément une érection la... ;-)
Yann, noocomblé...
Bah voilà, Majoul, quand tu veux, tu fais des trucs potables... :mrgreen:
Top ! Marci Majoul !
kenavo !! // Pinterest KAMIGAZ®
Cà a l'air super....
Est-ce réservé aux version 9.5 ?
En 8.5, je n'arrive pas à obtenir quelque chose...
:cry2: :cry2: :cry2:
Faut vraiment que je fasse la mise à jour !
yann, NooRâleurEnvoyé par yminh
C'est vraie, j'ai oublié de la remettre, je rajouterais deux case à cocher : une pour le nom et l'autre pour switcher entre mode manuel et mode dynamique.
NumZ : il faut la 9.1+ les opérateur "#ID" n'existaient pas avant la 9.1.
majoul producteur de case à cocher.
RE : http://perso.wanadoo.fr/archizone/fc...ieMajoul_X.c4d
Ok, je vais penser à faire la mise à jour...
merci
Hello...
Super up de 9 ans!
Je cherche à faire exactement ce qu'essayaient les copains à cette époque. Je crois avoir entr'aperçu une soluce via MoGraph il y a quelques temps mais impossible de retrouver. Fouillé les freebies de chez Nitro4D et GreyscaleGorilla mais pas trouvé non plus.
En gros, je cherche à faire ça sur des dizaines de textures:
- Création d'un shader
- Import de l'image dans le canal couleur ou luminance
- Création d'un plan aux dimensions de l'image
- Application de la texture sur ce plan
Quelqu'un saurait m'aiguiller vers une piste?
Merci d'avance...
NiKo
--- www.aerografik.fr ---
Il n'y avait pas un plug ou script "bitmap to plane" ou "bitmap2plane" ?
Je cherche mais je ne retombe pas dessus...
÷ R19 Studio ÷ cacahuètes ÷
Je me demande si ça n'est pas César qui avait sorti un truc du genre. Mais je ne vois rien qui y ressemble sur son site...
--- www.aerografik.fr ---
Il me semble que c'était Majoul l'auteur du plug.
Regarde du côté de Cineversity > PlaneSmart
http://cineversity.com/vidplaylist/c...sity_resources
Tout ce que j'écris est à prendre au 15e degré. Car comme dit le proverbe chinois : Quand le dragon d'or, le ragondin ; voilà qui devrait faire taire les critiques et me mettre à l'abri d'attaques frontales.
Merci Dom. C'est pas ce que je cherche. Moi c'est plus un traitement automatique à appliquer sur un grand nombre d'objet...
--- www.aerografik.fr ---
Le script d'oli_d répond à 90% à ce que tu cherches : ici
Par contre cela fonctionne avec les matériaux C4d et non Vray. à voir s'il y a moyen de le modifier.
Je comprends vite, mais faut m'expliquer longtemps…
Voilà un script qui charge l'image dans un materiau et qui créer un plan adapté :
Tu peux choisir de charger le bitmap soit dans le canal couleur, soit luminance. Il y a aussi une options pour créer un tag d'affichage (utile pour les blueprints en mode Wireframe).Code PHP:
import os
import c4d
def get_bitmap_name(path):
name, ext = os.path.splitext(os.path.basename(path))
return name
def create_material(path, luminance):
# Create material
mat = c4d.BaseMaterial(c4d.Mmaterial)
mat.SetName(get_bitmap_name(path))
mat[c4d.MATERIAL_USE_SPECULAR] = False
doc.InsertMaterial(mat)
# Create shader
shader = c4d.BaseList2D(c4d.Xbitmap)
shader[c4d.BITMAPSHADER_FILENAME] = path
if luminance:
mat[c4d.MATERIAL_USE_COLOR] = False
mat[c4d.MATERIAL_USE_LUMINANCE] = True
mat[c4d.MATERIAL_LUMINANCE_SHADER] = shader
else:
mat[c4d.MATERIAL_COLOR_SHADER] = shader
mat.InsertShader(shader)
mat.Message(c4d.MSG_UPDATE)
mat.Update(True, True)
return mat
def create_texture_tag(mat):
tex_tag = c4d.BaseTag(c4d.Ttexture)
tex_tag[c4d.TEXTURETAG_MATERIAL] = mat
tex_tag[c4d.TEXTURETAG_PROJECTION] = c4d.TEXTURETAG_PROJECTION_UVW
return tex_tag
def get_bitmap_size(path):
bmp = c4d.bitmaps.BaseBitmap()
result, ismovie = bmp.InitWith(path)
if result != c4d.IMAGERESULT_OK:
return 0, 0
return bmp.GetSize()
def create_plane(w, h):
plane = c4d.BaseObject(c4d.Oplane)
plane[c4d.PRIM_PLANE_WIDTH] = w
plane[c4d.PRIM_PLANE_HEIGHT] = h
return plane
def create_bitmap_plane(doc, image_path, luminance=True, display_tag=True):
mat = create_material(image_path, luminance)
w, h = get_bitmap_size(image_path)
plane = create_plane(w, h)
plane.InsertTag(create_texture_tag(mat))
if display_tag:
dtag = c4d.BaseTag(c4d.Tdisplay)
dtag[c4d.DISPLAYTAG_AFFECT_DISPLAYMODE] = True
plane.InsertTag(dtag)
doc.InsertObject(plane)
def main():
image_path = c4d.storage.LoadDialog(c4d.FILESELECTTYPE_IMAGES)
# Mettre luminance=False pour activer le canal couleur
create_bitmap_plane(doc, image_path, luminance=True, display_tag=True)
c4d.EventAdd(c4d.EVENT_0)
if __name__=='__main__':
main()
edit : Une version qui fonctionne avec Vray :
Il suffit de modifier la ligne "create_bitmap_plane(doc, image_path, luminance=False, display_tag=True, vray=True)" dans la fonction main pour choisir les paramètres :Code PHP:
import os
import c4d
Mvray = 1020295
def get_bitmap_name(path):
name, ext = os.path.splitext(os.path.basename(path))
return name
def create_std_mat(shader, luminance):
mat = c4d.BaseMaterial(c4d.Mmaterial)
mat[c4d.MATERIAL_USE_SPECULAR] = False
if luminance:
mat[c4d.MATERIAL_USE_COLOR] = False
mat[c4d.MATERIAL_USE_LUMINANCE] = True
mat[c4d.MATERIAL_LUMINANCE_SHADER] = shader
else:
mat[c4d.MATERIAL_COLOR_SHADER] = shader
return mat
def create_vray_mat(shader, luminance):
try:
mat = c4d.BaseMaterial(Mvray)
except StandardError as e:
c4d.gui.MessageDialog("VRay error: " + str(e))
return None
if luminance:
mat[c4d.VRAYMATERIAL_USE_COLOR1] = False
mat[c4d.VRAYMATERIAL_USE_LUMINANCE] = True
mat[c4d.VRAYMATERIAL_LUMINANCE_TRANSP_MULT] = 0
mat[c4d.VRAYMATERIAL_LUMINANCE_SHADER] = shader
else:
mat[c4d.VRAYMATERIAL_COLOR1_SHADER] = shader
return mat
def create_material(path, luminance, vray):
# Create shader
shader = c4d.BaseList2D(c4d.Xbitmap)
shader[c4d.BITMAPSHADER_FILENAME] = path
# Create material
create_mat = create_vray_mat if vray else create_std_mat
mat = create_mat(shader, luminance)
if mat:
mat.SetName(get_bitmap_name(path))
doc.InsertMaterial(mat)
mat.InsertShader(shader)
mat.Message(c4d.MSG_UPDATE)
mat.Update(True, True)
return mat
def create_texture_tag(mat):
tex_tag = c4d.BaseTag(c4d.Ttexture)
tex_tag[c4d.TEXTURETAG_MATERIAL] = mat
tex_tag[c4d.TEXTURETAG_PROJECTION] = c4d.TEXTURETAG_PROJECTION_UVW
return tex_tag
def get_bitmap_size(path):
bmp = c4d.bitmaps.BaseBitmap()
result, ismovie = bmp.InitWith(path)
if result != c4d.IMAGERESULT_OK:
return 0, 0
return bmp.GetSize()
def create_plane(w, h):
plane = c4d.BaseObject(c4d.Oplane)
plane[c4d.PRIM_PLANE_WIDTH] = w
plane[c4d.PRIM_PLANE_HEIGHT] = h
return plane
def create_bitmap_plane(doc, image_path, luminance=True, display_tag=True, vray=False):
mat = create_material(image_path, luminance, vray)
if not mat:
return False
w, h = get_bitmap_size(image_path)
plane = create_plane(w, h)
plane.InsertTag(create_texture_tag(mat))
if display_tag:
dtag = c4d.BaseTag(c4d.Tdisplay)
dtag[c4d.DISPLAYTAG_AFFECT_DISPLAYMODE] = True
plane.InsertTag(dtag)
doc.InsertObject(plane)
return True
def main():
image_path = c4d.storage.LoadDialog(c4d.FILESELECTTYPE_IMAGES)
# Mettre luminance=False pour activer le canal couleur
create_bitmap_plane(doc, image_path, luminance=False, display_tag=True, vray=True)
c4d.EventAdd(c4d.EVENT_0)
if __name__=='__main__':
main()
luminance=False : Image chargée dans le canal couleur
luminance=True : Image chargée dans le canal luminance
display_tag=True : Créer un tag d'affichage sur le plan
vray=True : Créer un materiau VRay
vray=False : Créer un materiau standard
edit2 :
Avec le petit bout de code de oli_d, on peut l'appliquer sur toutes les images d'un dossier :
Code PHP:
import os
import c4d
Mvray = 1020295
lst_ext = ['.jpg','.tif','.tga','.png','.psd','.b3d']
def get_bitmap_name(path):
name, ext = os.path.splitext(os.path.basename(path))
return name
def create_std_mat(shader, luminance):
mat = c4d.BaseMaterial(c4d.Mmaterial)
mat[c4d.MATERIAL_USE_SPECULAR] = False
if luminance:
mat[c4d.MATERIAL_USE_COLOR] = False
mat[c4d.MATERIAL_USE_LUMINANCE] = True
mat[c4d.MATERIAL_LUMINANCE_SHADER] = shader
else:
mat[c4d.MATERIAL_COLOR_SHADER] = shader
return mat
def create_vray_mat(shader, luminance):
try:
mat = c4d.BaseMaterial(Mvray)
except StandardError as e:
c4d.gui.MessageDialog("VRay error: " + str(e))
return None
if luminance:
mat[c4d.VRAYMATERIAL_USE_COLOR1] = False
mat[c4d.VRAYMATERIAL_USE_LUMINANCE] = True
mat[c4d.VRAYMATERIAL_LUMINANCE_TRANSP_MULT] = 0
mat[c4d.VRAYMATERIAL_LUMINANCE_SHADER] = shader
else:
mat[c4d.VRAYMATERIAL_COLOR1_SHADER] = shader
return mat
def create_material(path, luminance, vray):
# Create shader
shader = c4d.BaseList2D(c4d.Xbitmap)
shader[c4d.BITMAPSHADER_FILENAME] = path
# Create material
create_mat = create_vray_mat if vray else create_std_mat
mat = create_mat(shader, luminance)
if mat:
mat.SetName(get_bitmap_name(path))
doc.InsertMaterial(mat)
mat.InsertShader(shader)
mat.Message(c4d.MSG_UPDATE)
mat.Update(True, True)
return mat
def create_texture_tag(mat):
tex_tag = c4d.BaseTag(c4d.Ttexture)
tex_tag[c4d.TEXTURETAG_MATERIAL] = mat
tex_tag[c4d.TEXTURETAG_PROJECTION] = c4d.TEXTURETAG_PROJECTION_UVW
return tex_tag
def get_bitmap_size(path):
bmp = c4d.bitmaps.BaseBitmap()
result, ismovie = bmp.InitWith(path)
if result != c4d.IMAGERESULT_OK:
return 0, 0
return bmp.GetSize()
def create_plane(w, h):
plane = c4d.BaseObject(c4d.Oplane)
plane[c4d.PRIM_PLANE_WIDTH] = w
plane[c4d.PRIM_PLANE_HEIGHT] = h
return plane
def create_bitmap_plane(doc, image_path, luminance=True, display_tag=True, vray=False):
mat = create_material(image_path, luminance, vray)
if not mat:
return False
w, h = get_bitmap_size(image_path)
plane = create_plane(w, h)
plane.InsertTag(create_texture_tag(mat))
if display_tag:
dtag = c4d.BaseTag(c4d.Tdisplay)
dtag[c4d.DISPLAYTAG_AFFECT_DISPLAYMODE] = True
plane.InsertTag(dtag)
doc.InsertObject(plane)
return True
def main():
#image_path = c4d.storage.LoadDialog(c4d.FILESELECTTYPE_IMAGES)
# Mettre luminance=False pour activer le canal couleur
#create_bitmap_plane(doc, image_path, luminance=False, display_tag=True, vray=True)
folder = c4d.storage.LoadDialog(flags=c4d.FILESELECT_DIRECTORY)
if not folder: return
for fn in os.listdir(folder):
name, ext = os.path.splitext(fn)
if ext in lst_ext:
image_path = os.path.join(folder, fn)
create_bitmap_plane(doc, image_path, luminance=False, display_tag=True, vray=False)
c4d.EventAdd(c4d.EVENT_0)
if __name__=='__main__':
main()
Dernière modification par xs_yann ; 15/04/2015 à 13h29.
Excellent!
Et du coup, il y a moyen de lui indiquer un dossier, et il fait cette manip sur toutes les images du dossier? A là façon du script d'Oli_D?
--- www.aerografik.fr ---
Je viens d'edit le post du dessus, j'avais pas vu ta réponse.
Et bim! Xs-Yann & Oli_D powa!
Petite moulinette qui fonctionne à merveille!
Grand merci! Je range ça précieusement dans ma malette à trucs utile!
NiKo
--- www.aerografik.fr ---
Merci xs_yann.
Le mélange des scipts d'oli_d & xs_yann fonctionne à merveille…
Un incontournable à mettre dans son interface.
Encore merci.
Je comprends vite, mais faut m'expliquer longtemps…