PDA

Visualizza Versione Completa : Dynamic Parenter



loriswave
07-06-07, 11:39
Ho spulciato un po in giro ma mi sembra che non vi sia nulla di veramente comodo.
L'idea è quella di avere/creare un tool che permetta di animare il gesto di abbambinare in maniera veloce e pratica.
Cos'è abbambinare? abbambinare è quando si deve per esempio muovere un mobile, lo si solleva su un angolo, lo si ruota e lo si appoggia, poi lo si solleva sull'altro angolo, lo si ruota e lo si appoggia.
Mettete anche il caso di voler spostare uno scatolone facendolo ruotare, si ruota su uno spigolo, poi su un altro e poi su un altro ancora.
Esiste una maniera pratica per farlo?
ho guardato i vari parenter dinamici di lw, ma sono tutti scomodi da usare, bisogna impostare il fotogramma di scambio, bisogna ricordarsi di settare un kf, mi sembra tutto poco immediato.

Ho pensato di fare un lscript, e fino ad un certo punto è anche fattibile, solo che avrebbe una serie di limiti. ( mi è sembrato che gli lscript sentono l'inizio di un'azione nell'layout, ma non la fine )
Stavo perciò pensando ad un plugin vero e proprio, ma prima di buttarmi in un impresa del genere, ( non sono un programmatore, non conosco il c e neppure l'sdk di lw) mi chiedevo se ne valeva la pena.
Che ne pensate?

gebazzz
07-06-07, 11:47
mi sembra un bel progetto ma piuttosto ambizioso, anche perchè sarebbe il primo. attualmente non so come lo farei, è pensabile farlo con la dinamica hardfx, o forse anche con il plugin odefl..
non so, come struttureresti un plugin di questo tipo?

vashts

loriswave
07-06-07, 12:43
ho fatto degli esperimenti con lscript, e funziona in parte.
più o meno senza addentrarsi nello specifico ci sono due soluzioni, una potrebbe essere una cosa del genere:

si crea un gruppo di ogetti null, ogni volta che uno di questi viene selezionato si attiva una modalità per la quale se si va a muovere lui diventa padre e gli altri figli, quando si finisce di muovere si ritorna nella modalita tutti liberi.
Ovviamente bisogna stare attenti a parent in place e se gli ogetti null hanno gia un padre diventa un casino.

altra idea è quella di non creare parentele vere e propie, ma formule che calcolino la distanza e gli angoli relativi di tutto il gruppo, quando si va a muovere o ruotare altre espressioni ricalcolano le nuove posizioni e rotazioni e creano un kf con i nuovi valori.

il secondo è più complesso ma secondo me da maggior flessibilità e permette poi nuovi sviluppi, via lscript ho trovato la maniera per far funzionare una cosa simile per traslazioni e anche per le rotazioni, non ho ancora risolto come cambiare la rotazione a i figli e soprattutto non sono riuscito a trovare una maniera per capire quando uno finisce di fare la modifica. lightwave comunica a lscript quando inizia, ma non quando finisce, perciò si rimane fermi alla penultima modifica come valore calcolato.

via sdk credo che vi sia un ritorno di chiamata quando uno molla la presione del mause, si potrebbe fare calcolare dopo quella chiamata la posizione definitiva.

credo che se ne capissi qualcosa di c non dovrebbe essere una cosa difficile. per il momento vorrei valutare se poi una cosa del genere abbia una sua utilità, o se sono soli io che sento la mancanza di questa cosa. mi avevano detto per esempio che in maya per esempio si potesse facilmente impostare una parentela in base all'inclinazione per esempio di un oggetto.

a voi la palla.

Piddu
07-06-07, 14:37
Ciao Loris. Non ho capito bene quello che vuoi fare, ma ti posso dire un paio di cose da quello che ho capito.

Primo: un parenter non e' semplicemente una plug-in che legge dei valori dai canali di rotazione/posizione/scala, ma si preoccupa di deformare lo spazio di trasformazione dei figli sottostanti.

Secondo: stai attento perche' non usando canali di appoggio o altro, invece che semplificare la vita all'utente rischi di creare qualcosa di instabile e dannoso.

Per il resto ti faccio in bocca al lupo.
Mi sembra veramente una cosa ambiziosa.
Ciao ciao

loriswave
07-06-07, 14:47
l'ho chiamato parenter ma effettivamente non si dovrebbe comportare come tale, e non dovrebbe avere effetti sulla scala degli oggetti per il momento. dovrebbe essere più simile ad una selezione multipla dove le trasformazioni di posizione e soprattutto rotazione agiscono non localmente attorno al pivot dei singoli null, ma attorno al pivot del null selezionato, un po come nel modeller quando la rotazione non e centrata rispetto alla selezione, ma rispetto a dove hai messo il mouse. con l'unica differenza che al posto di leggere la posizione del mouse si usa la posizione di un null preimpostato e reso parte di un gruppo.

Secondo: stai attento perche' non usando canali di appoggio o altro, invece che semplificare la vita all'utente rischi di creare qualcosa di instabile e dannoso.

Questa non l'ho capita, mi puoi per favore spiegare?

Piddu
07-06-07, 16:57
Ok. Allora intendo facendo sta cosa in effetti e' come se tu stessi imparentando effettivamente un oggetto temporaneamente a un'altro e modificandone la sua rotazione e posizione nello spazio.

L'instabile e dannoso e' dovuto al fatto che semplicemente il basarsi su una selezione puo' risultare rischioso. Un esempio, volevo fare per Maya una plug-in che facesse lo switch tra FK/IK basandosi sulla selezione corrente. Nel senso che poi si preoccupava poi il nodo che stavo programmando di cambiare i valore locali di ciascun oggetto coinvolto.
Tutto cio' pero' come puoi ben capire e' un problema ridondante e poco pulito.

Inoltre in LW l'unico modo per fare sta cosa, mi sembra che sia creare un master class script, con tutto che per fare una cosa pulita nel senso non mettendo keyframe sui canali dovresti farlo lavorare in combinazione con un animation script e quest'ultimo si dovrebbe occupare di tutta la gestione.

Non so, non ho capito proprio a livello di struttura come intendi crearlo.

loriswave
07-06-07, 17:07
Inoltre in LW l'unico modo per fare sta cosa, mi sembra che sia creare un master class script, con tutto che per fare una cosa pulita nel senso non mettendo keyframe sui canali dovresti farlo lavorare in combinazione con un animation script e quest'ultimo si dovrebbe occupare di tutta la gestione.


perchè non posso mettere keyframe sui canali?
era propio quello che volevo fare. un master class era quello che stavo pensando, ma non capisco perche non posso scrivere direttamente dei key frame su i vari xyz degli oggetti coinvolti, in modo che se qualcun'altro prende la scena e non ha il plug tutto funziona correttamente lo stesso.

se riesco tento di fare un video con più o meno come dovrebbe funzionare così forse riesco ad essere più chiaro (ovviamente facendo finta che funzioni).

comunque a parte le difficolta di realizzazione, pensate che sia utile?

Piddu
07-06-07, 17:27
perchè non posso mettere keyframe sui canali?
era propio quello che volevo fare. un master class era quello che stavo pensando, ma non capisco perche non posso scrivere direttamente dei key frame su i vari xyz degli oggetti coinvolti, in modo che se qualcun'altro prende la scena e non ha il plug tutto funziona correttamente lo stesso.


No Loris non dico che non lo puoi fare. :) Ecco volevo capire sta cosa. Va benissimo, l'unico problema facendo a sto modo e' che rischi di riempirti di key-frame senza neanche vederli in quanto li stai piazzando sull'oggetto non selezionato. Cmq prova vediamo cosa succede... :)

Sono curioso.
A presto

happymilk
07-06-07, 18:30
OT: "abbambinare" è LOLLISSIMO :D

Lino
07-06-07, 23:42
Puoi utilizzare i Point Constraint e gli Orient Constraint. Credo siano la soluzione ideale (la più rapida ed efficace) al tuo problema.

loriswave
08-06-07, 08:28
No Loris non dico che non lo puoi fare. :) Ecco volevo capire sta cosa. Va benissimo, l'unico problema facendo a sto modo e' che rischi di riempirti di key-frame senza neanche vederli in quanto li stai piazzando sull'oggetto non selezionato. Cmq prova vediamo cosa succede... :)

