Meine Teilnahme an der Entwicklung von Uncharted 4


Nach der Veröffentlichung von Uncharted 4 kann ich bereits darüber sprechen, woran ich in diesem Projekt gearbeitet habe. Grundsätzlich habe ich KI für die Teamkollegen des Spielers im Einzelspielermodus und Assistenten im Mehrspielermodus entwickelt und auch ein wenig an der Spiellogik gearbeitet. Ich werde die Aspekte weglassen, die nicht zum fertigen Spiel gekommen sind, und einige kleine Details.

Also fahren wir fort:

Postsystem


Bevor ich anfange, möchte ich über das von NPC verwendete Postsystem sprechen. Ich habe nicht an der Kernlogik dieses Systems gearbeitet, sondern beim Schreiben des Client-Codes geholfen, der es verwendet hat.

Posts sind diskrete Positionen im NPC-Navigationsbereich, die hauptsächlich von Entwicklungswerkzeugen erstellt und von Designern manuell platziert werden. Abhängig von unseren Anforderungen können wir verschiedene Post-Selektoren erstellen, um verschiedene Arten von Posts zu bewerten (z. B. einen Stealth-Post-Selektor, einen Kampfpost-Selektor) und den am höchsten bewerteten Post auswählen, um NPCs dorthin zu senden.


Teamkollegen, die dem Spieler folgen


Das System zum Verfolgen der Teamkollegen für den Spieler stammt von The Last of Us .

Die Hauptidee war, dass Teamkollegen um den Spieler herum die Positionen auswählen, denen sie folgen möchten. Diese potenziellen Positionen weichen vom Spieler ab und müssen die folgenden Prüfungen für die Freiheit des geraden Weges erfüllen: vom Spieler zur Position, von der Position zur vorwärts projizierten Position, von der projizierten Position nach vorne zum Spieler.


Im Gegensatz zu The Last of Us hat Uncharted 4 einen Aspekt des Kletterns. Um das Klettern in das Folgesystem des Spielers zu integrieren, haben wir einen Kletterpfosten-Selektor hinzugefügt, der die Punkte auswählt, an denen sich Teamkollegen bewegen sollen, wenn der Spieler auf die Felsen klettert.


Diese Aufgabe war schwieriger als wir erwartet hatten. Es reichte nicht aus, den Partnern nur zu befehlen, die übliche Logik zu befolgen, wenn der Spieler nicht klettert, und die Beiträge zu wechseln, wenn der Spieler an der Wand entlang kriecht. Wenn ein Spieler schnell zwischen einem normalen Zustand und einem Klettern wechselt, beginnen die Partner zwischen diesen beiden Zuständen zu pendeln. Aus diesem Grund haben wir die Hysterese hinzugefügt: Partner können den Status nur dann ändern, wenn der Spieler den Status geändert hat und sich in diesem Status weit genug bewegt hat. Im Allgemeinen ist die Hysterese eine gute Technik, um „Verhaltenssprünge“ zu vermeiden.

Teamkollegen vorauslaufen


Wir wollten, dass Teamkollegen dem Spieler an einigen Stellen im Spiel den Weg zeigen. Dieses System wurde von The Last of Us übernommen und verbessert: Die Designer verwendeten Splines, um die gemeinsamen Wege zu skizzieren, auf denen Teamkollegen den Spieler nach vorne führen sollten.


Wenn es auf der Ebene mehrere Pfade gab, ordneten die Designer mehrere Splines an und schalteten sie mithilfe eines Skripts ein / aus.


Die Position des Spielers wird auf den Spline projiziert, und der Verfolgungsreferenzpunkt des Spielers befindet sich in einem von den Designern anpassbaren Abstand vor ihm. Wenn dieser Verfolgungsreferenzpunkt den als Wartepunkt markierten Spline-Referenzpunkt passiert, bewegt sich der Partner zu einem anderen Wartepunkt. Wenn der Spieler beschließt, zurückzukehren, beginnt der Partner erst dann zurückzukehren, wenn der Unterstützungsverfolgungspunkt zu weit vom entferntesten Wartepunkt entfernt ist, der während der letzten Vorwärtsbewegung passiert wurde. Somit bildet sich wieder eine Hysterese, wodurch eine scharfe Zustandsänderung vermieden wird.

