Vai al contenuto
icer

Project: Rigging Facciale

Recommended Posts

Il morpher presente in 3ds o lo shape manger di XSI sono ottimi e efficienti ma hanno il limite di dover preconfigurare le posizione. Questo vincola nel proseguo dell'animazione a dover sempre utilizzare quelle e non poterle cambiare, se non facendo una nuova "faccia".

Per ovviare a ciò si può riggare il viso allo stesso modo di come si rigga un corpo: con le ossa (oppure semplici box, non fa differenza. L'importante è la struttura a scheletro).

Questo metodo ha il vantaggio di non dover a metà animazione, impostare un nuovo target ma semplicemente con l'uso di una GUI avere e far eseguire al tuo personaggio le tue pose.

Lo svantaggio è il setup, molto più complesso.

s1.jpg

Come si può vedere nella figura, ho iniziato a riggare tutto il viso seguendo l'andamento muscolare (attorno alla bozza un circle, gli occhi, "muscoli" sulle guance dall'alto verso il basso, muyscoli della fronte idem) perchè, allo stesso modo in cui si modella seguendo le regole degli edge loop, le nostre ossa dovranno essere inserite per poter dare la giusta espressione al viso.

Per ora userò il 3ds, al termine di questa avventura, porterò gli stessi concetti su XSI, che è leggermente diverso nei termini ma con effetti identici.

La struttura base della ossa è molto basilare: un osso e il suo terminale. Le ossa sono però configurate (pannello Bones tools) con lunghezza NON-Frizzata. In pratica, spostando il suo terminale l'ossa si allungherà (ricordiamoci che i muscoli si allungano, non sono di acciaio).

Altre due operazioni ci serovno per completare la struttura base che ci permetterà di animare il nostro viso: collegare le nostre ossa a degli helper.Nello specifico, dovremmo creare 2 helper, in pratica uno in cima e uno in coda, a cui le nostre ossa si linkeranno.Ora, per collegare le ossa bisogna andare nel pannello motion e utilizzare gli strumenti lì presenti: position e rotation. Selezioniamo l'osso principale e nella voce "position" andiamo ad aggiungere "position contraits" e come oggetto di target, andiamo su uno dei due helper. Per quanto riguarda "Rotation", aggiungiamo "Look at constrait" e come target, selezioniamo l'altro helper.

s3.jpg

Ora, per la ossa terminale, dovremmo solo indicare "position Contraits" e come target il secondo helper (quello utilizzato nella rotazione)

Perchè questo? il primo Contraits (pos) del primo osso indica che la sua base sarà vincolata a quell'helper, quindi spostandolo, lo seguirà come la sua ombra. Se non facessimo anche Rotation però, lui non si orienterebbe rispetto al suo terminale (che è vincolato di posizione al secondo helper) avendo come effetto che si muoverebbe correttamente ma non si orienterebbe.

Ecco alcuni esempi draft in pochi click...

Neutro...

1.jpg

Sorpreso...

2.jpg

Arrabbiato...

3.jpg

Per ora sono arrivato qui. Ora devo migliorare la pesatura del viso e creare la famosa GUI.

Si può seguire lo stesso progetto sul mio Blogger

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

molto interessante :) è uno degli aspetti che conosco di meno, tempo fa provai a fare qualcosa ma con scarsi risultati e ripiegai sul + semplice shape manager... hai seguito qualche tutorial in particolare?

... aspetto gli avanzamenti :)

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Mi avevi accennato qualcosa ^___^... cmq Icer sei un mostro, non faccio in tempo a vedere un WIP che apri subito un altro argomento... seguo con piacere i prossimi Up...

Mat

:hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
... hai seguito qualche tutorial in particolare?

in ufficio ho il link di una breve spiegazione con max5. Purtroppo seguendolo non si riesce a farlo perchè manca di un pezzo (il look at constraits...cosa fondamentale ^_^ ) e se non si smanetta un pò non si cava un ragno dal buco. Cmq domani se lo ritrovo, lo posto, se interessa qualcuno.

