En bref : une végétation dense est rarement tuée par les seuls comptes de triangles ; elle meurt de mille draw calls, d'overdraw dû à des cartes alpha négligées, et d'ombres dont personne ne se souvenait qu'elles étaient actives. Dépensez votre effort dans cet ordre : instanciation d'abord, distances de cull ensuite, ombres troisièmement, LOD quatrièmement, placement de densité cinquièmement, et vérifiez chaque étape avec la même caméra fixe, une variable à la fois, sinon vous n'apprendrez rien. Ce guide couvre chaque étape avec la signature du profileur qui vous dit que c'est votre problème.
Une vraie forêt se rend « gratuitement » car la physique est massivement parallèle. Votre GPU peut simuler le rendu à 60 fps, mais seulement si vous cessez de saboter la machinerie que les moteurs livrent déjà pour exactement ce travail.
Le modèle mental : cinq goulots, un ordre
La performance de la végétation n'est pas un problème, c'en est cinq, et ils dominent selon une séquence prévisible. Les draw calls saturent d'abord le CPU ; la distance de cull décide de combien vous demandez même au GPU de dessiner ; les ombres doublent silencieusement le coût de tout ce qui en projette ; les LOD et l'overdraw régissent la facture par pixel ; et le placement de densité décide combien de tout cela vous fallait réellement. Attaquez-les dans le désordre et vous optimiserez quelque chose qui n'était pas le goulot. L'ordre ci-dessous est celui où les coûts mordent réellement.
L'instanciation d'abord, tout le reste ensuite
Un arbre dessiné 5 000 fois est radicalement moins cher que 5 000 arbres individuels : les deux moteurs regroupent les meshes répétés en draws instanciés, et votre premier travail est simplement de ne pas saboter cette machinerie.
Unreal regroupe via le foliage et les hierarchical instanced static meshes ; Unity via le GPU instancing et les détails de terrain. Ce qui brise silencieusement le regroupement :
- de la végétation placée comme acteurs/objets uniques au lieu d'instances ;
- des variantes de matériau par instance : utilisez des données par instance (couleur, échelle) dans un seul matériau au lieu d'en créer un par apparence ;
- un placement dispersé organisationnellement, empêchant le moteur de culler les grappes en unités.
Le signe au profileur est sans ambiguïté : des draw calls qui grimpent avec le nombre de plantes. Si une vue de forêt affiche des milliers de draw calls, corrigez cela avant de toucher à quoi que ce soit d'autre. Rien plus bas dans cette liste ne vous sauvera, car vous êtes CPU-bound avant même que le GPU démarre. Une végétation instanciée saine tient des draw calls dans les basses centaines pour toute une vue de forêt, quel que soit le nombre de milliers de plantes.
Les distances de cull, c'est de l'argent gratuit
L'herbe n'a pas besoin de se rendre à 800 mètres : réglez des distances de cull par type (couvre-sol 30–60 m, buissons 100–200 m, seuls les arbres méritent de longues distances) avec des plages de fade pour cacher le pop.
C'est le réglage à plus forte valeur par minute de tout le pipeline, et il reste régulièrement à « infini » car il y est par défaut et personne ne le remarque. Le raisonnement est perceptif : le couvre-sol sous-tend moins d'un pixel bien avant 100 m ; il ne contribue littéralement rien à l'image finale tout en coûtant vertices, overdraw et travail d'ombre chaque frame. La couverture lointaine appartient à des systèmes moins chers : la couleur du matériau de terrain, des impostors opaques, ou simplement le LOD lointain de la couche de terrain peint du bon vert.
Les plages de fade (dithered ou alpha) cachent le pop-out pour que les joueurs ne voient jamais la distance de cull elle-même. Réglez le fade juste assez long pour être invisible et pas plus : un fade trop long signifie que vous payez deux représentations de la même plante pendant le crossfade.
Les ombres : la moitié silencieuse de la facture
Coupez la projection d'ombres dynamiques pour le petit couvre-sol, gardez-la pour les arbres, et limitez-la en distance pour les buissons ; les ombres d'herbe doublent votre coût pour un gain visuel quasi nul.
Chaque brin d'herbe dans la passe d'ombres est dessiné à nouveau, du point de vue de la lumière. Dans les scènes denses, la passe d'ombres coûte souvent autant que la passe de base, ce qui signifie que les ombres d'herbe peuvent être le plus gros poste de tout le budget végétation tout en étant visuellement indiscernables d'un simple assombrissement ambiant à la base de la touffe. Le correctif est presque gratuit : projection d'ombre coupée pour le couvre-sol, activée pour les arbres (leurs ombres font un vrai travail compositionnel), limitée en distance pour l'entre-deux. Vérifiez ensuite la passe d'ombres dans votre profileur avant et après : c'est généralement le plus gros gain unique après l'instanciation, et ça prend des minutes.
Les LOD : budgétez la silhouette, pas les polygones
Une bonne chaîne de LOD de végétation préserve le contour et taille l'intérieur ; vérifiez les distances de transition à l'œil, et optimisez le plus durement le dernier mesh LOD avant l'impostor, car c'est celui à l'écran dans chaque plan large.
Les plantes de couche basse comme celles-ci sont là où les réglages de distance de cull et d'ombre paient le plus : des milliers d'instances, chacune ne contribuant presque rien au-delà de quelques dizaines de mètres, chacune doublant en coût si elle projette une ombre dynamique.
Une chaîne pratique pour un arbre héros : mesh complet → réduction d'intérieur ~50 % (même silhouette) → ~15 % avec cartes fusionnées → impostor/billboard opaque. Deux notes qui évitent de vraies douleurs :
- Même dans les moteurs à géométrie virtualisée, les impostors lointains restent rentables, car overdraw et ombres demeurent des coûts réels quelle que soit la façon dont les triangles sont payés. La géométrie virtualisée résout le compte de triangles, pas le coût de transparence.
- La transparence est l'ennemie à distance. Les cartes alpha-testées denses empilent l'overdraw exactement là où le GPU est le plus faible : les LOD du milieu. Préférez des feuilles en mesh de près et des impostors opaques de loin ; le milieu chargé en alpha est là où se cache le temps de frame. Si un LOD est mystérieusement cher, c'est presque toujours le transparent.
L'overdraw : le coût que vous ne voyez pas
L'overdraw, c'est le GPU qui shade le même pixel plusieurs fois à travers des surfaces transparentes empilées, la malédiction propre à la végétation, invisible dans l'image finale, et souvent la raison qu'une scène « légère » est lente.
La plupart des moteurs ont un mode de visualisation de l'overdraw ; activez-le et regardez un champ d'herbe. S'il brille blanc, vous shadez chaque pixel cinq ou dix fois tandis que les cartes alpha se superposent. Mitigations : moins de brins, plus grands, au lieu de beaucoup de fins ; géométrie opaque là où la silhouette le permet ; et un cull agressif des cartes qui contribuent le moins. L'overdraw est le coupable classique du « ma scène est lente mais rien n'a l'air cher », car les triangles sont bon marché et les pixels sont payés de nombreuses fois.
La densité est une décision de design, pas une position de curseur
Dense là où le joueur marche et regarde, clairsemée ailleurs : une bande de 20 m de détail riche le long du chemin se lit comme « luxuriant partout » à une fraction du coût uniforme.
Les masques de pente et de hauteur en font une partie automatiquement (les faces raides et les plateaux lointains n'ont pas besoin de couvre-sol du tout), et le regroupement fait le reste : des grappes avec des vides se rendent moins cher que le remplissage uniforme et paraissent plus naturelles, si bien que le gain de perf et le gain de beauté pointent dans la même direction. C'est là que l'outillage de placement gagne sa place : peindre la densité avec des masques et des règles par espèce, puis cuire directement en instances natives du moteur, c'est la différence entre un après-midi et une semaine. C'est le cœur de ce que fait le scatter de Numivo, et parce qu'il cuit en foliage ordinaire et meshes instanciés, chaque technique de cet article s'applique inchangée au résultat. Il n'y a aucun runtime de plugin entre vous et les optimisations standard ; la scène cuite est juste du contenu de moteur.
La boucle de profilage
Même caméra, même vue, une variable à la fois : mesurez le temps de frame GPU, les draw calls, la passe d'ombres et l'overdraw après chaque changement.
Choisissez une « caméra de budget » fixe dans votre vista la plus dense et capturez les stats avant et après chaque étape ci-dessus. La discipline compte car les optimisations de végétation interagissent : un changement de distance de cull modifie combien d'instances la passe d'ombres voit ; un changement de LOD modifie l'overdraw ; un changement de densité modifie tout à la fois. Les survols aléatoires produisent des chiffres aléatoires et des débats infalsifiables sur l'utilité d'un changement. Les caméras fixes produisent des décisions défendables. Gardez les chiffres dans une feuille partagée et la courbe de tendance vous raconte l'histoire qu'une mesure isolée ne peut pas.
Chiffres de terrain à voler
- Cull du couvre-sol : 30–60 m · buissons : 100–200 m · arbres : ligne de vue
- Draw calls pour une vue de forêt instanciée saine : basses centaines
- Part de la passe d'ombres en scènes denses : souvent ~la moitié du coût végétation ; les ombres d'herbe coupées sont le plus gros gain le moins cher qui soit
- Largeur de la bande de dressing le long du chemin qui lit « luxuriant partout » : ~20 m
- Nombre de LOD pour un arbre héros : 3 mesh LOD + impostor opaque
- Cible d'overdraw pour l'herbe : moins de ~3× dans la vue d'overdraw, pas le 8–10× blanc éclatant des cartes alpha empilées
Mini-FAQ
Nanite / la géométrie virtualisée rend-elle ceci obsolète ? Cela change quelles lignes dominent, pas la discipline. L'overdraw des cartes alpha, le coût des ombres et le surcoût par instance demeurent tous, et les impostors à distance paient toujours. Mesurez sur votre matériel cible plutôt que de supposer que la nouvelle techno a résolu votre goulot précis ; elle l'a peut-être déplacé, pas supprimé.
Pourquoi ma scène est-elle lente même à faible densité ? Les suspects habituels, dans l'ordre : de l'herbe projetant des ombres dynamiques, un matériau unique par variante sabotant le regroupement, des distances de cull à l'infini, ou une chaîne de LOD alpha-testée empilant l'overdraw. Chacun a une signature de profileur distincte : vérifiez avant de changer, sinon vous corrigerez le mauvais.
À quel point est-ce « trop dense » pour le gameplay ? La lisibilité en combat plafonne la densité avant la performance : si les silhouettes disparaissent dans le fouillis, les joueurs blâment le jeu, pas l'habillage. Dense dans la vista, modéré dans l'arène est le motif qui survit à la fois au profileur et au playtest.
Cuire ou garder procédural ? Cuisez pour la sortie : les instances cuites profilent honnêtement et se livrent sans dépendance runtime. Gardez le setup procédural (masques, règles, seeds) sous contrôle de version pour pouvoir re-cuire après un changement de terrain sans refaire le travail à la main.
Dense d'aspect et rapide n'est pas une contradiction : c'est surtout la discipline de faire cinq choses dans le bon ordre et de prouver chacune avec la même caméra.