Anatomía del halcón


Recientemente, anunciamos el desarrollo del juego Falcon Age sobre la crianza de un ave adulta de un polluelo de halcón y fuerzas conjuntas opuestas que buscan colonizar el planeta. Falcon Age se lanzará en 2019 en PS4 y PS VR.

La semana pasada mostramos el juego en PAX y recibimos excelentes críticas, especialmente sobre el propio halcón. Echemos un vistazo más de cerca a su diseño, retocando animaciones y plataformas, IA y navegación, tecnología de plumas y sonidos de depredadores.

Diseño de halcón


Le dijeron a Chandan Ekanayake y Darran Herlbat.


El diseño del halcón combina diferentes tipos de aves rapaces. Nuestro halcón es del tamaño de un águila real, lucha como un halcón, parece un águila y un halcón, tiene crestas, como un búho, y su cuidado se lleva a cabo como un halcón. Ella es una de las últimas representantes de su aparición en nuestro mundo, y queríamos que su aparición fuera única y adecuada para la trama. Al mismo tiempo, durante el juego, debe destacarse contra el cielo y los desiertos.


Una de las primeras fuentes de inspiración para crear Falcon Age fue el video de águilas reales cazando grandes cabras de montaña. Comenzamos a realizar investigaciones sobre cetrería, y tuvimos la idea de domar a un halcón y crear mecanismos y jugabilidad basados ​​en esto. En una etapa temprana de desarrollo, creamos un prototipo crudo para probar nuestros conceptos. Tan pronto como llamamos al pájaro con un silbato a VR, y vimos cómo cambia su escala, se nos acerca y se sienta a mano, nos quedó claro que esto podría convertirse en la base de un juego único.

Animaciones y plataformas


Le dice a Aung Zau Oo.


Seguimiento de la pata de halcón

Hay muchas opciones para animar, pero ninguna de ellas podría resolver nuestra tarea de rastrear las patas de un halcón de una manera simple. Los sistemas con cinemática inversa, movimiento de raíz y otros complementos complejos nos permitirían hacer frente al trabajo si tuviéramos un equipo más grande y el tiempo suficiente. Queríamos lograr un resultado más predecible, por lo que elegimos una solución basada en las muchas poses creadas en 3dsmax.

Sin embargo, la razón más importante para abandonar IK fue que fue la mejor solución que encontré en un par de días. Al comienzo del proyecto, armamos el prototipo tan rápido que no tuvimos tiempo de considerar otras soluciones disponibles. Fue la forma más confiable y menos incómoda que he encontrado, por lo que nos hemos mantenido firmes desde entonces. No es necesario reparar lo que no está roto.

Así es como me imaginaba mezclando el movimiento de las garras de pájaros en la vida real. Una pelota es un puño conectado a un dispositivo de control de movimiento VR. Este método tiene limitaciones. Las garras deben poder doblarse alrededor de la mayor parte del puño, y la postura del puño debe ser lo más esférica posible.



Observe que la cabeza y las piernas están al mismo nivel jerárquico en la pelvis. Esto facilita enmascarar huesos y crear árboles de mezcla separados. Ignora la palabra "águila" en el título. Era solo el nombre de un activo temporal antes de decidir el diseño del ave.


Una versión corta de cómo se hizo esto: el puño es la pelota, y las patas giran alrededor de la pelota usando 30 poses de mezclar y animar las patas para llevarlas al centro cuando la pelota (brazo en movimiento) gira demasiado lejos.


30 poses de mezcla en una pelota


La animación cruzada le permite devolver las patas al centro

La mezcla comienza nuevamente después de una breve animación de la transición desde un nuevo giro de la mano. Según nuestro programador Justin, implementó esto con las fórmulas habituales de cuaterniones y álgebra lineal. Y uso los tres valores flotantes que me da y los paso a estos estados de fusión de animación.

En una chica, la segunda articulación del dedo índice se trata como una pelota.


El único caso límite en el que la idea con la pelota no funciona es cuando el guante apunta hacia abajo, como se muestra en la figura a continuación.


