[RESOLU]Utilisation excessive de la RAM par Unity sur mon projet.

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Utilisation excessive de la RAM par Unity sur mon projet.

Message par Alesk » 07 Sep 2019 18:55

Bon... Alors...

DESTROY C'EST LE MAL !!! :mrgreen:

... Et c'est une source de memory leak, ou bien d'utilisation trop intensive du Garbage Collector.

Utilise plutôt un système de pooling partout où tu dois instancier puis désactiver des éléments.

Sinon, pour le reste, il faut continuer de chercher par dichotomie.

Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: Utilisation excessive de la RAM par Unity sur mon projet.

Message par TheParadox » 07 Sep 2019 19:09

Alesk a écrit :
07 Sep 2019 18:55
DESTROY C'EST LE MAL !!! :mrgreen:
A ce point ! :lol: J'avais déjà lu que c'était à éviter mais je pensais pas que ça pouvait faire ça...
Alesk a écrit :
07 Sep 2019 18:55
système de pooling
Le pooling, c'est bien de réutiliser des éléments devenus inactifs plutôt que de les détruire et d'en ré-instancier ?
Par exemple réutiliser les balles tirées par une arme plutôt que d'en instancier de nouvelles ?

J'ai déjà implémenté ça malheureusement, justement pour tenter de réduire l’utilisation de RAM.... Les balles tirées par les armes se désactivent à l'impact, puis l'arme la réinitialise puis la re-tire quand elle le doit. Pareil pour les spawn/mort des ennemis.

Du coup actuellement je n'ai que peu de Destroy et d’instanciations....

Mais dans tous les cas, ça voudrait dire que Unity mets plusieurs minutes à vider le "Garbage Collector", ce qui me parait étrange non ? :cry:
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Utilisation excessive de la RAM par Unity sur mon projet.

Message par Alesk » 07 Sep 2019 19:53

Ok, donc pour le pooling, c'est bon.
Par contre as-tu regardé combien d'objets sont générés et stockés ?

Après il reste à voir toutes les autres pistes. A commencer par tout désactiver, puis à réactiver les morceaux de ton jeu un par un, jusqu'à trouver le(s) coupable(s).

Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: Utilisation excessive de la RAM par Unity sur mon projet.

Message par TheParadox » 08 Sep 2019 14:52

Alors je viens de voir un truc que m'avais échappé dans le profiler de mémoire :

Annotation 2019-09-08 144500.png
Annotation 2019-09-08 144500.png (100.17 Kio) Consulté 4592 fois


Visiblement ce qui consomme beaucoup de RAM, c'est "GFXDriver"... Qu'est ce ? ::d
Il est à 4.3 GB là, mais après un second lancement, il est monté à 9.3 GB....

Une rapide recherche Google, sur le site de Unity, il est dit que "GfxDriver The estimated amount of memory the driver is using on Textures, render targets, Shaders and Mesh data."

Donc visiblement ce que sature la RAM, c'est les textures et/ou shaders et/ou meshs...
A quoi cela peut-il être lié ?
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Utilisation excessive de la RAM par Unity sur mon projet.

Message par Alesk » 08 Sep 2019 19:47

ça peut être lié au fait que tu charges un max de choses sans rien optimiser, comme un gros cochon :gene:

Tu as quoi dans ta scène ? C'est ton projet avec le labyrinthe, éclairé avec SEGI ?

Note que tu as le détail de la répartition de la conso de ram affiché juste en dessous... Reste à voir ce qui coince le plus.

Là tu as des dizaines de milliers d'objets, et 0.7mo d'alloc sur le garbage collector, à chaque frame ! C'est "un peu" trop :roll:

Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: Utilisation excessive de la RAM par Unity sur mon projet.

Message par TheParadox » 08 Sep 2019 20:26

Alesk a écrit :
08 Sep 2019 19:47
Tu as quoi dans ta scène ? C'est ton projet avec le labyrinthe, éclairé avec SEGI ?
Oui c'est bien celui là. Sauf que là j'ai activé qu'un seul carré, les autres restent vide, pour des raisons de rapidité de chargement (avec les 8 carrés activés, il faut jusqu'à une dizaine de seconde environ pour que l'environnement soit généré, pas pratique pour tester des trucs lol).

