Ma participation au développement d'Uncharted 4


Après la sortie d' Uncharted 4, je peux déjà parler de ce sur quoi j'ai travaillé dans ce projet. Fondamentalement, j'ai développé l'IA pour les coéquipiers du joueur en mode solo et les assistants en multijoueur, et j'ai également travaillé un peu sur la logique de jeu. Je vais omettre les aspects qui ne sont pas arrivés au jeu fini et quelques petits détails.

Nous procédons donc:

Système de poste


Avant de commencer, je voudrais parler du système de poste utilisé par NPC. Je n'ai pas travaillé sur la logique principale de ce système, mais j'ai aidé à écrire le code client qui l'utilisait.

Les messages sont des positions discrètes dans l'espace de navigation des PNJ, principalement créées par des outils de développement et placées manuellement par des concepteurs. Selon nos besoins, nous pourrions créer différents sélecteurs de poste pour évaluer différents types de postes (par exemple, un sélecteur de poste furtif, un sélecteur de poste de combat) et sélectionner le poste le mieux noté pour y envoyer des PNJ.


Coéquipiers suivant le joueur


Le système de suivi des coéquipiers du joueur est tiré de The Last of Us .

L'idée principale était que les coéquipiers choisissent autour du joueur les positions à suivre. Ces positions potentielles divergent du joueur et doivent satisfaire aux vérifications suivantes de la liberté de la trajectoire rectiligne: du joueur à la position, de la position à la position projetée vers l'avant, de la position projetée vers l'avant au joueur.


Contrairement à The Last of Us, Uncharted 4 a un aspect d'escalade. Pour intégrer l'escalade dans le système de suivi du joueur, nous avons ajouté un sélecteur de poste d'escalade qui sélectionne les points auxquels les coéquipiers doivent se déplacer lorsque le joueur escalade les rochers.


Cette tâche a été plus difficile que prévu. Il ne suffisait pas simplement d'ordonner aux partenaires d'utiliser la logique habituelle de suivre lorsque le joueur ne grimpe pas et de changer de poste lorsque le joueur rampe le long du mur. Si un joueur bascule rapidement entre un état normal et l'escalade, les partenaires commencent à osciller entre ces deux états. Par conséquent, nous avons ajouté une hystérésis: les partenaires ne peuvent désormais changer d'état que lorsque le joueur a changé d'état et s'est suffisamment éloigné dans cet état. En général, l'hystérésis est une bonne technique pour éviter les «sauts comportementaux».

Courir devant ses coéquipiers


Nous voulions que nos coéquipiers montrent le chemin au joueur à certains moments du match. Ce système a été repris de The Last of Us et amélioré: les concepteurs ont utilisé des splines pour tracer les chemins communs le long desquels les coéquipiers devraient conduire le joueur vers l'avant.


S'il y avait plusieurs chemins au niveau, les concepteurs ont arrangé plusieurs splines et les ont activées / désactivées à l'aide d'un script.


La position du joueur est projetée sur la spline et le point de référence de suivi du joueur se trouve devant, à une distance personnalisable par les concepteurs. Lorsque ce point de référence de suivi dépasse le point de référence spline, marqué comme point d'attente, le partenaire commence à se déplacer vers un autre point d'attente. Si le joueur décide de revenir en arrière, le partenaire ne commence à revenir que lorsque le point de suivi du support est trop éloigné du point d'attente le plus éloigné, passé lors du dernier mouvement vers l'avant. Ainsi, l'hystérésis se forme à nouveau, évitant un changement d'état brutal.

Nous avons également intégré la vitesse dynamique du système de suivi. En fonction de la distance entre le partenaire et le joueur, des «plans de vitesse» sont situés le long de la spline. Les PNJ peuvent utiliser trois types de mouvements: marcher, courir et sprinter. En fonction du plan de vitesses dans lequel se trouve le joueur, le partenaire sélectionne le type de mouvement approprié afin de maintenir la distance nécessaire au joueur. Conformément à leur vision, les concepteurs peuvent activer et désactiver les plans de vitesse. De plus, selon la distance par rapport au joueur, la vitesse d’animation du mouvement du partenaire augmente ou diminue légèrement pour éviter un changement brusque de la vitesse de déplacement lors du passage d’un type de mouvement à l’autre.


