Le livre des morts : Actifs photogrammétriques, arbres, VFX

Dans cette série de blogs, nous allons passer en revue tous les aspects de la création de notre démo "Livre des morts". Aujourd'hui, nous nous concentrons sur les actifs photogrammétriques, les arbres et les effets visuels. Ceci est le quatrième blog de la série, jetez un coup d'œil aux deux derniers blogs qui traitent de la création des personnages et de l'art conceptuel du "Livre des Morts".
Bonjour, je m'appelle Zdravko Pavlov et je suis un artiste CG et VFX avec une expérience en VFX, composition vidéo, montage, conception graphique. Je travaille avec l'équipe démo d'Unity depuis 2014 et j'ai contribué à diverses particules, dynamiques de corps rigides et simulations de tissu sur les démos "Viking village", "The Blacksmith" et "Adam".
La démo "Book Of The Dead" était un peu différente. Un territoire complètement nouveau pour moi, puisque mon rôle pour ce projet serait de créer divers actifs environnementaux en utilisant une approche photogrammétrique. La photographie en extérieur est mon hobby, j'étais donc plus qu'heureux de m'acquitter d'une telle tâche. Créer des arbres ? Je veux dire, ce n'est pas si difficile, n'est-ce pas ? Dans le billet suivant, j'essaierai de décrire tout ce que j'ai appris au cours de la phase de préproduction et de développement du projet.
Heureusement, à ce stade, l'Internet regorge d'informations précieuses sur ce processus, et c'est donc là que j'ai commencé à apprendre. Ce que la plupart des articles vous diront, c'est qu'il vous faut un appareil photo DSLR avec un objectif de 50 mm. Je n'avais aucun de ces appareils à ma disposition à ce moment-là, et j'ai donc décidé de faire mes premiers tests avec mon Sony a7II 24MP sans miroir et un objectif zoom 16mm-35mm à la place. Et permettez-moi de vous dire tout de suite que cela fonctionne très bien ! L'objectif plus large donne plus de distorsion, mais vous pouvez toujours corriger cela dans Lightroom par exemple, mais en fait, il vaut mieux ne pas le faire ! Le logiciel de photogrammétrie le gère avec élégance. Les objectifs principaux sont plus rigides et, en théorie, devraient donner une image plus nette. Ils sont vraiment excellents si vous numérisez dans un environnement de studio contrôlé et je les recommande vivement dans de tels scénarios. En revanche, sur le terrain, le fait de pouvoir cadrer correctement l'objet souhaité à l'aide d'un zoom de qualité vous donnera un avantage certain.






J'ai essayé la plupart des logiciels de photogrammétrie les plus populaires et certains d'entre eux ont très bien fonctionné. J'ai choisi RealityCapture en raison de ses performances nettement supérieures et de sa capacité à traiter un grand nombre de photos sans manquer de mémoire vive. La quantité de détails qu'il parvient à reconstituer à partir des photos est stupéfiante ! J'ai réussi à obtenir des modèles, parfois jusqu'à 185 millions de triangles et à exporter avec succès la géométrie au format PLY.


C'est bien sûr plus qu'il n'en faut, mais c'est aussi un peu extrême. La plupart de mes reconstructions ont abouti à environ 50 à 90 millions de triangles. Au début, j'utilisais le GF980TI, mais je suis passé au GF1080, ce qui m'a permis d'améliorer légèrement les performances.
À un moment donné, j'ai également remplacé mon appareil photo par un Sony aRII de 42MP avec un objectif Planar T* FE 50mm f/1.4 ZA. Cependant, le doublement de la résolution et l'utilisation de l'objectif principal super net ne m'ont pas donné les résultats "WOW" que j'attendais. D'une part, l'objectif principal plus long (et plus étroit) signifie que vous devez reculer de quelques pas pour obtenir le chevauchement d'image dont vous avez besoin pour une reconstruction réussie. Ce n'est pas toujours possible quand on est au milieu de la forêt, avec tous les autres arbres, les arbustes et tout le reste. Cela signifie également que vous devez gérer, stocker et traiter deux fois plus de gigaoctets de données d'image. Mais cela ne conduit pas nécessairement à des scans de plus haute définition. C'est en ayant plus d'images que l'on y arrive et en ayant 24MP, c'est plus facile à gérer. Cela peut sembler évident, mais je n'y ai pas pensé avant de l'avoir expérimenté.

Comme je l'ai mentionné, j'ai utilisé un format PLY pour exporter la géométrie incroyablement dense. Je préfère cela aux FBX, même si l'exportateur PLY de Reality Capture n'avait pas de contrôle de l'échelle et de l'orientation des axes et que, contrairement aux FBX, les PLY n'étaient pas à l'échelle et tournaient. J'ai choisi de m'en occuper parce que j'obtenais des erreurs lorsque je créais des textures en utilisant le FBX. De même, l'exportation FBX Exporter binaire a été implémentée plus tard.
Peu de logiciels peuvent gérer une telle quantité de polygones, j'ai donc stocké le fichier et utilisé les fonctions de décimation de RC pour faire une version low poly du même modèle. En général, il s'agit d'environ 1 million de triangles. Celui-ci peut être ouvert dans ZBrush, MeshLab ou tout autre logiciel de modélisation, où il peut être retopologisé et déballé. En fonction du modèle, j'ai utilisé différentes techniques de retopologie. Souvent ZRemesher et parfois à la main.



Ensuite, j'ai utilisé xNormal pour créer des textures. xNormal ne semble pas gêné par les centaines de millions de triangles et les gère facilement. J'ai cuit la texture diffuse en utilisant les informations de couleur des vertex. La densité des vertex dans le highpoly était plus que suffisante pour produire une texture propre et nette sans aucune interpolation entre les vertices. Je n'ai jamais utilisé les fonctions intégrées de déballage et de texturation de RC.
Cela dit, si pour une raison quelconque votre nuage dense n'est pas assez dense ou s'il manque des zones (comme dans l'image ci-dessous), la projection d'une texture à partir de vos photos peut apporter des détails supplémentaires à ces zones.

La plupart des tutoriels de photogrammétrie vous apprendront qu'il est préférable d'éviter les ombres et les éclairages directs et durs lors de la numérisation d'un objet. S'il s'agit d'un petit rocher, vous pouvez l'amener à l'ombre ou même en studio et utiliser des boîtes à lumière et des plateaux tournants. On ne peut pas vraiment faire cela avec des arbres, alors j'ai surveillé les prévisions et j'ai espéré un temps nuageux. Cependant, même par temps couvert, il y avait des ombres et une occlusion ambiante. Ce problème est résolu grâce à l 'outil DeLighting d'Unity. Il suffit d'une carte normale, d'une carte normale courbée et d'un AO cuit. Il conserve les valeurs diffuses intactes tout en supprimant les ombres.

Les actifs obtenus ont ensuite été importés dans Unity pour tester l'éclairage dynamique et les shaders.



Parfois, il n'est pas possible de capturer toutes les parties de votre modèle. Soit il y a un obstacle et vous ne pouvez pas prendre tous les angles. D'autres fois, vous êtes pressé ou votre batterie est en train de mourir et vous manquez quelque chose dont vous ne vous rendez compte que lorsque vous rentrez chez vous et que vous commencez à traiter les données. J'ai fait beaucoup d'erreurs de ce genre, mais j'ai pu récupérer une partie de mon travail en utilisant Substance Painter pour cloner les tampons et essayer de réparer les données manquantes.
Pendant la majeure partie de la durée de la production du Livre des morts, l'équipe Demo n'avait pas d'artiste en environnement dans son équipe et nous cherchions à en trouver un. Une partie du travail a été confiée à un artiste externe spécialisé dans l'environnement, Tihomir Nyagolov, qui a effectué les premières explorations et mis en boîte blanche l'environnement, mais la plus grande partie du travail a incombé au directeur créatif et artistique, Veselin Efremov, et à moi-même. Chacun d'entre nous se rendait dans les forêts avoisinantes pour capturer des données photogrammétriques, et le travail s'est naturellement transformé en production des éléments finaux du jeu qui étaient nécessaires. Je n'ai pas d'expérience dans l'art de l'environnement, et je n'avais aucune expérience en matière d'optimisation des jeux, de LOD, etc. À ce moment-là, Tihomir avait déjà créé quelques arbres fictifs avec l'aide de GrowFx, et j'ai donc repris le flambeau en apprenant au fur et à mesure.
GrowFX s'est avéré être un outil vraiment puissant et polyvalent pour créer toutes sortes de végétation. Il interagit avec les autres objets de votre scène, ce qui vous permet d'obtenir toutes sortes de résultats uniques et naturels. Il n'est pas exactement conçu pour la création d'éléments de jeu, mais il est suffisamment contrôlable et peut être utilisé pour cette tâche. Il s'agit d'un plugin pour 3DS Max. J'utilise 3DS Max depuis plus de 20 ans et je m'y sens vraiment chez moi. Malheureusement, GrowFX s'appuie sur certains composants dépassés de 3DS Max, comme les boîtes de dialogue d'édition des courbes, qui ne sont pas très pratiques, mais c'était tout de même un bon outil pour la tâche à accomplir, alors j'ai dû m'en accommoder.

La forêt du Livre des morts devait être principalement composée de conifères. Il y a de belles forêts et de beaux parcs près de chez moi, alors je suis parti à la "chasse" et j'en ai scanné quelques-uns. J'ai ensuite procédé à l'assemblage de mes créations GrowFX sur les modèles scannés. Le tronc d'arbre final a été composé à partir d'une géométrie scannée et d'une texture unique pour la partie inférieure, cousue à un tronc généré de manière procédurale avec une texture à carreler pour le reste, jusqu'au sommet.
Une petite partie du fond a été clonée sur le haut de la texture pour la rendre tuilable.
C'est une chose de faire de la photogrammétrie sur des rochers et des troncs d'arbre, mais scanner des aiguilles de pin est une toute autre affaire. C'est là que Quixel est intervenu et nous a fourni ses atlas magnifiquement numérisés. Ils ont collaboré avec l'équipe de démo et ont réalisé de nombreux petits éléments comme de l'herbe, des arbustes, des débris, etc. spécialement créés pour "Book Of The Dead".
Comme je l'ai mentionné au début, j'ai de l'expérience dans les productions de synthèse et j'ai déjà créé de grandes forêts en utilisant Multiscatter ou Forest Pack Pro et en effectuant le rendu dans V-ray. Pour de telles tâches, vous pouvez utiliser les atlas Quixel Megascans tels quels, mais pour un projet en temps réel comme le Livre des Morts, nous avons dû procéder à une certaine optimisation. Il s'agissait de construire des éléments plus grands (branches, cimes d'arbres, etc.) et de les arranger dans de nouvelles textures, de transférer les données scannées initiales pour les cartes normales, le déplacement, la transmission, etc.


Les données normales existantes de Megascans ont été légèrement modifiées pour donner une fausse impression de volume global.


J'ai utilisé différentes techniques d'édition des normales telles que Normal Thief et d'autres scripts 3DSMax personnalisés pour fusionner les branches avec le tronc.
Modification des normales des vertex pour qu'ils se fondent dans le tronc
Cette approche m'a permis de produire différents types de pins.


Nous voulions que la forêt soit "vivante" et le vent était un élément crucial pour nous. Les arbres ont été mis en place pour notre solution d'animation du vent basée sur le vertex shader par notre artiste de l'environnement Julien Heijmans.
Il existe de nombreuses façons de créer un champ vectoriel et j'ai étudié plusieurs options différentes. Connaissant bien le solveur de fluide de Chaosgroup, PhoenixFD, j'ai décidé de voir quel type de données utilisables je pouvais en tirer et de les intégrer à Unity. J'ai pu exporter la géométrie de la scène, la transférer dans 3DS Max sous la forme d'un FBX et y faire circuler un fluide qui tourbillonne autour de la végétation et crée l'effet de vent turbulent. Les plus grands arbres faisaient écran à la végétation plus petite et l'effet était moins marqué.


J'ai mis en boucle la séquence simulée à l'aide des commandes de lecture intégrées de PhoenixFD.
Les informations vectorielles ont ensuite été lues par un PhoenixFD Texmap, normalisées et insérées comme texture diffuse sur l'isosurface créée de manière procédurale.


La séquence d'images rendues a ensuite été réimportée dans Unity, où l'atlas de textures final a été assemblé. J'avais l'habitude de le faire dans After Effects, mais Unity dispose désormais d'un outil très pratique, le séquenceur d'images, qui peut le faire presque automatiquement. Il s'agit de l'un des nouveaux outils VFX développés par l'équipe GFX d'Unity à Paris.

L'atlas de textures créé a été placé dans la scène. J'ai créé une simple boîte pour définir les limites de ma simulation et je l'ai utilisée comme référence de position.
Pour être clair, il s'agissait d'une expérience qui nous a permis de pousser les visuels de certains plans dans le teaser cinématographique que nous avons montré. C'est une méthode que je peux recommander si vous utilisez Unity pour la production de films. Il se branche sur la solution principale d'animation du vent basée sur les nuanceurs de sommets procéduraux, qui a été développée pour le projet par notre chef technique Torbjorn Laedre et a été utilisée dans la plupart des scènes du teaser, ainsi que pour la version console du projet que nous avons montrée à la GDC.
Dans un prochain article de blog, Julien et Torbjorn expliqueront plus en détail comment nous avons géré le vent et la solution finale que nous avons adoptée.

J'ai commencé à bloquer certaines idées sur la Ruche dès le début.


Après la conception initiale, j'ai commencé à construire divers éléments prêts pour le jeu afin de construire les actifs Unity.



Pour les personnes qui ont des visages, j'ai fait un peu d'exploration pour les variations du corps. Là encore, j'ai utilisé PhoenixFD de Chaosgroup et j'ai effectué une simulation de fumée fluide. J'ai ensuite découpé la forme de la vis et créé une isosurface basée sur la température du fluide.
Quelques explorations de formes réalisées avec PhoenixFD
Cette méthode nous a permis de prévisualiser rapidement différentes formes et a été utilisée comme référence générale. Le modèle de personnage final a été créé par Plamen (Paco) Tamnev et vous pouvez tout lire dans son article de blog incroyablement détaillé.
Pour obtenir la sève dégoulinante sur le visage de l'idiot, j'ai de nouveau utilisé PhoenixFD. J'ai commencé par faire une petite démonstration de concept montrant les capacités et ce que l'on peut obtenir avec un liquide dense et visqueux.

J'étais assez satisfait du résultat global et de la fluidité du mouvement, et j'ai donc procédé à la mise en place du modèle réel. L'objectif était d'éviter que la simulation ne forme trop de morceaux séparés et de gouttelettes.

Cela m'a permis de récupérer une seule image de la séquence géométrique générée, de la retopologiser, de créer des UV et d'utiliser WRAP3 pour la projeter sur le reste des formes de la séquence. En conséquence, j'ai une série de formes de mélange qui utilisent la même topologie.

J'ai également essayé d'effectuer une simulation de sève sur certains troncs d'arbres.



Nous ne les avons pas utilisés dans le projet final. Cependant, je trouve que c'est un bon moyen d'ajouter des détails aux modèles scannés.
---
Restez à l'écoute pour le prochain billet de la série. Nous allons approfondir l'art de l'environnement créé pour Book of the Dead avec Julien Heijmans.
Rendez-vous à Unite Berlin le 19 juin pour découvrir l'environnement Book of the Dead sur une console et assister à la présentation de Julien Heijmans sur l'art de l'environnement dans la démo. Voir le programme complet ici.