Wir haben auch die dynamische Geschwindigkeit des Tracking-Systems eingebaut. Basierend auf der Entfernung zwischen dem Partner und dem Spieler befinden sich „Geschwindigkeitsflugzeuge“ entlang des Splines. NPCs können drei Arten von Bewegungen ausführen: Gehen, Laufen und Sprinten. Abhängig von der Geschwindigkeitsebene, in der sich der Spieler befindet, wählt der Partner die geeignete Bewegungsart aus, um den erforderlichen Abstand zum Spieler einzuhalten. Entsprechend ihrer Vision können Designer Geschwindigkeitsflugzeuge aktivieren und deaktivieren. Abhängig von der Entfernung zum Spieler erhöht oder verringert sich außerdem die Animationsgeschwindigkeit der Bewegung des Partners geringfügig, um eine starke Änderung der Bewegungsgeschwindigkeit beim Umschalten zwischen Bewegungsarten zu vermeiden.


Shelter Sharing


In The Last of Us kann sich der Spieler relativ zu seinem Partner bewegen, während er in Deckung bleibt. Dies nennt man allgemeinen Schutz.


In The Last of Us ist Joel weiter von der Schutzmauer entfernt als Ellie oder Tess, und dies ist logisch, weil sie kleiner als Joel sind. Ohne Nate, Sam, Sally und Elena hätte dies unnatürlich ausgesehen, da sie fast gleich groß sind. Außerdem ist Uncharted 4 ein viel schnelleres Spiel, und wenn Nate ihre Arme hinter einem Hindernis ausstreckt, wird dies die Laufruhe ruinieren. Aus diesem Grund haben wir beschlossen, dass sich die Partner einfach an die Wand des Tierheims lehnen und Nate sich beim Umzug leicht um sie biegt.


Hier haben wir eine sehr einfache Logik verwendet. Wenn die projizierte Position des Spielers unter Berücksichtigung seiner Geschwindigkeit in einen rechteckigen Rand um den Schutzpfosten des Partners fällt, vervollständigt der Partner das aktuelle Verhalten hinter dem Hindernis und wird gegen die Schutzwand gedrückt.


Arzthelferinnen


Medizinische Assistenten im Mehrbenutzermodus benötigen ein völlig neues Verhalten, das im Einzelbenutzermodus nicht verfügbar ist: Sie müssen besiegte Freunde wiederbeleben und das Verhalten von Spielern hinter Schutzräumen kopieren.


Ärzte versuchen, das Verhalten von Spielern hinter Schutzräumen nachzuahmen und so nah wie möglich am Spieler zu sein, damit sie, wenn ein Spieler verletzt ist, in der Nähe sind und ihn wiederbeleben. Wenn der nächste Verbündete verletzt ist, wird er auch den Verbündeten wiederbeleben, vorausgesetzt, der Spieler lebt noch. Wenn der Spieler mit dem RevivePak-Mod für Mediziner ausgestattet ist, wird er versuchen, RevivePak in die Verbündeten zu werfen, bevor er zu den Verbündeten zur Auferstehung rennt (mehrere gleichzeitig durchgeführte Auferstehungen beschleunigen den Auferstehungsprozess). Beim Werfen von RevivePak wird die Granatenwerflogik verwendet, insbesondere um die Freiheit der Flugbahn zu überprüfen und die Animation abzuspielen. Nur Granaten werden durch RevivePak ersetzt.


Gras für Stealth


