Vi scrivo perchè vorrei iniziare a studiare i fondamentali dell'animazione, e avrei deciso di partire da un'auto, visto che a prima vista potrebbe sembrare più semplice, e cmq mi affascina... ho visto l'audi nella sezione download, ma sinceramente non ho capito un granchè, non è che conoscete qualche tutorial dedicato all'argomento "rigging auto"? io ho trovato solo materiale per 3dstudio max e maya...
Per 'animazione' intendi simulazione? nel senso che animi l'auto lungo una spline e l'auto reagisce in maniera automatica. Tempo fa ho fatto un test a scopo didattico http://www.youtube.com/watch?v=kEkXTcHMe3s
tommix wrote:Per 'animazione' intendi simulazione? nel senso che animi l'auto lungo una spline e l'auto reagisce in maniera automatica. Tempo fa ho fatto un test a scopo didattico http://www.youtube.com/watch?v=kEkXTcHMe3s
se può essere utile vi descrivo il funzionamento
E' proprio da quel filmato che mi è venuta voglia di animare un'auto (l'ho visto qualche giorno fà), è esattamente quello che cerco ti ringrazio per l'aiuto....
tommix wrote:Per 'animazione' intendi simulazione? nel senso che animi l'auto lungo una spline e l'auto reagisce in maniera automatica. Tempo fa ho fatto un test a scopo didattico http://www.youtube.com/watch?v=kEkXTcHMe3s
Scusate la latitanza, ma sono stato molto impegnato in questi giorni..
Vi dico la soluzione in linea di massima.. ho in preventivo di farci una guida prima o poi, visto l'interesse al riguardo..
Una piccola premessa: il principio generale vincente per fare rig complessi è quello del divide-et-impera, cioè si risolvono i sottoproblemi separatamente e poi si assemblano le varie soluzioni. E' la filosofia che ho seguito anche qui.
Tralasciando le soluzioni banali per comandare l'apertura degli sportelli, i vari sottoproblemi sono:
1) Rotazione della ruota in base allo spostamento;
2) Rotazione delle ruote anteriori in base al cambio di direzione;
3) Calcolo della collisione con il terreno su ogni ruota;
4) Ammortizzazione delle ruote;
5) Angolazione ed ammortizzazione della carrozzeria.
Vi dò una descrizione di massima di come ho affrontato i sottoproblemi. Ovviamente si tratta di sviluppare tutto in Xpresso.
Gran parte delle funzoni sfruttano come input la differenza fra la posizione attuale e quella precedente:
DeltaP = Obj.GlobalPos - Obj.PreviousPos
1) Rotazione della ruota in base allo spostamento;
Se immaginiamo di muoverci lungo la direzione di rotazione di una ruota, l'angolo di rotazione della ruota in ogni momento segue questa legge: La distanza percorsa (DeltaP.Z) deve corrispondere all'arco di curva sulla circonferenza della ruota (di raggio 2*PI*raggioRuota). Quindi la ruota deve essere ruotata per un istante di tempo di un angolo pari a deltaAngolo. Sussiste questa proporzione:
Non finisce qui. Questa formula funziona se ci muoviamo in maniera concorde con la rotazione della ruota, ma ovviamente possiamo spostarci anche in altre direzioni. Quindi il movimento DeltaP deve corrispondere alla proiezione dello stesso sul versore dell'asse di rotazione della ruota. Si calcola con |DeltaP| * cos(alfa). Alfa corrisponde all'angolo fra il versore ed il vettore spostamento DeltaP.
Quindi se ci muoviamo in direzione concorde con l'asse di rotazione della ruota, cos(alfa) = 1, quindi deltaAngolo = |DeltaP| / raggioRuota. Se ci muoviamo in direzione perpendicolare, ovvero lateralmente, cos(alfa) = cos(90°) = 0. deltaAngolo = 0, quindi la ruota non gira.
Cosa ancora più interessante, se ci muoviamo all'indietro, cos(180°) = -1, quindi deltaAngolo = -|DeltaP| / raggioRuota, quindi la ruota gira in senso inverso.
La formula finale quindi è:
deltaAngolo = |DeltaP|/raggioRuota * cos(alfa)
Più tardi vi posto le soluzioni agli altri problemi..
tommix wrote:Scusate la latitanza, ma sono stato molto impegnato in questi giorni..
Vi dico la soluzione in linea di massima.. ho in preventivo di farci una guida prima o poi, visto l'interesse al riguardo..
Una piccola premessa: il principio generale vincente per fare rig complessi è quello del divide-et-impera, cioè si risolvono i sottoproblemi separatamente e poi si assemblano le varie soluzioni. E' la filosofia che ho seguito anche qui.
Tralasciando le soluzioni banali per comandare l'apertura degli sportelli, i vari sottoproblemi sono:
1) Rotazione della ruota in base allo spostamento;
2) Rotazione delle ruote anteriori in base al cambio di direzione;
3) Calcolo della collisione con il terreno su ogni ruota;
4) Ammortizzazione delle ruote;
5) Angolazione ed ammortizzazione della carrozzeria.
Vi dò una descrizione di massima di come ho affrontato i sottoproblemi. Ovviamente si tratta di sviluppare tutto in Xpresso.
Gran parte delle funzoni sfruttano come input la differenza fra la posizione attuale e quella precedente:
DeltaP = Obj.GlobalPos - Obj.PreviousPos
1) Rotazione della ruota in base allo spostamento;
Se immaginiamo di muoverci lungo la direzione di rotazione di una ruota, l'angolo di rotazione della ruota in ogni momento segue questa legge: La distanza percorsa (DeltaP.Z) deve corrispondere all'arco di curva sulla circonferenza della ruota (di raggio 2*PI*raggioRuota). Quindi la ruota deve essere ruotata per un istante di tempo di un angolo pari a deltaAngolo. Sussiste questa proporzione:
Non finisce qui. Questa formula funziona se ci muoviamo in maniera concorde con la rotazione della ruota, ma ovviamente possiamo spostarci anche in altre direzioni. Quindi il movimento DeltaP deve corrispondere alla proiezione dello stesso sul versore dell'asse di rotazione della ruota. Si calcola con |DeltaP| * cos(alfa). Alfa corrisponde all'angolo fra il versore ed il vettore spostamento DeltaP.
Quindi se ci muoviamo in direzione concorde con l'asse di rotazione della ruota, cos(alfa) = 1, quindi deltaAngolo = |DeltaP| / raggioRuota. Se ci muoviamo in direzione perpendicolare, ovvero lateralmente, cos(alfa) = cos(90°) = 0. deltaAngolo = 0, quindi la ruota non gira.
Cosa ancora più interessante, se ci muoviamo all'indietro, cos(180°) = -1, quindi deltaAngolo = -|DeltaP| / raggioRuota, quindi la ruota gira in senso inverso.
La formula finale quindi è:
deltaAngolo = |DeltaP|/raggioRuota * cos(alfa)
Più tardi vi posto le soluzioni agli altri problemi..
Purtroppo io questa teoria non sono ancora in grado di metterla in pratica..
FOLLOW US