Bonjour,
Dans mes projets, j'ai souvent le même problème :
j'utilise pas mal les extrusions controlées, en galérant plus ou moins avec les doubles rails et autres subtilités dues au sens des splines,
et j'en fais souvent avec pour chemin une spline constituée de plusieurs segments, parfois non jointifs
(par exemple, une spline pour le contour des trottoirs de plusieurs ilots, ou des balcons filants sur un immeuble, mais pas tous de la même longueur )
et là, pb : le texturage uvw d'une extrusion controlée s'adapte automatiquement à la longueur du chemin de chaque tronçon, et non à l'ensemble de l'extrusion, ce qui fait que ma texture n'est pas uniforme sur tous mes balcons, ce qui m'oblige faire une extrusion controlée par balcon et ajuster à chaque fois ma tex, ce qui ne plait pas du tout !
y a t il un moyen d'uniformiser ce mapping ?
et deuxième problème, pareil en fonction de la subdivison du profil, (voir image)
(ce qui m'a bien pris la tete pour faire du carrelage dans des couloirs de métro avec des angles arrondis)
alors on est obilgés de redécouper chaque segment du contour, pour qu'il ait à peu près la même dimension que les autres, c'est vraiment nul ..
merci si qqun connait le réglage magique que je n'ai pas trouvé !
kenavo !! // Pinterest KAMIGAZ®
ah merci auréty,
le seul hic que je ne comprends absolument rien à xpresso, c'est du chinois pour moi !
en plus si il faut faire le truc pour chaque texture du matériau, ça me parait chaud,
+ mesurer la spline, si je la bouge, recommencer ..
c'est trop pour moi
j'espérais qu'il y avait un paramètre cool que j'aurais zappé ...
enfin si personne ne connait un truc, je serai bien obligé de mettre le nez ds xpresso !
Quand je dis récupère la longueur de la spline, c'est via xpresso, tu n'as pas à le faire à chaque fois.. Par contre là où ça marche dans mon exemple en me basant sur une texture échiquier ( et donc en jouant sur la fréquence U ou V ), ça foire en me basant sur une image car je dois passer par le paramêtre de longueur X ou Y de la propriété de projection.. Hors si j'utilise le facteur de longueur ca ne marche plus.. Faut que je réfléchisse un peu à la question.. Comment ont fait pour récuperer par Xpresso la résolution d'une image ??
kenavo !! // Pinterest KAMIGAZ®
Pas besoin de sortir la calculette, il y a le nœud image bitmap qui donne la largeur et la hauteur, en pixels, de l'image référencée en entrée
j'allais le dire...
÷ R19 Studio ÷ cacahuètes ÷
Tu peux tout simplement ajuster l'échelle de la projection UV sur un des axes, à l'oeil, en sélectionnant le tag et en ajustant jusqu'à satisfaction.
Fluffy mais costaud...www.fluffy4d.com
Oui mais c'est justement cette approximation qu'il trouve pénible Fluffy..
Mais comme le dit Tabou, Karl... avec le noeud Bitmap qui retourne la largeur/hauteur de l'image, c'est plus facile d'automatiser un process..
Du coup, j'ai un peu joué pour pondre un petit fichier sympa avec profil, chemin et autre option pilotable via DU que je me propose de t'expliquer en vidéo demain, afin que tu mettes un peu les pieds dans XPresso
kenavo !! // Pinterest KAMIGAZ®
Interessant , moi je me paluche le truc a la main jusqu'à avoir le résultat souhaiter, ais ce n'est pas parfait.
C'est en pratiquant que l'on apprend...
Un peu comme ton orthographe.
"ais ce n'est pas parfait" faut aller le chercher quand même.
Une relecture avant de poster, pour le confort de nos yeux, stp ? merci d'avance
÷ R19 Studio ÷ cacahuètes ÷
ah, merci pour toutes vos réponses !
aurety, voilà, c'est exactement le genre de truc que je veux faire, ces caniveaux !
en revanche mon problème n'est pas le calage de la texture à la main,
mais bien la différence de proportions de mapping entre des segments de taille différentes ..
en attendant, si tu veux bien partager ton fichier, je promets à genoux de regarder un peu comment fonctionne xpresso
(mais malgré ma bonne volonté, j'y suis complètement hermétique j'en ai peur ..)
pendant qu'on y est, j'ai ausi un autre bug de rendu sur mes extrusions controlées, au niveau du rendu de la texture (ou juste du bump, je ne me rends pas trop compte ?)
pour y remédier, il faut que je redécoupe ma spline chemin
(sir gong, tu postes vraiment à 5h42 du matin ?!°)
Comme promis, le petit tutorial pour faire en sorte que quelque soit la longueur du chemin de l'extrusion, on puisse répeter de façon régulière une texture. Désolé pour le retard..
kenavo !! // Pinterest KAMIGAZ®
aurety merci bcp,
je vais faire ton truc..
xpresso a l'air vraiment super puissant je suis sur qu'il y a plein de situations ou il doit être magique,
faut vraiment que je m'y mette
je vais commencer par ce tuto
merci !
Salut,
Merci pour le partage Aurety.
Je me suis amusé à transformer ton Xpresso en script, ça n'apporte pas grand chose mais je le poste quand même.
La version Tag Python à placer sur l'extrusion :
La version script à copier dans le Script Manager (s'applique sur tous les objects sélectionnés) :Code PHP:
import c4d
def adaptTexture(sweep, size=0, tiles=0):
tag = sweep.GetTag(c4d.Ttexture)
mat = tag[c4d.TEXTURETAG_MATERIAL]
shader = mat[c4d.MATERIAL_COLOR_SHADER]
irs = c4d.modules.render.InitRenderStruct()
if shader.InitRender(irs) == c4d.INITRENDERRESULT_OK:
bitmap = shader.GetBitmap()
shader.FreeRender()
height = bitmap.GetBh()
spline = sweep.GetDown().GetNext()
sld = c4d.utils.SplineLengthData()
sld.Init(spline.GetRealSpline())
length = sld.GetLength()
if size:
tiles = height / float(size)
tag[c4d.TEXTURETAG_LENGTHY] = (height / length) / tiles
def main():
sweep = op.GetObject()
adaptTexture(sweep, size=200)
Ça s'utilise soit en donnant un nombre de répétition (comme dans l'Xpresso) : adaptTexture(object, tiles=4),Code PHP:
import c4d
def adaptTexture(sweep, size=0, tiles=0):
...
def main():
objects = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_0)
for object in objects:
if object.CheckType(c4d.Osweep):
adaptTexture(object, size=200)
c4d.EventAdd(c4d.EVENT_0)
if __name__=='__main__':
main()
soit en choisissant la taille d'une répétition : adaptTexture(object, size=200)
J'ai volontairement omis la gestion d'erreur pour faire plus court.
Merci pour le tut', c'est le genre de pb qu'on a tous déjà eu !
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 Lenogre !
Yann, super merci !! moi qui me colle doucement à Python, c'est le genre de script super intéressant pour moi car il me permet de bien visualiser le passage d'XPresso vers du code. C'est inestimable
J'adore le forum quand il fonctionne comme ça !
kenavo !! // Pinterest KAMIGAZ®
Merci pour le tuto et script, les gars. Très bonne technique, et bon moyen d'apprentissage du script!
Fluffy mais costaud...www.fluffy4d.com
XS_Yann, j'arrive pas à faire fonctionner ton script python
à quoi correspond le Ttexture dans cette partie du code ?
J'ai pas d'erreur sur le script mais quand je tente de saisir d''autres valeurs que 0, rien ne se passe.Code PHP:
tag = sweep.GetTag(c4d.Ttexture)
EDIT : Oups ! ça marche ! J'éditais la mauvaise ligne !!
Dernière modification par Aurety ; 20/02/2013 à 09h33.
kenavo !! // Pinterest KAMIGAZ®
Juste pour répondre à la dernière question la fonction GetTag veut un paramètre en entrée pour lui indiquer le type de tag à aller chercher.
c4d.Ttexture correspond donc à l'ID' du tag texture. (5616)
Si tu tapes dans la console c4d.Ttexture il vas te donner le chiffre 5616.
Si tu glisses un tag texture dans le champ de la console et que tu valides il vas te donner quelques info et également te mettre "with ID 5616"
La fonction vas donc parcourir les tag et dès qu'elle en voit un avec cet ID elle te donne le "pointeur" (de type baseTag) vers le/les tags en question.
Et même plus précisément le premier tag du type passé en paramètre ou celui à l'index passé en deuxième paramètre :
Prototype : BaseObject.GetTag(type[, nr=0])
op.GetTag(c4d.Ttexture, 1) = le deuxième tag texture.
Pour les ids j'avais un peu expliqué comment les trouver dans ce post : http://frenchcinema4d.fr/showthread....=1#post1002012
Et bien sûr les listes de types du SDK qu'on trouve dans les constructeurs (__init__) des classes type BaseObject, BaseTag, etc.
oupsss vi ^^