Récemment, nous avons annoncé le développement du jeu
Falcon Age sur l'élevage d'un oiseau adulte d'un poussin de faucon et les forces opposées qui cherchent à coloniser la planète. Falcon Age sortira en 2019 sur PS4 et PS VR.
La semaine dernière, nous avons montré le jeu sur
PAX et reçu de très bonnes critiques, en particulier sur le faucon lui-même. Examinons de plus près sa conception, peaufinant les animations et les plates-formes, l'IA et la navigation, la technologie des plumes et les sons des prédateurs.
Conception de faucon
Raconte Chandan Ekanayake et Darran Herlbat.
La conception du faucon combine différents types d'oiseaux de proie. Notre faucon, de la taille d'un aigle royal, se bat comme un faucon, ressemble à un aigle et à un faucon, a des crêtes, comme un hibou, et ses soins sont effectués comme un faucon. Elle est l'une des dernières représentantes de son apparence dans notre monde, et nous voulions rendre son apparence unique et adaptée à l'intrigue. En même temps, pendant le gameplay, il devrait se détacher du ciel et des déserts.

L'une des premières sources d'inspiration pour créer Falcon Age a été la vidéo d'aigles royaux chassant de grandes chèvres de montagne. Nous avons commencé à mener des recherches sur la fauconnerie, et nous avons eu l'idée d'apprivoiser un faucon et de créer des mécanismes et un gameplay basés sur cela. À un stade précoce de développement, nous avons créé un prototype brut pour tester nos concepts. Dès que nous avons appelé pour la première fois l'oiseau avec un sifflet en VR, et vu comment son échelle change, il s'approche de nous et s'assoit à portée de main, il est devenu clair pour nous que cela pourrait devenir la base d'un jeu unique.
Animations et rigs
Dit Aung Zau Oo.
Suivi des pattes de fauconIl existe de nombreuses options d'animation, mais aucune d'entre elles ne pourrait résoudre notre tâche de suivre les pattes d'un faucon de manière simple. Les systèmes avec cinématique inverse, mouvement de racine et autres plugins complexes nous permettraient de faire face au travail si nous avions une équipe plus grande et suffisamment de temps. Nous voulions obtenir un résultat plus prévisible, nous avons donc choisi une solution basée sur les nombreuses poses créées dans 3dsmax.
Cependant, la raison la plus importante pour abandonner IK était que c'était la meilleure solution que j'ai trouvée en quelques jours. Au début du projet, nous avons assemblé le prototype si rapidement que nous n'avons pas eu le temps d'envisager d'autres solutions disponibles. C'était la manière la plus fiable et la moins gênante que j'ai trouvée, donc nous nous y tenons depuis. Pas besoin de réparer ce qui n'est pas cassé.
C'est ainsi que j'imaginais mélanger le mouvement des griffes d'oiseaux dans la vraie vie. Une balle est un poing attaché à un dispositif de contrôle de mouvement VR. Cette méthode a ses limites. Les griffes doivent pouvoir se plier autour de la majeure partie du poing, et la pose du poing doit être aussi sphérique que possible.
Notez que la tête et les jambes sont au même niveau de hiérarchie dans le bassin. Cela facilite le masquage des os et la création d'arbres de mélange séparés. Ignorez le mot «aigle» dans le titre. Ce n'était que le nom d'un bien temporaire avant de décider de la conception de l'oiseau.
Une version courte de la façon dont cela a été fait: le poing est la balle et les pattes tournent autour de la balle en utilisant 30 poses de mélange et d'animation des pattes pour les ramener au centre lorsque la balle (bras en mouvement) tourne trop loin.
30 Mélange pose sur une balleL'animation croisée vous permet de ramener les pattes au centreLe mixage recommence après une courte animation de la transition d'un nouveau tour de main. Selon notre programmeur Justin, il l'a implémenté avec les formules habituelles de quaternions et d'algèbre linéaire. Et j'utilise les trois valeurs flottantes qu'il me donne et je les passe à ces états de fusion d'animation.
Chez un poussin, la deuxième articulation de l'index est traitée comme une balle.
Le seul cas limite dans lequel l'idée avec le ballon ne fonctionne pas est lorsque le gant pointe vers le bas, comme illustré dans la figure ci-dessous.
Nous pourrions traiter cette affaire de différentes manières. Une solution: ajouter un collisionneur à une partie du gant sur l'avant-bras du collisionneur afin que l'oiseau décolle en cas de collision avec lui. Mais à la fin, ils ont décidé de tout laisser tel quel. C'est plus convivial pour le joueur: vous pouvez vous gratter la cuisse gauche, et l'oiseau en VR ne s'envolera pas. De plus, la plupart des gens ne s'inclinent jamais comme ça pendant un match.
Seulement si pour une raison quelconque ils ne jouent pas, debout sur la tête.
Dans un poirier, toutes les animations seront incorrectes ou cassées.
Suivi de la tête de faucon
Je vais décrire brièvement comment nous y sommes parvenus; la tête (bone_Head) est le premier enfant de l'objet le plus haut dans la hiérarchie squelettique de l'oiseau (bone_Root).
La position (pas la rotation) de Bone_Root suit la position du contrôleur de mouvement et bone_Head contrecarre ce mouvement. Il s'agit essentiellement d'une hiérarchie à deux objets dans laquelle le mélange de positions est utilisé pour contrer le mouvement du parent afin de préserver la position globale de l'enfant. Le reste du corps de l'oiseau utilise un mélange de 27 postures pour la position la plus naturelle de l'oiseau.

Étant donné la taille d'un oiseau adulte, se déplacer de 12 cm le long de tous les axes (un cube 24x24x24) était idéal pour se stabiliser sans trop étirer le cou. La tête se déplacera à la frontière de cette plage et lorsque le bras suiveur cessera de bouger, la nouvelle position sera considérée comme le nouveau centre autour duquel un autre cube avec un côté de 24 cm est créé. D'un point de vue mathématique, la stabilisation de la tête n'est qu'une transformation vectorielle avec de nombreux add-ons différents pour limiter la vitesse, le début et la fin de la transition, déplacez le point de stabilisation lorsqu'il est trop éloigné du corps et que l'oiseau est toujours dans la zone.
Navigation et oiseaux AI
Rapporté par Justin Lalone.
Quand l'oiseau s'ennuieLe plus souvent, le faucon obéit aux ordres d'Ara (le personnage principal du jeu) et la suit. Si vous restez trop longtemps dans une zone pendant que l'oiseau vole en rond ou si vous le laissez partir sans donner d'ordres, alors il commencera à chercher quelque chose à faire dans la zone - généralement chasser ou atterrir sur différents points de soulagement importants. Elle prend également l'initiative lorsqu'elle est assise sur Are et que quelqu'un essaie de l'attraper, et aime montrer Are the next hole lorsqu'elle joue au golf éclair.
Le soleil aveuglant la victimeCertaines espèces de proies, comme les lapins, sont très timides, et quand elles voient un faucon plonger dans les airs, essayant de les attraper, elles courent vers le trou le plus proche. Il est beaucoup plus difficile pour eux de remarquer l'oiseau d'Ara lorsqu'il s'approche du côté ensoleillé, vous pouvez donc simplifier la capture des proies si vous faites attention à la provenance de la lumière et envoyez l'oiseau de cette direction. D'un autre côté, il peut être assez simple et simple de plonger en hauteur, car l'oiseau pourra gagner plus de vitesse avant qu'il ne soit remarqué, donnant à la victime moins de temps pour s'échapper.
Nous allons vite et du côté du soleil pour capturer avec précision les proies.
Navigation en faucon 3DHabituellement, dans l'ensemble standard du moteur de jeu, il n'y a aucun mécanisme pour déplacer de manière fiable un animal volant dans l'espace 3D, ce qui aurait l'air naturel dans ce cas. Nous avons environ trois niveaux de logique de navigation des oiseaux, effectués pour déplacer l'oiseau du point A au point B, ce qui nous permet de ne pas trop compliquer le système et de ne pas rester coincé dans les coins.

Pour une navigation de haut niveau qui vous permet de trouver un itinéraire à travers le monde, nous construisons un graphique de navigation 3D et utilisons l'algorithme A * pour trouver le chemin. Dans cette implémentation, il est tout à fait unique que, pour effectuer toutes les opérations pour trouver le chemin à l'aide de l'algorithme A *, nous utilisons un système de tâches Unity assez nouveau. Il fournit une recherche rapide qui ne charge pas le flux principal, ce qui laisse plus de temps pour l'IA, la physique et d'autres aspects. La plupart du graphique est généré automatiquement, et pour voler à travers des ouvertures étroites, par exemple à travers des fenêtres, les connexions sont placées manuellement car elles sont petites ou nécessitent une approche à angle droit.

