Que recherchez-vous ?
Industry

Livre des morts : Quixel, le vent, la création de scènes et les astuces d'optimisation du contenu

JULIEN HEIJMANS / UNITY TECHNOLOGIESAnonymous
Jun 29, 2018|18 Min
Livre des morts : Quixel, le vent, la création de scènes et les astuces d'optimisation du contenu
Cette page a été traduite automatiquement pour faciliter votre expérience. Nous ne pouvons pas garantir l'exactitude ou la fiabilité du contenu traduit. Si vous avez des doutes quant à la qualité de cette traduction, reportez-vous à la version anglaise de la page web.

Dans cette série de blogs, nous passerons en revue tous les aspects de la création de notre démo Book of the Dead. Aujourd'hui, nous allons nous concentrer sur notre partenariat avec Quixel, notre système éolien, la création de scènes et les astuces d'optimisation de contenu. Il s'agit du quatrième blog de notre série « Making Of ». Au cas où vous l'auriez manqué, jetez un œil aux trois derniers articles qui passent en revue le processus créatif des personnages, des concepts artistiques et des ressources de photogrammétrie, des arbres et des effets visuels dans Book of the Dead.

Salut! Je m'appelle Julien Heijmans, je travaille en tant qu'artiste environnement au sein de l'équipe Unity Demo. Je n'ai rejoint Unity que l'année dernière, mais j'ai environ 7 ans d'expérience dans l'industrie du jeu vidéo. Cet article de blog vous donnera un aperçu de la production de Book of the Dead de mon point de vue, du point de vue d'un créateur de contenu et d'un artiste environnemental.

Je suis assez nouveau dans le travail des ressources de photogrammétrie, mais je me souviens clairement du jour où Quixel a annoncé la création de Megascans il y a plusieurs années. Depuis lors, j’ai hâte d’avoir l’opportunité de travailler avec leurs ressources. Rejoindre l'équipe de démonstration d'Unity a rendu cela possible, car j'ai commencé à travailler sur Le Livre des Morts.

Si vous souhaitez commencer à expérimenter les outils décrits dans ce blog, vous pouvez télécharger le Livre des Morts : Projet environnemental maintenant.

Télécharger le projet

Partenariat avec Quixel
Quixel、Megascans、フォトグラメトリ、環境アート

Lorsque j'ai rejoint le projet, j'ai réalisé que nous n'utilisions pas seulement des ressources de la bibliothèque Megascans de Quixel, mais Unity et Quixel s'associaient pour la création de ce projet.

Au cours du processus de production, l'équipe de démonstration a créé une liste des ressources dont elle aurait besoin et Quixel capturait de nouvelles ressources s'il manquait une correspondance appropriée dans sa bibliothèque existante. Beaucoup de ces ressources étaient de la végétation, comme de l’herbe, des plantes et des buissons, qui nécessitent un équipement et une configuration appropriés pour être numérisés.

Quixel ne nous a pas seulement fourni des feuilles de texture pour ces ressources, mais ils ont également créé la géométrie, avec leurs LOD et leur configuration de couleur de vertex pour prendre en charge notre shader de vent.

Titre

Entre le Livre des Morts publié : Projet d'environnement, et les assets inédits utilisés dans le teaser, nous avons reçu plus de 50 assets de haute qualité et d'une complexité qui nous aurait vu lutter pour respecter nos délais avec les quelques artistes que nous avons dans l'équipe.