^___^... cmq Icer sei un mostro, non faccio in tempo a vedere un WIP che apri subito un altro argomento...

grazie Mat. Questo è più che altro un diario di esperimenti. Non so se riuscirò a aggiornarlo con costanza perchè ho un paio di cose da fare, cmq quello che faccio lo posto qui.

Il rigging facciale senza usare Morpher o Shape Manager è una delel cose che voglio assolutamente imparare :)

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

Ecco cosa accade senza Orientamento...

gifanimated1xd9.gif

..e con orientamento constraint

gifanimated2ju6.gif

Nel primo caso, l'osso sta sulla "verticale" del suo terminale ma non si orienta perchè per lui non ha valore quel dato. Nel secondo, lui oltre a seguire il suo temrinale dal punto di vista della lunghezza, segue l'orientamento nello spazio


Modificato da icer

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Avevo seguito un tutorial in merito tempo fa e devo dire che è una soluzione sicuramente validissima e più versatile rispetto al morph target, in questo tutorial poi ti facevano anche disegnare una gui in modo da avere più comodità nella gestione dei movimenti, unico contro, come gia detto, è il setup che porta via abbastanza tempo specialmente nella "pesatura" dei vertici.

Comunque sono molto interessato, anche perchè alla fine è un metodo che di base si può trasportare su qualunque sw.

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Il morpher presente in 3ds o lo shape manger di XSI sono ottimi e efficienti ma hanno il limite di dover preconfigurare le posizione. Questo vincola nel proseguo dell'animazione a dover sempre utilizzare quelle e non poterle cambiare, se non facendo una nuova "faccia".

Be', dipende da come si procede. Se i morph target - ne serviranno, presumibilmente, almeno una trentina - sono fatti in modo da combinarsi fra loro, si può ottenere una buona varietà di espressioni. Detto questo, la soluzione rigging è comunque la più "elegante", a mio parere.

Ciao

Flavio

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Be', dipende da come si procede. Se i morph target - ne serviranno, presumibilmente, almeno una trentina - sono fatti in modo da combinarsi fra loro, si può ottenere una buona varietà di espressioni. Detto questo, la soluzione rigging è comunque la più "elegante", a mio parere.

non discuto sulla fattibilità ma sull'utilizzo. Un paio di volte ho usato i morpher per i visi, però dopo che ne hai 10-15, non ci stanno più nella tua finestra e ti costringono a far scorrere la tnedina per trovare il tuo slide.

La GUI grafica invece è compatta sul tuo schermo, intuitiva perchè fatta da segni grafici che spostandoli si occupano loro di muovere i "muscoli" facciali.

Poi, un'altra cosa: nessuna espressione è uguale all'altra. Non sono slide preconfigurati ma "punti sensibili" sul viso che in base al loro posizionamento, trasmettono le conseguenze alle ossa (ed essendo liberi, non metterai mai nello stesso punto nello spazio ogni volta ;) ).

