La isla de Tsushima es un lugar precioso que explorar. Está compuesta por minúsculos detalles creados con mucho cariño por nuestro equipo. Este juego es considerablemente distinto a inFAMOUS: Second Son, nuestro anterior juego, que estaba repleto de efectos especiales de superpoderes. Soy Matt Vainio, artista principal de efectos especiales en Sucker Punch. Me gusta describir mi trabajo como la resolución de problemas de arte y diseño mediante la tecnología, algo que llevo haciendo en Sucker Punch desde inFAMOUS 2. Hoy voy a hablar de cómo hicimos la transición de llamativos superpoderes a un juego sólido, precioso y lleno de barro, sangre y acero, al igual que de los métodos que utilizamos para crear los efectos especiales de Ghost of Tsushima.
Cuando comenzamos Ghost identifiqué un par de aspectos importantes a mejorar basándome en lo que el proyecto necesitaba. El primero fue que quería aumentar el nivel de interactividad de nuestros sistemas de partículas. Teníamos una gran inversión de Second Son de sistemas de partículas activadas por la expresión con las que creamos una gran variedad de superpoderes mágicos. En Ghost of Tsushima, uno de mis objetivos principales fue coger ese sistema y orientarlo a altos niveles de interactividad. Desde el principio supimos que el viento era un elemento importante que teníamos que incorporar a los sistemas de partículas y a más cosas. También queríamos añadir fauna, suministrar vistas épicas con entorno medioambiental y clavar la dirección de «barro, sangre y acero» manchando de barro y sangre a los personajes de manera dinámica mientras luchan y se desplazan por el entorno. Hay muchas formas en las que hemos hecho que las partículas sean más interactivas, pero todo precisaba de más datos del mundo del juego. Estos son solo algunos de los ejemplos del tipo de datos de los que hablo: viento global, viento creado por el movimiento del jugador, desplazamiento del personaje, información de posición del terreno y del agua, información atmosférica como la humedad, la hora del día y mucho más.
El segundo objetivo principal era que teníamos que construir a gran escala. El mundo de Ghost of Tsushima es significativamente más grande que Second Son, pero el equipo de efectos especiales de Sucker Punch se compuso solo de dos personas durante gran parte del desarrollo. Esto implicaba que, siempre que fuera posible, teníamos que actualizar nuestro contenido mediante procesos automatizados. También teníamos que soportar vistas más grandes a través de un clima dinámico y un reloj de 24 horas en movimiento. Por último, colocamos manualmente una pequeña cantidad de elementos que ayudasen a guiar al jugador durante su exploración de la isla de Tsushima.
Viento
Uno de los objetivos clave de dirección de arte desde el inicio fue que todo tenía que moverse. Este era un aspecto obvio en el que las partículas podían colaborar añadiendo hojas y polen que flotasen en el aire, pero hay muchos sistemas funcionando al unísono para crear la ilusión de un viento que sopla de verdad. Aparte de las partículas hay árboles, hierba, telas y cuerdas que se mueven con el viento. Todos estos elementos se coordinaron para moverse adecuadamente bajo distintas condiciones de viento. Integramos esta dirección global de viento en casi cada efecto del juego. Cuando estalla una bomba o se enciende una fogata, el humo se mueve en la dirección correcta del viento. Esto ocurre con los fuegos, las chispas, el humo… Básicamente, con todo. También probamos la velocidad del viento para añadir turbulencias adicionales según el viento aumenta.
Inicialmente no pretendíamos que nuestro sistema global de viento se convirtiera en un modo de navegación hasta que Jason Connell, director de arte de Ghost, acudió a Adrian Bentley, uno de nuestros ingenieros jefe, y a mí para preguntarnos si podíamos conseguir que las partículas fueran el indicador que marcase la dirección de las misiones. Y así nació el «viendicador». Nuestro enfoque no era el de intentar construir un sistema de ruta para cambiar de direcciones constantemente para evitar obstáculos, sino el de apuntar directamente al objetivo y dejar la exploración a los jugadores. Esto, sobre todo, se debió a que queríamos que el jugador explorase, que se involucrase mentalmente en el proceso de navegación y que no siguiera a una especie de IU del juego sin pensar. Este enfoque de ruta directa solo fue posible porque nuestro sistema de partículas puede acceder a información del terreno, lo que nos permitió que las partículas fueran conscientes del paisaje que rodeaba al jugador.
En los primeros intentos hice que las partículas se ciñeran al terreno, que subieran y bajaran, fluyendo con las colinas y los valles. Esto fue problemático por varios motivos. El primero es que nuestras montañas tienen muchos modelos de piedra para paredes de acantilado; estos modelos de acantilado no forman parte de la información del terreno, solo lo hacía la malla teselada dinámica subyacente. Esto significaba que las partículas se cortaban en todas las paredes de piedra y desaparecían, haciendo que seguir el viendicador fuera confuso. También parecía muy poco natural que se ciñeran al terreno tan perfectamente, así que mi siguiente intento fue fijar el terreno como suelo para que las partículas ascendieran al subir la colina y se allanasen cuando el terreno se alejaba de ellas cuesta abajo. Añadí velocidad en ascenso cuando las colinas están en medio haciendo muchas pruebas en la trayectoria de movimiento de la partícula. En cada una de esas pruebas, la partículas busca lo cerca que podría estar del terreno en ese punto, o si, incluso, podría enterrarse. Si la partícula está demasiado cerca o enterrada en estos puntos de avistamiento, la partícula recibirá velocidad en ascenso. Por último, el viendicador cuenta con distintos elementos, como los cambios de entorno: pelusas en la hierba alta, hierba en campos, hojas en los bosques, ceniza en zonas quemadas y más. Hablaré sobre el funcionamiento de ese sistema más adelante en esta publicación.
En cuanto al follaje, las plantas están equipadas con juntas que responden a la velocidad local del viento. Trabajamos con los equipos de programación y de entorno para crear controles distintos para los troncos y las ramas, lo que nos permitió tener flexibilidad para crear una gran variedad de árboles y arbustos necesarios en Tsushima. Además del movimiento más amplio de tronco y ramas, añadimos el ruido que causan las pequeñas ondas de la superficie de las hojas.
Los campos de hierba y de hierba alta eran elementos particularmente icónicos y requerían mucho ajuste y reajuste entre los equipos de renderizado, de entorno y de efectos especiales. Los campos son una mezcla de triángulos generados procedimentalmente para la hierba y de activos modelados para los tallos y hojas de la hierba alta. Al principio intentamos usar partículas para obtener el movimiento con forma de ola desplazando la hierba en arcos superpuestos. La calidad visual de la hierba era buena, pero no encajaba con los árboles y arbustos, además de que el coste de rendimiento era algo más alto de lo que podíamos permitirnos. En nuestro segundo intento, añadimos dos capas de ráfagas procedimentales al entorno. La primera es un patrón grande de ruido que se desplaza en la dirección del viento; por encima hay una textura que se desplaza por el terreno para ver los detalles más pequeños de la hierba. La ventaja de este enfoque (aparte de las mejoras de coste) fue que pudimos usar el ruido de ráfagas de viento más ásperas también en los árboles y arbustos, lo que hizo que la hierba y el resto del follaje se combinasen de forma más continua.
De hecho, acabamos usando la tecnología de desplazamiento con partículas de hierba para empujar la hierba cuando el jugador y el caballo corren a través de ella. Esto se ha hecho antes en otros juegos, pero una de las mejoras clave que hicimos fue que, al usar el sistema de partículas para controlar el desplazamiento, pudimos hacer uso de nuestras expresiones para obtener un comportamiento más avanzado. Uno de estos comportamientos fue el de hacer que la hierba volviera a su posición de manera realista aplicando una ola sofocada a la fuerza del desplazamiento, lo que evita que la hierba vuelva a su posición en reposo de forma lineal y antinatural. El vídeo a continuación es un ejemplo del desplazamiento de la hierba y una vista depurada del sistema de partículas que lo controla. Las partes verdes del rastro representan un desplazamiento y, en las partes rojas, el desplazamiento se desvanece. Si miráis con atención, puedes ver que la hierba pierde y luego vuelve a ganar valores de desplazamiento en cantidades cada vez más pequeñas a medida que el rastro se aleja del héroe. Esto crea una reverberación de movimiento natural y logra que la hierba parezca realista.
Por último, pero no menos importante, el equipo de arte de tecnología del personaje tomó la iniciativa de añadir telas y cuerdas dinámicas al juego debido a su gran uso en los propios personajes. Cada simulación de tela y de cuerdas usa la misma información que el follaje y las partículas, lo que aumenta la ilusión de que hay viento de verdad moviéndose por la escena.
Animales
Desde el inicio asumimos que cualquier animal creado por el equipo de efectos solo se vería desde lejos, pero, a medida que el proyecto fue evolucionando, nos dimos cuenta de que podrían desempeñar un papel más importante. Para esta función colaboramos con Bill Rockenbeck, el mismo programador de renderizado que programó el sistema de partículas en la producción de Second Son. Su primer paso fue permitir que las partículas originasen objetos de malla totalmente equipados y animados. Una vez hecho esto, usando la misma información de posición del terreno que utilizábamos con el viendicador, pudimos vincular la orientación de los modelos hacia el terreno y conseguir que, cuando fuera necesario, colisionasen con ella.
Añadimos animales como ranas, aves/grullas, peces, cangrejos, bichos… Todas estas criaturas reaccionan a Jin y a otros personajes del mundo. Al usar una esfera de viento de valor muy bajo alrededor de los personajes (Jin incluido), los efectos de partículas de los animales son capaces de detectar si hay gente cerca. Utilizamos un nuevo sistema de eventos condicional para cambiar el movimiento de las partículas cuando se daba esa condición, lo que provocaba que los animales huyeran de la gente. Esto también se usó para proyectiles e impactos, lo que implicaba que las flechas y las dagas también asustarían a los animales.
En el siguiente vídeo se puede observar una iteración temprana de los efectos interactivos de cangrejos que hay por las playas. Comenzamos con unas mallas estáticas (seguramente, mi trabajo de modelado de mayor calidad) e iteramos el comportamiento. Quería que los cangrejos se mantuvieran a una distancia mínima de Jin para evitar que se colocase directamente encima de ellos y para hacer que parecieran lo suficientemente asustadizos. Para ayudarme a depurar comportamientos, los cangrejos del vídeo son de color blanco cuando se mueven y de color naranja cuando están quietos.
Hojas y duelos
Dado que una de las características distintivas de Ghost of Tsushima es el viento, sabíamos que necesitaríamos añadir un montón de hojas y que parecieran elegantes, pero también naturales. Por eso puede haber decenas de miles de hojas en pantalla en cualquier momento de Ghost y que todas interactúen con el viento, el entorno y los personajes.
Trabajamos mucho para que las hojas parecieran suficientemente realistas y que aterrizasen correctamente según el terreno. Cada hoja está modelada como un disco que usa cálculos 3D para rotar de forma adecuada en respuesta a pares de fuerza que se aplican cuando entra en contacto con el suelo. Además de aterrizar sobre el terreno, modelamos algunos comportamientos avanzados: las hojas de Ghost aterrizan en superficies acuáticas y fluyen con la corriente y, al caer por una catarata, se hundirán tras un tiempo a la deriva.
Casi al final del desarrollo de Ghost, un tester de QA me informó de un error extraño: las hojas caían en fogatas y se quedaban sin quemarse en el terreno cercano o inferior al fuego. Es cierto que era raro, así que decidí resolverlo colocando en las fogatas un emisor de viento al que las hojas reaccionasen. Esta corriente saliente mantuvo la mayoría de las hojas fuera del fuego y, además, era un bonito detalle.
Los duelos pasaron a ser un elemento muy apreciado en Ghost desde sus primeras pruebas y al equipo de efectos se le dio el control desde el inicio por parte de los directores de juego para ayudar a crear escenarios que mostrasen bien la interactividad de nuestro juego y los sistemas de partículas.
En muchos de estos duelos creamos hojas insistentes que reaccionasen al movimiento del jugador y de la IA. Para ello, reutilizamos la tecnología de desplazamiento de la hierba que habíamos construido y permitimos que las partículas usasen esa información. Así, pudimos hacer que las hojas se apartasen de forma elegante cuando los personajes se desplazaban rápidamente entre ellas. El objetivo para los duelos no era el de un realismo perfecto, sino el de una belleza elegante en movimiento. Usamos el mismo sistema de eventos descrito anteriormente para buscar momentos en los que los valores de desplazamiento del jugador superasen un umbral concreto. Después, creamos una caída para que las hojas se posasen desde el movimiento inicial tras un breve lapso de tiempo y que pudieran empujarse de nuevo. También usamos un patrón de ruido que permitió que las hojas se levantasen temporalmente del suelo por el viento, lo que ayudó a simular ráfagas y la naturaleza inestable de las hojas.
Otros tipos de duelos también hacen gran uso de otros sistemas de partículas dinámicos, como los faroles flotantes, las velas que se apagan, la niebla densa que se abre a tus pies, los rayos y más. Usamos técnicas similares a las hojas para los faroles en las que cada farol es un conjunto de partículas que se mueven y se mecen en el agua según el desplazamiento del jugador. Para las velas dinámicas del segundo duelo de Ryuzo añadimos emisores de viento a los golpes de espada y los aplicamos a las velas. Si el viento superaba un umbral concreto, usamos nuestro sistema de eventos para apagar el fuego y la luz mientras se generaban un hilo de humo y un efecto de humo en el techo. Además, los jugadores generan viento al rodar y esquivar, así que los movimientos rápidos cercanos a estas velas especiales de duelo también las apagarán.
Barro y sangre
Cuando los personajes corren, ruedan, se deslizan y se caen al suelo, suman barro de manera dinámica a sus mallas. Conseguir que nuestros personajes se ensucien mientras viven en nuestro mundo fue un objetivo de dirección de arte para fijar las pautas del juego desde el principio. Durante las animaciones, añadimos «fuentes» de barro en distintas cantidades para sitios como las rodillas, los codos y los hombros, de forma que Jin y otros tengan un aspecto adecuado de suciedad a causa de los combates. Si observas las escenas famosas de lucha en películas de samuráis, puedes ver la inspiración para Ghost en ellas: los personajes empujan barro con los pies y están llenos de él debido a todas sus interacciones con el suelo.
Como con el barro, creamos fuentes de sangre que añaden sangre de forma dinámica a las mallas de los personajes, mostrando su estado herido. Cada impacto añadía sangre cerca de la ubicación del golpe de la espada y un poco más allá. Esto se usó en las secuencias cinemáticas y en los momentos guionizados, además de en el combate sistémico.
Además de añadir sangre a los modelos de personajes, cada ataque crea un efecto de partículas con miles de gotas e hilos de sangre. Cada gota aterriza en la geometría cercana y, en el agua, llega a dispersarse en forma de nubes que se desplazan con la corriente.
Construir a gran escala
Un componente clave de la construcción a escala era conseguir que nuestros efectos especiales cuadrasen con los entornos y no tener que colocarlos manualmente. Sabíamos que, con el tamaño tan pequeño de nuestro equipo y un mundo gigante que llenar, tendríamos que crear alguna forma de colocación procedimental porque los biomas medioambientales estaban cambiando con mucha frecuencia. No queríamos pasar todo el tiempo con mantenimiento de contenido, así que tenía que autocorregirse.
Crecimiento y biomas
Este es un ejemplo sencillo: queríamos que las partículas de las hojas cayeran solo en las zonas de bosque y no en las praderas. El primer enfoque que probamos era muy rudo: colocamos un efecto en los árboles que crecían de forma procedimental por la isla. Dicho enfoque fracasó rápidamente, porque el entorno estaba citando cientos de árboles en espacios pequeños, lo que, aunque era correcto en cuanto a geometría, era demasiado exigente para los sistemas de partículas. Tuvimos algo de éxito fijando nuestras partículas para que aparecieran solo cuando estaban muy cerca de los árboles (a unos 15 metros), pero parecía un error cuando las distancias de visión estaban tan lejos. El otro problema que presentaba este enfoque era que, cuando tirábamos una hoja de la copa de un árbol, a 12 metros de altura, y el jugador va a caballo, puede que no se vea aún cuando pase por el árbol, por lo que las hojas, a menudo, no eran visibles.
Nuestro segundo enfoque fue usar el sistema de crecimiento del mismo modo que el entorno, en el que colocamos los sistemas de partículas de manera procedimental a lo largo de los árboles en el mismo espacio, usando las mismas máscaras y expresiones. En este enfoque teníamos que colocar círculos de hojas que se superpusieran dentro de una forma de máscara ocasionalmente compleja. Los círculos se empujaban en la distancia de sus radios desde el límite de las normas de máscara, lo que implicaba que a menudo había grandes huecos en los que no había hojas presentes debido a las normas y expresiones de crecimiento. Podíamos equilibrarlo creando más emisores y más pequeños, pero en detrimento del rendimiento. También fue difícil arreglar zonas concretas porque, si cambiábamos las reglas de crecimiento para arreglar la densidad o los agujeros de una zona que estábamos mirando, a menudo rompíamos partes de bosque que estaban funcionando bien antes. A pesar de esto, la técnica funcionó en la mayoría de ocasiones y, aunque hubo algunos errores, casi la descartamos.
En la imagen 1, la captura de pantalla demuestra el uso de nuestra herramienta de crecimiento para añadir partículas basadas en las normas que determinan dónde están los árboles. Hay grandes lagunas, así que esto no llegaba a nuestro listón. En la imagen 2 he aumentado la cantidad de emisores de partículas que crecen sustancialmente. Esto casi funciona, pero usa unos recursos valiosos que podríamos usar en otra parte. La imagen 3 muestra nuestro tercer enfoque, el mapa de biomas. Uno de nuestros programadores de renderizado estaba trabajando en una función para el equipo de iluminación que usaría datos del entorno y máscaras de crecimiento a los que podría accederse en tiempo real. Pregunté si podíamos subirnos al carro de esta tecnología y, por suerte, así fue. Lo que conseguimos con ello fue la habilidad del sistema de partículas de saber en qué bioma se había creado una partícula concreta. La imagen 4 tiene un sistema de partículas de depuración de fallos que muestra cómo leen estos datos las partículas. Las zonas azules son praderas y la verde es el bosque.
El primer pase de esto tenía demasiada forma de bloque, pero una vez utilicé un patrón de ruido para modificar la información de muestra fue mucho más orgánico y utilizable. Esto se convirtió en el núcleo de nuestro nuevo sistema de entorno medioambiental cuando se combinó con otras funciones, como poder hacer muestras de la posición del terreno, del material y de la dirección del viento. En una ubicación normal pudimos eliminar cientos de sistemas de partículas crecidos del entorno y reemplazarlos con un solo sistema que seguía a la cámara y era mucho más preciso para los biomas medioambientales.
Aunque movimos una gran parte de nuestros efectos del sistema de crecimiento a un sistema de bioma a tiempo real, usamos el sistema de crecimiento para algunos efectos de partículas en Ghost. Algunos ejemplos incluyen a pájaros en las lindes de los bosques, cangrejos y gaviotas en las zonas de playa, garzas en los arrozales y grullas en las ciénagas. Por último, usamos el sistema de crecimiento para añadir bancos de niebla a la linde del bosque. En todos estos casos, cuando el equipo de entorno cambiaba la ubicación de los bosques, campos y playas, los efectos especiales se iniciaban de forma automática.
Vistas y pistas de navegación
En Ghost, las vistas son importantes tanto para el juego, al ayudarte a encontrar objetos, como para establecer las pautas y la dirección de arte. Sentimos que encontrar las misiones debería ser lo más natural posible, así que creamos una variedad de efectos que podían usarse para indicar las ubicaciones de las misiones y el contenido de los desafíos. Algunos ejemplos incluyen distintos tipos y escalas de humo en una misión o contenido de desafío, pájaros que sobrevuelan la oportunidad de un haiku, vapor que se eleva de un baño onsen y más.
Uniéndolo todo
Los efectos visuales de Ghost of Tsushima son una parte integral del entorno. Cada marco contiene muchos sistemas separados que trabajan juntos para mejorar el aspecto dinámico del juego. Desde el bioma en primer plano y los elementos animales al clima de fondo y a los marcadores de contenido, los efectos especiales colaboraron para dar vida al mundo y hacer que explorar Tsushima fuera un placer.
Gracias por leerlo. Espero que hayas disfrutado de nuestro viaje a través de los efectos visuales de Tsushima. Si quieres saber más sobre la tecnología subyacente, puedes ver una charla que di en la Conferencia de desarrolladores de juegos de 2014 que se centra en nuestros sistemas potenciados por partículas de expresión.
No hay comentarios:
Publicar un comentario