Die Skript-Controller funktionieren ähnlich wie Ausdruck-Controller. Sie besitzen ein Dialogfeld "Skript-Controller", in dem Sie ein Skript zur Berechnung des Controller-Werts eingeben können.
Die folgenden Skript-Controller stehen in 3ds Max zur Verfügung:
Die Unterschiede zwischen den verschiedenen Typen von Skript-Controllern bestehen hauptsächlich im Typ der Animationsspur, der sie zugewiesen werden können. Sie weisen beispielsweise einer Transformationsspur einen Transformations-Skript-Controller zu, einer Positionsspur einen Positions-Skript-Controller. Und wenn der Positions-Controller "Position XYZ" entspricht, könnten Sie einem oder allen der einzelnen Positionsspuren (Position X/Y/Z) einen Float-Skript-Controller zuweisen.
Skript-Controller bieten unter anderem folgende Vorteile:
Eine ausführliche Erklärung dieser Skript-Sprache finden Sie in der MAXScript-Hilfe.
Ein Transformations-Skript-Controller enthält in einem einzigen Skriptmatrixwert alle Informationen, die in einem PRS-Controller (Position, Rotation und Skalierung) enthalten sind. Anstatt sich um drei einzelne Spuren für Position, Rotation und Skalierung kümmern zu müssen, können Sie über nur ein Dialogfeld für den Skript-Controller auf alle drei Werte gleichzeitig zugreifen. Da ein Skript die Transformationswerte definiert, lassen sie sich einfacher animieren.
Der Wert des Controller-Skripts muss ein Matrix3-Wert sein. Ein Matrix3-Wert ist eine 4x3-3D-Transformationsmatrix. Weitere Informationen darüber finden Sie unter dem Thema "Matrix3-Werte" in der MAXScript-Hilfe.
In 3ds Max wird der Text, den Sie in das Textfeld "Skript" eingeben, als Hauptteil eines MAXScript-Blockausdrucks interpretiert. Sie können in beliebig vielen Zeilen beliebig viele Ausdrücke eingeben, die dann ausgewertet werden. Der Wert des letzten Ausdrucks wird als Controller-Wert übernommen. Dieser Wert muss den korrekten Typ für den Controller haben, also Float für Float-Controller, Point3 für Positions-Controller, Quat für Rotations-Controller, Matrix3 für Transformations-Controller usw.
Da sich der Text innerhalb eines Blockausdrucks befindet, können Sie lokale Variablen festlegen, die nur innerhalb des Skripts sichtbar sind und nur vorübergehend für eine Auswertung gelten. Sie haben auch die Möglichkeit, globale Variablen festzulegen oder aufzurufen, die gemeinsam mit allen anderen Skripts in MAXScript verwendet werden und ihre Werte von einer Auswertung bis zur nächsten beibehalten.
Ein Controller wird von 3ds Max immer in Bezug auf eine bestimmte Animationszeit ausgewertet. Dies kann die Einstellung des aktuellen Zeitschiebers oder die zunehmende Frame-Zeit sein, wenn eine Animation abgespielt oder gerade gerendert wird. Bei Skript-Controllern wird anhand des Zeitpunkts der Auswertung ein automatischer zeitbezogener Kontext um das Controller-Skript eingerichtet, sodass alle Eigenschaften, auf die Sie zugreifen (außerhalb der anderen zeitbezogenen Ausdrücke), die korrekten Werte für die aktuelle Auswertungszeit des Controllers ergeben. Sie brauchen also Ihre Skripts nicht gesondert zu bearbeiten, damit diese zum korrekten Zeitpunkt funktionieren. Sie können auf die Auswertungszeit über die Standard-MAXScript-Variable für die aktuelle Zeit (currentTime) zugreifen. Sie können sich auch auf Szeneneigenschaftswerte anderer Zeitpunkte beziehen, wenn Sie ausdrücklich zeitbezogene Ausdrücke in Ihren Skripts verwenden (wie bei normaler MAXScript-Programmierung).
Wenn Sie in einer Szene mit Knoten oder Animationsspuren arbeiten möchten, verwenden Sie das Hilfsmittel für Skript-Controllervariablen. Damit können Sie Variablen erstellen und einem Knoten oder einer Controller-Spur zuweisen. Da die Verknüpfungen mit den Knoten in den Variablen verwaltet werden, bleiben die Skript-Controller, die diese Objekte verwenden, auch dann erhalten, wenn die Szenenobjekte später umbenannt werden.
Andernfalls wird die Verknüpfung ungültig, sobald ein bestimmter Knoten umbenannt wird. Dies ist zum Beispiel der Fall, wenn Sie einer Variablen einen Knoten manuell zuweisen, indem Sie in einem Dialogfeld das Fenster "Ausdruck" verwenden.
Beispiel: So erhalten Sie während einer Animation die Zentrierung eines Objekts im Verhältnis zu anderen Objekten in der Szene:
Die neue Variable wird automatisch der Variablenliste hinzugefügt.
Im Dialogfeld "Spuransichtsauswahl" werden die Inhalte der Szene angezeigt.
Der Knoten "foo" wird der Variable zugewiesen.
local pos=[0,0,0]
for o in objects where o != foo do
pos += o.pos
pos / (objects.count - 1)
Mit diesem Skript wird die durchschnittliche Position aller Objekte außer dem aktuellen berechnet (hier foo geschrieben), indem ein lokaler, sich über alle Objekte außer foo wiederholender Wert erstellt wird, der einen Gesamtpositionsvektor akkumuliert. In der letzten Zeile wird der Mittelwert berechnet, was dem Endergebnis des Skripts entspricht.
So verwenden Sie einen Transformations-Skript-Controller:
Das Dialogfeld "Skript-Controller" wird angezeigt.
Beim Zuweisen eines Skript-Controllers wird automatisch ein Dialogfeld "Skript-Controller" geöffnet, in dem Sie ein Skript eingeben können. Danach können Sie das Dialogfeld öffnen, indem Sie in der Bewegungsgruppe oder in der Hierarchie der Spuransicht mit der rechten Maustaste auf die Spur klicken und "Eigenschaften" auswählen oder im Werkzeugkasten der Spuransicht auf die Schaltfläche "Eigenschaften" klicken.
Listet alle verfügbaren Variablen im Controller auf. Die folgenden vordefinierten Konstantenvariablen sind in jedem Skript-Controller verfügbar und können nicht gelöscht oder umbenannt werden: