Commencez par nous donner votre nom, votre titre et dites-nous sur quoi vous avez travaillé dans Star Citizen.
Je m'appelle Will Hain, je suis programmeur du moteur III et j'ai travaillé sur plusieurs choses pour Star Citizen :
- J'ai créé le système de modification du terrain.
- Je travaille sur le système de diffusion des objets de la planète (feuillage, géologie, etc.).
- J'ai travaillé sur beaucoup de petites choses, comme nos algues flottantes et les effets de bord humide.
- J'ai créé notre technologie de rivière procédurale :)
Pourquoi ajouter les rivières maintenant ?
J'ai travaillé sur les rivières par intermittence depuis septembre 2020. Nous en sortons finalement une maintenant parce qu'après quelques périodes de travail dessus (interrompues par le travail sur d'autres choses), elle a finalement atteint sa maturité. Cela signifie qu'en plus de la technologie de base elle-même, un plus grand nombre de modifications ont été apportées pour l'intégrer correctement dans notre moteur de jeu. Cela inclut l'audio, les harvestables, les LODs distants, l'interaction avec le joueur, l'interaction avec les véhicules, et une diffusion plus appropriée ainsi que de nombreuses améliorations de performance et d'optimisation.
Comment mettez-vous en oeuvre un nouvel ajout aux planètes de Star Citizen comme celui-ci ?
Quel est l'objectif de conception de haut niveau pour les rivières et comment les avez-vous réalisées ?
La mise en oeuvre des rivières est en fait quelque chose que j'ai mentionné dans mon interview initiale en février 2020. J'étais très enthousiaste à l'idée de travailler sur ce sujet, car dans mon propre projet de thèse, j'avais mis l'accent sur les rivières sur les planètes procédurales, mais pas au point de répondre aux normes de Star Citizen. D'un point de vue général, l'objectif était de pouvoir placer un point de source à n'importe quel endroit et de tracer le chemin de l'eau à partir de là. J'ai fait une expérience en plaçant un estuaire et en trouvant d'où l'eau aurait dû venir pour se former, mais cela n'a finalement pas fonctionné et j'ai obtenu de meilleurs résultats en faisant le contraire. La conception a été itérative tout au long du projet, mais une conception de haut niveau comprenant quatre classes a été élaborée dès le début : l'outil de placement de rivière, le calculateur de rivière, le gestionnaire de données de rivière et le populateur de rivière, ainsi que divers modificateurs de terrain, classes de stockage et classes d'aide. Toutes ces classes ont un but très spécifique, allant du traitement des entrées des artistes à la sérialisation des données sur les rivières. Parmi les quatre classes principales, seuls le gestionnaire de données fluviales et le populateur de rivière sont utilisés au moment de l'exécution, l'outil de placement et le calculateur restant réservés à l'éditeur.
Comment abordez-vous l'ingénierie d'un ajout aussi complexe à un jeu déjà complexe ?
Lorsque je suis arrivé, la technologie des planètes ne permettait aucune modification locale. En effet, les maillages haute résolution de la taille d'une planète ne peuvent pas être stockés de manière pratique. Nous devons donc générer les données de hauteur et de maillage de la planète à la volée à partir d'une collection de 16 cartes de hauteur, d'une carte de distribution et de quelques décalages aléatoires. Cela signifie que nous ne stockons nulle part des données centrées sur la position, tout est global et combiné pour créer la même planète sur toutes les machines. Nous voulions introduire une solution à ce problème sous la forme d'un système de modification du terrain. Après avoir terminé ce travail, j'ai pu commencer à travailler sur les rivières, qui dépendent fondamentalement de la possibilité de déformer le terrain.
En termes d'approche, une approche incrémentale et itérative est la meilleure solution : Tout d'abord, j'ai travaillé sur les chemins d'érosion et un outil de placement de base sans modifier le terrain du tout. Ensuite, j'ai créé un modificateur simplifié de terrain pour former une cuvette et je les ai placées le long du chemin de la rivière. À partir de là, de très nombreuses itérations ont produit ce que nous voyons aujourd'hui. Lorsque l'on travaille sur un projet déjà complexe, il est important de garder à l'esprit le moteur dans son ensemble et la meilleure façon d'utiliser les technologies existantes. Par exemple, le BiomeBuilder est responsable de la distribution des ressources et gère déjà la création et la suppression complexes d'objets lorsque les bulles/joueurs se rapprochent, ou se déplacent. Il était donc logique d'utiliser BiomeBuilder pour faire de même pour les maillages d'eau de la rivière plutôt que de réinventer la roue pour détecter quand les maillages de la rivière doivent être créés/détruits. Il y a beaucoup d'exemples de ce genre dans la technologie des rivières.
D'autres disciplines ont-elles été impliquées dans la réalisation des rivières ?
Est-ce que des éléments artistiques, audio, etc. supplémentaires ont dû être générés pour cette mise à jour ?
L'une des plus grosses erreurs que j'ai commises en produisant la technologie des rivières est de ne pas avoir impliqué d'autres technologies plus tôt, les gens étaient au courant, mais il n'y a pas eu d'effort coordonné pour rendre les autres technologies compatibles avec elle jusqu'à récemment. D'autres disciplines ont été impliquées (pour faire l'implémentation audio, par exemple), mais comme le travail a été créé si tard dans le calendrier de développement, j'ai été personnellement responsable de faire fonctionner le grav-lev au-dessus de l'eau, de m'assurer que les vaisseaux explosent correctement lorsqu'ils passent dans une rivière ou un bassin, de m'assurer que la technologie de l'acteur sait qu'il est sous l'eau, et que le remplissage des réservoirs de respiration/o2 peut se faire de manière appropriée. Malgré tout, j'espère que les équipes d'acteurs et de la VFX pourront trouver le temps de mettre en oeuvre un travail plus spécifique pour les rivières, car cela fera une énorme différence une fois que nous aurons des animations d'éclaboussures, de brume et de flottement/nage.
Nous comprenons les qualités d'un vaisseau spatial à ce stade, comme les systèmes qui doivent fonctionner ensemble pour qu'un vaisseau donné fonctionne... mais quels sont les facteurs déterminants d'une rivière ? Faut-il prendre en compte les courants, les sédiments, le volume d'eau ?
Lorsque l'on calcule le trajet d'une rivière, les éléments les plus importants sont le volume, la vitesse et la direction. Le système vise à trouver le chemin de l'eau sur le paysage existant plutôt que l'érosion hydraulique complète, qui créerait le paysage. Nos tuiles de cartes de hauteur ont déjà subi une érosion complète, nous voulons donc éviter de défaire ce travail avec les rivières. En fin de compte, la modification du terrain ne sera jamais aussi belle que les cartes de hauteur faites à la main, nous voulons donc les préserver autant que possible. La plupart du temps, le système d'écoulement de l'eau finit par trouver les chemins de l'eau qui ont émergé de la simulation dans les cartes de hauteur et s'occupe ensuite de la façon dont l'eau traverse d'une carte de hauteur à une autre sur la surface réelle de la planète. Bien qu'il n'y ait pas de données intégrées dans les cartes de hauteur sur les types de sédiments, etc., c'est quelque chose que j'aimerais que les rivières soient affectées à l'avenir. Différents types de sédiments et de roches peuvent affecter le rapport entre la profondeur, la largeur et la vitesse d'une rivière, ce qui créerait plus de variation avec les chutes d'eau et les gorges. Pour l'essentiel, le rapport profondeur:largeur:vitesse est fixe dans l'implémentation actuelle, mais il n'y a aucune raison pour que cela ne puisse pas changer à l'avenir et c'est certainement quelque chose que j'aimerais étudier.
Combien de prototypes ont été réalisés pour que le nouveau système fonctionne ?
Avez-vous emprunté des voies qui n'ont pas fonctionné comme prévu ?
En termes de prototypage, dans le développement agile, nous essayons toujours des choses pour voir si elles fonctionnent. C'est l'une de mes méthodes de travail préférées : le prototypage et les tests rapides. En ce qui concerne les idées testées qui n'ont pas été retenues pour cette version, nous avons envisagé d'écrire directement dans nos données climatiques pour la rivière, de changer le type de sol dans le shader de la planète, d'utiliser beaucoup plus les décalcomanies pour colorer les bords de la rivière, et de faire remonter l'érosion à partir d'une fin souhaitée au lieu de la faire descendre. Certains de ces éléments pourront être revus à l'avenir, d'autres ne le seront peut-être jamais. La plupart des fonctionnalités finies ont commencé par une exploration de "ce qui fonctionne" et "ce qui donne de bons résultats", etc. Par exemple, les On-Demand-Spawn-Points ont commencé par un après-midi à essayer des méthodes pour augmenter la densité autour de la rivière. Ils ont ensuite été réécrits pour devenir un ajout permanent à la technologie de la rivière.
Y a-t-il quelque chose que vous avez dû supprimer et que vous auriez voulu inclure ?
Je voulais vraiment intégrer les zones de physique et le flux dans l'Alpha 3.17. Cela signifierait que les choses pourraient flotter et couler dans la rivière. J'espère que cela fera partie de l'Alpha 3.18, car cela va vraiment pimenter les possibilités de jeu autour de la rivière. Ce n'est pas de mon ressort, mais j'aimerais aussi que l'on puisse nager ou patauger. Cependant, le travail actuel de l'équipe des acteurs est beaucoup plus important, donc j'attends avec impatience le moment où ils s'y mettront.
Y a-t-il quelque chose dont vous êtes particulièrement fier dans le système fini ?
Je suis fier de tout mon travail sur le système actuel, mais si je devais choisir quelque chose dont je suis le plus satisfait, ce serait la construction du maillage de l'eau. Il s'agit d'un système simple en fin de compte, mais je suis très heureux de la façon dont il est mis en oeuvre et des résultats qu'il donne. Je suis également très satisfait de mon travail sur BiomeBuilder, qui contribue à l'aspect général et aux performances des rivières. Enfin, je dirais que les mathématiques les plus complexes sont celles du modificateur de terrain du spline de la rivière, il utilise la distance perpendiculaire à une courbe de Bézier pour alimenter une équation quadratique paramétrique afin de former le creux de la rivière. C'est probablement la partie sur laquelle j'ai le plus itéré.
Avez-vous l'intention de continuer à travailler sur ce projet ?
Ce n'est en aucun cas la forme finale des rivières. En plus de l'amélioration de l'outil de placement pour permettre la distribution automatique des rivières sur les planètes, je veux plus de fonctionnalités telles que des enchaînements de lacs et de bassins, la prise en compte des sédiments, les chutes d'eau, les bifurcations et les jonctions, les effets visuels, un son plus complexe, un meilleur shader d'eau, le support de différents fluides, etc. La liste peut s'allonger encore et encore !
Êtes-vous autorisé à dire sur quoi vous travaillez ensuite ?
Pouvons-nous nous attendre à d'autres caractéristiques planétaires aussi détaillées ?
Mes prochaines tâches sont principalement centrées sur l'expansion de notre technologie de rivière, mais dans le pipeline il y a toutes sortes de choses passionnantes. J'ai parlé du nouveau shader de feuillage dans ma présentation à la CitCon, il est toujours en cours et aidera à convertir nos planètes pour qu'elles soient entièrement saisonnières. Nous voulons aussi améliorer la précision physique de la diffusion sur nos planètes pour créer des biomes et des lieux plus variés.
Avez-vous des messages pour les joueurs qui s'apprêtent à explorer votre travail ? Au moment où nous écrivons ces lignes, nous apprenons que les Evocati font déjà circuler les coordonnées pour explorer une rivière !
Aux personnes qui vont voir les rivières pour la première fois, j'espère que vous apprécierez la recherche, ainsi que la destination ! N'oubliez pas de garder votre casque si vous faites de la plongée, et le moyen le plus rapide d'aller d'un bout à l'autre de la rivière est le grav-lev. J'aimerais personnellement voir le temps le plus rapide pour parcourir les 12 km de la rivière !