Partage de refuge


Dans The Last of Us, le joueur peut se déplacer par rapport à son partenaire, tout en restant à couvert. C'est ce qu'on appelle un abri général.


Dans The Last of Us, Joel est plus éloigné du mur de l'abri que Ellie ou Tess, et cela est logique car ils sont plus petits que Joel. Mais pour Nate, Sam, Sally et Elena, cela n'aurait pas semblé naturel, car ils ont presque la même hauteur. De plus, Uncharted 4 est un jeu beaucoup plus rapide, et si Nate étend ses bras en se déplaçant derrière un obstacle, cela ruinera la fluidité du mouvement. Par conséquent, nous avons décidé que les partenaires s'appuieraient simplement sur le mur de l'abri et que Nate se pencherait légèrement autour d'eux lorsqu'ils bougeraient.


Ici, nous avons utilisé une logique très simple. Si la position projetée du joueur, en tenant compte de sa vitesse, tombe dans une bordure rectangulaire autour du poteau de l'abri du partenaire, alors le partenaire termine le comportement actuel derrière l'obstacle et est pressé contre le mur de l'abri.


Assistants médicaux


Les assistants médicaux en mode multi-utilisateurs nécessitent un comportement complètement nouveau qui n'est pas disponible en mode mono-utilisateur: ils doivent ressusciter les amis vaincus et copier le comportement des joueurs derrière les abris.


Les médecins essaient d'imiter le comportement des joueurs derrière les abris et d'être aussi près que possible du joueur, de sorte que si un joueur est blessé, il sera à proximité et le ressuscitera. Si l'allié le plus proche est blessé, il ressuscitera également l'allié, à condition que le joueur soit toujours en vie. Si le joueur est équipé du mod RevivePak pour les médecins, puis avant de courir vers les alliés pour la résurrection, il essaiera de lancer RevivePak sur les alliés (plusieurs résurrections effectuées simultanément accélèrent le processus de résurrection); lors du lancement de RevivePak, la logique de lancement de grenade est utilisée, notamment pour vérifier la liberté de la trajectoire et jouer l'animation, seules les grenades sont remplacées par RevivePak.


De l'herbe pour la discrétion


La nouvelle mécanique d'Uncharted 4 est également un mouvement secret dans l'herbe. Pour le mettre en œuvre, nous devions en quelque sorte délimiter l'environnement afin que la logique de jeu du joueur découvre si le joueur est dans l'herbe. Au départ, nous voulions que des artistes d'arrière-plan marquent les surfaces des collisions d'herbe à Maya, mais nous avons constaté que la communication entre les artistes et les designers ralentissait trop l'itération. Par conséquent, nous avons trouvé une autre façon de marquer les zones avec de l'herbe pour la furtivité. Spécialement pour les concepteurs, une nouvelle étiquette d'herbe pour la furtivité a été ajoutée à l'éditeur afin qu'ils puissent marquer avec précision les plages de navigation que le joueur devrait considérer comme l'herbe pour la furtivité. Grâce à ces informations supplémentaires, nous avons également pu évaluer les poteaux furtifs selon qu'ils sont dans l'herbe ou non. Cela s'est avéré utile pour les coéquipiers se déplaçant lorsque le joueur est en mode furtif.


Organes sensoriels


Étant donné que, contrairement à The Last of Us, dans Uncharted 4, il n'y a pas de mode d'écoute, nous avons dû en quelque sorte informer le joueur des menaces imminentes afin que l'emplacement inconnu des ennemis ne le dérange pas. En utilisant des données sur la perception des ennemis, nous avons ajouté des indicateurs de menace de couleur qui informent le joueur que l'ennemi le remarquera bientôt comme un facteur de distraction (indicateur blanc), le percevra comme un facteur de distraction (indicateur jaune) et pleinement conscient de sa présence (indicateur orange). De plus, nous avons fait que l'indicateur de menace amplifie le bruit de fond afin d'augmenter la tension et émette un signal fort lorsque l'ennemi a parfaitement compris la présence du joueur, comme dans The Last of Us.


La recherche


