5 problèmes courants de lightmapping et des conseils pour les résoudre

J'ai récemment développé un guide de dépannage du Lightmapper progressif afin d'aider les développeurs à tirer le meilleur parti de l'illumination globale cuite (Baked Global Illumination, GI) dans l'éditeur Unity. J'aborde ici cinq des problèmes de lightmapping les plus courants et leurs solutions, images à l'appui et liens vers les pages du manuel Unity à l'appui . Pour consulter le guide complet, visitez les forums.

Si certaines conditions préalables ne sont pas remplies, le Progressive Lightmapper risque de ne pas générer d'éclairage dans votre scène. Ces conditions incluent, mais ne sont pas limitées à :
- Aucun objet n'est marqué comme contributeur à l'IG
- Pas de lumières cuites dans la scène
- Problèmes de shaders
Pour remédier à ce problème, je vous recommande d'essayer l'une des solutions proposées ci-dessous.

Marquez les objets que vous voulez éclairer comme contributeurs GI en suivant les étapes suivantes :
Sélectionnez votre objet de jeu.
Naviguez jusqu'au composantMesh Renderer.
Déplier l'en-tête de l'éclairage.
Cochez la case Contribuer à l'éclairage global.
Cette opération permet d'activer le paramètre Recevoir l'illumination globale situé en dessous. Il contient deux options :
- Cartes lumineuses: Destiné aux objets statiques de type lightmap - GameObject recevra et contribuera à l'IG des lightmaps.
- Sondes lumineuses: Destiné aux petits accessoires et aux objets qui ne sont pas adaptés à la cartographie de la lumière - l'objet du jeu recevra l'IG des sondes lumineuses et contribuera à l'IG des cartographies de la lumière environnantes.
Seules les lumières mixtes et cuites peuvent contribuer à l'IG cuite. Sélectionnez des lumières dans votre scène, puis réglez le mode sur Mixte ou Cuit dans le composant Lumière. D'autres propriétés méritent d'être vérifiées :
- Couleur: Les couleurs foncées ont une contribution IG faible ou nulle. Choisissez des couleurs vives pour les lumières et utilisez la propriété Intensité pour les augmenter ou les diminuer.
- Intensité: Plus l'intensité est élevée, plus la lumière est brillante. Veillez à ce que vos lampes soient suffisamment lumineuses pour permettre une contribution significative à l'IG.
- Multiplicateur indirect: Cette propriété contrôle l'intensité du rebond indirect. Assurez-vous qu'il n'est pas réglé sur zéro. Dans le cas contraire, la lumière ne contribuera pas du tout à l'IG. Notez que si cette valeur est supérieure à un, l'éclairage de votre scène ne sera pas conforme à la norme de rendu physique (PBR).
- Visitez No Baked Global Illumination dans le forum de la scène
Dans la fenêtre Éclairage (accessible via Fenêtre > Rendu > Éclairage), assurez-vous que le champ Paramètres d'éclairage de l'actif n'est pas vide. Si aucun élément n'est attribué, cliquez sur le bouton New Lighting Settings (Nouveaux paramètres d'éclairage). Cette opération permet de créer et d'attribuer un bien, en déverrouillant les propriétés de la fenêtre pour qu'elles puissent être modifiées.
Une fois cette opération terminée, vérifiez que
- Vous avez coché la case Illumination globale cuite, qui active les calculs de l'IG cuite. Cette case à cocher permet également d'afficher la liste déroulante Mode d'éclairage.
- La valeur Max Bounces n'est pas réglée sur zéro. Plus cette valeur est élevée, plus la lumière rebondit dans l'environnement.
- Le curseur Intensité indirecte n'est pas réglé sur zéro. En réglant ce curseur sur zéro, vous diminuez tous les éclairages indirects de la scène.
Les shaders personnalisés peuvent être à l'origine de l'échec du calcul de l'IG. Pour le débogage, utilisez les shaders intégrés à l'éditeur Unity. Il s'agit de
- Shader standard: Disponible dans le pipeline de rendu intégré
- Ombrage de la lumière: Disponible dans le pipeline de rendu universel (URP)
- Ombrage de la lumière: Disponible dans le pipeline de rendu haute définition (HDRP)
Si Unity génère de l'éclairage après le passage à l'un des shaders décrits ci-dessus, il se peut que le problème vienne des shaders personnalisés. Dans ce cas, assurez-vous que les nuanceurs de surface contiennent le mot-clé LIGHTMAP_ON.
Consultez la page Meta Pass pour plus de détails sur la façon de personnaliser davantage la sortie Baked GI à l'aide de shaders.
Autres corrections possibles
Si les étapes ci-dessus n'ont pas permis de résoudre votre problème, essayez les solutions suivantes :
- Sélectionnez un autre backend de lightmapping dans la fenêtre Lighting. Si la cuisson de l'éclairage échoue lors de l'utilisation du GPU progressif, mais réussit lors de la cuisson avec le CPU progressif, cela peut être le résultat d'un problème de matériel ou de pilote.
- Mettez à jour les pilotes du GPU. Veuillez consulter la page du fabricant du GPU pour obtenir les pilotes corrects pour votre système. (Pour les machines Linux, consultez la section sur l'installation des pilotes Linux dans ce fil de discussion).
- Assurez-vous que votre GPU répond aux exigences minimales. Veuillez vous référer à ce fil de discussion.
- Vider le cache de l'IG. Pour l'effacer, allez dans Préférences > Cache GI et cliquez sur le bouton Nettoyer le cache. Gardez à l'esprit que cette opération supprimera toutes les données d'éclairage présentes dans la scène, ce qui vous obligera à régénérer l'éclairage.
Certains objets qui semblent éteints ou déplacés peuvent indiquer un problème dans la configuration de la scène, qui se reproduit souvent lorsque les objets dynamiques n'ont pas de Light Probes pour échantillonner l'éclairage. En outre, tout matériau métallique brillant dans la scène peut apparaître comme noir si aucune sonde de réflexion locale n'est présente.

Pour remédier à ce problème, je vous recommande d'essayer l'une des solutions proposées ci-dessous.
Les objets dynamiques - ou les contributeurs d'IG recevant des IG des sondes lumineuses - ont besoin de sondes lumineuses pour échantillonner les données d'éclairage indirect. S'il n'y en a pas, les objets se contenteront d'échantillonner la sonde ambiante (c'est-à-dire la sonde de lumière et de réflexion qui est toujours présente dans la scène).
Pour atténuer ce problème, mettez en place un réseau de sondes lumineuses dans la scène, en ajoutant des sondes dans les zones les plus importantes. Assurez-vous qu'il y a suffisamment de sondes lumineuses pour englober tous les objets concernés et générez à nouveau de l'éclairage pour voir l'effet.
Les objets métalliques réfléchissants peuvent toujours apparaître en noir, même après la mise en place d'un réseau dense de sondes lumineuses. Pour ombrer de tels objets, vous devez placer une sonde de réflexion qui englobe l'objet concerné. Générer à nouveau l'éclairage ou cuire à nouveau la sonde dans le composant Sonde de réflexion en cliquant sur le bouton Cuire.
Si vous observez des zones noires dans les réflexions, essayez d'augmenter le nombre de rebonds. Cela augmentera le nombre de rebonds, créant ainsi des reflets dans les reflets. Vous pouvez accéder à cette propriété dans Éclairage > Environnement > Éclairage de l'environnement.
Visiter le forum sur l'éclairage des objets manquants
Si les étapes précédentes ne permettent toujours pas de résoudre le problème, inspectez le composant Mesh Renderer de l'objet concerné. Dans la section Sondes, assurez-vous que les propriétés Sondes lumineuses et Réflexion sont réglées sur autre chose que Désactivé.

Les matériaux noirs purs absorbent toute la lumière directe et indirecte. Il s'agit d'un comportement physiquement correct. Dans la réalité, aucun matériau naturel n'est complètement noir. Par exemple, l'une des matières naturelles les plus sombres, le charbon, mesure "50, 50, 50" sur une échelle de luminosité RVB.
Ajustez les valeurs de couleur de vos matériaux afin de respecter les normes d'ombrage basées sur la physique. Dans le pipeline de rendu intégré, vous pouvez utiliser le mode de dessin de la vue de scène Valider l'albédo pour déterminer si les valeurs d'albédo sont conformes au PBR. Vous pouvez utiliser le débogueur de rendu dans URP et HDRP pour faire la même chose.
Si vous travaillez avec plusieurs scènes, vérifiez que la scène contenant l'éclairage est définie comme scène active. Par défaut, Unity définit la première scène chargée comme scène active, ce qui peut avoir un effet néfaste sur les lecteurs autonomes.

Il existe deux types de problèmes liés au rendu des matériaux émissifs :
- Les matériaux émissifs n'apparaissent pas comme "brillants", ce qui indique un problème de post-traitement.
- Les matériaux émissifs ne contribuent pas à l'illumination globale, ce qui indique un problème de configuration de l'objet ou du matériau.
Pour remédier à l'un ou l'autre de ces problèmes, je vous recommande d'essayer l'un des correctifs décrits ci-dessous.
Pour donner l'impression d'un matériau lumineux, activez l'option Bloom dans la pile de post-traitement de votre choix. Reportez-vous à la documentation sur le RP intégré, l'URP ou le HDRP pour obtenir des conseils sur la manière de procéder.
Si vous avez l'intention d'utiliser des objets émissifs pour le lightmapping, assurez-vous que
- Vous avez marqué l'objet de jeu en question comme contributeur IG. En raison de la nature auto-éclairante des objets émissifs, vous pouvez définir leur propriété Recevoir un éclairage global sur Sondes lumineuses. Cela permettra d'économiser de l'espace dans l'atlas des cartes lumineuses.
- La propriété Global Illumination est réglée sur Baked dans l'inspecteur des matériaux. Cette propriété est disponible sous l'entrée Emission. Pour plus de détails, reportez-vous à la documentation sur le RP intégré, l'URP ou le HDRP.

Dans la fenêtre Éclairage, assurez-vous que la propriété Intensité indirecte n'est pas réglée sur zéro. La valeur zéro désactive tous les éclairages indirects, y compris la contribution des objets émissifs cuits.
Visiter le forum Matériaux émissifs dont le rendu n'est pas satisfaisant
Lors de la cuisson en mode non-directionnel, l'éditeur Unity ne créera pas de texture séparée pour contenir les informations de directionnalité. Les objets auront alors un aspect plat après la cuisson.
Il convient de noter que les cartes normales à basse fréquence sont difficiles à capturer à l'aide des textures de directionnalité. Ces textures apparaîtront plates lors de la génération d'éclairage à l'aide de lumières entièrement cuites.

Pour remédier à ce problème, je vous recommande d'essayer l'une des solutions proposées ci-dessous.

Dans la fenêtre Éclairage, réglez la propriété Mode directionnel sur Directionnel. Ce mode génère une texture secondaire qui stocke la direction dominante de la lumière. Les cartes normales auront une bonne représentation du relief, mais manqueront de réponse spéculaire.
Visiter le forum des cartes normales plates
Les lumières mixtes offrent une réponse spéculaire et normale en temps réel. Le Progressive Lightmapper intègre l'éclairage indirect dans une carte lumineuse. Cette combinaison garantit une réponse matérielle de la plus haute qualité lors de l'utilisation de l'éclairage au four.

Si votre projet le permet, réglez le mode de lumière sur Mixte dans le composant Lumière. Notez que les feux mixtes ont le même coût de performance que les feux en temps réel. Selon le mode d'éclairage utilisé, les lumières mixtes projettent des ombres en temps réel, mais pas des ombres douces cuites.
Les objets de jeu éclairés par sonde auront souvent une meilleure réponse matérielle que ceux éclairés par des lumières cuites. Si votre direction artistique le permet, réglez leur propriété Receive Global Illumination sur Light Probes dans le composant Mesh Renderer. Notez que vous pouvez également utiliser Light Probe Proxy Volume (LPPV) pour ajouter un gradient spatial aux objets éclairés par sonde.

L'une des limites inhérentes aux lumières cuites est qu'elles ne fournissent pas de réponse spéculaire en temps réel aux matériaux. Cela signifie que les matériaux brillants n'auront pas de reflets spéculaires après la génération de l'éclairage.
Pour remédier à ce problème, je vous recommande d'essayer l'une des solutions proposées ci-dessous.
Contrairement aux lumières cuites, les lumières mixtes fournissent une réponse spéculaire directe et en temps réel aux matériaux. Si les reflets spéculaires sont importants dans votre scène, réglez le mode de lumière sur Mixte dans le composant Lumière.
Visiter le forum sur la réponse spéculaire manquante
Il est possible d'imiter la réponse spéculaire des lumières en utilisant des objets émissifs. Pour ce faire, suivez les étapes suivantes :
Placer une Sonde de Réflexion dans votre scène.
Cliquez avec le bouton droit de la souris dans le panneau Hiérarchie et sélectionnez Objet 3D > Sphère.
Sélectionnez l'objet nouvellement créé et définissez son Drapeau de l'éditeur statique à Sonde de réflexion statique.
Dans le panneau Projet, créez un nouveau matériau en cliquant avec le bouton droit de la souris et en sélectionnant Créer > Matériau.
Sélectionnez le matériau nouvellement créé et activez la case à cocher Emission. Réglez la propriété Illumination globale sur Aucun.
Faites glisser et déposez le matériau sur la sphère pour l'affecter.
Placez la sphère dans la même position que votre lampe.
Générer de l'éclairage.
Après avoir suivi les étapes ci-dessus, vous devriez être en mesure de voir les objets émissifs capturés dans le cubemap de la sonde de réflexion. Vous pouvez masquer ces objets après la cuisson ou définir un masque d'élimination dans le composantCaméra.

Pour plus de conseils sur le dépannage du Progressive Lightmapper, consultez le guide complet dans les forums. Si vous souhaitez discuter de cet article ou partager d'autres solutions, n'hésitez pas à me contacter ici ou là. Enfin, ne manquez pas les nouveaux blogs techniques d'autres développeurs Unity dans le cadre de la série Tech from the Trenches.