Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Francesco Tundo

Espressione rotazione - velocità

Recommended Posts

Ciao a tutti, devo animare un oggetto rotante su y che rallenta fino a fermarsi con velocità precise in tre momenti precisi; quindi ho creato un parametro Speed arbitrario e l'ho messo in Attribute Holder, qundi ho fatto wire parameter e ho settato l'espressione Speed*S. Fino ad un certo punto si comporta come deve, cioè parte con una certa velocità e rallenta, ma non capisco perché ad un certo punto si ferma e torna indietro per poi fermarsi del tutto. Non ho trovato nulla che mi aiuti online.

Suggerimenti?

Grazie mille :)

Francesco

Speed.JPG

Rotazione Y con funzione.JPG

Share this post


Link to post
Share on other sites

@Francesco Tundo Potresti inserire il file della scena? (logicamente solo l'oggetto interessato alla rotazione). Sarei curioso di dargli una occhiata (max2016)

Share this post


Link to post
Share on other sites

Analogo a questo allegato, anche come orientamento - Edit, scusa, è verso la X, non la Y. In questo momento non ho il file sottomano

cylinder.JPG


Edited by tfrancesco70

Share this post


Link to post
Share on other sites

Ho creato la funzione RPS (rounds per second) nell' Attribute Holder (range: 0-100), ho settato la rotazione y con il controller Expression (RPS*S) e l'ho linkata. La funzione animata con keyframes va da 10 a 5 ad 1 a 0. Se usi valori costanti (non animati) come test vedi che la velocità è corretta, se invece rallenta si ferma e torna indietro, per poi continuare a rallentare e fermarsi.

Rotazione.max

Share this post


Link to post
Share on other sites

Se imposto RPS che va da 10 a 5 l'oggetto rallenta fino a fermarsi e poi riparte a velocità 5.

Mi sembra folle.

Qualcuno ha qualche idea su come controllare in modo preciso una velocità?

Rotazione 10 5.JPG

Share this post


Link to post
Share on other sites

Ho provato ed effettivamente con valori che vanno al negativo (10>0) si crea una curva di animazione nell'asse di rotazione (ecco il perché rallenta per poi ruotare al contrario). Con valori positivi (0>10) fila tutto liscio, compreso l'aumento e diminuzione della velocità. Ora non vorrei che fosse un problema data dalla rotazione Bezier, l'unica accettata con questo tipo di controlli di espressioni... Ho ricreato da zero più e più scene, e sempre questo problema si presenta. Secondo me l'espressione da scrivere (speed*S) è incompleta in un certo senso (anche se giusta). Comunque sono curioso di questa cosa, e continuo a vedere di trovare soluzione...

Share this post


Link to post
Share on other sites

@tfrancesco70

Allora sono arrivato ad una soluzione, certamente un po forzata, ma appare funzionare :D 

Come detto nel post sopra, c'è qualcosa nella funzione che manca, quindi in accordo con l'help di MaxScript, invece di usare uno Float Expression ho pensato di utilizzare un Script Expression. Se leggi nell'help "How do I link the rotation of an object to the scene time?" ci sono una serie di casi spiegati molto bene. 

 

Quindi ci sono i pro e i contro: Appare non funzionare sull'asse Y (penso che sia un bug di Max) e la rotazione deve essere controllata in pieno. Puoi fare ciò che ti serve per la tua animazione, inserendo chiavi di animazioni, rallentare, accelerare ecc. Un'altra cosa importante, visto che la curva Bezier si comporta male, ho usato "degToRad" la quale trasforma la rotazione in gradi

 

In script expression inserisci:

degToRad ($.rotation.x_rotation + $.modifiers[#Attribute_Holder].Custom_Attributes.Speed)

Il segno "$" sta per il nome del tuo oggetto, quindi ".rotatio.x_rotation" e l'asse di rotazione riferito all'oggetto stesso, mentre " $.modifiers[#Attribute_Holder].Custom_Attributes." è il collegamento con il tuo spinner, metre "Speed" è il nome dello spinner stesso.  Importante, per determinare una rotazione negativa (es. -100), devi creare lo spinner con Attribute Holder  con valori minimi in negativo (es: -100 > +100).

 

Spero che ti possa essere di aiuto, ha me ha fatto impazzire sta cosa...


Edited by Michele71
aggiunto testo mancante

Share this post


Link to post
Share on other sites

Comunque, ho consultato anche altri siti in merito, e mi è stato detto che il comportamento dato da "Speed*S" è ciò che avviene poi nell'animazione. Infatti: 

 

Tempo (S) nel secondi va da 0 a 3,333
Velocità (controller float) va da10,0 a 0

 

Se fai Speed*S il risultato è 10.0 * 0.0 = 0.0 e 0.0 * 3.333 = 0.0
Impostando la rotazione in 100 fotogrammi (in modo che parte da 0 e finisca a 0), nel fotogramma 50 si ottiene il valore più alto ~ 8.33 dove la velocità è 5.0 e  lo Speed è 1,67 (se si mette un CA float). I valori sono impostati per creare questo tipo di animazione.

 

 

 

Share this post


Link to post
Share on other sites

Ho messo x rotation da Float Expression a Float Script; l'oggetto si chiama Ctrl_Sp01_Rotore. Effettivamente il mio oggetto ruota in x, quindi dovrebbe essere appropriato. Ma da errore 

Unknown Property: "rotation" in undefined

L'espressione viene

degToRad (Ctrl_Sp01_Rotore.rotation.x_rotation + Ctrl_Sp01_Rotore.modifiers[#Attribute_Holder].Custom_Attributes.Speed)

Premetto che sono totalmente a digiuno di maxscript, è la prima volta che mi trovo a smanettare con testo :)

 

Share this post


Link to post
Share on other sites
55 minuti fa, Michele71 ha scritto:

Comunque, ho consultato anche altri siti in merito, e mi è stato detto che il comportamento dato da "Speed*S" è ciò che avviene poi nell'animazione. Infatti: 

 

Tempo (S) nel secondi va da 0 a 3,333
Velocità (controller float) va da10,0 a 0

 

Se fai Speed*S il risultato è 10.0 * 0.0 = 0.0 e 0.0 * 3.333 = 0.0
Impostando la rotazione in 100 fotogrammi (in modo che parte da 0 e finisca a 0), nel fotogramma 50 si ottiene il valore più alto ~ 8.33 dove la velocità è 5.0 e  lo Speed è 1,67 (se si mette un CA float). I valori sono impostati per creare questo tipo di animazione.

 

 

 

Capisco! Grazie mille! Pare proprio che debba affrontare il maxscript.

Possibile che non esista proprio un modo semplice per definire una velocità? Mi sembra strano che non esista neanche un'interfaccia a nodi per l'animazione.

Share this post


Link to post
Share on other sites
2 ore fa, Francesco Tundo ha scritto:

[...]Effettivamente il mio oggetto ruota in x, quindi dovrebbe essere appropriato. Ma da errore 

Unknown Property: "rotation" in undefined

L'espressione viene

degToRad (Ctrl_Sp01_Rotore.rotation.x_rotation + Ctrl_Sp01_Rotore.modifiers[#Attribute_Holder].Custom_Attributes.Speed)

[...]

 

 

La rotazione è indefinita perché non riconosce l'oggetto. Quindi davanti al controllo e oggetto metti il segno "$" esempio: $Ctrl_Sp01_Rotore. e $Ctrl_Sp01_Rotore e ricordadi di nominare bene l'attributo de CA. Sotto la stringa "magica" :D 

 

degToRad($Ctrl_Sp01_Rotore.rotation.x_rotation + $Ctrl_Sp01_Rotore.modifiers[#Attribute_Holder].Custom_Attributes.Ctrl_Sp01_Rotore)

 

Share this post


Link to post
Share on other sites

@Francesco Tundo 

 

Se sei interessato ancora al discorso sopra, finalmente "siamo" arrivati ad una bella conclusione, ovvero a determinare ciò che si vuole usando una espressione decente e funzionante.

if(F < nFrames,Speed * ((nFrames-F)/nFrames)^2,0.0)

Per maggiori informazioni sul suo utilizzo e spiegazione matematica, vedi QUI dato che è molto complicato spiegarlo in due parole semplici semplici :D 

 

N.B: Per usare i secondi nella animazione, devi sostituire la "F" con "S"

Share this post


Link to post
Share on other sites

Ciao! Scusa se non mi sono fatto sentire in questi giorni, ho dovuto seguire altri lavori. Sì, sono molto interessato e oggi proverò ad applicarla! Penso anche che sia ora di imparare maxscript, ho incontrato molte situazioni in cui avrei potuto risolvere in questo modo e ho dovuto simulare alla meno peggio.

Intanto grazie mille, sei stato gentilissimo!

Share this post


Link to post
Share on other sites

la prima

degToRad($Ctrl_Sp01_Rotore.rotation.x_rotation + $Ctrl_Sp01_Rotore.modifiers[#Attribute_Holder].Custom_Attributes.Ctrl_Sp01_Rotore)

la seconda

if(F < nFrames,Speed * ((nFrames-F)/nFrames)^2,0.0)

se ho capito bene devo aggiungerla alla prima? scusa ma non ho proprio idea di come funzioni lo scripting, e farò le prove nel we, ora sono al lavoro

Share this post


Link to post
Share on other sites

Puoi vedere come funziona dall'allegato inserito nella discussione di riferimento postato sopra. La prima formula ha il problema che se cambi assi di rotazione, essi si sommano creando un bordello totale, e in più, sull'asse Y non funziona. La seconda espressione, deve essere associata allo speed e va inserita nel constant (non scale), ovvero un parametro lineare nel tempo. Comunque ti consiglio di leggere la spiegazione matematica per capirne il motivo ;)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...
Aspetta! x

Ti piacerebbe rimanere sempre aggiornato sulle ultime novità nel campo della computer grafica?

Iscrivendoti alla Newsletter riceverai subito una mail con le indicazioni per scaricare gratuitamente:

  1. Le immagini HDRI presenti su HDRI pro
  2. Una sequenza di 300 immagini HDRI generata da Luca Deriu tramite il programma Real HDR