Podríamos tratar este caso de varias maneras. Una solución: agregue un colisionador a una parte del guante en el antebrazo del colisionador para que el pájaro despegue cuando ocurra una colisión con él. Pero al final decidieron dejar todo como está. Esto es más amigable para el jugador: puedes rascarte el muslo izquierdo y el pájaro en realidad virtual no se irá volando. Además, la mayoría de las personas nunca inclinan los brazos así durante un juego.

Solo si por alguna razón no juegan, de pie sobre sus cabezas.

En una parada de cabeza, todas las animaciones se verán incorrectas o rotas.



Cabeza de halcón


Describiré brevemente cómo logramos esto; la cabeza (bone_Head) es el primer hijo del objeto superior en la jerarquía esquelética del pájaro (bone_Root).

La posición (no rotación) de Bone_Root sigue la posición del controlador de movimiento y bone_Head contrarresta este movimiento. Esta es esencialmente una jerarquía de dos objetos en la que la mezcla de posición se usa para contrarrestar el movimiento del padre para preservar la posición global del niño. El resto del cuerpo del ave usa una combinación de 27 posturas para la posición más natural del ave.


Dado el tamaño de un ave adulta, moverse 12 cm a lo largo de todos los ejes (un cubo de 24x24x24) fue ideal para estabilizar sin estirar demasiado el cuello. La cabeza se moverá en el borde de este rango, y cuando el brazo de seguimiento deje de moverse, la nueva posición se considerará el nuevo centro alrededor del cual se crea otro cubo con un lado de 24 cm. Desde un punto de vista matemático, la estabilización de la cabeza es solo una transformación vectorial con muchos complementos diferentes. Para limitar la velocidad, el comienzo y el final de la transición, mueva el punto de estabilización cuando esté demasiado lejos del cuerpo y el pájaro aún esté en el área.


Navegación y Aves AI


Narrado por Justin Lalone.

Cuando el pájaro está aburrido

Muy a menudo, el halcón obedece las órdenes de Ara (el personaje principal del juego) y la sigue. Si permanece de pie en un área durante demasiado tiempo mientras el pájaro solo vuela en círculos o si lo deja ir sin dar órdenes, comenzará a buscar algo que hacer en el área, generalmente cazar o aterrizar en diferentes puntos importantes del alivio. También toma la iniciativa cuando está sentada en Are y alguien está tratando de agarrarla, y le encanta mostrar Are el siguiente hoyo cuando juega al golf relámpago.

El sol cegando a la víctima.

Algunas especies de presas, como los conejos, son muy tímidas, y cuando ven a un halcón zambullirse en el aire, tratando de agarrarlos, corren hacia el hoyo más cercano. Es mucho más difícil para ellos notar el pájaro de Ara cuando se acerca desde el lado soleado, por lo que puedes simplificar la captura de presas si prestas atención a dónde proviene la luz y envías al pájaro desde esta dirección. Por otro lado, puede ser bastante simple y simple sumergirse desde una altura, porque el ave podrá ganar más velocidad antes de que se note, dando a la víctima menos tiempo para escapar.


Vamos rápidamente y desde el costado del sol para capturar con precisión a la presa.



Navegación halcón 3D

Por lo general, en el conjunto estándar del motor del juego no hay mecanismos para mover de manera confiable un animal volador en el espacio 3D, lo que se vería natural en este caso. Tenemos unos tres niveles de lógica de navegación de aves, realizados para mover el ave del punto A al punto B, lo que nos permite no complicar demasiado el sistema y no quedarnos atascados en las esquinas.


Para una navegación de alto nivel que le permite encontrar una ruta alrededor del mundo, creamos un gráfico de navegación 3D y usamos el algoritmo A * para encontrar la ruta. En esta implementación, es bastante único que, para realizar todas las operaciones para encontrar la ruta utilizando el algoritmo A *, utilicemos un sistema de tareas Unity bastante nuevo. Proporciona una búsqueda rápida que no carga la transmisión principal, lo que deja más tiempo para IA, física y otros aspectos. La mayor parte del gráfico se genera automáticamente, y para volar a través de aberturas estrechas, por ejemplo a través de ventanas, las conexiones se colocan manualmente porque son pequeñas o requieren un enfoque en el ángulo correcto.


