Les meilleures pratiques de l'équipe Spotlight : Créer des images crédibles dans Unity

En tant que membre de l'équipe Spotlight, j'ai la chance de participer à des projets très intéressants. L'équipe Spotlight d'Unity travaille sur des jeux en collaboration avec nos clients et une grande partie de mon rôle consiste à aider les développeurs à obtenir l'aspect et la qualité souhaités pour leurs projets. J'ai l'occasion d'entendre de nombreuses histoires provenant de l'ensemble du secteur et d'identifier les problèmes communs auxquels sont confrontés les créateurs de contenu. Plusieurs des projets sur lesquels j'ai travaillé visaient à obtenir des images assez réalistes. Compte tenu du contenu artistique du projet, comment créer une scène dans Unity qui soit crédible ?
Une multitude de sujets doivent être abordés pour que les visuels soient crédibles. Dans ce billet, je vais parler de l'éclairage et des paramètres de rendu. Plus loin dans ce billet, je partagerai également notre scène d'échantillonnage du tunnel Spotlight et j'expliquerai comment vous pouvez l'utiliser pour apprendre et expérimenter.
Comprendre comment les fonctions de rendu d'Unity peuvent être utilisées pour imiter le monde réel vous aidera à atteindre l'objectif visuel de votre projet.
Mode de rendu linéaire
En termes simples, cela permet à Unity d'effectuer des calculs d'éclairage et d'ombrage en utilisant des mathématiques physiquement précises avant de transformer la sortie finale dans le format qui fonctionne le mieux pour les moniteurs.
Pour spécifier un flux de travail gamma ou linéaire,
Allez dans Edit > Project Settings > Player et ouvrez Player Settings.
Allez ensuite dans Autres paramètres > Rendu et changez l'espace colorimétrique en linéaire.
La définition de votre espace colorimétrique doit être l'une des premières décisions de votre projet, en raison de son impact considérable sur les résultats finaux en matière d'ombrage et d'éclairage.
Mode de rendu.
Dans la scène d'exemple du tunnel Spotlight, nous utilisons un chemin de rendu différé. Cela permet aux créateurs de contenu de travailler efficacement avec plusieurs lumières dynamiques, de combiner plusieurs cubemaps de réflexion et d'avoir la possibilité d'utiliser les fonctionnalités existantes de Screen Space Reflection dans Unity 2017+.
Pour ce faire, allez dans Paramètres graphiques > Trajectoire de rendu ou Caméra > Trajectoire de rendu.
Vous trouverez plus d'informations sur les modes de rendu dans cette partie de la documentation Unity.
Caméra à gamme dynamique élevée (HDR).
Lors du rendu d'un éclairage crédible, comme dans la vie réelle, les créateurs de contenu auront affaire à des valeurs d'éclairage et à des surfaces émissives dont la luminosité est supérieure à 1 (plage dynamique élevée). Ces valeurs doivent ensuite être adaptées à la plage d'écran appropriée (c'est ce qu'on appelle la cartographie des tons). Ce paramètre est essentiel pour permettre à la caméra Unity de traiter ces valeurs élevées et de ne pas les couper.
Pour ce faire, sélectionnez la caméra principale de la scène et assurez-vous que la case HDR est cochée dans l'onglet de l'inspecteur pour la caméra sélectionnée.
Encodage de la carte lumineuse HDR. (optionnel)
La scène d'exemple du tunnel Spotlight n'utilisait pas d'éclairage cuit, mais si vous prévoyez de travailler avec un éclairage cuit à haute intensité (HDR), nous vous recommandons de définir l'encodage de la carte lumineuse sur HDR lightmap pour vous assurer que le résultat de l'éclairage cuit est cohérent.
L'option se trouve sous Edit > Project > Player settings > Other settings > Lightmap encoding (Unity 2017.3+ only).
Des informations détaillées sur l'encodage de Lightmap sont disponibles dans le manuel.
Tonemapper pour votre scène (partie de Post Processing Stack).
Pour afficher correctement l'éclairage HDR, un tonemapper doit être activé dans le projet.
Assurez-vous d'abord d'installer Unity Post Processing Stack (version 1) à partir de l'Asset Store.
Créez un poste de profil post-processus dans votre projet et configurez-le comme suit :
- Activer l'étalonnage des couleurs > Tonemapper > ACES
(Normes de codage des couleurs de l'Académie) - Activer le tramage. Le tramage permet à la scène d'atténuer les artefacts de bande introduits par la sortie 8 bits/canal de la scène HDR. Les moteurs modernes utilisent cette technique pour contourner la limitation de la sortie couleur 16M. Ne touchez pas au reste des paramètres de tonemapper pour l'instant.
- Sélectionnez la "Caméra principale" et ajoutez le composant Comportement de post-traitement.
- Affectez le profil de post-traitement créé précédemment à l'emplacement du profil. Si vous souhaitez utiliser la version 2 de Post Processing Stack, veuillez vous référer au fichier readme du paquet car il est actuellement en version bêta.
- Activer l'effet d'image pour la fenêtre de visualisation.
Cela vous permet de voir le tonemapper en permanence lorsque vous travaillez avec la vue de la scène.
Remarquez l'amélioration du rendu des hautes lumières et de la séparation des valeurs des tunnels sombres dans la scène tonématisée. Si vous regardez la scène non cartographiée, vous pouvez voir comment les hautes lumières n'ont pas convergé vers une couleur unifiée (le soleil brûlant jaunâtre dans ce cas).
Cette configuration tente essentiellement de reproduire la manière dont un appareil photo numérique capture une scène avec une exposition fixe (sans que les fonctions d'adaptation de l'exposition et de l'œil soient activées).

À ce stade, les créateurs de contenu ont obtenu une configuration de rendu de scène de base appropriée qui devrait donner des résultats crédibles avec un large éventail de contenu.
Unity répond à un grand nombre de stratégies/systèmes d'éclairage et de scénarios de projets différents. Nous vous recommandons de consulter notre documentation détaillée sur les modes d'éclairage et la configuration afin de comprendre toutes les différentes options.
Cependant, pour une itération rapide et la simplicité, un retour d'information visuel réactif est nécessaire.
C'est pourquoi la scène d'exemple du tunnel Spotlight utilise un éclairage en temps réel avec une illumination globale en temps réel (GI). Cela nous donnera une bonne gamme de réponses spéculaires, un bon éclairage par rebond, et nous permettra de changer nos lumières à la volée.
Eclairage en temps réel avec Realtime GI + Light Probe


Pour en revenir à l'éclairage proprement dit, une scène typique, de jour, avec des espaces extérieurs, peut être décomposée en trois éléments d'éclairage :
1) Hémisphère (contribution au ciel).
2) Lumières directes (soleil + lumières locales).
3) Éclairage indirect (éclairage IG).
À ce stade, les créateurs de contenu sont censés disposer de maillages correctement texturés et d'une scène assemblée.
Éclairage de l'hémisphère initial
Le premier composant pour l'éclairage extérieur est l'éclairage Hemisphere, appelé Environment Lighting dans Unity. Il s'agit d'un mot fantaisiste pour désigner un puits de lumière. Le ciel nocturne a une contribution minimale, tandis que le ciel diurne a une contribution très brillante. Les paramètres de l'hémisphère se trouvent sous l'onglet Éclairage (Fenêtre > Éclairage > Paramètres > Environnement).
Pour commencer, il serait préférable d'utiliser un matériau procédural pour la boîte à ciel plutôt qu'un cubemap HDRI. Créez un nouveau matériau dans le projet, nommez-le SkyMaterial et réglez-le sur Skybox / Procedural.