Die neue Mechanik von Uncharted 4 ist auch verdeckte Bewegung im Gras. Um es zu implementieren, mussten wir die Umgebung irgendwie markieren, damit die Spiellogik des Spielers herausfindet, ob sich der Spieler im Gras befindet. Ursprünglich wollten wir, dass Hintergrundkünstler die Oberflächen von Graskollisionen in Maya markieren, stellten jedoch fest, dass die Kommunikation zwischen Künstlern und Designern die Iteration zu stark verlangsamte. Aus diesem Grund haben wir einen anderen Weg gefunden, um Bereiche mit Gras als Stealth zu markieren. Speziell für Designer wurde dem Editor ein neues Gras-Tag für Stealth hinzugefügt, damit sie Navigationsbereiche genau markieren können, die der Spieler als Gras für Stealth betrachten sollte. Dank dieser zusätzlichen Informationen konnten wir auch Stealth-Posts bewerten, je nachdem, ob sie sich im Gras befinden oder nicht. Dies erwies sich als nützlich für Teamkollegen, die sich bewegen, wenn sich der Spieler im Stealth-Modus befindet.


Sinnesorgane


Da es im Gegensatz zu The Last of Us in Uncharted 4 keinen Hörmodus gibt, mussten wir den Spieler irgendwie über bevorstehende Bedrohungen informieren, damit ihn der unbekannte Ort der Feinde nicht störte. Unter Verwendung von Daten zur Wahrnehmung von Feinden haben wir Farbbedrohungsindikatoren hinzugefügt, die den Spieler darüber informieren, dass der Feind ihn bald als Ablenkungsfaktor (weißer Indikator) wahrnimmt, ihn als Ablenkungsfaktor (gelber Indikator) wahrnimmt und sich seiner Anwesenheit voll bewusst ist (orangefarbener Indikator). Zusätzlich haben wir die Bedrohungsanzeige dazu gebracht, das Hintergrundgeräusch zu verstärken, um die Spannung zu erhöhen, und ein lautes Signal abzugeben, wenn der Feind die Anwesenheit des Spielers vollständig verstanden hat, wie in The Last of Us.


Forschung


Dies ist der letzte große Teil des Gameplays, an dessen Entwicklung ich teilgenommen habe, bevor das Spiel zum "Gold" wurde. Normalerweise nehme ich nicht an offiziellen Treffen bei Naughty Dog teil, aber einige Monate vor dem „Gold“ hatten wir mindestens ein Treffen pro Woche unter der Leitung von Bruce Streley oder Neil Drackmann . Die Treffen waren dem KI-Spiel gewidmet. Nach fast jedem dieser Treffen gab es im Forschungssystem etwas für Änderungen oder Verarbeitungen. Bevor wir das fertige Spiel veröffentlichten, haben wir viele Phasen der Iterationen durchlaufen.

Es gibt zwei Aspekte, die die Feinde ablenken und zum Erkunden ermutigen: die Anwesenheit des Spielers und der Leichen. Wenn der Feind eine Ablenkung feststellt, versucht er, den nächsten Verbündeten anzuziehen, um gemeinsam die Ursache zu untersuchen. Ein näherer Feind wird zum Entdecker und der zweite zum Beobachter. Ein Feind, der eine Ablenkung findet, kann Forscher oder Beobachter werden, und wir haben für diese Fälle zwei verschiedene Arten von Dialogen vorbereitet ("Da ist etwas. Ich werde es überprüfen." Und "Da ist etwas. Geh da, überprüfe es.").

Um den Beginn und das Ende der Studie natürlicher zu gestalten, haben wir den Zeitpunkt der feindlichen Bewegungen und die Abnahme der Indikatoren für Angstindikatoren so angepasst, dass einige Forscher nicht gleichzeitig dieselben Aktionen mechanisch ausführen.


Wenn die Leiche eine Ablenkung ist, kann der Forscher etwas über die Anwesenheit des Spielers erfahren und jedem befehlen, nach ihm zu suchen, wobei er unwiederbringlich einen ruhigen Zustand hinterlässt. Eine entdeckte Leiche ist ebenfalls markiert, damit der Spieler verstehen kann, was ausgegeben wurde.


Bei einigen Schwierigkeitsgraden zwingen mehrere Studien nacheinander die Feinde dazu, aggressiver zu ermitteln, was die Wahrscheinlichkeit erhöht, dass sich ein Spieler im Gras versteckt. Auf der Schwierigkeitsstufe "Crushing" forschen Feinde ständig aggressiv.