Au cours de la production, nous avons pu intégrer les ressources assez rapidement dans le moteur, et elles avaient une belle apparence. Nous modifions souvent les textures (principalement l'albédo, la luminosité/les niveaux/la courbe et souvent les couleurs pour les unifier sur toute la scène), les remballions correctement, modifiions un peu les LOD au niveau souhaité, attribuions les textures à un nouveau matériau HDRP Lit, et nous en avions terminé.

Heureusement, Quixel a récemment publié un outil, Megascans Bridge, qui effectuerait la plupart du travail d'importation que nous effectuions manuellement. Cela permet de gagner du temps lors du reconditionnement des textures pour HDRP et autres.

Titre

Pour ceux qui sont intéressés par plus d'assets Megascans, voici un rappel qu'il existe plusieurs collections Megascans sur l' Unity Asset Store. Tous les actifs sont prêts à être importés dans une configuration de projet avec le pipeline de rendu haute définition ou le pipeline de rendu léger.

Vent
Image

La création d'un système éolien pour les actifs végétaux et l'ensemble de son pipeline est toujours un processus délicat. Il existe de nombreux types différents de ressources végétales qui doivent être animées de différentes manières ; deux arbres différents peuvent nécessiter une configuration complètement différente et une complexité de shader différente.

Pour cette raison, notre équipe a décidé de créer une animation procédurale personnalisée basée sur un vertex shader pour l'effet du vent sur nos ressources végétales. Nous l'avons conçu sur mesure pour fonctionner avec notre projet spécifique et les arbres ou arbustes qu'il contient. Nous permettant d'avoir un contrôle total sur celui-ci.

Torbjorn Laedre, notre responsable technique, a construit un shader qui prendrait en charge plusieurs types de végétation différents, en utilisant 3 techniques différentes :

  • Pivot Hiérarchie, pour nos arbres et certaines plantes avec une structure/hiérarchie très définie
  • Pivot simple, pour l'herbe, les petites plantes et pour les grands buissons à structure/hiérarchie indéfinie
  • Animation procédurale, pour les actifs végétaux où les pivots ne peuvent pas être prédits.
Image

Les arbres étaient les ressources les plus complexes à préparer, côté contenu, ils utilisent le type d'animation Hierarchy Pivot et ils s'appuient sur 3 niveaux de hiérarchie distincts :

  • Tronc qui repose sur le sol.
  • Branches de niveau A, qui sont connectées au tronc.
  • Branches de niveau B, qui sont connectées aux branches de niveau A.

Le shader doit connaître le niveau de hiérarchie et le pivot de chaque sommet de l'arbre. J'ai d'abord dû créer la géométrie de l'arbre lui-même, puis attribuer le niveau de hiérarchie à chaque polygone de l'arbre en utilisant le canal de couleur de sommet vert.

Image
  • Une valeur de 0 pour le canal vert de la couleur du sommet signifierait qu'il s'agit du tronc
  • Une valeur entre 0 et 1 serait le niveau des branches A
  • Une valeur de 1 correspondrait au niveau B des branches

J'ai fait cela en utilisant Autodesk Maya, avec quelques petits scripts, j'ai pu configurer tous les LOD d'un actif en 10 à 15 minutes.

En plus de cela, nous avons également utilisé ce que nous avons appelé un « masque Flutter ». Ce sont des masques de texture qui aideraient à déterminer où dans la géométrie se trouve le pivot de la branche. Nous l'avons utilisé pour les branches qui utilisaient des textures alpha dures pour la géométrie. Voici une illustration de ce masque.

Titre

Avec toutes ces informations préparées, je pourrais utiliser le script C# qui entrerait mon préfabriqué d'arbre et générerait un nouveau préfabriqué avec les informations de pivot de chaque sommet intégrées. Après avoir ajouté un objet WindControl à ma scène, je peux importer mon arbre dans la scène et commencer à jouer avec les propriétés du matériau.

Vous pouvez voir que chaque niveau de hiérarchie possède une propriété de plage (essentiellement la longueur du tronc ou des branches) et une propriété d'élasticité.

Il existe également quelques propriétés permettant de configurer l'animation du flottement du vent. Ils ajoutent un peu de bruit procédural aux positions des sommets, pour imiter la vibration des branches lorsque le vent souffle dessus.

Enfin et surtout, nous avons dû faire en sorte que les effets sonores du vent influencent l'animation du vent. Le volume du son détermine la force du vent de l'animation. C'est vraiment surprenant de voir à quel point une idée simple peut apporter quelque chose au projet. Si vous ne l’avez pas déjà fait, vous devriez ouvrir le projet et vous promener. Vous remarquerez que les arbres et toute l’herbe autour tremblent lorsque vous entendrez de grandes rafales de vent frapper votre environnement.

Mise en page

Lorsque je cherchais le niveau de détail et la densité d'un projet comme Book of the Dead, il était important pour moi de réfléchir à la manière dont j'allais structurer le niveau, afin d'éviter des problèmes de performances plus tard dans la production. L’une des choses auxquelles j’ai essayé de faire attention était de limiter les longues distances de vision dans la scène. Vous pouvez le faire en plaçant des « couloirs » et des « goulots d’étranglement » dans la disposition de la scène.

Image

Ces dispositions, ainsi que les ressources correctement configurées comme indicateurs « Occluder static » et « Occludee static », rendront l'élimination des occlusions d'Unity plus efficace.

Cette vidéo montre la visualisation de l'élimination de l'occlusion, et vous pouvez facilement deviner où la caméra regarde depuis la vue de dessus. Vers la fin de la vidéo, j'active/désactive l'élimination de l'occlusion et je vois quels objets sont éliminés par l'élimination de l'occlusion.

Vous pourrez également voir que certains objets ne sont pas éliminés, ce sont principalement des arbres très hauts, certains de plus de 25 mètres de haut, qui ont une très grande zone de délimitation et sont donc difficiles à éliminer derrière les falaises.

Utilisation des terrains hérités Unity

Lorsque la bande-annonce a été publiée, nous avons vu des commentaires indiquant qu'il n'y avait aucun moyen d'utiliser l'ancien système de terrain. Mais c'est exactement ce que nous utilisons, et nous avons modifié le shader Layered Lit du pipeline de rendu HD pour le prendre en charge.

Le shader en couches HDRP permet de mélanger des couches à l'aide de leur texture de carte de hauteur, de sorte que le résultat est meilleur que le mélange linéaire fourni avec l'ancien shader de terrain.

Image

Il s’agit bien sûr d’une solution temporaire, qui n’est pas correctement intégrée à l’interface utilisateur. Pour modifier le terrain, vous devrez modifier le matériau qui lui est appliqué, au lieu d'utiliser le bouton « Modifier la texture » dans l'onglet Texture de peinture de l'objet de terrain.

Image
Image

Si vous souhaitez créer un nouveau terrain et lui appliquer différentes textures, vous devrez dupliquer ce matériau TerrainLayeredLit et l'attribuer à votre nouveau terrain. Vous devrez également créer ces 4 ensembles de textures dans l’onglet Texture de peinture. Les textures qui y sont attribuées ne seront pas utilisées pour le rendu du terrain, mais elles vous permettront de peindre les différentes couches de votre terrain. C'est également là que vous pouvez modifier les propriétés de mosaïque des différentes couches.

De plus, pour pouvoir utiliser pleinement la fonctionnalité LODGroup, tous les actifs placés sur le terrain sont configurés comme des arbres et non comme des actifs détaillés.

Titre

Mais en réalité, ce projet comporte une très grande quantité d'éléments dispersés sur le sol : de l'herbe, des buissons, des plans, des brindilles de bois, des rochers, etc. Avec tout cela, le terrain peut être assez simple, vous pouvez voir ci-dessous que dans cette photo particulière, le terrain n'est qu'un simple matériau de carrelage.

Ressources détaillées dispersées

En vous promenant dans le niveau, vous remarquerez par endroits une très grande quantité de petites brindilles et de pommes de pin éparpillées sur le sol.

Titre

Ce n'est pas vraiment évident quand on se promène simplement dans le niveau, mais cela apporte vraiment le niveau de détail de la scène quand on commence à regarder le sol. Il y a parfois des centaines de petites brindilles sur le sol, entre les rochers et les troncs morts, comme si elles finiraient par se reposer si elles tombaient des arbres. Les placer à la main serait tout simplement impossible, c'est pour cette raison que Torbjorn Laedre a créé un outil pour nous aider à disperser ces petits détails dans le niveau.

Les brindilles sont de simples plans découpés avec un matériau alpha. Nous leur avons ajouté des collisionneurs de capsules physiques.

Titre

Le script va d'abord générer la quantité souhaitée de ces objets dispersés autour d'une position de transformation, puis simuler la physique pour qu'ils tombent au sol, entrant en collision avec le terrain et tous les autres éléments (roches, troncs morts, etc.). Ensuite, en appuyant sur le bouton « Bake », ils seront dépouillés de leurs colliders, fusionnés en un seul objet et attribués à un LODGroup avec une distance spécifique à laquelle ils doivent être supprimés.

Ce script est utilisé par des objets appelés « UberTreeSpawner » dans la scène, et vous êtes libre de l'utiliser comme vous le souhaitez.

Remarque complémentaire à propos de cet outil : Pour que les brindilles et autres objets dispersés tombent correctement sur le sol et sur d'autres éléments, vous devrez disposer de collisionneurs de maillage à très haute densité sur tous les éléments de la scène. En même temps, vous ne voulez pas que ces collisionneurs lourds soient utilisés lorsque le jeu est en cours d'exécution. Pour cette raison, la plupart des ressources de la scène ont deux collisionneurs différents : Une lumière à utiliser en temps réel en mode jeu par le PlayerController avec le calque par défaut attribué. Et un utilisé exclusivement pour la simulation physique de ces brindilles, avec la couche « GroundScatter » attribuée.

Éclairage

Le Livre des Morts : Le projet environnemental utilise un éclairage global indirect cuit avec un éclairage direct en temps réel.

L'éclairage indirect du soleil ainsi que l'éclairage direct et indirect du ciel sont intégrés dans des cartes lumineuses et des sondes lumineuses. Les sondes de réflexion, les sondes d'occlusion et d'autres sources d'occlusion sont également cuites. L'apport direct du soleil, en revanche, constitue un éclairage en temps réel. L'ombrage dans le pipeline de rendu HD est plus esthétique lorsqu'on utilise une lumière directe en temps réel. Il nous donne également une certaine liberté pour animer la rotation, l'intensité et la température de couleur de la lumière directionnelle au moment de l'exécution.

Titre

Étant donné que l'éclairage indirect est cuit, nous ne pouvons pas trop modifier l'intensité et la couleur de la lumière directionnelle, sinon elle ne correspondra plus à l'éclairage cuit. Nous ne pourrions pas nous en sortir avec un cycle jour/nuit complet dans cette configuration, même si une forêt est un environnement assez indulgent en termes d'obscurcissement d'un éclairage indirect mal assorti.

Les lightmaps cuites sont principalement utilisées pour le terrain et quelques autres ressources, mais nous avons préféré utiliser une combinaison de sondes lumineuses et de sondes d'occlusion pour tous les rochers et falaises du projet, car elles fournissent de meilleurs résultats pour les objets avec des angles vifs et des cartes normales nettes.

Sondes d'occlusion

Éclairer une forêt dense est quelque chose de difficile à réaliser en temps réel. Les arbres, avec toutes leurs feuilles et leurs branches, ont une surface immense et une géométrie complexe, il n'est donc pas pratique de les recouvrir de lightmaps. L'utilisation d'une seule sonde lumineuse par arbre lui donnerait un éclairage uniforme du bas vers le haut. Les volumes proxy de Light Probe sont plus proches de ce que nous souhaiterions, mais il n'est pas pratique d'augmenter la résolution de la grille pour capturer les détails fins.

C'est pour cette raison que notre programmeur graphique senior, Robert Cupisz, a développé les sondes d'occlusion.

Du point de vue d'un artiste, c'est une fonctionnalité vraiment agréable et facile à utiliser : vous ajoutez simplement l'objet à la scène, et il affiche un gadget de volume que vous devez mettre à l'échelle pour qu'il couvre la zone souhaitée, puis configurez ses paramètres de résolution en X, Y et Z.

Image

Il vous permet également de créer des sondes d'occlusion « Détail » si vous souhaitez qu'une zone de la scène ait une densité de sondes plus élevée. Une fois mis en place, vous devrez préparer l'éclairage de toute la scène. Les sondes d’occlusion seront cuites pendant ce processus.

Chaque sonde de la grille 3D échantillonne la visibilité du ciel en émettant des rayons dans l'hémisphère supérieur et la stocke sous la forme d'une valeur de 8 bits allant de 0 entièrement occulté à 1 entièrement visible. Cela nous donne des zones plus sombres partout où il y a une plus forte concentration de feuilles et de branches - encore plus lorsque quelques arbres sont regroupés.

Les sondes qui ont eu la malchance d'atterrir à l'intérieur de troncs ou de rochers seront entièrement noires. Pour éviter que cette obscurité ne s'échappe, elles sont marquées comme non valides et écrasées par les sondes valides voisines.

Étant donné que les sondes échantillonnent la partie du ciel visible, elles ne devraient atténuer que la contribution directe du ciel. Pour cette raison, le lightmapper est configuré pour exclure la contribution lumineuse directe des sondes lumineuses classiques, puis l'éclairage de la sonde est composé d'une sonde lumineuse plus une sonde directe du ciel occluse par des sondes d'occlusion.

De cette façon, nous pouvons avoir des tonnes de sondes d'occlusion bon marché échantillonnant de petits détails sur la façon dont le feuillage occulte le ciel, apportant de la profondeur à l'image, et très peu de sondes lumineuses plus chères échantillonnant une lumière indirecte changeant plus lentement.

image

Si vous souhaitez avoir une image plus claire de la façon dont ils affectent la scène, vous pouvez également utiliser la vue de débogage SkyOcclusion.

Titre

L' API de sonde d'occlusion permettant de cuire des sondes d'occlusion et d'exclure la contribution directe du ciel à partir des sondes lumineuses a été ajoutée à Unity 2018.1, et tous les scripts et shaders sont disponibles dans le projet.

Diffusion atmosphérique

Nous avons porté et réutilisé la solution de diffusion atmosphérique que nous avons initialement développée pour la démo Blacksmith.

Notre programmeur senior Lasse Jon Fuglsang Pedersen l'a étendu pour utiliser le suréchantillonnage temporel, ce qui donne un aspect beaucoup plus fluide.

image
Transmission du pipeline de rendu HD

Le shader Lit par défaut du pipeline de rendu HD prend en charge plusieurs types de diffusion. Cela permet d'avoir des matériaux avec diffusion souterraine, ou - comme utilisé pour toute notre végétation dans ce projet - un matériau translucide plus simple avec uniquement une transmission de lumière.

image

Cet effet est mis en place à deux endroits différents :

  • Sur le matériau, vous devez choisir le type de matériau « Translucide », saisir une carte d'épaisseur et choisir un profil de diffusion, qui est le deuxième emplacement :
  • Les paramètres du profil de diffusion, où vous pouvez modifier tous les autres paramètres de votre effet de transmission
Titre

Note: Notre équipe a ajouté des curseurs supplémentaires pour contrôler séparément la transmission directe et indirecte afin d'avoir plus de contrôle sur le résultat final. Mais ce changement ne respecte pas les règles PBR et ne sera donc pas intégré dans le pipeline de rendu HD.

Volumes de surface

Les volumes de zone sont construits sur le système de volume de base proposé par SRP et sont très similaires aux volumes de post-traitement. Leur fonction est de piloter les propriétés de l'objet en fonction de la position de l'objet Caméra principale.

Plusieurs objets, dont la lumière directionnelle, la diffusion atmosphérique, la mise au point automatique et le contrôle du vent, ont leurs propriétés pilotées par les volumes de zone. Ainsi, si vous souhaitez modifier la configuration d'éclairage actuelle, par exemple, vous devrez le faire dans le volume de zone correspondant. Ces objets Area Volumes sont situés dans la scène principale, sous _SceneSettings > _AREASETTINGS, et ont le suffixe « _AV ».

Fenêtre de débogage

Pour ceux qui n'ont pas beaucoup utilisé le pipeline de rendu HD, il existe désormais une fenêtre de débogage SRP spécifique que vous pouvez ouvrir via le menu Fenêtre > Général > Débogage du pipeline de rendu

image
image

Grâce à cela, vous pourrez voir les couches GBuffer individuelles, les composants d'éclairage ou les cartes de texture spécifiques de vos matériaux, ou même remplacer l'albédo/la douceur/la normale. C'est un outil vraiment utile lorsque vous avez des objets qui ne s'affichent pas correctement ou tout autre bug visuel. Cela vous aidera à identifier la source du problème beaucoup plus rapidement.

Le meilleur dans tout cela, c'est que ces vues de débogage sont générées automatiquement à partir de vos shaders, et les codeurs peuvent créer de nouvelles vues de débogage assez facilement.

image

J'ai même utilisé ces vues de débogage pour créer les panneaux d'affichage d'arbres qui sont utilisés en arrière-plan de la scène. Je viens de placer mes ressources sur une scène vide et j'ai pris des captures d'écran avec l'albédo, la rugosité, les couches gbuffer normales visibles, et je les ai utilisées pour créer mes cartes de texture.

Optimisation

Bien qu'une grande partie de l'optimisation réside du côté du code, il est également important que vos ressources et scènes soient correctement configurées si vous souhaitez avoir une fréquence d'images décente. Voici quelques-unes des façons dont le contenu a été optimisé pour ce projet :

  • Tous nos supports utilisent l'instanciation GPU.
  • Nous utilisons des LOD pour la plupart des ressources de cette scène, c'est un incontournable.
  • La fonction LOD Crossfade est excellente, elle permet d'obtenir un mélange agréable et fluide entre les différents niveaux de détails de votre objet. Mais cette fonctionnalité est assez lourde et peut vraiment augmenter le nombre d'appels de dessin dans votre projet. Pour cette raison, nous l'avons désactivé sur autant d'actifs que possible.
  • Pour éviter une transition notable entre les niveaux de détail, nous avons commencé à utiliser des cartes normales de l'espace objet sur bon nombre de nos grands éléments rocheux et falaises.
title
image

Note: L'utilisation d'une carte normale de l'espace objet au lieu d'une carte normale de l'espace tangent réduira la précision de la carte normale. En fait, ce n'est pas très perceptible sur nos actifs qui sont très rugueux et bruyants, mais vous ne voudrez probablement pas l'utiliser pour les actifs à surface dure.

  • Bien qu'il soit important de limiter la distance de vue par la façon dont la scène est construite et en utilisant l'occlusion culling, il convient également de savoir que de nombreux appels de dessin utilisés pour rendre votre scène proviennent en fait du rendu de chaque cascade de vos cartes d'ombre (plus précisément de la lumière directionnelle dans notre projet).
  • Nous avons eu beaucoup d'appels de tirage provenant des petites ressources végétales dispersées sur le terrain, des centaines et des centaines d'entre elles à certains endroits. Nous avons obtenu une belle réduction des tirages au sort en créant de plus grandes parcelles de ces ressources d'herbe et de plantes. Au lieu d’en avoir des centaines, nous n’en aurions alors que 15 à 20.
    Notez que cela a un impact sur la qualité visuelle, avec des actifs aussi volumineux, il devient vraiment difficile d'éviter que l'herbe soit coupée avec des pierres et d'autres actifs placés au sol.
  • Nous utilisons l'élimination des couches, une fonctionnalité déjà présente dans Unity mais qui ne possède pas d'interface utilisateur. Cette fonctionnalité vous permet d'éliminer les objets affectés à un calque spécifique, en fonction de la distance qui les sépare de la caméra. Torbjorn a étendu cette fonctionnalité pour pouvoir également éliminer la projection d'ombre de ces objets à une distance différente. Par exemple, la plupart de nos petits actifs végétaux cessent de projeter des ombres à une distance d'environ 15 mètres, ce qui n'est pas très perceptible compte tenu de la quantité de bruit avec l'herbe et les autres plantes au sol, puis ils sont complètement éliminés à environ 25 mètres - quelle que soit la configuration de leur LODGroup.

---

Restez à l’écoute pour le prochain article de blog de la série. Nous explorerons le travail consacré à la création de l'ombrage, de l'éclairage, du post-traitement et bien plus encore du Livre des Morts.

Si vous n'avez pas pu venir à Unite Berlin, nous publierons bientôt la présentation de Julien Heijmans sur l'art environnemental dans la démo. Vous pouvez suivre notre chaîne YouTube pour être informé de la sortie de cette vidéo.

Plus d'informations sur le Livre des Morts