La ligne violette est un chemin approximatif pour voler autour de gros rochers au milieu, où le faucon commence à voler et Ara se tient. L'oiseau ne s'efforce pas particulièrement de suivre cette ligne; s'il en était ainsi, elle ferait des virages très étranges et serrés, donc si vous pouvez atteindre la prochaine partie du chemin sans interférence, alors elle y va.
Parfois, en chemin, elle peut rencontrer des objets petits ou en mouvement. Le faucon regarde en avant et survole ou s'approche de ces objets. Le rocher est assez grand pour naviguer avec l'algorithme A * habituel, mais je l'ai fait oublier pour l'instant. Ici, pour contourner le rocher, l'oiseau se tourne vers la gauche - des lignes rouges indiquent où il a regardé pendant les dernières images. Habituellement, j'essaie de ne pas le faire, mais la navigation A * peut faire voler un oiseau sous des arches ou des ponts.
Le dernier niveau de logique du vol des oiseaux est la logique de manœuvre elle-même, le choix de la vitesse à laquelle l'oiseau décide de voler, de la quantité dont il a besoin pour monter ou descendre, comment tourner rapidement, comment il applique l'accélération physique, quelles restrictions sont imposées à ses actions pour arriver au point final. Ces données sont transmises au système d'animation, indiquant à quel point l'oiseau fonctionne activement, dans quel type de posture il doit être, s'il doit faire un virage, etc. L'évasion d'objets est assez fortement liée à ce système, mais toute la navigation A * s'effectue de manière complètement séparée. Il utilise une grande quantité de mathématiques et de logique.
Plumes et rendu
Dit Ben Golus.
Les petites plumes sur le corps ou les plumes de contour de notre oiseau se balancent du vent et réagissent aux mains du joueur en les lissant pour ajouter un sens plus profond de l'interactivité tactile. La façon d'implémenter des plumes dans la démo PAX était un hack, donc j'espère le remplacer avant la sortie du jeu. (Bien sûr, cela signifie que cette solution particulière sera mise en œuvre dans le jeu fini.) En bref, chaque petite plume d'un oiseau est considérée comme plusieurs shaders d'herbe ou de végétation. Pour calculer le bruit simple des vibrations des plumes, plusieurs sinusoïdes se chevauchant sont calculés, ce qui donne aux plumes un aspect naturel. Leurs modifications temporaires sont décalées vers une valeur aléatoire pour chaque plume, stockée dans la couleur du sommet, et le mouvement de l'oscillation varie également en fonction de la couleur du sommet. Cela signifie que la base des plumes, contrairement aux extrémités, ne bouge pas. Cela signifie également que les longues plumes bougent plus que les courtes.