Attribuez-le à Environment Skybox Material dans l'onglet Lighting > Scene.

À ce stade, la scène est quelque peu éclairée. Il y a un éclairage ambiant, mais pas exactement celui de l'hémisphère. Nous en resterons là pour l'instant.
Lumière directionnelle
La lumière du soleil ou de la lune est une source de lumière proche de l'infini, avec une direction de la lumière et des ombres parallèles. Ils sont généralement représentés par une lumière directionnelle.

Illumination indirecte / Illumination globale.
La lumière directionnelle + l'ambiance ne suffisent pas à créer un éclairage crédible. L'éclairage correct de l'hémisphère nécessite l'occultation de l'éclairage de la lucarne. Nous devons également simuler la lumière du soleil qui rebondit sur les sujets de la scène. Le ciel rend actuellement une seule valeur de couleur à la scène, ce qui le rend plat. C'est là que l'illumination globale en temps réel ou l'éclairage cuit est nécessaire pour calculer l'occlusion et l'éclairage indirect par rebond. Pour ce faire, suivez les étapes suivantes :
- Assurez-vous que tous les meshes qui doivent contribuer à l'IG en temps réel ou au baking sont marqués avec Enable Lightmap Static et Reflection Probe Static. Il s'agit généralement de grandes mailles statiques.
- Ensuite, activez l'éclairage global en temps réel (laissez les paramètres moyens par défaut) dans l'onglet Éclairage > Scène > Éclairage en temps réel.
- Cliquez sur Générer l'éclairage ou cochez Générer automatiquement.