Dialogansichten


Dies ist auch einer der letzten Aspekte, mit denen ich mich im Projekt befasst habe.

Die Ansichten in den Dialogen sind die Logik, die die Charaktere dazu bringt, auf Gespräche zu reagieren, z. B. andere Personen anzusehen und Gesten zu machen. In The Last of Us haben Designer monatelang alle Dialoge im Spiel manuell kommentiert und Momente des Aussehens und der Gesten markiert. Das wollten wir nicht wiederholen. Wir hatten mehrere geskriptete Dialoge, die bereits manuell markiert wurden, aber wir brauchten ein System, das Dialoge ohne Anmerkungen verarbeiten kann. Die Animatoren erhielten Parameter zum Einstellen der Drehgeschwindigkeit des Kopfes, des maximalen Drehwinkels des Kopfes, der Dauer des Blicks, der Pausenzeit usw.


Die Geschwindigkeit des Jeeps sparen


In den frühen Entwicklungsstadien hatten wir ein Problem mit der Jeep-Rennphase im Level mit der Stadt in Madakaskar: Wenn der Jeep des Spielers driftete und er nach dem Aufprall auf die feindliche Wand oder das Auto an Geschwindigkeit verlor, wurde der Spieler weit vom Konvoi entfernt und konnte das Level nicht beenden.

Ich kam auf diese Lösung: Begrenzte vorübergehend die Winkelgeschwindigkeit und die Änderung der Lineargeschwindigkeit von oben, wenn ich mit Wänden und feindlichen Fahrzeugen kollidierte. Diese einfache Lösung erwies sich als sehr effektiv - es wurde für die Spieler viel schwieriger, die Passage aufgrund von Abweichungen zu verfehlen.



Fahrzeugzerstörung


Uncharted 4 führte zuerst spielergesteuerte Maschinen ein. In früheren Spielen der Serie konnten nur NPCs Autos fahren, und diese Autos bewegten sich entlang der Spline-Schienen. Ich habe bei der Umsetzung der Zerstörung des Verkehrs geholfen.

Es gibt verschiedene Möglichkeiten, feindliche Fahrzeuge zu zerstören: Töte den Fahrer, schieße auf das Auto, ramme das feindliche Motorrad mit deinem Jeep, triff den feindlichen Jeep, um ihn zu schleudern. Abhängig von der Ursache der Zerstörung wurde eine Animation des zerstörten Transports und seiner Passagiere ausgewählt. Die Animation wird mit physisch kontrollierten Ragdolls gemischt, sodass die Kill-Animation nahtlos in einen physisch simulierten Absturz übergeht.


Um Motorräder mit einem Widder zu zerstören, wurden ein Begrenzungsrechteck in der XZ-Ebene und ein Kontaktpunkt verwendet, um eine von vier gerichteten Animationen der Widderzerstörung auszuwählen.


Bei Abweichungen von Jeeps wird geprüft, ob die Abweichung der Jeep-Drehung von der gewünschten Bewegungsrichtung den Schwellenwert der Abweichung überschreitet.


Beim Abspielen von Vernichtungsanimationen besteht die Möglichkeit, dass der zerstörte Transport durch die Wand gelangt. Es verwendet einen Kugelwurf (eine Kugel, die wie ein Strahl projiziert wird) von der idealen Position der Maschine entlang der „Schiene“, wenn sie nicht zerstört wurde, bis zu der Position, an der sich ihr Körper tatsächlich befindet. Wenn der Kontakt während der Erzeugung des Kugelgusses fixiert ist, verschiebt sich die Maschine in Richtung der Kontaktnormalen um einen Bruchteil des Durchdringungswerts. Daher erfolgt der Prozess des Eliminierens des Durchgangs durch die Wand allmählich über mehrere Rahmen, wodurch eine scharfe Positionsänderung vermieden wird.


