optimisation, Frustum Culling ?

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Riblito
Messages : 46
Inscription : 10 Juin 2022 11:32

optimisation, Frustum Culling ?

Message par Riblito » 19 Juil 2022 10:33

Bonjour !

Bon décidément j'ai souvent besoin de vous haha, mais c'est peut être ma dernière question ::d

Je suis actuellement sur un projet ou le terrain est en forme de cube ( comme minecraft ) mais en 2D vu à la Mario !
Chaque bloques sont en préfab que j'ai dupliqué à souhait pour former le terrain ( peut être pas la bonne façon de faire ? )

Le problème est que .... ça ram ! :gene: mais uniquement si je suis immobile, quand je déplace mon personnage le jeu est fluide .... je ne comprend pas du tout pourquoi !

Donc j'ai cherché pour faire disparaitre les cubes hors de la caméra et je suis tombé sur l'occlusion culling ... mais qui malheureusement fonctionne que sur du 3d. Puis j'ai vu le Frustum Culling qui est apparemment déjà activé dans unity.

Mais moi j'ai aucun élément qui disparait hors de la caméra ...

Auriez vous des explications ou des idées à me donner svp ? :coeur:

merci de votre aide!
Dernière édition par Riblito le 28 Juil 2022 21:56, édité 2 fois.

Avatar de l’utilisateur
jmhoubre
Messages : 857
Inscription : 05 Oct 2019 22:05

Re: optimisation, Frustum Culling ?

Message par jmhoubre » 19 Juil 2022 17:10

Bonjour,

si tu es immobile, comment t'aperçois-tu que ça rame ? Combien de FPS quand le joueur bouge et quand il est immobile ?

Les cubes sont des cubes Unity de base, ou ils ont des composants supplémentaires ?

Combien de cubes visibles dans la scène ? On peut avoir une copie d'écran ?

Riblito
Messages : 46
Inscription : 10 Juin 2022 11:32

Re: optimisation, Frustum Culling ?

Message par Riblito » 20 Juil 2022 08:39

Et bien je m'en suis rendu compte à cause de la pluie que j'ai ajouté, quand je me déplace elle est fluide, à l'arrêt c'est soirée photos chez mamie.
J'ai rajouté quelques ligne de bloc et le jeu est figé complétement ....

j'ai réalisé les cubes comme ça :
j'ai ajouté le sprite du cube dans la scene
j'ai rajouté son collider
j'ai ajouté son flowmachine/script
et j'ai transformé le cube en préfab que je duplique.....

j'ai environ 500 cubes .... mais j'ai prévu de faire bien plus profond que ça, du coup c'est problématique :(

voici une capture avec un cube de sélectionné pour te rendre compte
Image

Avatar de l’utilisateur
jmhoubre
Messages : 857
Inscription : 05 Oct 2019 22:05

Re: optimisation, Frustum Culling ?

Message par jmhoubre » 20 Juil 2022 09:28

Merci,
Et bien je m'en suis rendu compte à cause de la pluie que j'ai ajouté, quand je me déplace elle est fluide, à l'arrêt c'est soirée photos chez mamie.
J'ai rajouté quelques ligne de bloc et le jeu est figé complétement ....
Et pourquoi la pluie ne serait-elle pas la cause de tes tourments ?

Merci de désactiver la pluie, et de mesurer les FPS (fenêtre Game, section Stats) et de donner les résultats sans la pluie :
- à l'arrêt
- en mouvement

Riblito
Messages : 46
Inscription : 10 Juin 2022 11:32

Re: optimisation, Frustum Culling ?

Message par Riblito » 20 Juil 2022 10:03

je viens de faire les tests !

Avec pluie :
en mouvement : 14 FPS
Sans bouger : 7 FPS

Sans pluie :
en mouvement : 15 FPS
Sans bouger : 8 FPS

j'ai gagné vraiment très peu de fps ...

c'est peut être à cause du nombre de script dupliqué ? vu que chaque bloc à du script ? ( j'espère pas ^^' )

et je comprend juste pas pourquoi les fps chutent quand je suis immobile ... ça n'a pas de sens, si ?

