FFD - Lattice Problem

bmxsteffen

Mitglied
Hi!

Ich bin dabei eine Animation eines Autoreifens zu erstellen, der während der Fahrt platt wird.

Das müßte sich doch super mit FFD lösen lassen und zwar so:
Ich wähle die unteren Vertices meines Rades aus, sozusagen alle südlich der unteren Felgenkante.
Darauf wende ich einen FFD-Modifikator an und ziehe die ControlPoints so zusammen, dass es schön nach einem "Plattfuß" aussieht. (siehe Anhang)

Nun zu meiner Frage:
Wie hebe ich den link des Lattice zur Drehung des Rades auf? Man kann ja den Lattice animmieren - ich will das so, dass er immer unten bleibt und der Reifen, wenn er sich nun dreht, unten immer platt ist.
Meine Idee war in den Lattice-PositionControler was einzufügen, das ein anderes ParentObjekt definiert (z.B. die Karosserie, die sich ja nicht dreht), bloß kenn ich mich mit den ganzen verschiedenen Möglichkeiten beim Controler zuweisen nicht aus. :(
Und muß ich beim Rotation-Controler auch was ändern?

Vielen Dank schon mal für jegliche Hilfe!
Steffen.
 

Anhänge

  • pneu.jpg
    pneu.jpg
    72,2 KB · Aufrufe: 35
Das ist echt schlimm schlimm schlimm schlimm kacke in max, dass man gizmos von modifikatoren nicht als normale Objekte in der Hierarchie behandeln kann.

hier mal einen Ansatz, wie du das Problem lösen kannst

Gib dem gizmo in einer Track View einen Rotation Script controller mit folgendem Script:
quat -wheel [0, 0, 1]

dabei weist du der wheel variable die entsprechende rotationskomponente deines Reifens zu (links im fenster neue Variable erstellen und Track zuweisen). der Vektor in [] gibt die achse an, um die gedreht wird - da musst du die 1 entsprechend deiner Scene an den richtigen ort packen (das ist nicht so intuitiv, wie man meinen könnte - also rumpröbeln!).

Für die Position, weist du dem gizmo einen Position Script controller mit folgemdem Script zu:

startpos = [1, 2, 3 ]
myquat = quat -wheel [0,0,1]

startpos * myquat

dabei sind 1,2,3 die werte, die bei dir schon da stehen sollten (vom vorherigen position controller) und den quaternion erstellst du genau gleich wie bei der Rotation


Damit sollte das dann klappen. Kann gut sein, dass es einfachere Lösungen gibt (wenn du z.b. eine konstant animierte rotation hast, kannst du die rotation des gizmos ja einfach gegen animieren. Aber das problem mit der Position bleibt dann, wenn er nicht zentriert im ursprung deines Reifens ist..), aber das ist grad das beste, das mir eingefallen ist.
 
Danke, Cycovery für die schnelle Hilfe!

Ich werd´s auf jeden Fall so ausprobieren - muß grade nur an einem anderen Projekt was machen.
Sobald was geht werd ich hier posten ;)
 
Hi Cycovery,

also ich hab das mal so probiert und bin leider nicht sehr weit gekommen :(
in den Anhängen hab ich Screenshots von den verschieden Scripten, die ich erstellt habe.
Im ersten siehst du das Rotationscript (Float Expression), das das Rad sich drehen läßt, wenn man die Box verschiebt.
Dann das RotateScript vom Gizmo wie du es mir beschrieben hast (Rotation Script) nur habe ich da keine Möglichkeit gefunden die wheel Variable zu erstellen. (du meintest links im Fenster, aber da ist ja nichts mehr)
und zum Schluß das Position Script vom Gizmo, ebenfalls wie von dir beschrieben.
Beide Fensterchen bringen mir eine Fehlermeldung, wenn ich sie schließe - wahrscheinlich, weil ich es nicht geschafft habe die wheel-Variable zu erstellen.

Also wo erstelle ich die Variable? Und muß das ein Vektor sein, dem ich dann den Y-Rotation-Track vom meinem Rad zuweise? (So stell ich mir das ungefähr vor..)

Vielen Dank schon mal,
Steffen.
 

Anhänge

  • rot_script_wheel.jpg
    rot_script_wheel.jpg
    47,7 KB · Aufrufe: 26
  • rot_script.jpg
    rot_script.jpg
    50,9 KB · Aufrufe: 12
  • pos_script.jpg
    pos_script.jpg
    52,3 KB · Aufrufe: 18
Ah - du hast wohl max7 was? Da gabs bei den scriptcontrollern noch keine variablenliste..

Dann definier die Variable einfach von Hand:

wheel = $foo.rotation.controller.'Y Rotation'

foo ist der Name deines reifenmodels (achte auch darauf keine duplizierten namen in deiner Scene zu haben)
 
Ah ok, das mit der Rotation scheint zu funktionieren, ich bekommen auch einen Wert, wenn ich Evaluate drücke. (hast recht, ich arbeite mit Max7)

Aber beim PositionScript scheint immernoch was zu hängen. Bei Evaluate spuckt er mir nichts aus...

Ich hab bei der Rotation unter (0,0,1) alle Möglichkeiten probiert und auch das Minuszeichen vor der Wheel-Variable mal weggelassen, aber es tut sich leider gar nichts. (nur wenn ich (1,0,0) eintrage werden ein paar einzelne Vertices verschoben)

Vielleicht kannst du, wenns dir zeitlich paßt, mal kurz das File anschauen - hat keine Eile.

http://www.stoobz.com/pneu.rar

Nochmal danke!
Steffen.
 
Nein kanns mir im Moment nicht anschauen sorry. Deine FFD box muss aber natürlich auf das gesammte Objekt angewendet werden und nicht nur eine subselection!

Was die rotation angeht: das minus zeichen muss ganz sicher hin. Nur mit den Achsen (sowohl im Vektor, als auch beim track den du der wheel variable zuweist) musst du pröbeln. Sobald aber die Rotation des gizmos stimmt, also sobald der gizmo horizontal bleibt, wenn du das Rad drehst, hast Du das richtige script und genau das gleiche musst du dann auch beim Positionscript verwenden.

Zeig sonst nochmal nen screenshot
 
so, ich habs gelöst:

Der entscheidende Tip war, dass ich die FFD-Box auf das ganze Rad anwenden muß. So konnte ich dann einfach das Rotation-Script des Rades, das auf der Y-Achse liegt, in die Z-Achse (warum auch immer diese) der FFD-Box kopieren und schon klappt es!
 

Neue Beiträge

Zurück