Sono curioso.
A presto

ritiro tutto, hai ragione tu, oltre ad essere difficle da realizzare non avrei ottenuto neppure quello che volevo.
La notte porta consiglio e fra i dubbi che hai sollevato e il tentatvo di fare un video per far capire la cosa ho capito che non avrebbe funzionato. Adesso sto valutando una strad molto più semplice, vediamo se funziona.

x lino:
simple constrain, parent e compagnia bella vanno bene e forse sarebbero pure una soluzione, ogni volta però devi aprirli per fare delle modifiche, li trovo poco interattivi, poi forse sono io che sono incapace perciò me li riguarderò con più attenzione.

grazie ad entrambi.

Marchino
08-06-07, 09:30
Non so aw ho capito bene, ma qualcosa di simile lo fa un plugin di worley della suite Polk he si chiama Parent

Praticamente poi imparentare e "sparentare" :p dinamicamente gli oggetti nella scena, quindi con l'oggetto e un paio di null dovresti cavartela

Il plugin lo trovi qui
http://www.worley.com/E/Products/polk/parent.html

Piddu
08-06-07, 09:48
ritiro tutto, hai ragione tu, oltre ad essere difficle da realizzare non avrei ottenuto neppure quello che volevo.
La notte porta consiglio e fra i dubbi che hai sollevato e il tentatvo di fare un video per far capire la cosa ho capito che non avrebbe funzionato. Adesso sto valutando una strad molto più semplice, vediamo se funziona.

