Después del lanzamiento de
Uncharted 4, ya puedo hablar sobre lo que trabajé en este proyecto. Básicamente, desarrollé IA para los compañeros de equipo del jugador en modo para un jugador y asistentes en el modo multijugador, y también trabajé un poco en la lógica del juego. Omitiré aquellos aspectos que no llegaron al juego terminado y algunos pequeños detalles.
Entonces, procedemos:
Sistema de correos
Antes de comenzar, me gustaría hablar sobre el sistema de publicación utilizado por NPC. No trabajé en la lógica central de este sistema, pero ayudé a escribir el código del cliente que lo usó.
Las publicaciones son posiciones discretas en el espacio de navegación NPC, creadas principalmente por herramientas de desarrollo y colocadas manualmente por diseñadores. Dependiendo de nuestras necesidades, podríamos crear diferentes selectores de publicaciones para evaluar diferentes tipos de publicaciones (por ejemplo, un selector de publicaciones ocultas, un selector de publicaciones de combate) y seleccionar la publicación mejor calificada para enviar NPC allí.
Compañeros de equipo siguiendo al jugador
El sistema para seguir a los compañeros de equipo para el jugador se toma de
The Last of Us .
La idea principal era que los compañeros de equipo elijan alrededor del jugador las posiciones a seguir. Estas posiciones potenciales divergen del jugador y deben satisfacer las siguientes comprobaciones para la libertad del camino recto: del jugador a la posición, de la posición a la posición proyectada hacia adelante, desde la posición proyectada hacia adelante al jugador.
A diferencia de The Last of Us, Uncharted 4 tiene un aspecto de escalada. Para integrar la escalada en el sistema de seguimiento del jugador, hemos agregado un selector de poste de escalada que selecciona los puntos en los que los compañeros de equipo deben moverse cuando el jugador está escalando las rocas.
Esta tarea fue más difícil de lo que esperábamos. No fue suficiente solo ordenarles a los socios que usen la lógica habitual de seguir cuando el jugador no sube, y cambiar las publicaciones cuando el jugador se arrastra por el muro. Si un jugador cambia rápidamente entre un estado normal y un ascenso, los compañeros comienzan a oscilar entre estos dos estados. Por lo tanto, agregamos histéresis: los socios ahora pueden cambiar de estado solo cuando el jugador ha cambiado de estado y se ha movido lo suficiente en este estado. En general, la histéresis es una buena técnica para evitar "saltos de comportamiento".
Corriendo por delante compañeros de equipo
Queríamos que los compañeros de equipo mostraran al jugador el camino en algunos puntos del juego. Este sistema fue tomado de The Last of Us y mejorado: los diseñadores usaron splines para delinear los caminos comunes a lo largo de los cuales los compañeros de equipo deberían llevar al jugador hacia adelante.
Si había varios caminos en el nivel, los diseñadores arreglaban varias splines y las activaban / desactivaban usando un script.
La posición del jugador se proyecta en la spline, y el punto de referencia de seguimiento del jugador está al frente, a una distancia que los diseñadores pueden personalizar. Cuando este punto de referencia de seguimiento pasa el punto de referencia de spline, marcado como un punto de espera, el compañero comienza a moverse a otro punto de espera. Si el jugador decide regresar, entonces el compañero comienza a regresar solo cuando el punto de seguimiento del soporte está demasiado lejos del punto de espera más distante, pasado en el proceso del último movimiento hacia adelante. Por lo tanto, la histéresis se forma nuevamente, evitando un cambio brusco de estado.
También incorporamos en el sistema de seguimiento la velocidad dinámica. Según la distancia entre el compañero y el jugador, los "planos de velocidad" se encuentran a lo largo de la spline. Los NPC pueden usar tres tipos de movimiento: caminar, correr y correr. Dependiendo del plano de velocidades en el que se encuentre el jugador, el compañero selecciona el tipo de movimiento apropiado para mantener la distancia necesaria al jugador. De acuerdo con su visión, los diseñadores pueden habilitar y deshabilitar los aviones de velocidad. Además, dependiendo de la distancia al jugador, la velocidad de animación del movimiento del compañero aumenta o disminuye ligeramente para evitar un cambio brusco en la velocidad de movimiento cuando se cambia entre tipos de movimiento.
Compartir refugio
En The Last of Us, el jugador puede moverse en relación con su compañero, sin dejar de cubrirse. Esto se llama refugio general.
En The Last of Us, Joel está más lejos de la pared del refugio que Ellie o Tess, y esto es lógico porque son más pequeños que Joel. Sin embargo, para Nate, Sam, Sally y Elena, esto habría parecido antinatural, porque tienen casi la misma altura. Además, Uncharted 4 es un juego mucho más rápido, y si Nate extiende sus brazos moviéndose detrás de un obstáculo, arruinará la suavidad del movimiento. Por lo tanto, decidimos que los socios simplemente se apoyarían en la pared del refugio, y Nate se inclinaría ligeramente a su alrededor cuando se mudara.
Aquí usamos una lógica muy simple. Si la posición proyectada del jugador, teniendo en cuenta su velocidad, cae en un borde rectangular alrededor del poste de refugio del compañero, entonces el compañero completa el comportamiento actual detrás del obstáculo y se presiona contra la pared del refugio.
Asistentes medicos
Los asistentes médicos en modo multiusuario requieren un comportamiento completamente nuevo que no está disponible en modo monousuario: deben resucitar a los amigos derrotados y copiar el comportamiento de los jugadores detrás de los refugios.
Los médicos intentan imitar el comportamiento de los jugadores detrás de los refugios y estar lo más cerca posible del jugador, de modo que si un jugador se lesiona, estará cerca y lo resucitará. Si el aliado más cercano está herido, también lo resucitarán, siempre que el jugador siga vivo. Si el jugador está equipado con el mod RevivePak para médicos, entonces antes de correr hacia los aliados para la resurrección, intentarán lanzar RevivePak a los aliados (varias resurrecciones realizadas simultáneamente aceleran el proceso de resurrección); Al lanzar RevivePak, se utiliza la lógica de lanzamiento de granadas, en particular, para comprobar la libertad de la trayectoria y reproducir la animación, solo las granadas son reemplazadas por RevivePak.
Hierba para el sigilo
La nueva mecánica de Uncharted 4 también es movimiento encubierto en la hierba. Para implementarlo, necesitábamos marcar de alguna manera el entorno para que la lógica de juego del jugador descubriera si el jugador está en la hierba. Inicialmente, queríamos que los artistas de fondo marcaran las superficies de las colisiones de césped en Maya, pero descubrimos que la comunicación entre artistas y diseñadores ralentizaba demasiado la iteración. Por lo tanto, se nos ocurrió otra forma de marcar las áreas con hierba para el sigilo. Especialmente para los diseñadores, se agregó una nueva etiqueta de hierba para sigilo al editor para que puedan marcar con precisión los rangos de navegación que el jugador debe considerar hierba para sigilo. Gracias a esta información adicional, también pudimos evaluar las publicaciones ocultas dependiendo de si están en la hierba o no. Esto resultó ser útil para los compañeros de equipo que se mueven cuando el jugador está en modo sigiloso.