spero di postarvi al più presto un esempio... lavoro permettendo :(

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
non discuto sulla fattibilità ma sull'utilizzo. Un paio di volte ho usato i morpher per i visi, però dopo che ne hai 10-15, non ci stanno più nella tua finestra e ti costringono a far scorrere la tnedina per trovare il tuo slide.

La GUI grafica invece è compatta sul tuo schermo, intuitiva perchè fatta da segni grafici che spostandoli si occupano loro di muovere i "muscoli" facciali.

Nulla impedisce di approntare una gui anche utilizzando morpher o simili. Qui link c'è un breve video esempio; per quanto imbarazzante e incompleto sia - non si tratta certo di una GUI vera e propria - è tutto morpher...

Poi, ripeto, non ho nulla contro il rigging facciale che, del resto, ho usato e - presumo - userò.

Ciao

Flavio

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

non mi sono dimenticato di questo lavoro. Sto provando come collegare i vari controller e ho delle difficoltà per ottimizzarli nel modo corretto (specie quelli della bocca, che sono quelli complessi)

senzatitolo1dg4.jpg

in pratica non riesco con i wire parameters, linkare lo spostasmento del mio circle nella GUI con il controller del viso. Cioè, se dico la posY del circle influnza la Ydel controller, lui lo fa in modo assoluto, cioè la coordinata nell ospazio e non relativa alla sua posizione iniziale.

Ho poi provato con position contraits, ecc... ma non ho ancora trovato la quadra del problema.

Continuo nello smanettamento ^_^

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Con delle espressioni puoi settare dentro il tuo wireparameter un offset rispetto alla gui. Se poi intendi fare la gui fissa e' ancora piu' semplice perche' non devi rendere la relazione dinamica. Altrimenti vai di script controller ma perdi in prestazioni se il rig si fa pesante.

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
in pratica non riesco con i wire parameters, linkare lo spostasmento del mio circle nella GUI con il controller del viso. Cioè, se dico la posY del circle influnza la Ydel controller, lui lo fa in modo assoluto, cioè la coordinata nell ospazio e non relativa alla sua posizione iniziale.

Se capisco qual è il problema si può risolvere in almeno due modi. Puoi utilizzare un List Position controller, immettere nell'Available un secondo Position XYZ e abilitarlo (in Motion Panel/Position List, doppio clic sul secondo Position XYZ). Naturalmente i Wire parameters dovranno "puntare" al XYZ abilitato.

Secondo metodo, più grezzo e quindi più adatto a me, linkare i circle ad un helper (o ad un qualsiasi oggetto) che abbia coordinate coincidenti con il circle stesso. In pratica, allinei lo helper al circle e linki il circle allo helper :)

Ciao

Flavio

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Con delle espressioni puoi settare dentro il tuo wireparameter un offset rispetto alla gui. Se poi intendi fare la gui fissa e' ancora piu' semplice perche' non devi rendere la relazione dinamica.

è quello che sto provando infatti, con offset. Stavo cercando un modo per evitare di mettere l'offset, in modo di averlo dinamico, ma credo che non ci sia in maniera easy.

Se capisco qual è il problema si può risolvere in almeno due modi. Puoi utilizzare un List Position controller, immettere nell'Available un secondo Position XYZ e abilitarlo (in Motion Panel/Position List, doppio clic sul secondo Position XYZ). Naturalmente i Wire parameters dovranno "puntare" al XYZ abilitato.

Secondo metodo, più grezzo e quindi più adatto a me, linkare i circle ad un helper (o ad un qualsiasi oggetto) che abbia coordinate coincidenti con il circle stesso. In pratica, allinei lo helper al circle e linki il circle allo helper :)

il primo metodo è uno di quelli che sto praticando, studiando su dei vecchi file con rigging facciali pre-fatti.

Il secondo metodo non l'ho capito tanto applicato al mio viso, ma sono un pò fuso ora (in questi giorni per la verità). Forse stasera mi ci rimetto su.

Grazie!! :)

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
il primo metodo è uno di quelli che sto praticando, studiando su dei vecchi file con rigging facciali pre-fatti.

Il secondo metodo non l'ho capito tanto applicato al mio viso, ma sono un pò fuso ora (in questi giorni per la verità). Forse stasera mi ci rimetto su.

Mi sembra più probabile che io non abbia compreso quali siano gli intoppi che hai trovato. Entrambi gli espedienti servono ad avere coordinate locali pari a 0, il che facilita parecchio quando si elabora un sistema di controllo per animare un personaggio - ma non solo, torna ovviamente utile anche in altre circostanze.

Ciao

Flavio

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

  • Navigazione recente   0 utenti

    Non ci sono utenti registrati da visualizzare in questa pagina.

×