Consommation excessive de mémoire

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
calypsomen
Messages : 45
Inscription : 26 Mars 2019 16:39

Consommation excessive de mémoire

Message par calypsomen » 03 Août 2020 09:52

Bonjour à tous !

Je rencontre un problème dans mon jeu open world, j'ai construit une île assez grande avec des éléments répartis sur toute l'île (un village, un stade, des entrepôts, une route EasyRoads, une usine etc..). Le nombre de GameObject commence donc à être important sur la scène.
Quand je fais un build du jeu, la consommation de mémoire est très excessive (6Go utilisés voire plus) et le nombre de FPS est très faible (inférieur à 20)donc quasi injouable.

Tous mes objets sont bien équipés de LOD et j'ai construit l'occlusion culling. Tous les objets sont aussi en static.

Auriez-vous des solutions pour une scène contenant un gros nombre de GameObject afin que la consommation de mémoire soit beaucoup moins important ? Lorsque le terrain était vide, je n'avais aucun problème donc j'en déduis qu'une optimisation est nécessaire auprès des objets mais comment faire ? 😕

Je vous remercie énormément par avance pour votre aide !

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Consommation excessive de mémoire

Message par Max » 03 Août 2020 12:22

Bonjour,

c'est toujours difficile de répondre avec précision à ce genre de problème. Surtout qu'il manque énormément d'éléments permettant de se faire une juste idée du soucis, comme par exemple ta config, ou les élément statistique de base de ta fenêtre Game (Tris, Batches, Passcalls, etc...). As-tu regardé du coté du profiler pour mieux cerner où se situe la charge ? Au delà du nombre d'objets à afficher, quels sont aussi les effets utilisés dans ta scène (VFX, postprocess, nbre/type de lights, type de shaders, etc...) ? Tu parles d'occlusion culling, mais en extérieur son effet est souvent très limité.
Après il n'y a pas de secret, si ta scène est bien trop lourde, il va falloir explorer d'autre approches.

Un lien intéressant, à consulter si pas déjà fait: https://docs.unity3d.com/Manual/Optimiz ... mance.html
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

calypsomen
Messages : 45
Inscription : 26 Mars 2019 16:39

Re: Consommation excessive de mémoire

Message par calypsomen » 03 Août 2020 13:02

Bonjour,

J'ai supprimé des objets inutiles de ma scène, mais la quantité de mémoire utilisée reste élevée.
Dans le profiler, j'obtiens ceci :
Image
Image

Dans les 5GB d'Assets du profiler, 3.97GB sont utilisés pour les Texture2D. J'ai supprimé certains objets inutiles qui consommaient le plus dans ma scène, mais la quantité de mémoire utilisée reste élevée.

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Consommation excessive de mémoire

Message par Max » 03 Août 2020 13:33

les textures ont toujours mis à mal les ressources niveau mémoire.
Donc commence par là, par exemple en terme de résolution, voir au niveau de la compression.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
stigma
Messages : 1408
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst
Contact :

Re: Consommation excessive de mémoire

Message par stigma » 03 Août 2020 16:30

Question basique, mais tes textures sont bien toutes en puissance de 2 ?
Sinon j'ai aussi des objets partout sur mon île réparties en zones. Par défaut tous les objets des zones sont désactivées. Quand j'entre dans une zone, les objets sont activés et quand je sors, ils sont désactivés. En général les objets sont dans un bâtiment qui reste activé. Donc de loin, on se rend pas compte qu'ils sont vides.

calypsomen
Messages : 45
Inscription : 26 Mars 2019 16:39

Re: Consommation excessive de mémoire

Message par calypsomen » 04 Août 2020 11:55

Merci beaucoup pour vos réponses.

Le truc c'est que même quand les objets sont désactivés, la consommation de mémoire reste élevée.
Il faut qu'ils soient supprimés de la scène pour que la consommation diminue.
Même si tous les objets sur mon terrain sont désactivés, la consommation reste identique.
Donc je pensais justement qu'en affichant que très peu d'objets et en désactivant les objets lointains du joueur ou selon la taille des objets (via LOD notamment), ça allait changer quelque chose mais pas du tout, est-ce normal que les textures consomment de la RAM même si elles ne sont pas visibles ?

Le problème c'est que je n'ai pas vraiment rempli toute ma carte donc je suis un peu bloqué vis à vis de ça, même si j'optimise les textures, je vais devoir ajouter encore pas mal d'objets sur ma carte pour faire une ville complète donc je vois mal comment je vais pouvoir réaliser ça sans avoir une consommation excessive de mémoire :/

Auriez-vous des solutions vis à vis de ça ?

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Consommation excessive de mémoire

Message par Max » 04 Août 2020 12:06

calypsomen a écrit :
04 Août 2020 11:55
est-ce normal que les textures consomment de la RAM même si elles ne sont pas visibles ?
oui bien sûr. Un objet désactivé ne veut pas dire qu'il n'est pas présent dans ta scène. Il n'est simplement pas visible. Cela va influencer sur les perf niveau framerate, mais ne changera rien niveau ressources mémoire. Comme pour la partie LOD, cela va jouer sur l'optimisation du framerate, mais ne changera rien niveau ressource, voir avoir même tendance à avoir l'effet inverse.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

calypsomen
Messages : 45
Inscription : 26 Mars 2019 16:39

Re: Consommation excessive de mémoire

Message par calypsomen » 05 Août 2020 00:06

Ne serais-ce pas possible D'utiliser AssetBundle ? Pour load les assets du terrain qui sont proches de nous et unload les assets lointains, je ne sais pas si c'est possible. Peut être que ça causerait un freeze le temps de l'instanciation de certains gros objets ou prefabs contenant un nombre important d'objets.

Je ne sais pas si ça pourrait être une solution? Ça permettrait d'économiser de la mémoire vu que les assets seraient unload donc plus présents et utilisés dans la scène jusqu'à ce que le joueur revienne dans la zone de l'asset.

Avatar de l’utilisateur
stigma
Messages : 1408
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst
Contact :

Re: Consommation excessive de mémoire

Message par stigma » 05 Août 2020 08:28

C'est à creuser.

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Consommation excessive de mémoire

Message par Max » 05 Août 2020 09:16

oui, un chargement/déchargement dynamique est une des solutions.
C'est pas toujours simple à mettre en œuvre, et en effet tu risque d'être confronté à des lag.
Quitte à faire, n'est-il vraiment pas possible de diviser ta scène en scènes de taille plus modeste (comme fait dans la plupart des jeux) ? Le SceneManager est ton ami.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « Unity le logiciel »