La línea violeta es un camino aproximado para volar alrededor de grandes rocas en el medio, donde el halcón comienza a volar y Ara se para. El pájaro no se esfuerza especialmente para seguir esta línea; si esto fuera así, haría giros muy extraños y bruscos, por lo que si puedes llegar a la siguiente parte del camino sin interferencias, entonces ella irá allí.


A veces, en el camino, puede encontrarse con objetos pequeños o en movimiento. El halcón mira hacia adelante y vuela sobre o cerca de estos objetos. La roca es lo suficientemente grande como para navegar con el algoritmo A * habitual, pero lo hice olvidarlo por ahora. Aquí, para rodear la roca, el pájaro gira hacia la izquierda: las líneas rojas muestran dónde se veía durante los últimos cuadros. Por lo general, trato de no hacer esto, pero la navegación A * puede hacer que un pájaro vuele debajo de arcos o puentes.

El último nivel de lógica del vuelo de los pájaros es la lógica de maniobrarse, la elección de qué tan rápido decide volar el pájaro, cuánto necesita subir o bajar, cómo girar rápidamente, cómo aplica la aceleración física, qué restricciones se imponen a sus acciones para llegar al punto final. Estos datos se transmiten al sistema de animación, informando qué tan activo trabaja el ave, en qué tipo de postura debe ser, si debe doblarse, etc. La evasión de objetos está bastante conectada con este sistema, pero toda la navegación A * se realiza por separado. Utiliza una gran cantidad de matemáticas y lógica.

Plumas y renderizado


Le dice a Ben Golus.

Las pequeñas plumas en el cuerpo, o las plumas de contorno de nuestro pájaro, se balancean del viento y reaccionan a las manos del jugador alisándolas para agregar una sensación más profunda de interactividad táctil. La forma de implementar plumas en la demostración de PAX fue un truco, así que espero reemplazarlo antes de que se lance el juego. (Por supuesto, esto significa que esta solución se implementará en el juego terminado.) En resumen, cada pequeña pluma de un pájaro se considera varios sombreadores de hierba o vegetación. Para calcular el ruido simple de las vibraciones de las plumas, se calculan varias sinusoides superpuestas, lo que le da a las plumas un aspecto natural. Sus cambios temporales se cambian a un valor aleatorio para cada pluma, almacenados en el color del vértice, y el movimiento de la oscilación también se escala de acuerdo con el color del vértice. Esto significa que la base de las plumas, a diferencia de los extremos, no se mueve. También significa que las plumas largas se mueven más que las cortas.


Queremos que las plumas no se muevan en direcciones aleatorias, como en la mayoría de los sombreadores de césped, por lo que no puede usar las direcciones del espacio mundial o local. Además, están en la malla con revestimiento, lo que hace que la dirección sea aún más dinámica. Por lo tanto, utilicé una combinación de vértices normales y tangentes de las plumas, para que las plumas se balancearan hacia adentro y hacia afuera, así como en diferentes direcciones en relación con su orientación. El sistema no es muy preciso, pero con movimientos tan pequeños, los errores casi no se notarán.

Para procesar las interacciones con la mano en la mano del jugador, hay un script que rastrea los huesos y crea una lista de cápsulas que siguen la forma de cada dedo, y se usa una esfera como palma. Si la mano está dentro del rango, el sombreador de vértices recorre la lista de cápsulas y encuentra la distancia más pequeña a una de ellas, y luego escala suavemente la oscilación si la cápsula la cruza. Además, las plumas se presionan contra el cuerpo. Las cápsulas son demasiado grandes porque las comprobaciones de superposición son suaves, es decir, no cambian abruptamente, sino con una transición suave. Todo esto está configurado aproximadamente para que cuando el dedo visible toque el lápiz, se detenga por completo y cuelgue.


Aquí hay una prueba de una versión anterior de este sistema. Puedes ver cómo las plumas reaccionan a la esfera incluso antes de que la toque, pero las interacciones aún parecen convincentes.



Para el lanzamiento final del juego, quiero crear un sistema con un sombreador geométrico o computacional, que resuelva algunos de los problemas que surgen al tocar solo un vértice de las plumas, y eliminar el hecho de que las normales para iluminar las plumas no cambian cuando se tocan.