Órganos sensoriales
Dado que, a diferencia de The Last of Us, en Uncharted 4 no hay modo de escucha, tuvimos que informar al jugador de amenazas inminentes para que la ubicación desconocida de los enemigos no lo molestara. Usando datos sobre la percepción de los enemigos, agregamos indicadores de amenaza de color que le dicen al jugador que el enemigo pronto lo notará como un factor de distracción (indicador blanco), lo percibirá como un factor de distracción (indicador amarillo) y plenamente consciente de su presencia (indicador naranja). Además, hicimos que el indicador de amenaza amplificara el ruido de fondo para aumentar la tensión y emitiera una señal fuerte cuando el enemigo entendía completamente la presencia del jugador, como en The Last of Us.
Investigación
Esta es la última parte importante de la jugabilidad, en cuyo desarrollo participé antes de que el juego fuera al "oro". Usualmente no asisto a reuniones formales en Naughty Dog, pero unos meses antes del "oro" tuvimos al menos una reunión a la semana bajo la dirección de
Bruce Streley o
Neil Drackmann . Las reuniones estuvieron dedicadas al juego de IA. Después de casi cada una de estas reuniones, había algo en el sistema de investigación para el cambio o el procesamiento. Antes de lanzar el juego terminado, pasamos por muchas etapas de iteraciones.
Hay dos aspectos que distraen a los enemigos y los alientan a explorar: la presencia del jugador y los cadáveres. Cuando el enemigo detecta una distracción, trata de atraer al aliado más cercano para explorar juntos su causa. Un enemigo más cercano se convierte en explorador, y el segundo en observador. Un enemigo que encuentra una distracción puede convertirse en un investigador u observador, y preparamos para estos casos dos conjuntos de diálogos diferentes ("Hay algo allí. Iré a comprobarlo" y "Hay algo allí. Ve a verificarlo").
Para que el inicio y el final del estudio sean más naturales, ajustamos los tiempos de los movimientos del enemigo y la disminución de los indicadores de ansiedad para que un par de investigadores no realizaran mecánicamente las mismas acciones al mismo tiempo.
Si el cadáver es una distracción, entonces el investigador puede conocer la presencia del jugador y ordenar a todos que comiencen a buscarlo, dejando irremediablemente un estado de calma. Un cadáver descubierto también está marcado para que el jugador tenga la oportunidad de comprender lo que se entregó.
En algunos niveles de dificultad, varios estudios, uno tras otro, obligan a los enemigos a investigar de manera más agresiva, lo que aumenta las posibilidades de encontrar un jugador escondido en la hierba. En dificultad aplastante, los enemigos investigan agresivamente constantemente.
Vistas de diálogo
Este es también uno de los últimos aspectos que traté en el proyecto.
Las vistas en los cuadros de diálogo son la lógica que hace que los personajes reaccionen a las conversaciones, por ejemplo, mirar a otras personas y hacer gestos. En The Last of Us, durante meses, los diseñadores anotaron manualmente todos los diálogos en el juego, marcando momentos de miradas y gestos. No quisimos repetir esto. Teníamos varios diálogos con secuencias de comandos que ya estaban marcados manualmente, pero necesitábamos un sistema capaz de manejar diálogos sin anotaciones. A los animadores se les dieron parámetros para ajustar la velocidad de giro de la cabeza, el ángulo máximo de rotación de la cabeza, la duración de la mirada, el tiempo de pausa, etc.
Ahorrando la velocidad del jeep
Desde las primeras etapas de desarrollo, tuvimos un problema con la etapa de carrera de jeep en el nivel de la ciudad en Madakascar: si el jeep del jugador se desvió y perdió velocidad después de golpear la pared o el auto del enemigo, el jugador fue arrojado lejos del convoy y no pudo pasar el nivel.
Se me ocurrió esta solución: limitó temporalmente la velocidad angular y el cambio en la velocidad lineal desde arriba al chocar con paredes y vehículos enemigos. Esta solución simple resultó ser bastante efectiva: se volvió mucho más difícil para los jugadores fallar en el pasaje debido a derivas.
Destrucción del vehículo
Uncharted 4 introdujo por primera vez máquinas controladas por jugadores. En juegos anteriores de la serie, solo los NPC podían conducir autos, y estos autos se movían a lo largo de los rieles ranurados. Ayudé en la implementación de la destrucción del transporte.
Hay varias formas de destruir vehículos enemigos: matar al conductor, disparar al automóvil, embestir la motocicleta enemiga con su jeep, golpear el jeep del enemigo para deslizarlo. Dependiendo de la causa de la destrucción, se eligió una animación del transporte destruido y sus pasajeros. La animación se mezcla con muñecos de trapo controlados físicamente, por lo que la animación de matar pasa sin problemas a un choque simulado físicamente.
Para destruir motocicletas con un carnero, se utilizó un rectángulo delimitador en el plano XZ y un punto de contacto para seleccionar una de las cuatro animaciones dirigidas de destrucción del carnero.
En el caso de derivas de jeeps, se realiza una verificación para ver si la desviación de la rotación del jeep de la dirección de movimiento deseada excede el valor umbral de la deriva.
Al reproducir animaciones de aniquilación, existe la posibilidad de que el transporte destruido atraviese el muro. Utiliza un molde de esfera (una esfera proyectada como un rayo) desde la posición ideal de la máquina a lo largo del "riel", si no hubiera sido destruida, hasta la posición en la que se encuentra su cuerpo. Si el contacto se fija durante la generación del molde de esfera, la máquina cambia en la dirección del contacto normal por una fracción del valor de penetración, por lo tanto, el proceso de eliminación del paso a través de la pared ocurre gradualmente en varios marcos, lo que evita un cambio brusco de posición.

