Skript-Controller

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.

Transformations-Skript-Controller

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.

Schreiben von Controller-Skripts

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).

Zuweisen von Knoten und Spuren zu Variablen

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.

Anmerkung: Wenn Sie XRef-Szenen und -Objekte verwenden, ist es besonders wichtig, dass Sie die entsprechenden Schaltflächen zum Zuweisen verwenden, um den Variablen die Knoten und Spuren zuzuweisen.

Prozeduren

Beispiel: So erhalten Sie während einer Animation die Zentrierung eines Objekts im Verhältnis zu anderen Objekten in der Szene:

  1. Weisen Sie dem Objekt, das zentriert bleiben soll, den Namen foo zu, und weisen Sie seiner Positionsspur einen Skript-Controller zu.
  2. Geben Sie im Feld "Name" den Namen foo ein, und klicken Sie auf "Erstellen".

    Die neue Variable wird automatisch der Variablenliste hinzugefügt.

  3. Markieren Sie die Variable, und klicken Sie auf "Knoten zuweisen".

    Im Dialogfeld "Spuransichtsauswahl" werden die Inhalte der Szene angezeigt.

  4. Erweitern Sie die Objekte hierarchisch, und suchen Sie nach "foo". Markieren Sie den gesuchten Eintrag, und klicken Sie auf "OK".

    Der Knoten "foo" wird der Variable zugewiesen.

  5. Geben Sie im Fenster "Ausdruck" des Dialogfelds "Skript-Controller" das folgende Skript ein:

    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:

  1. Wählen Sie ein Objekt aus.
  2. Drücken Sie die rechte Maustaste, um das Quad-Menü zu öffnen.
  3. Klicken Sie im Transformationsquadranten auf "Kurveneditor".
  4. Wählen Sie in der Spuransicht die Transformationsspur des ausgewählten Objekts aus.
  5. Wählen Sie im Dialogfeld "Transformationscontroller zuweisen" die Option "Transformations-Skript", und klicken Sie auf "OK".

    Das Dialogfeld "Skript-Controller" wird angezeigt.

  6. Bearbeiten Sie im Dialogfeld "Skript-Controller" den Matrix3-Wert, und klicken Sie danach auf "Auswerten".

Benutzeroberfläche

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.

Tipp: Sie können die Größe des Dialogfelds anpassen, indem Sie seine Kanten bzw. eine Ecke ziehen.

Erstellen der Gruppe "Variable"

Name
Mit dieser Option können Sie die Namen von Benutzervariablen eingeben und bearbeiten.
Erstellen
Erstellt eine Variable und fügt sie der Variablenliste hinzu.
Löschen
Entfernt die markierte Variable aus der Variablenliste. Alternativ können Sie eine Variable auch löschen, indem Sie ihren Namen im Feld "Name" eingeben und dann auf "Löschen" klicken.
Umbenennen
Benennt die markierte Variable um.

Bereich "Variablenparameter"

Tick-Abstand
Gibt den zeitlichen Abstand in Ticks für die aktuelle Variable an. Beim Auswerten des Skripts wird der Wert der Variablen durch die aktuelle Zeit plus dem Wert "Tick-Abstand" festgelegt.
Anmerkung: Der Zeitabstand hat keine Auswirkung auf Variablen, denen eine Konstante zugeordnet ist.
Variablenliste

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:

  • F die aktuelle Zeit in Frames
  • NT die normalisierte Zeit
  • S die aktuelle Zeit in Sekunden
  • T die aktuelle Zeit in Ticks
Konstante zuweisen
Öffnet ein Dialogfeld. Dort können Sie der markierten Variable eine Konstante zuweisen.
  • Wertausdruck Geben Sie einen MAXScript-Wert oder Ausdruck ein (z. B. eine Ganzzahl, eine Gleitkommazahl, ein Array usw.).
  • Wertausdruck (Ergebnis) Zeigt die Ergebnisse des obigen Ausdrucks an.
  • Auswerten Analysiert den Ausdruck zur aktuellen Zeit.
  • OK Weist der aktuellen Variable den Wertausdruck (das Ergebnis) zu.
  • Abbrechen Ignoriert den aktuellen Wertausdruck (das Ergebnis) und schließt das Dialogfeld.
Spur zuweisen
Hier können Sie der markierten Variable eine Spur zuweisen.
Controller zuweisen
Hier können Sie der markierten Variable einen Controller zuweisen. Der Wert des Controllers wird zur aktuellen Zeit plus dem "Tick-Abstand" der Variablen gemessen.
Knoten zuweisen
Hier können Sie der markierten Variable einen Knoten zuweisen.
Fenster "Ausdruck"
Zeigt den auszuwertenden Ausdruck an. Sie können den Text in diesem Fenster bearbeiten.
Fenster "Beschreibung"
In diesem Textfenster können Sie Kommentare zur Funktion des Controllers, zu seiner Verwendung usw. eingeben.
Speichern
Klicken Sie darauf, um das Skript in einer MAXScript (.ms)-Textdatei zu speichern.
Laden
Klicken Sie darauf, um ein Skript von einer MAXScript (.ms)-Textdatei zu laden.
Fehlerbehebung
Öffnet das Skript-Controller-Fehlerbehebungsfenster. Dort werden die Werte aller im Skript verwendeten Variablen angezeigt.
Auswerten
Wertet den Skriptausdruck aus. Die Auswertung wird für die aktuelle Position des Zeitschiebers berechnet.
Schließen
Kompiliert und prüft das Controller-Skript auf Fehler. Wenn keine Fehler gefunden werden, wird das Dialogfeld geschlossen. Bei Problemen wird die Frage eingeblendet, ob Sie den Ausdruck auf den ursprünglichen Wert der aktuellen Spur zurücksetzen und das Dialogfeld schließen möchten ("OK"), oder ob Sie zur Bearbeitung des Ausdruck zurückkehren möchten ("Abbrechen").