Il s'agit de la dernière grande partie du gameplay, à laquelle j'ai participé avant que le jeu ne passe à "l'or". Je n'assiste généralement pas aux réunions formelles chez Naughty Dog, mais quelques mois avant la «médaille d'or», nous avions au moins une réunion par semaine sous la direction de Bruce Streley ou Neil Drackmann . Les réunions étaient dédiées au jeu AI. Après presque chacune de ces réunions, il y avait quelque chose dans le système de recherche pour le changement ou le traitement. Avant de sortir le jeu terminé, nous avons traversé de nombreuses étapes d'itérations.

Il y a deux aspects qui distraient les ennemis et les encouragent à explorer: la présence du joueur et des cadavres. Lorsque l'ennemi détecte une distraction, il essaie d'attirer l'allié le plus proche pour explorer sa cause ensemble. Un ennemi plus proche devient un explorateur et le second un observateur. Un ennemi qui trouve une distraction peut devenir chercheur ou observateur, et nous avons préparé pour ces cas deux ensembles de dialogues différents ("Il y a quelque chose là-bas. Je vais le vérifier." Et "Il y a quelque chose là-bas. Allez le vérifier.")).

Pour rendre le début et la fin de l'étude plus naturels, nous avons ajusté le timing des mouvements ennemis et la diminution des indicateurs des indicateurs d'anxiété afin qu'un couple de chercheurs n'effectue pas mécaniquement les mêmes actions en même temps.


Si le cadavre est une distraction, alors le chercheur peut s'informer sur la présence du joueur et ordonner à tout le monde de commencer à le chercher, laissant irrémédiablement un état calme. Un cadavre découvert est également marqué afin que le joueur ait la possibilité de comprendre ce qui a été distribué.


À certains niveaux de difficulté, plusieurs études, l'une après l'autre, obligent les ennemis à enquêter de manière plus agressive, ce qui augmente les chances de trouver un joueur caché dans l'herbe. En difficulté écrasante, les ennemis recherchent constamment de manière agressive.

Vues de dialogue


C'est aussi l'un des derniers aspects que j'ai traités dans le projet.

Les vues dans les boîtes de dialogue sont la logique qui fait réagir les personnages aux conversations, par exemple, regarder d'autres personnes et faire des gestes. Dans The Last of Us, pendant des mois, les concepteurs ont annoté manuellement toutes les boîtes de dialogue du jeu, marquant des moments d'apparence et de gestes. Nous ne voulions pas répéter cela. Nous avions plusieurs dialogues scriptés qui étaient déjà marqués manuellement, mais nous avions besoin d'un système capable de gérer les dialogues sans annotations. Les animateurs ont reçu des paramètres pour ajuster la vitesse de rotation de la tête, l'angle de rotation maximum de la tête, la durée du regard, le temps des pauses, etc.


Sauver la vitesse de la jeep


Dès les premiers stades de développement, nous avons eu un problème avec l'étape de course de jeep au niveau de la ville de Madakascar: si la jeep du joueur a dérivé et qu'il a perdu de la vitesse après avoir heurté le mur ou la voiture de l'ennemi, le joueur a été projeté loin du convoi et il n'a pas réussi à terminer le niveau.

J'ai trouvé cette solution: limitait temporairement la vitesse angulaire et le changement de vitesse linéaire par le haut lors d'une collision avec des murs et des véhicules ennemis. Cette solution simple s'est avérée assez efficace - il est devenu beaucoup plus difficile pour les joueurs d'échouer au passage en raison de dérives.



Destruction des véhicules


Uncharted 4 a introduit pour la première fois des machines contrôlées par les joueurs. Dans les jeux précédents de la série, seuls les PNJ pouvaient conduire des voitures, et ces voitures se déplaçaient le long des rails splines. J'ai aidé à la mise en œuvre de la destruction des transports.

Il existe plusieurs façons de détruire les véhicules ennemis: tuez le conducteur, tirez sur la voiture, enfoncez la moto ennemie avec votre jeep, frappez la jeep ennemie pour la faire déraper. En fonction de la cause de la destruction, une animation du transport détruit et de ses passagers a été choisie. L'animation se mélange à des ragdolls contrôlés physiquement, de sorte que l'animation de kill se transforme de manière transparente en un crash simulé physiquement.


Pour détruire les motos avec un bélier, un rectangle englobant dans le plan XZ et un point de contact ont été utilisés pour sélectionner l'une des quatre animations dirigées de destruction de bélier.