Creamos un tipo especial de destrucción de vehículos llamado pista de muerte del vehículo. Estas son animaciones de matar sensibles al contexto que interactúan con el entorno. Los animadores y diseñadores colocan las posiciones de estas animaciones a lo largo de los "rieles" de la spline e indican las ventanas de entrada en las splines. Si el vehículo se destruye dentro de esta ventana, la animación de destrucción correspondiente comienza a reproducirse. Inicialmente, esta función se creó como una herramienta para implementar la épica explosión de jeep para la demostración, presentada en E3 en 2015.
Filtro Bayer para difuminado
Queríamos deshacernos de la geometría de recorte cuando la cámara está demasiado cerca de los objetos del entorno, principalmente del follaje. Por lo tanto, decidimos sombrear los píxeles en el sombreador de píxeles según lo cerca que estén los píxeles de la cámara. No podríamos aprovechar la transparencia porque es demasiado costosa y hay demasiado follaje. En su lugar, aplicamos
tramado , combinando la distancia del píxel a la cámara y el patrón en forma de
filtro Bayer ; algunos píxeles se descartaron por completo, lo que creó la ilusión de transparencia.
Nuestro filtro original de Bayer era la matriz 8 × 8 que se muestra en
esta página de Wikipedia . Decidí que era demasiado pequeño y condujo a la creación de artefactos en forma de rayas. Quería usar el filtro Bayer 16 × 16, pero en Internet no pude encontrarlo en ningún lado. Así que traté de aplicar ingeniería inversa al patrón de filtro Bayer 8 × 8 y noté un patrón recursivo. Podría estudiarlo y escribir una matriz de 16 × 16 a mano, pero por interés escribí una herramienta que puede generar matrices bayesianas de cualquier potencia de dos.
Después de cambiar al filtro Bayesiano 16 × 16, los artefactos con rayas disminuyeron significativamente.
Explosión demora de sonido
Esto es en realidad un detalle muy menor, pero me gustaría mencionarlo. Un par de semanas antes de que se mostrara la demostración en E3 en 2015, noté que la explosión de la torre se vio y se escuchó al mismo tiempo, lo cual fue ilógico. Nate y Sally están muy lejos de la torre, por lo que primero deben ver la explosión y luego escucharla. En la demostración final, el equipo de artistas agregó un ligero retraso en el sonido de la explosión.
Localización en chino tradicional
Encendí el texto y los subtítulos en chino tradicional solo dos semanas antes del lanzamiento del juego en el "oro", y encontré errores de traducción. La mayoría de los errores fueron una traducción literal del inglés al chino tradicional que estaba fuera de contexto. Decidí que no tendría tiempo para revisar todo el juego mientras buscaba errores de traducción. Por lo tanto, le pedí a varias personas del departamento de pruebas que jugaran diferentes partes del juego en chino tradicional y vi el video grabado del pasaje. Esto resultó ser un paso bastante efectivo; Logré corregir todos los errores de traducción detectados, y el equipo de localizadores pudo corregirlos antes de la fecha límite.
Eso es todo
Eso es casi todo lo que trabajé para Uncharted 4 de lo que vale la pena mencionar. Espero que el artículo te haya sido interesante.