Mais je pense pas que le problème viennent du générateur procédural, avant je n'avais pas de problème et pourtant il générait tout le temps les 8 carrés....
Alesk a écrit :
08 Sep 2019 19:47
dizaines de milliers d'objets
Ca fait beaucoup effectivement, mais ça dépend comment c'est compté... Du coup je sais pas si c'est vraiment excessivement énorme, ou si "ca va" ? :hehe:
Alesk a écrit :
08 Sep 2019 19:47
0.7mo d'alloc sur le garbage collector, à chaque frame
Oui effectivement j'avais pas vu ça... Mais je vois pas à quoi c'est du, pourquoi Unity fait ça ? Le GC c'est bien le truc qui récupère les assets/objets détruits/ supprimés ? J'avoue ne pas encore avoir pigé ce que c'est :roll:
Alesk a écrit :
08 Sep 2019 19:47
ça peut être lié au fait que tu charges un max de choses sans rien optimiser
C'est vrai que je charge beaucoup de choses, surtout le labyrinthe qui fait quand même 10x10x5 = 500 Gameobjects (500 morceaux d'environnement) qui en contiennent d'autres .
Mais après par contre, j'ai quand même instauré un 'object pooling' pour les instanciations fréquentes (ennemis / balles), donc bon on peut pas dire que j'ai pas optimisé (mème si je peux sûrement faire mieux) :mrgreen:

Enfin disons que, une fois l'environnement généré, je ne charge plus rien, à part quelques balles quand les ennemis tirent, qui sont ensuite réutilisées une fois que yen a assez d'instanciées, et des ennemis quand le joueur s'approche des spawners, qui pareil sont réutilisés quand il y en a assez de morts...

Du coup je vois pas vraiment d'où peuvent venir les 0.7 MO / frame .... et surtout 0.7 MO de quoi, qu'est ce que récupère le GC ?
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Utilisation excessive de la RAM par Unity sur mon projet.

Message par Alesk » 08 Sep 2019 20:55

Pour le GC, t'as de la lecture qui t'attend ici : https://docs.unity3d.com/Manual/Underst ... ement.html

Sinon, même remarque que les fois précédentes : désactive presque tout, et relance ton jeu en réactivant un morceau à la fois, pour identifier lequel génère toute cette surconsommation de ram.

Pour la génération de ton décors, si rien ne bouge par la suite, je te recommande de tout fusionner en un seul mesh avec ça : https://docs.unity3d.com/ScriptReferenc ... eshes.html
Ainsi, tu auras beaucoup moins de gameobjects dans ta scène, moins il y en a et mieux c'est, surtout pour des éléments statiques.
Par contre essaye de les fusionner par secteurs, et pas sur l'intégralité de la scène, comme ça tu pourras bénéficier de l'occlusion culling.

Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: Utilisation excessive de la RAM par Unity sur mon projet.

Message par TheParadox » 08 Sep 2019 22:50

Bon je pense avoir réglé le problème, Unity se stabilise à 5-6 GO de RAM maintenant ce qui me parait correct (?), la saturation ne revient plus.
Certains spawners étaient mal réglés, et s'activaient inutilement, ce qui faisait spawn des entités en continu à certains endroits (et comme c'est des petites grenades, bah je les avais pas "vu") :lol:

J'avais vraiment regardé partout, à part sur ceux-la, je les avait un peu oubliés (ils servent pas à grand chose pour l'instant) et je pensait pas qu'ils pourraient saturer la RAM comme ça...

En espérant que cette fois la problème ne reviendra pas ! :mrgreen:

Merci pour ton aide !
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [RESOLU]Utilisation excessive de la RAM par Unity sur mon projet.

Message par Alesk » 09 Sep 2019 07:19

De rien... Mais 5-6Go c'est encore beaucoup :gene:
A mon avis, il y a encore pas mal d'optimisations à faire !

Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: [RESOLU]Utilisation excessive de la RAM par Unity sur mon projet.

Message par TheParadox » 09 Sep 2019 14:39

Alesk a écrit :
09 Sep 2019 07:19
5-6Go c'est encore beaucoup :gene:
C'est vrai que c'est pas mal, mais franchement vu que tout est procédural ça ne m'étonne pas vraiment !
Et puisque Unity de dépasse plus les 6 GO, il n'y aura plus de problèmes de saturation !
Alesk a écrit :
09 Sep 2019 07:19
A mon avis, il y a encore pas mal d'optimisations à faire !
Mais oui, absolument, plus je réduirais la RAM consommée, mieux ce sera ! :mrgreen: Disons que pour l'instant je vais me contenter de ça, en pensant à bien optimiser les fonctionnalités que je rajoute pour éviter un nouveau problème de saturation.
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Répondre

Revenir vers « Unity le logiciel »