Mithilfe von kognitiven Controllern können Sie festlegen, dass sich das Verhalten der Crowd-Mitglieder in einer Simulation den jeweiligen Umständen anpassen soll. So wäre es z. B. denkbar, dass eine anfänglich unplanmäßig umherwandernde Figur sich plötzlich zielstrebig auf ein Ziel zu bewegt, nachdem sie sich dem Ziel auf eine bestimmte Entfernung genähert hat.
Aus technischer Sicht ermöglichen kognitive Controller die Beeinflussung von Crowd-Simulationen mittels in Skripts definierter Bedingungen, was im Endeffekt auf die Implementierung einer Form der künstlichen Intelligenz hinausläuft. Sie können den Editor für den kognitiven Controller verwenden (ein Flussdiagramm-Editor ähnlich dem Dialogfeld Bewegungsflussdiagramm), um zunächst ein Netz aus Verhalten und Verhaltenskombinationen, den sogenannten "Zuständen", einzurichten. Anschließend werden auf MAXScript basierende Übergänge zugewiesen, in denen festgelegt ist, wann die Vertreter von einem Zustand in den anderen wechseln sollen. Selbst mit einer relativ einfachen Einrichtung lassen sich Simulationen erzeugen, in denen Ihre Figuren wie lebendige und bewußte Lebewesen erscheinen, die eigene Entscheidungen treffen, während sie sich durch die Szene bewegen.
Die folgenden Links führen Sie zu einer Reihe von Beispielen für von kognitiven Controllern gesteuerte Übergänge im Thema Dialogfeld "Zustand":
Testen eines Partikelsystem-Parameters
Testen der Position eines Objekts
Testen einer Atmosphären-Eigenschaft
Testen der Entfernung zwischen zwei Objekten
Testen eines Modifikator-Parameters
Testen des Verhaltens eines anderen Vertreters
So richten Sie einen kognitiven Controller ein und verwenden ihn:
In diesem Verfahren wird das typische Vorgehen bei Erstellung und Einsatz eines kognitiven Controllers beschrieben. Es wird vorausgesetzt, dass Sie sich mit den Grundlagen der Crowd-Simulation auskennen. Weitere Informationen zur Crowd-Einrichtung finden Sie in den Themen Crowd-Helferobjekt und Rollout "Setup".
Character Studio gibt dem Controller den Vorgabenamen "Kognitiver Controller". Sie sollten diesen Vorgabenamen in einen beschreibenden Namen ändern, z. B. "Suchen/Umhergehen". Klicken Sie dazu auf den Namen im Textfeld, und geben Sie den neuen Namen ein.
Wenn Sie einen neuen kognitiven Controller erstellen, wird automatisch der Modus "Zustand erstellen" aktiviert.
Als Nächstes definieren Sie für jeden Zustand eine oder mehrere Verhaltensweisen.
Wenn Sie mehrere Verhaltensweisen wählen, können Sie jeweils verschiedene Gewichtungen im Zustand-Editor angeben. Beispielsweise können Sie ein Suchverhalten mit voller Gewichtung mit einem Umhergehen-Verhalten mit halber Gewichtung kombinieren, sodass der Vertreter auf der Suche nach dem Ziel etwas umherwandert.
Als Nächstes definieren Sie mit "Übergang erstellen" die Abfolge der Zustände während der Simulation.
Ein Übergangspfeil wird angezeigt, der vom "Quell"-Zustand zum "Ziel"-Zustand weist.
Jeder Zustand kann Quell- und Zielpunkt für beliebig viele Übergänge sein. Geben Sie verschiedene Übergangsbedingungen für die einzelnen Übergänge an, um das Zustandsdiagramm so komplex wie nötig zu gestalten.
Als Nächstes definieren Sie im Dialogfeld "Zustandsübergang" eine Bedingung für jeden Übergang.
Normalerweise ist dies eine Funktion, die eine Bedingung testet und 1 zurückgibt, wenn sie wahr ist, bzw. 0, wenn sie falsch ist.
Beispiel:
fn test1 del t = ( if (del.simpos.x <= 40 and del.duration > 50) then 1 else 0 )
Die obige Anweisung besagt, dass der Übergang auftreten soll, wenn die Position des Vertreters auf der X-Achse kleiner oder gleich 40 ist und er sich seit mehr als 50 Frames im aktuellen Zustand befindet. Wenn jedoch eine der Bedingungen oder beide falsch sind, soll der Vertreter im aktuellen Zustand verharren (oder es werden andere Übergangsbedingungen getestet). Im Folgenden werden die Schlüsselwörter aufgelistet:
Eine vollständige Liste der vertreterspezifischen Parameter, die im Skript überprüft werden können, können Sie aufrufen, indem Sie ein MAXScript-Aufzeichnungsfenster öffnen (Funktionstaste F11 drücken) und Folgendes eingeben:
ShowProperties $delegate01
Da der Vertreter ein Knoten ist, reagiert er auch auf die Standard-MAXScript-Funktionen für Knoten, mit der Ausnahme von "simpos" wie oben beschrieben. Informationen zum Zugriff auf Übergangseigenschaften wie Dauer und Priorität finden Sie in der MAXScript-Hilfe.
Weitere Beispiele für MAXScript-Bedingungen, die mit kognitiven Controllern verwendet werden können, finden Sie unter Dialogfeld "Zustandsübergang".