x lino:
simple constrain, parent e compagnia bella vanno bene e forse sarebbero pure una soluzione, ogni volta però devi aprirli per fare delle modifiche, li trovo poco interattivi, poi forse sono io che sono incapace perciò me li riguarderò con più attenzione.

grazie ad entrambi.

Beh loris puoi sempre fare degli slider e collegari i canali via espressione per linkare i valori dei constraint, oppure protesti sempre creare degli oggetti nella viewport e usare sempre espressioni prendendo i valori dai canali per modificare i valori dei constraint.

Ciao ciao

Lino
08-06-07, 11:14
x lino:
simple constrain, parent e compagnia bella vanno bene e forse sarebbero pure una soluzione, ogni volta però devi aprirli per fare delle modifiche, li trovo poco interattivi, poi forse sono io che sono incapace perciò me li riguarderò con più attenzione.

grazie ad entrambi.

Vorrei avere il tempo per farti un video...usare i constraint è semplicissimo e non occorre "riaprire" per fare modifiche.

Basta applicare un item di controllo agli envelope dei constraint per controllarne la "forza".

Ovviamente puo usare constraint multipli...

loriswave
08-06-07, 11:25
Vorrei avere il tempo per farti un video...usare i constraint è semplicissimo e non occorre "riaprire" per fare modifiche.

Basta applicare un item di controllo agli envelope dei constraint per controllarne la "forza".

Ovviamente puo usare constraint multipli...

credo di aver capito faccio dei test e ti faccio sapere.
Grazie di tutto.

loriswave
11-06-07, 08:41
Intanto vi posto un animazione di cos'è abbambinare.
Volevo precisare che la discussione non è per risolvere un problema specifico, bensì per esplorare un po di possibilità offerte da LW e vedere se non si riesce a tirare fuori un buon metodo o perchè no un nuovo tool.
L'idea dei constrain è buona se l'uso dello strumento è limitato, se lo devo usare molto e vado incontro a molte modifiche non credo che sia il più adatto, non potendo avere constrain figlio dello stesso oggetto che muove, nel momento che ruoto attorno ad un altro constrain il primo perde la posizione di angolo, perciò quando lo devo riusare lo devo prima spostare esattamente dove mi serve. è una strada che comunque sto valutando e facendo un po di ulteriori prove, sicuramente vanno aggiunti dei tool per spostare per esempio il constrain in un punto ben preciso velocemente.

L'animazione è fatta completamente a mano, impostando l'aramdio come figlio di un nul che ho chiamato per l'occasione pivot. Quando c’è bisogno di ruotare attorno ad un angolo sposto il nul in quel punto e risposto l’armadio dell’inverso in modo da sembrare che nulla si è mosso. Ci sono due strade a livello di kf, o impostare un kf con la fine della rotazione e al frame successivo il kf con la nuova posizione di pivot e armadio oppure lavorare con i KF in stepped mode, che fa in modo di avere un solo kf.
Il secondo metodo mi piaceva di più, producendo una scena più pulita, ma solleva un secondo problema, se oltre alla rotazione su un punto voglio anche una leggera traslazione?
Con il metodo a due kf mi incasino con le curve avendo appunto due kf vicini, con ilò metodo stepped non è neppure possibile. Allora l’idea di creare due nul, uno chiamato pivot stepped e uno pivot mov. Il primo si assume i movimenti dovuti al salto da un punto all’altro della mesh, il secondo il movimento di traslazione fluida. La somma dei due movimenti viene assegnata al nul pivot. Per muovere esattamente agli angoli il pivot ho aggiunto dei nul di riferimento figli di armadio e posizionati già negli angoli coretti. Ho poi creato uno script che legge la posizione del pivot stepped, la rotazione del pivot, la posizione del nul angolo dove voglio posizionare , gli indico il figlio di pivot e lo script si assume il compito di spostare il pivot ( in realtà il pivot stepped )dove serve e mettere a posto l’armadio. Giusto per aiutare se uno ha gia selezionato il pivot, lo script lo propone come ogetto pivot e il suo primo child come oggetto child, con la possiblilità di cambiare se serve.
Giocando un po con lo script sembra funzionare fino a quando non si torna indietro e si va a modificare le rotazioni già impostate, allora saltano fuori i problemi dovuti a delle posizioni che saltano. Per il resto mi sembra che ci siano delle buone possibilità di renderlo un buon tool, una volta che riesco a inglobare tutte queste info dentro ad un solo modificatore di movimento senza avere tre nul che mi vagano per lo schermo.
Sono stato chiaro?

