# Optimisation de l'éclairage dans Unity : Lightmapping, Light Probes et shaders personnalisés
Le développement de projets indie avec des zones ouvertes se heurte inévitablement aux limitations de rendu. Bien que l'industrie migre activement vers HDRP et le ray tracing matériel, le Built-in Render Pipeline (Built-in RP) d'Unity reste un outil viable pour les équipes qui privilégient des performances prévisibles et un contrôle total sur le pipeline. La clé pour un framerate stable sans compromis visuels réside dans une séparation appropriée de l'éclairage statique et dynamique, ainsi qu'une optimisation ciblée des draw calls.
Approche hybride : Lightmaps vs Light Probes
Un éclairage de scène efficace repose sur une séparation claire de la géométrie par priorités. Les grandes architectures, les paysages et les props statiques sont rendus à l'aide de lightmaps cuits. Pour ce processus, des lightmappers tiers comme Bakery sont optimaux, offrant un pré-cuisson rapide de la Global Illumination et une gestion correcte des réflexions sans surcharger l'éditeur.
Cuire de petits objets à topologie complexe est impraticable : cela entraîne une fragmentation des atlases et une augmentation de l'utilisation de la mémoire vidéo. À la place, on utilise le système Light Probes. Les probes interpolent l'éclairage de l'environnement, transmettant des réflexions colorées et un ombrage de base aux meshes dynamiques ou statiques de petite taille. Pour optimiser le batching des props identiques dans la même zone, vous pouvez forcer l'assignation des coordonnées de la même probe. Cela réduit le nombre d'états de rendu uniques et allège la charge CPU lors de la préparation des frames.
Un aspect important du rendu hybride est l'exclusion de la géométrie distante des calculs d'éclairage en temps réel. Directional Light et les ombres en cascade deviennent rapidement un goulot d'étranglement si le moteur tente de les calculer pour des objets à l'horizon. Désactiver l'influence en temps réel pour l'arrière-plan distant et passer entièrement ces zones aux lightmaps ou probes réduit drastiquement les Draw Calls.
Contrôle manuel de la densité de texels et culling des sources lumineuses
La génération automatique de la seconde UV unwrap pour les lightmaps donne souvent des résultats sous-optimaux. Un layout UV2 manuel permet une distribution précise de la Texel Density en fonction de la caméra de gameplay et de l'importance. Les façades de bâtiments, couloirs et zones d'interaction active reçoivent une haute densité de texels, tandis que les toits, arrière des murs et zones inaccessibles sont compressés au minimum. Cela économise de l'espace dans les atlases de light et évite les artefacts de compression au premier plan.
Pour équilibrer qualité et performances dans Unity, le mode Distance Shadowmask est utilisé. À 50–80 mètres de la caméra, le moteur rend des ombres dynamiques et superpose la GI cuite. Au-delà de ce rayon, seules les ombres statiques des lightmaps sont rendues. La transition est fluide, et la charge GPU se stabilise.
Cependant, le Built-in Render Pipeline manque d'un mécanisme natif pour le culling à distance des sources point et spotlight. Les lampes dans des pièces distantes continuent d'être calculées, gaspillant des ressources. La solution est un gestionnaire personnalisé : le script maintient un pool de sources actives, vérifie périodiquement (toutes les 2–3 secondes) la distance à la caméra et bascule l'état activé. Une vérification asynchrone évite les micro-saccades et garantit que seules les sources visuellement pertinentes sont actives dans la frame.
Projection d'éclairage du terrain via shader personnalisé
La déco de terrain (monticules de neige, rochers, végétation) pose un sérieux problème pour le lightmapping standard. Cuire chaque petit objet prend trop de temps, et utiliser Light Probes pour des milliers d'instances génère des draw calls supplémentaires et casse le static batching.
Une solution de contournement efficace est d'écrire un shader qui projette le lightmap du terrain sur la géométrie superposée du haut vers le bas. Le lightmap ne doit contenir que des données de paysage. Le shader lit les coordonnées monde des vertex de la déco, les transforme en espace UV du terrain et sample le texel correspondant du light cuit. Le résultat simule une occlusion ambiante et un éclairage de base sans dépendance aux probes.
De plus, le vertex blending est intégré au shader. Lorsque la partie inférieure du mesh touche la surface du terrain, l'albédo, les normales et les masques de rugosité se mélangent en douceur. Cela élimine les joints durs, crée des effets d'accumulation de neige à la base des objets et fusionne visuellement les props dispersés avec le paysage en une géométrie unifiée. La méthode supprime complètement les joints d'intersection et fonctionne beaucoup plus vite que le post-processing ou les systèmes de blending voxel complexes.
Modification des ombres en cascade et flou programmatique
Les ombres standard de Directional Light dans Unity souffrent de deux extrêmes : soit trop nettes et en escalier, soit floues avec un scintillement noticeable quand la résolution Shadow Map est réduite. En conditions réelles, la douceur des ombres dépend de la distance à l'occluder et de la taille angulaire de la source lumineuse. L'ombre à la base de l'objet est toujours nette, mais la penumbra s'élargit avec la distance.
Pour simuler un comportement physiquement correct sans pipelines lourds, un algorithme de contact shadowing avec flou progressif des cascades est appliqué. Des solutions tierces modifient le pipeline d'ombres standard, ajoutant un filtrage basé sur la profondeur et la distance caméra. Cela maintient une haute résolution Shadow Map pour les zones proches et floute en douceur les cascades distantes, éliminant l'aliasing et réduisant les besoins en fill rate. Contrairement aux outils intégrés d'HDRP, cela évite les calculs de ray tracing ou les post-effets lourds, assurant la compatibilité avec du matériel milieu de gamme.
Points clés
• Le rendu hybride nécessite une séparation claire de la géométrie : lightmaps pour les grands statiques, Light Probes pour la petite déco et les objets dynamiques.
• L'accord manuel de UV2 et de la Texel Density économise la mémoire vidéo et booste le détail d'éclairage dans les zones critiques de gameplay.
• Les shaders de projection de lightmap de terrain éliminent le besoin de probes pour des milliers de petits objets, réduisant les Draw Calls et améliorant le batching.
• Le culling à distance des point lights via pool manager compense les fonctionnalités natives manquantes dans Built-in RP.
• Le flou progressif des ombres en cascade par distance résout l'aliasing et le scintillement sans impact sur les performances.
— Editorial Team
Aucun commentaire pour le moment.