Wir haben eine spezielle Art der Fahrzeugzerstörung entwickelt, die als Todesanzeige für Fahrzeuge bezeichnet wird. Dies sind kontextsensitive Kill-Animationen, die mit der Umgebung interagieren. Animatoren und Designer platzieren die Positionen dieser Animationen entlang der „Schienen“ des Splines und geben die Eingabefenster auf den Splines an. Wenn das Fahrzeug in diesem Fenster zerstört wird, beginnt die entsprechende Zerstörungsanimation zu spielen. Diese Funktion wurde ursprünglich als Tool zur Implementierung der epischen Jeep-Explosion für die Demo entwickelt, die 2015 auf der E3 vorgestellt wurde.


Bayer-Filter zum Dithering


Wir wollten die Schnittgeometrie loswerden, wenn sich die Kamera zu nahe an den Objekten der Umgebung befindet, hauptsächlich am Laub. Aus diesem Grund haben wir beschlossen, die Pixel im Pixel-Shader basierend auf der Nähe der Pixel zur Kamera zu schattieren. Wir konnten die Transparenz nicht nutzen, weil sie zu teuer ist und zu viel Laub vorhanden ist. Stattdessen haben wir Dithering angewendet und den Abstand zwischen Pixel und Kamera und das Muster in Form eines Bayer-Filters kombiniert. Einige Pixel wurden vollständig verworfen, wodurch die Illusion von Transparenz entstand.


Unser ursprünglicher Bayer-Filter war die auf dieser Wikipedia-Seite gezeigte 8 × 8-Matrix. Ich entschied, dass es zu klein war und führte zur Schaffung von Artefakten in Form von Streifen. Ich wollte den Bayer-Filter 16 × 16 verwenden, konnte ihn aber im Internet nirgendwo finden. Also habe ich versucht, das Bayer 8 × 8-Filtermuster zurückzuentwickeln, und dabei ein rekursives Muster festgestellt. Ich könnte es einfach studieren und eine 16 × 16-Matrix von Hand schreiben, aber aus Gründen des Interesses habe ich ein Werkzeug geschrieben, das Bayes'sche Matrizen mit einer beliebigen Zweierpotenz erzeugen kann.


Nach dem Umschalten auf das Bayes'sche Filter 16 × 16 nahmen Artefakte mit Streifen signifikant ab.


Explosionsschallverzögerung


Dies ist eigentlich ein sehr kleines Detail, aber ich möchte es erwähnen. Ein paar Wochen bevor die Demo 2015 auf der E3 gezeigt wurde, bemerkte ich, dass die Turmexplosion gleichzeitig gesehen und gehört wurde, was unlogisch war. Nate und Sally sind sehr weit vom Turm entfernt, also müssen sie zuerst die Explosion sehen und dann hören. In der fertigen Demo fügte das Künstlerteam dem Sound der Explosion eine leichte Verzögerung hinzu.


Lokalisierung in traditionellem Chinesisch


Ich habe den Text und die Untertitel in traditionellem Chinesisch nur zwei Wochen vor der Veröffentlichung des Spiels auf dem „Gold“ aktiviert und Übersetzungsfehler gefunden. Die meisten Fehler waren eine wörtliche Übersetzung aus dem Englischen ins traditionelle Chinesisch, die nicht im Zusammenhang stand. Ich entschied, dass ich keine Zeit haben würde, das ganze Spiel selbst durchzugehen und gleichzeitig nach Übersetzungsfehlern zu suchen. Aus diesem Grund habe ich mehrere Mitarbeiter der Testabteilung gebeten, verschiedene Teile des Spiels in traditionellem Chinesisch zu spielen, und mir das aufgezeichnete Video der Passage angesehen. Dies stellte sich als ziemlich effektiver Schritt heraus; Ich habe es geschafft, alle erkannten Übersetzungsfehler zu beheben, und das Team von Lokalisierern konnte sie vor Ablauf der Frist beheben.

Das ist alles


Das ist fast alles, woran ich für Uncharted 4 gearbeitet habe. Ich hoffe der Artikel war interessant für dich.

Source: https://habr.com/ru/post/de416593/


All Articles