Che ne dite?

loriswave
13-06-07, 09:11
Prosegue la sperimentazione:
Credo che la strada più comoda non sia come inizialmente avevo pensato un dinamic parenter, ma un pivot mobile, ovvero la possibilità di animare la posizione del pivot di un oggetto.

Sono riuscito a creare un modificatore di movimento che ingloba i canali di spostamento che prima avevo assegnato al pivot steped e al pivot mov. in pratica adesso basta un solo null, a parte il piccolo problema che non riesco a muovere interattivamente i valori di pivot mov.
Credo che quello che devo fare adesso è creare un nuovo tool che al posto di andare a influenzare i canali x,y,z , vada a influenzare i canali che ho creato io. Pultroppo con gli lscrip questa cosa non sambra possibile.

Credete veramente che la possibilità di animare il pivot non serva a nulla? capisco che molto spesso si può aggirare il problema con altri sistemi, ma non sarebbe più comodo ?

Lino
13-06-07, 11:00
Poter animare il Pivot sarebbe importantissimo. In Messiah lo fai senza problemi.

loriswave
13-06-07, 17:22
Ma questo messaggio è stato modificato, ed io che avevo pensato tutto il pomeriggio a cosa rispondere. Ok.

Animare il pivot allora sarebbe comodo in senso generale? perfetto.
ma come?
non come farlo, ma quali strumenti uno vorrebbe da usare nel momento questo ci fosse.
Io pensavo:
la possibilità di muovere il pivot mantenendo fermo l'oggetto,
la possibilità di muovere l'oggetto con il suo pivot.
la possibilità di crearsi dei preset di posizione del pivot in modo da non doverlo riposizionare a mano ogni volta.
credo che serva anche la possibilità di muovere l'oggetto senza muovere il pivot dalle sue coordinate assolute.
e poi?

non è detto che ci riesca, ma ci posso sempre provare. io pensavo di creare un modificatore di movimento che praticamente aggiunge all'oggetto il pivot animabile e poi una serie di strumenti alternativi al move per gestire il movimento del pivot, del oggetto senza pivot e dell'oggettoe pivot insime. più una serie di tool per creare e cancellare i kf visto che ci sarà xyz dell'ogetto e xyz del pivot.

idee?
consigli?
anche solo un buona fortuna?

Lino
13-06-07, 17:45
Ma questo messaggio è stato modificato, ed io che avevo pensato tutto il pomeriggio a cosa rispondere. Ok.


L'ho modificato al volo perchè mi sono reso conto che ciò che avevo scritto non aveva senso...mi piacerebbe poter mettere la testa nel problema...e appena avrò tempo lo farò.

loriswave
25-07-07, 09:39
Per il momento ho dovuto arrendermi al fatto che la programmazione in C richiede del tempo che non ho, il movimento di abbambinare l'ho risolto tramite l'IKbooster e ne sono abbastanza soddisfatto.
Se non riesco prima appena vado in pensione ( 30/40 anni a seconda delle leggi future ) mi ributto sulla cosa del C ( anche se non credo che per allora sia rimasto vivo)

gebazzz
25-07-07, 14:17
( anche se non credo che per allora sia rimasto vivo)
esagerato.. ma per allora, si spera che ci abbia già pensato newtek. sempre che esista ancora..
grazie per l'aggiornamento sul progetto.

vashts

loriswave
25-07-07, 14:20
( anche se non credo che per allora sia rimasto vivo)

Intendevo il linguaggio C mica io.

gebazzz
25-07-07, 19:07
Intendevo il linguaggio C mica io.
ehm.. sì, ovviamente.. pure io.. :mmgh: :argh: lunga vita al C! :D

vashts