La scène est maintenant sombre alors que la génération de lumière est terminée. Pour ne rien arranger, certains éléments de la scène ne sont pas à leur place - remarquez le tramway et la porte à l'arrière-plan.
Les objets statiques de la scène disposent actuellement d'une occlusion correcte pour l'hémisphère et d'une réponse indirecte par rebond de la lumière directionnelle, mais le reste des objets ne dispose pas d'une configuration d'éclairage appropriée.
Sondes lumineuses et sondes de réflexion.
Pour que les objets dynamiques ou les objets sans carte lumineuse reçoivent un éclairage global en temps réel ou cuit, des sondes lumineuses doivent être réparties dans la scène. Veillez à répartir efficacement les groupes de sondes lumineuses dans la scène à proximité des zones où se trouvent ou passeront les objets dynamiquement éclairés (comme les joueurs). Pour en savoir plus sur le groupe de sondes lumineuses, consultez le manuel.
Cliquez à nouveau sur Générer l'éclairage ou attendez que le calcul préalable soit terminé si l'option Générer automatiquement est cochée.

Le tramway et la porte à l'arrière-plan sont mieux ancrés, mais les reflets ne sont pas à leur place. Le reflet du ciel est omniprésent et apparaît à l'intérieur du tunnel. C'est là que les sondes de réflexion entrent en jeu. Placer efficacement les sondes de réflexion avec une couverture adéquate dans la scène, selon les besoins. Dans la scène ci-dessus, il suffit d'une sonde de réflexion pour la pièce principale et de deux pour l'intérieur de chaque tunnel.
Une résolution Cubemap de 128 pixels utilisant la projection en boîte est généralement une bonne base pour les cas typiques et permet de satisfaire les temps de cuisson de la mémoire et de la réflexion.
Voici plus d'informations sur Reflection Probe.

La scène semble maintenant bien ancrée et cohérente, ce qui est un élément important d'une scène crédible. Mais tout est encore plus sombre qu'avant et d'une qualité loin d'être crédible.
Valeur de l'éclairage HDR
De nombreux créateurs de contenu ne réalisent pas qu'en réalité, l'éclairage hémisphérique et la lumière du soleil sont des sources de lumière très brillantes. Elles sont beaucoup plus lumineuses que la valeur 1. C'est là que l'éclairage HDR entre en jeu.
Pour l'instant, désactivez la lumière directionnelle et réglez l'exposition de la matière du ciel sur 16.
Cela vous donnera une bonne idée de l'effet d'un éclairage hémisphérique adéquat sur une scène.

Les choses commencent à devenir crédibles. Imaginez cet état comme un jour nuageux, où la lumière du soleil est complètement diffusée dans le ciel, de sorte qu'il n'y a pas de lumière directionnelle.
À ce stade, vous pouvez réintroduire la lumière du soleil dans la scène à une valeur beaucoup plus élevée. Pour commencer, essayez Intensité 5. Bien que le soleil paraisse presque blanc, il est important que la couleur de la lumière directionnelle soit choisie correctement, car l'impact de la couleur indirecte du soleil fort peut changer radicalement l'aspect de la scène.

Le soleil (lumière directionnelle) ressemble maintenant à une lumière à haute énergie, comme on s'y attend dans la vie réelle. La scène semble tout à fait crédible à ce stade.
Occlusion ambiante dans l'espace-écran et réflexion dans l'espace-écran
Bien que l'éclairage de la scène semble assez bon à ce stade, il est possible d'ajouter des détails supplémentaires à la scène pour la pousser encore plus loin. Il n'est généralement pas possible de créer une occlusion détaillée en raison de la résolution limitée définie dans l'IG en temps réel pour obtenir des performances raisonnables. C'est là que l'occlusion ambiante de l'espace écran peut être utile. Activez SSAO dans le profil de post-traitement sous Ambient occlusion. Pour cet exemple, les paramètres sont réglés sur Intensité 0,5, Rayon 1, Nombre d'échantillons moyen avec sous-échantillonnage et Ambient Only coché pour commencer.

Alors que SSAO prend en charge l'occlusion de l'éclairage ambiant supplémentaire, la réflexion pourrait bénéficier de quelques améliorations de précision en plus des simples sondes de réflexion.
Screen Space Raytraced Reflections peut aider à améliorer cette situation. Activez le reflet de l'espace de l'écran dans le profil de post-traitement.

Remarquez que le côté gauche de la piste mouillée ne présente plus de reflets brillants, car le SSR donne à la scène des reflets plus précis pour les objets à l'écran. Ces deux effets de post-traitement entraînent des coûts de performance au moment de l'exécution. Il convient donc de les activer judicieusement et de définir les paramètres de qualité de manière à respecter les contraintes de performance au moment de l'exécution.
Brouillard
À ce stade, les créateurs de contenu ont réussi à obtenir une séparation quelque peu crédible des valeurs extérieures et intérieures sur la base d'une exposition fixe. Les reflets sont visibles dans les zones intérieures sombres sous la forme de hautes lumières et non de valeurs sombres et boueuses.

Cependant, les éléments de premier plan et d'arrière-plan de la scène n'apparaissent pas malgré la présence d'éléments de perspective importants. Un brouillard subtil dans la scène peut créer une différence énorme en donnant à la scène une dimension supplémentaire.

