An-Cadsolutions      Imgsystems

Kirjoittaja Aihe: Hammaspyörien animointi  (Luettu 433 kertaa)

JuhaHo

  • Jr. Member
  • **
  • Viestejä: 57
    • Profiili
    • Sähköposti
Hammaspyörien animointi
« : Huhtikuu 01, 2011, 09:03:54 am »
Minun pitäisi jälleen kerran animoida yhtä laitetta. Periaatteessa ei olisi hankala laskea hammasluvuista nopeuserot ja tehdä keyaukset vastaavasti, mutta on hivenen turhan työlästä myöhemmin muutella esim. koneen nopeutta tai tehdä hidastuksia ja kiihdytyksiä. Minulla on melko luutuneet tavat constraintien käytöstä peräisin 3DS:n DOS ajoilta ja ne kaipaavat pöllyttämistä. En pikaisella vilkaisulla löytänyt Maxin constraint valikosta sopivaa työkalua. Mitähän niistä pitäisi syvällisemmin tutkia? Sinänsä ongelma on samankaltainen autonpyörien kanssa eli pyörimisnopeuden määrittämine auton nopeudesta riippuvaiseksi.

Berglte

  • Sr. Member
  • ****
  • Viestejä: 400
  • Sukupuoli: Mies
    • Profiili
    • Portfolio
    • Sähköposti
Vs: Hammaspyörien animointi
« Vastaus #1 : Huhtikuu 03, 2011, 02:55:56 pm »
Itse väsäisin varmaan script controllereilla.
Eli jos mulla on kaksi objektia scenessä, cog01 (10 hammasta) ja cog02 (20 hammasta) XY tasolla, niin laitan cog02 Z rotationiin Float Script controllerin ja siihen yksinkertaisimmillaan seuraavan:

rotaatio = ($cog01.rotation.controller[3].value)*(10.0/20.0)*(-1.0)
DegToRad(rotaatio)

jossa ensimmäisten sulkujen sisältö hakee cog01 Z rotaation asteina, toinen laskee kierrosnopeuden ja kolmas kääntää suunnan.
Alempi rivi muuttaa asteluvun radiaaneiksi.
Pitää käyttää tuossa kierrosnopeussysteemissä nimenomaan esim. 10.0 arvoa, eikä 10 ainakin toisena lukuna.
Maxi ymmärtää luvun 10 kokonaislukuna ja kusee kaiken. Voit myös käyttää tilalla jakolaskua (10/20 as float) jolloin taas toimii oikein.

Hieman selkeämpänä menisi sitten tietysti ehkä näin (rotaation saa näköjään suoraan radiaaneinakin). Jos ei ole aivan älyttömän montaa ratasta, niin curve editorilla controllerin kopioiminen ja muokkaaminen menee aika nopeasti.

edellinen = $cog01
edellinen_hampaat = 10
hampaat = 20

(edellinen.rotation.Z_Rotation.controller.value)*(edellinen_hampaat/hampaat as float)*(-1.0))

Sitten vain animoit ensimmäistä ratasta ja kaikki toimii automaattisesti. Ei tosin toimi interaktiivisesti (mutta päivittyy framesta toiseen siirryttäessä, eli timelinea voi skrollata ja nähdä mitä tapahtuu), ellet käy jokaisessa script controllerissa create variable -> assign controller ja valitse edellisen rattaan Z Rotaatio trackia
« Viimeksi muokattu: Huhtikuu 03, 2011, 04:56:25 pm kirjoittanut Berglte »

kerosene

  • Full Member
  • ***
  • Viestejä: 230
  • Sukupuoli: Mies
    • Profiili
    • Sähköposti
Vs: Hammaspyörien animointi
« Vastaus #2 : Huhtikuu 04, 2011, 07:19:25 am »
mielestani expression controllerit on napparampia - jo pelkastaan siksi etta linkitykset eivat rikkoonnu kopiodessa tai nimien muuttuessa.

eli tutoista vaan lukemaan expression controllereista.

Berglte

  • Sr. Member
  • ****
  • Viestejä: 400
  • Sukupuoli: Mies
    • Profiili
    • Portfolio
    • Sähköposti
Vs: Hammaspyörien animointi
« Vastaus #3 : Huhtikuu 04, 2011, 09:19:34 am »
Totta, tulee vaan yleensä käytettyä script controllereita vähän kaikkeen niin ajattelin tähänkin ensiksi.

Eli expression controllerilla menisi about näin:

Tee rotaatio niminen scalar variable, assign to controller ja valitse edellisen rattaan Z Rotation siihen. Itse expression onkin sitten simppeli:
rotaatio*(10/20)*-1

JuhaHo

  • Jr. Member
  • **
  • Viestejä: 57
    • Profiili
    • Sähköposti
Vs: Hammaspyörien animointi
« Vastaus #4 : Huhtikuu 07, 2011, 06:55:01 pm »
Kiitokset molemmille; tein määrittelyn Expression Controllerilla. Näillä ohjeilla se ei ollut kovin vaikeata ja homma näyttäisi toimivan.

Joskus sitä vain tulee juostua polkupyörää taluttaen kun on olevinaan niin kiirus ettei ehdi opetella ajamaan.

JuhaHo

  • Jr. Member
  • **
  • Viestejä: 57
    • Profiili
    • Sähköposti
Vs: Hammaspyörien animointi
« Vastaus #5 : Huhtikuu 09, 2011, 11:14:43 am »
Suurin homma oli näköjään rattaiden synkronointi. Minulla ei ollut luotettavaa tietoa välityssuhteesta joten etsin sen itse iteroimalla. Ensin laskin likimääräiset kehät käyttäen Maxin tape helpperiä. Sitten siirryin frameen 1 ja katsoin edistikö vai jätättikö pinioni (moottorilta tuleva hammaspyörä). Korjasin arvoa ja siirryin frameen 2. Jatkoin samaa rataa tuplaten aina frame hyppäyksen (4, 8, 16...) ja puolittamalla välityksen korjauksen (1, 0.5, 0.25...) kunnes pääsin kolmen desimaalin tarkkuuteen. Tarkistin vielä asian satunnaisten framejen avulla ja totesin, että hampaat asettuivat kohdilleen. Tärkeätä oli aloittaa riittävän pienillä askelilla etteivät hampaat hyppineet yli.

kerosene

  • Full Member
  • ***
  • Viestejä: 230
  • Sukupuoli: Mies
    • Profiili
    • Sähköposti
Vs: Hammaspyörien animointi
« Vastaus #6 : Huhtikuu 09, 2011, 09:53:21 pm »
just rattaat on suunilleen realistiset niin hampaiden lukumaarasta pitaisi pystya laskemaan suorran tarvittava valityskerroin.

usein satunnasiten arvojen kanssa leikkiessa (expressionin arvo tulee jostain muualt kuin pyorivasta kappaleesta) on hyva linkittaa pyoriviin kappalaisiin joku kikkare. Muuten voi esimerkiksi pyorivasta kuutiosta olal paha sanoa etta pyoriiko se yhden asteen, 91 astetta vai 181 astetta yhden ruudun aikana. Toki niita numeroitakin voi seurailla...


ViCoX

  • Newbie
  • *
  • Viestejä: 37
  • Sukupuoli: Mies
    • Profiili
    • Sähköposti