edit : c'est vraiment les bloc, j'ai presque tout retiré et je suis à 45FPS :(

Edit 2 : j'ai retiré les flow/script des blocs et je roule sur les fps .... donc, j'ai regardé et j'ai vu que mon system de regain de HP des blocs avec le temps me fait gagner 20 fps quand je retire la fonction.
Par contre, c'est vraiment pas possible de faire disparaitre quand c'est hors de vu ? car quand je vais augmenter la profondeur et le nombre de bloc ça va être impossible :pleur4:

Avatar de l’utilisateur
jmhoubre
Messages : 857
Inscription : 05 Oct 2019 22:05

Re: optimisation, Frustum Culling ?

Message par jmhoubre » 20 Juil 2022 15:17

Re,
effectivement, ça ne fait pas lourd... C'est sur que 500 prefabs avec script, ça démarre mal...

Je ne sais pas ce que tu veux faire, donc je vais peut-être te proposer des pistes inadéquates, mais je vois des choses possibles :
1) tu n'actives les scripts que sur la couche du dessus. A priori, les couches situées 2 niveaux sous le joueur n'ont pas de raison de se régénérer, non ? Quand un sprite disparaît, dans sa méthode OnDestroy il active le sprite situé sous lui.
2) tu abandonnes la régénération. Si des scripts de sprites doivent être présents pour une autre raison, tu peux peut-être n'activer que ceux des sprites situés à une certaine distance du joueur (dans minecraft, seuls les chunks proches du joueur sont actifs).
3) Tu fais un manager de sprites : c'est lui qui fait tourner l'update pour les sprites. Par exemple il tient à jour la liste des sprites qui sont en cours de régénération : à chaque frame, il augmente leur HP, s'ils ont atteint leur HP max, il les sort de la liste.
et je comprend juste pas pourquoi les fps chutent quand je suis immobile ... ça n'a pas de sens, si ?
Non, mais sans examiner ton code, pas facile de t'aider. Et si j'ai bien compris, tu fais ton projet avec Bolt ou équivalent ? Je ne connais pas Bolt suffisamment pour t'aider.

Riblito
Messages : 46
Inscription : 10 Juin 2022 11:32

Re: optimisation, Frustum Culling ?

Message par Riblito » 21 Juil 2022 14:52

Merci pour ta réponse !
dans sa méthode OnDestroy il active le sprite situé sous lui.
C'est possible ça ? de lui dire tu actives le script de l'objet en dessous ? j'en apprends tous les jours
2) tu abandonnes la régénération. Si des scripts de sprites doivent être présents pour une autre raison, tu peux peut-être n'activer que ceux des sprites situés à une certaine distance du joueur (dans minecraft, seuls les chunks proches du joueur sont actifs).
J'ai retiré le system de régénération, j'ai vu au plus simple ... et puis c'est plus réaliste.
Par contre pour la distance, penses tu qu'il faudrait mettre le script ( celui qui dit quand le joueur est proche = tu t'affiches ) sur les blocs en question ou sur le player ? sur le player je pense ...

Avatar de l’utilisateur
jmhoubre
Messages : 857
Inscription : 05 Oct 2019 22:05

Re: optimisation, Frustum Culling ?

Message par jmhoubre » 21 Juil 2022 22:28

Le player est une possibilité, mais le plus logique est un gameobject empty.

Riblito
Messages : 46
Inscription : 10 Juin 2022 11:32

Re: optimisation, Frustum Culling ?

Message par Riblito » 25 Juil 2022 11:16

merci pour ton aide !
Je vais travailler sur cela, je reviendrais si besoin ::d ::d

Riblito
Messages : 46
Inscription : 10 Juin 2022 11:32

Re: optimisation, Frustum Culling ?

Message par Riblito » 28 Juil 2022 22:01

Bon je reviens vers vous car j'ai une dernière question

J'ai réussi le script pour faire en sorte que si tu es trop loin alors l'objet passe en inactif et si trop proche en actif.... script que j'ai mis dans un empty ( et j'ai mis les bloc dedans pour pouvoir les désactiver / réactiver )

Il y a qu'une chose que je comprends pas, c'est comment faire en sorte que ça prenne en compte tout les bloc ? car j'ai essayé en indiquant les object avec le taf "bloc" ou alors avec une variable avec le nom de l'objet dedans, mais ça fonctionne que sur un bloc ...

il faut faire une sorte de boucle qui tournerait sur tout les bloc du jeu ?

Répondre

Revenir vers « Unity le logiciel »