Nous voulons que les plumes ne bougent pas dans des directions aléatoires, comme dans la plupart des shaders d'herbe, vous ne pouvez donc pas utiliser les directions du monde ou de l'espace local. De plus, ils sont sur le maillage avec skinning, ce qui rend la direction encore plus dynamique. Par conséquent, j'ai utilisé une combinaison de sommets normaux et tangents des plumes, de sorte que les plumes se balançaient vers l'intérieur et vers l'extérieur, ainsi que dans des directions différentes par rapport à leur orientation. Le système n'est pas très précis, mais avec de si petits mouvements, les erreurs ne seront presque pas perceptibles.
Pour traiter les interactions avec la main dans la main du joueur, il existe un script qui suit les os et crée une liste de capsules suivant la forme de chaque doigt, et une sphère est utilisée comme une paume. Si la main est à portée, le vertex shader fait le tour de la liste des capsules et trouve la plus petite distance à l'une d'entre elles, puis redimensionne doucement l'oscillation si la capsule la traverse. De plus, les plumes sont pressées contre le corps. Les capsules sont surdimensionnées parce que les contrôles de chevauchement sont doux, c'est-à-dire qu'ils ne commutent pas brusquement, mais avec une transition en douceur. Tout cela est configuré approximativement de sorte que lorsque le doigt visible touche le stylo, il s'arrête complètement et pend.
Voici un test d'une version antérieure de ce système. Vous pouvez voir comment les plumes réagissent à la sphère avant même qu'elle ne la touche, mais les interactions semblent toujours convaincantes.
Pour la version finale du jeu, je veux créer un système avec un shader géométrique ou informatique, qui résoudrait certains des problèmes qui se posent lorsque vous ne touchez qu'un seul sommet des plumes, et élimine le fait que les normales d'éclairage des plumes ne changent pas lorsqu'elles sont touchées.
Information sur la blessure du fauconNous voulions en quelque sorte montrer quand l'oiseau a été blessé, et en même temps ne pas utiliser de bandes de santé ou des mécanismes similaires. Pour montrer que l'oiseau est fatigué ou blessé, des animations sont utilisées, mais nous n'avons toujours pas été en mesure de communiquer clairement aux utilisateurs qu'il avait été endommagé. Pour transmettre clairement son état, nous avons décidé de montrer ses blessures physiques avec du sang et des plumes ébouriffées. Une solution évidente serait de remplacer les matériaux. Cependant, nous voulions montrer une augmentation progressive des dégâts, et pas seulement un "manger / non" dur, et nous ne voulions pas créer beaucoup de cartes différentes. Nous avons également eu un problème avec le fait que la plupart des plumes utilisent les mêmes coordonnées UV, c'est-à-dire que l'oiseau entier sera couvert de taches de sang.
En conséquence, nous sommes arrivés à une solution en deux parties. Le premier était des dégâts de plumes et en désordre. Le canal alpha de chaque stylo est réglé d'une manière spéciale, de sorte que les versions endommagées et non endommagées soient en alpha avec une opacité différente. Pour basculer entre les deux états des plumes, une vérification de la valeur alpha est utilisée (en fait, elle correspond à la couverture alpha). Une opacité de 50% indique une santé normale et une opacité de 25% indique des blessures.
Pour les taches de sang, l'oiseau a les secondes coordonnées UV de la texture du sang, nous n'avons donc pas besoin de réutiliser les coordonnées UV de la texture du stylo. Le sang est mélangé sur la texture de base. En conséquence, nous n'avons besoin que d'un ensemble de textures de base, d'un ensemble de textures de sang, et cela suffit pour obtenir différents effets des blessures sur l'oiseau.
Sons de prédateur
Rapporté par Rob Piersall.
Nous ne voulions pas que l'oiseau diffère (par exemple, futuriste ou magique) de tout autre oiseau dans le monde, mais combinions simplement les différentes caractéristiques de plusieurs prédateurs volants (ajoutez simplement un chapeau). Par conséquent, il était inutile de créer pour elle une voix qui sonnait «avec une qualité cinématographique» - assez pour la faire fonctionner et être crédible.
En d'autres termes, je pouvais «emprunter» les cris de tout prédateur qui transmettrait au joueur des informations sur les différentes humeurs, sentiments et réponses de l'oiseau. J'ai écouté les sons émis par les prédateurs. À ma grande surprise, le prédateur le plus grand et le plus impressionnant - l'aigle - était le pire de tous en termes de son. Il s'est avéré être le premier dans la liste des «mieux ne pas utiliser».
Hawk est toujours un excellent choix. Tout le monde aime le cri d'un faucon. Je pensais que tous les ingénieurs du son ont un enregistrement de cri de faucon et que tous les faucons ont le même son dans tous les films. Mais ce n'est pas le cas. Il s'est avéré que tous ces faucons ont le même son. Presque aucune différence. Ne vous méprenez pas, le son est excellent, donc ... oui, pour notre oiseau nous l'avons aussi utilisé. Mais ce n'est pas tout.
Mieux encore, je n'ai pas eu à me limiter à une espèce particulière de faucon; et il y a beaucoup de ces espèces. Par conséquent, je pouvais choisir tous les sons appropriés émis par n'importe quel faucon qui seraient comme une sorte de déclaration émotionnelle d'un oiseau à mon goût.
Il est très pratique que le spectre des émotions soit limité. Je les appellerai messages d'oiseaux:
- Tout est calme, tout va bien
- J'ai entendu que tu m'appelles
- Attaquer
- Je suis blessé, mais je vole toujours
- Ça fait mal
L'enregistrement du son d'un prédateur agacé est très simple; il suffit d'apparaître sur son territoire avec des appareils d'enregistrement, et il sera déjà agacé. Par conséquent, il existe de nombreux matériaux où les prédateurs semblent en colère et mauvais. Ils conviennent aux sons de «douleur». Les sons du faucon étaient adaptés aux retours en vol et aux rapports d'attaque. Avec les sons "tout est calme", il y a eu des difficultés. Plusieurs types de twitter m'ont été proposés, mais j'ai ensuite dû modifier de nombreux types de messages pour obtenir des cris perçants partiels et courts correspondant à twitter, et ils sont venus pour le jeu.
Le suivi d'un oiseau dans un jeu par le son est une histoire complètement différente pour un autre article.