J'explique :
J'ai un mur de briques. Chaque brique est un objet. Supposons que je prépare, 5 ou 6 textures différentes.
Je voudrais les répartir aléatoirement sur les briques de mon mur... Comme dans le plugin "tuilegen"
Comment dois-je m'y prendre ?
Avec ou sans MoGraph?
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
Sans...
Je l'ai fait a la main. 711 Briques, ça va j'ai juste un peu les yeux qui piquent
Mais si quelqu'un a une idée pour le faire automatiquement je suis tout de même preneur.
hé bien sans Moggraph j'utiliserai la matière "carrelage" (matière que tu trouveras dans "surfaces") réglée bien sûr sur "brique" avec l'option "aléatoiree cochée. J'appliquerai ça à l'intégralité de mon mur en faisant attention à faire en sorte que la taille des briques de la texture corresponde à la taille des briques objet... voilà pour la base.. ensuite quelques calques de bruit pour apporter de la diversité à la matière elle même...
- sélectionne les matériaux
- sélectionne l'objet parent contenant les objets à texturer
- colle le code ci-dessous dans le menu python/Gestionnaire de script
- clique sur le bouton Exécuter
si tu veux enregistrer le script clique sur le bouton créer script, il apparaîtra dans le menu python/scripts personnalisés après redémarrageCode:import c4d import random def main(): mats= doc.GetActiveMaterials() if mats : parent = doc.GetActiveObject() if parent: for obj in parent.GetChildren(): tg = c4d.TextureTag() tg[c4d.TEXTURETAG_MATERIAL]=random.choice(mats) obj.InsertTag(tg) c4d.EventAdd() if __name__=='__main__': main()
EDIT : toasted by Ogier
Dernière modification par oli_d ; 02/05/2011 à 15h28.
Merci,
je viens d'essayer ton script mais cela n'a pas l'air de fonctionner. Aucune texture ne s'applique ...
Il faut bien sélectionner plusieurs textures ET un objet parent contenant tous les objets à texturer
C'est ce que je fais :
-je sélectionne mes 4 textures.
-je sélectionne l'objet neutre contenant toutes mes briques.
-je cop/col le script dans le fenetre du gestionnaire de scripts python.
-Je clique sur executer
... et ça ne fait rien
si tu ouvres la console python (menu python/console) est-ce qu'il y a un message d'erreur ?
as-tu bien la r12.043 ?
es-tu du signe du poisson ? (<- humour désopilant, n'est-il pas?)
Est-ce que quelqu'un d'autre a testé ...?
ça a l'air de marcher
me suis un peu lâché sur l'exécute xD
Je viens de rentrer... je vois vos messages et je me dis "Mais c'est pas possible pourquoi ça ne fonctionne pas ???!!!!"
J'ouvre C4D, je refais la manip' et ça fonctionne
C'est extrêmement pratique je te remercie beaucoup oli_d !
Excellent Oli_d !!
Quelle superbe évolution que cette implémentation Python.
ah oui ! c'est carrément excellent ton truc Oli_D !
t'aurais pas un script qui s'occuperait de la paperasse des fois ???
kenavo !! // Pinterest KAMIGAZ®
Salut ;
Très pratique ce script.
Question :
Est-il possible qu'à chaque génération de textures les textures précédemment générées soient supprimées, pour ne pas
créer "l'effet" mastermind justement ?
J'ai essayé de rajouter une ligne dans la fonction du genre tg=c4d.RemoveTag() ou avec DeleteTag() mais je ne connais pas assez la syntaxe Python pour cela...
Erod
J'ai un générateur de paperasse qui s'appelle "Administration" (release 124365.02), mais je pense que tu imaginais un truc qui marche plutôt dans l'autre sens !
Ci-dessous une variante qui ne détruit pas mais qui remplace le matériau de référence du tag texture le plus à droiteEst-il possible qu'à chaque génération de textures les textures précédemment générées soient supprimées, pour ne pas
créer "l'effet" mastermind justement ?
Code PHP:
import c4d
import random
def main():
mats= doc.GetActiveMaterials()
if mats :
parent = doc.GetActiveObject()
if parent:
for obj in parent.GetChildren():
tg = None
for t in obj.GetTags():
if t.GetType()==c4d.Ttexture: tg=t
if not tg :
tg = c4d.TextureTag()
obj.InsertTag(tg)
tg[c4d.TEXTURETAG_MATERIAL]=random.choice(mats)
c4d.EventAdd()
if __name__=='__main__':
main()
C'est exactement ce que je recherche !
Merci oli_d
Très très pratique comme script.
Merci oli_d pour cette contribution qui je pense, à sa place dans les tut'minutes.