Remarquez que la rambarde au premier plan est mieux définie que sur la scène sans brouillard.
Le brouillard est activé dans l'onglet Éclairage > Scène > Autres paramètres. La couleur de brouillard #6D6B4EFF, la densité exponentielle à 0,025 est activée ici. Dans le rendu différé d'Unity 2017, vous devrez peut-être aussi activer le brouillard dans le profil de post-traitement s'il n'est pas activé automatiquement.
Spot / Pointlight
Les éléments essentiels de l'éclairage local en temps réel sont les projecteurs et les projecteurs ponctuels. L'éclairage de zone ne peut être utilisé que lors du baking lighting, à moins que vous n'utilisiez le HD Scriptable Render Pipeline (SRP), introduit dans la version 2018.1 beta. De nouveaux éclairages de zone peuvent être rendus en temps réel en mode HD SRP.
Fondamentalement, ces deux types de lumières émettent de la lumière à partir d'un point dans l'espace et sont limités par la portée, le projecteur ayant une limite supplémentaire par l'angle. Vous trouverez plus d'informations sur l'éclairage dans la section correspondante de la documentation Unity.
Les grandes différences entre les deux lumières sont liées à la manière dont elles projettent des ombres et interagissent avec les biscuits. L'ombrage avec une lumière ponctuelle coûte 6 cartes d'ombres par rapport à la seule carte d'ombres d'un projecteur. C'est pourquoi les éclairages ponctuels à projection d'ombre sont beaucoup plus coûteux et doivent être utilisés avec parcimonie.
NOTE : Les lumières cuites n'ont pas à se préoccuper de ce problème.
Une autre différence est qu'une texture de cookie sur un Spotlight est une texture 2D simple et directe, alors qu'un point lumineux nécessite un cubemap, généralement créé dans un logiciel 3D.
Couleur et intensité de la lumière.
Le choix de la couleur et de l'intensité appropriées pour vos lumières doit suivre quelques lignes directrices peu contraignantes pour donner des résultats plausibles.
Lors de la sélection de l'intensité des lumières intérieures, il faut veiller à ce qu'aucune lumière intérieure n'ait une intensité supérieure à celle du soleil. Cela peut créer un déséquilibre en fonction de la scène.

Compte tenu de ce paramètre de scène type, il est très peu probable que le plafond soit éclairé par des lumières de forte intensité dépassant la luminosité de l'heure de la journée.
Lors de la sélection des couleurs, essayez de ne pas négliger complètement l'un des canaux de couleur. Cela crée une lumière qui a du mal à converger vers le point blanc.

Bien qu'il s'agisse techniquement d'une couleur claire valide, la couleur claire de l'image de gauche supprime toute la couleur bleue de la sortie finale. Avoir une palette de couleurs finale limitée dans la scène pour une base de référence n'est pas une bonne idée, surtout si vous voulez faire de l'étalonnage par la suite.
Surfaces émissives
Dans Unity, les surfaces émissives peuvent contribuer à l'éclairage si l'IG en temps réel ou l'IG cuite est activée, ce qui donne l'effet d'un éclairage de zone. Ceci est particulièrement utile si l'IG en temps réel est activé. Les créateurs de contenu peuvent modifier l'intensité et la couleur de la surface émissive et obtenir un retour d'information immédiat, en supposant que le calcul préalable ait été effectué à l'avance.

L'image ci-dessus montre l'éclairage subtil et diffus provenant des mailles du plafond.
L'équipe Unity San Francisco Spotlight a créé la scène d'échantillonnage Spotlight Tunnel pour aider les créateurs de contenu à faire de l'apprentissage pratique et de l'expérimentation.

Obtenez le fichier de l'exemple de projet du tunnel Spotlight ici.
Il suffit d'extraire le projet dans le dossier et de l'ouvrir avec Unity.
Le projet Spotlight Tunnel a été réalisé avec Unity 2017.1.0f3.
L'ouverture de ce projet dans une version plus récente d'Unity nécessitera une reconstruction de l'éclairage car il peut y avoir une incompatibilité de format de données d'éclairage entre les versions.
Toutes les ressources fournies dans ce projet ne peuvent être utilisées que dans un projet développé avec le moteur Unity.
Comme nous l'avons déjà mentionné, il y a plusieurs choses que vous devez savoir lorsque vous créez des images crédibles. Vous pouvez en apprendre davantage sur ce sujet dans ce tutoriel. Nous allons également ajouter un guide complet des meilleures pratiques aux documents Unity. Restez à l'écoute !

Nous espérons que ce blog aidera les créateurs de contenu à rester sur la bonne voie pour obtenir des visuels crédibles dans Unity. Nous sommes impatients d'être éblouis par tous les créateurs de contenu Unity.