Dans le cas de dérives de jeeps, une vérification est effectuée pour voir si la déviation de la rotation de la jeep par rapport à la direction de mouvement souhaitée dépasse la valeur seuil de la dérive.


Lors de la lecture d'animations d'anéantissement, il est possible que le transport détruit passe à travers le mur. Il utilise une sphère projetée (une sphère projetée comme un rayon) depuis la position idéale de la machine le long du "rail", si elle n'avait pas été détruite, jusqu'à la position où son corps est réellement situé. Si le contact est fixé lors de la génération de la sphère coulée, la machine se déplace dans la direction du contact normal d'une fraction de la valeur de pénétration.Par conséquent, le processus d'élimination du passage à travers le mur se produit progressivement sur plusieurs cadres, ce qui évite un changement brusque de position.


Nous avons créé un type spécial de destruction de véhicule appelé indice de mort de véhicule. Ce sont des animations de mise à mort contextuelles qui interagissent avec l'environnement. Les animateurs et les concepteurs placent les positions de ces animations le long des «rails» de la spline et indiquent les fenêtres d'entrée sur celles-ci sur les splines. Si le véhicule est détruit dans cette fenêtre, l'animation de destruction correspondante commence à jouer. Initialement, cette fonction a été créée comme un outil pour mettre en œuvre l'explosion de jeep épique pour la démo, présentée à l'E3 en 2015.


Filtre Bayer pour tramage


Nous voulions nous débarrasser de la géométrie d'écrêtage lorsque la caméra est trop proche des objets de l'environnement, principalement du feuillage. Par conséquent, nous avons décidé d'ombrer les pixels dans le pixel shader en fonction de la proximité des pixels avec la caméra. Nous n'avons pas pu profiter de la transparence car elle est trop coûteuse et il y a trop de feuillage. Au lieu de cela, nous avons appliqué le tramage , combinant la distance entre le pixel et la caméra et le motif sous la forme d' un filtre Bayer - certains pixels ont été complètement rejetés, ce qui a créé l'illusion de transparence.


Notre filtre Bayer d'origine était la matrice 8 × 8 présentée sur cette page Wikipedia . J'ai décidé qu'il était trop petit et a conduit à la création d'artefacts sous forme de rayures. Je voulais utiliser le filtre Bayer 16 × 16, mais sur Internet, je ne le trouvais nulle part. J'ai donc essayé de désosser le modèle de filtre Bayer 8 × 8 et j'ai remarqué un motif récursif. Je pourrais simplement l'étudier et écrire une matrice 16 × 16 à la main, mais par intérêt, j'ai écrit un outil qui peut générer des matrices bayésiennes de n'importe quelle puissance de deux.


Après le passage au filtre bayésien 16 × 16, les artefacts à rayures ont diminué de manière significative.


Retard sonore d'explosion


Il s'agit en fait d'un détail très mineur, mais je voudrais le mentionner. Quelques semaines avant la présentation de la démo sur E3 en 2015, j'ai remarqué que l'explosion de la tour avait été vue et entendue en même temps, ce qui était illogique. Nate et Sally sont très loin de la tour, ils doivent donc d'abord voir l'explosion, puis l'entendre. Dans la démo terminée, l'équipe d'artistes a ajouté un léger retard au son de l'explosion.


Localisation en chinois traditionnel


J'ai activé le texte et les sous-titres en chinois traditionnel seulement deux semaines avant la sortie du jeu sur "l'or", et j'ai trouvé des erreurs de traduction. La plupart des erreurs étaient une traduction littérale de l'anglais vers le chinois traditionnel qui était hors contexte. J'ai décidé que je n'aurais pas le temps de parcourir tout le jeu moi-même, tout en recherchant simultanément des erreurs de traduction. Par conséquent, j'ai demandé à plusieurs personnes du département des tests de jouer différentes parties du jeu en chinois traditionnel et j'ai regardé la vidéo enregistrée du passage. Cela s'est avéré être une étape assez efficace; J'ai réussi à corriger toutes les erreurs de traduction détectées et l'équipe de localisateurs a pu les corriger avant la date limite.

C'est tout


C'est presque tout ce sur quoi j'ai travaillé pour Uncharted 4 d'après ce qui mérite d'être mentionné. J'espère que l'article vous a intéressé.

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


All Articles