Salut à tous!
J'aimerais résoudre un problème auquel je suis confronté en ce moment.
Je dois créer une boite à musique de ce type:
Tout le mécanisme doit être automatisé parce qu'il va falloir faire des changements de rythme pour une animation.
Mon problème concerne les petites lattes qui créent le son. Je cherche donc un système avec Xpresso pour automatiser l'animation des lattes mais c'est là que ça pêche.
Il faut une collision et un effecteur bend pour courber la latte.
Voici ce que j'ai pu faire mais il n'y a que 2 états de l'effecteur bend, un état à 0% et un autre état que je peux contrôler.
Donc au final j'aimais que l'effecteur bend s'anime en fonction de la collision des piques sur les lattes.
J'espère avoir été assez clair, merci d'avance!
Bonsoir Orlav
je n'y connais pas grand chose , mais je me permets d'intervenir car ton sujet m'a fait penser à un autre sujet qu'avait ouvert Géantvert , et je me suis dis que cela pourrait être une autre piste pour ce que tu veux faire sur tes lamelles , Fluffy avait amené une solution avec un exemple de scène téléchargeable , donc si cela peut t'aider , il s'agit d'utiliser le module HAIR , voici le lien :
http://frenchcinema4d.fr/showthread....hair-dynamique
peut être que....
Et bien c'est une magnifique alternative! en bidouillant un peu j'arrive presque à ce que je veux.
L'unique problème est que c'est une simulation et que cela ram dans le viewport.
Je serais quand même preneur d'une autre solution.
Mais merc à toi sansalvador!
J'ai bien une solution. C'est un peu bourrin mais ça à l'avantage d’être simple.
Utilisation du range mapper pour controller le bend en fonction de la rotation. C'est bourrin parce qu'il va falloir un xpresso sur chaque lamelle et régler manuellement les courbes de chaque lamelle.
En même temps en y a pas dix mille. Il suffit de régler correctement le premier xpresso ensuite il n'y qu'a le dupliquer et décaler les courbes du range mapper. Comme tu as une retour visuel ça peu aller assez vite.
A mon avis en une demi-heure c'est réglé. Par contre après ça suivra le rythme et avec la courbe du range mapper tu a un contrôle précis de l'animation de la lamelle.
Pas forcément besoin de dynamiques pour ce genre de truc. Tu devrais pouvoir te créer un Xpresso qui vient agir sur ton bend lorsque la distance entre deux objets se réduit (picots<>objets placés au bout des lamelles).
Je vais voir si j'ai un peu de temps pour te sortir un fichier.
*Edit*
Ah, grillé par Floc.
Fluffy mais costaud...www.fluffy4d.com
Et bien c'est bourrin mais c'est exactement ce que je recherchais! Cela s'adapte évidemment à la vitesse de la rotation et c'est le principal!
Et oui, je n'ai que 13 lamelles ça ne devrait pas être trop long.
Merci Floc!
Oui Fluffy, ce serait une possibilité, je testerai tout seul ça devrait aller pour cette option là
Merci à vous deux ce fut fort instructif!
Dernière modification par OrlaV ; 06/12/2013 à 23h56.
Salut,
J'ai tenté un truc en Python : Télécharger
En gros, dès que la lamelle a une collision, elle se courbe (à une vitesse dépendant de la vitesse de rotation du cylindre) jusqu'à une valeur maximale, puis revient à son point de départ.Code PHP:
import c4d
collide = False # En cours de collision : collide = True
prevRotation = 0 # Rotation du cylindre a la frame precedente
MAX_STRENGTH = 0.8 # Valeur maximale du bend
SPEED_FACTOR = 2.0 # Vitesse de courbure
# Fait converger 'a' vers 'value' par pas de 'step'
# exemples :
# converge(10, 0, 0.5) = 9.5
# converge(-5, 0, 0.2) = -4.8
def converge(a, value, step):
# Permet de ne pas osciller quand 'a' est proche de 'value'
if abs(a) >= abs(value) + abs(step):
if a > value:
a -= step
elif a < value:
a += step
else:
a = value
return a
def main():
global collision
global strength
global rotation
global Output
global collide
global prevRotation
# Si une collision est detectee on amorce la collision
if collision:
collide = True
# On calcule la vitesse de rotation grace a la rotation precedente et
# la rotation courante
if not prevRotation:
velocity = 0
else:
# On s'assure que la vitesse est plus petite que la valeur maximale
velocity = min(MAX_STRENGTH, (prevRotation - rotation) * SPEED_FACTOR)
# Si une collision est en cours on augmente la courbure
if collide:
strength += velocity
# Si on atteint la valeur maximale on arrete la collision
if abs(strength) >= MAX_STRENGTH:
collide = False
# Si aucune collision n'est en cours on converge vers la position de repos
if not collide:
strength = converge(strength, 0, 0.2)
prevRotation = rotation
Output = strength
Avec MAX_STRENGTH la valeur maximale et SPEED_FACTOR la vitesse, qui sont les deux paramètres à adapter.
C'est pas très précis mais ça a l'air de fonctionner (dans les deux sens).
Dans le zip j'ai mis mon fichier sur lequel j'ai fait des tests et une adaptation sur le fichier de Floc.
Dernière modification par xs_yann ; 07/12/2013 à 00h40.
Haaa, xs_yann ça marche top bien. On a même envie de jouer avec.
OrlaV avec ce outil, tu vas pouvoir faire des symphonies de boites à musique !
Oula, l'artillerie lourde!
Ca marche quand même au poil ce système. Je testerai tout ça demain!
Merci à toi xs-yann!