Información de la herida de halcón

Queríamos mostrar de alguna manera cuando el pájaro estaba herido y, al mismo tiempo, no usar bandas de salud o mecanismos similares. Para mostrar que el pájaro está cansado o herido, se utilizan animaciones, pero aún no pudimos comunicar claramente a los usuarios que recibió daños. Para transmitir claramente su condición, decidimos mostrarle sus heridas físicas con sangre y plumas despeinadas. Una solución obvia sería reemplazar los materiales. Sin embargo, queríamos mostrar un aumento gradual del daño, y no solo un duro "comer / no", y no queríamos crear muchas cartas diferentes. También tuvimos un problema con el hecho de que la mayoría de las plumas usan las mismas coordenadas UV, es decir, todo el pájaro estará cubierto de manchas de sangre.

Como resultado, llegamos a una solución de dos partes. El primero fue el daño de plumas y despeinado. El canal alfa de cada bolígrafo está sintonizado de manera especial, de modo que las versiones dañadas y no dañadas están en alfa con diferente opacidad. Para cambiar entre los dos estados de las plumas, se utiliza una verificación de valor alfa (de hecho, es alfa para la cobertura). 50% de opacidad indica salud normal y 25% de opacidad indica heridas.


Para las manchas de sangre, el pájaro tiene las segundas coordenadas UV de la textura de la sangre, por lo que no necesitamos reutilizar las coordenadas UV de la textura de la pluma. La sangre se mezcla sobre la textura base. Como resultado, solo necesitamos un conjunto de texturas básicas, un conjunto de texturas de sangre, y esto es suficiente para obtener diferentes efectos de las heridas en el ave.




Sonidos de depredador


Narrado por Rob Piersall.


No queríamos que el pájaro difiriera (por ejemplo, sea futurista o mágico) de ningún otro pájaro en el mundo, sino que simplemente combinamos las diferentes características de varios depredadores voladores (solo agregue un sombrero). Por lo tanto, no tenía sentido crearle una voz que sonara "con calidad cinematográfica", suficiente para que funcione y sea creíble.

En otras palabras, podría "tomar prestados" los gritos de cualquier depredador que transmitiera información al jugador sobre los diferentes estados de ánimo, sentimientos y respuestas del pájaro. Escuché los sonidos de los depredadores. Para mi sorpresa, el depredador más grande e impresionante, el águila, fue el peor de todos en términos de sonido. Resultó ser el primero en la lista de "mejor no usar".

Hawk es siempre una gran opción. Todos aman el grito de un halcón. Solía ​​pensar que todos los ingenieros de sonido tienen un registro de grito de halcón, y que todos los halcones tienen el mismo sonido en todas las películas. Pero esto no es así. Al final resultó que, todos estos halcones suenan igual. Casi no hay diferencias. No me malinterpreten, el sonido es excelente, así que ... sí, para nuestro pájaro también lo usamos. Pero eso no es todo.

Lo mejor de todo es que no tuve que limitarme a una especie particular de halcón; y hay muchas de estas especies. Por lo tanto, podría elegir cualquier sonido adecuado emitido por cualquier halcón que sería como una especie de declaración emocional de un pájaro a mi gusto.

Es muy conveniente que el espectro de las emociones sea limitado. Los llamaré mensajes de aves:

  • Todo está tranquilo, todo está bien.
  • Escuché que me estás llamando
  • Atacando
  • Estoy herido, pero sigo volando
  • Duele

Grabar el sonido de un depredador molesto es muy simple; basta con aparecer en su territorio con equipos de grabación, y ya estará molesto. Por lo tanto, hay muchos materiales donde los depredadores suenan enojados y malvados. Son adecuados para sonidos de "dolor". Los sonidos del halcón fueron adecuados para la retroalimentación en vuelo y los informes de un ataque. Con los sonidos "todo está tranquilo", hubo dificultades. Se me ocurrieron varios tipos de twitter, pero luego tuve que editar muchos tipos diferentes de mensajes para obtener gritos cortos y parciales correspondientes a twitter, y aparecieron para el juego.

El seguimiento de un pájaro en un juego por sonido es una historia completamente diferente para otro artículo.

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


All Articles