Accueil logo MakeYourGame gachetteG gachetteD paddleG paddleH paddleD paddleB buttonG buttonH buttonD buttonB

Découvrez le système on demand rendering de Unity 2019

par superelien

Découvrez le système "on demand rendering" de Unity 2019, une nouvelle API qui permet de choisir le framerate dynamiquement.

Historiquement avec Unity, nous pouvons fixer et/ou changer le framerate par script avec Application.targetFrameRate ou Vsync count. Mais cette approche change non seulement la fréquence du rendering, mais aussi toutes les autres parties de notre jeu, comme la boucle de jeu. Avec cette nouvelle API "on demand rendering", on peut maintenant découpler le rendering de la boucle de jeu.

Le fait de pouvoir régler dynamiquement la fréquence du rendering, permet d'optimiser notre jeu, tout en assurant une consommation de la batterie du mobile plus faible.

Exemples de cas où utiliser "on demand rendering"

- Affichage d'un menu (IHM) : ici on a pas besoin d'une fréquence de fou, car l'interface est assez statique en général. En diminuant la fréquence du rendering, on économise de la batterie, tout en laissant les events (ex: touch) actifs.

- Jeux en tour par tour: sur ce type de jeu, il arrive souvent que l'on ait des périodes basses d'activités... on peut ainsi aussi diminuer/ajuster la fréquence.

- Machine learning: il est intéressant ici de régler la fréquence du rendering afin de libérer plus de ressources sur la zone qui  en nécessite le plus : les calculs pour l'apprentissage de notre "brain"

- Gestion de la performance: si vous souhaitez contrôler la vie de la batterie ou encore la température du CPU, particulièrement si on utilise le package adaptive performance, alors le on demand rendering est ici aussi utile.

Comment utiliser on demand rendering ?

Cette API est disponible dès Unity 2019.3, supportée sur toutes les plateformes, avec tous les renderer pipeline (built-in, LWRP, HDRP, et URP).

De manière très simple pour ajuster la fréquence du rendering il suffit de faire:

void Start()
    {
        QualitySettings.vSyncCount = 0;
        Application.targetFrameRate = 60;
       // Quand le menu démarre, on ajuste le rendering à 20fps
        OnDemandRendering.renderFrameInterval = 3;
    }
Afin de savoir, en cours de script, quelle est la valeur effective de la fréquence, on peut aussi utiliser OnDemandRendering.effectiveFrameRate ou OnDemandRendering. willThisFrameRender.

Exemple d'utilisation

Dans l'exemple suivant on décide de diminuer à 20 FPS la fréquence du rendering quand on ne touche pas l'écran, et 60 FPS sinon.

  void Update()
    {
        if (Input.GetMouseButton(0) || (Input.touchCount > 0))
        {
            // On touche l'écran ou click souris: render àt 60 FPS (chaque frame).
            OnDemandRendering.renderFrameInterval = 1;
        }
        else
        {
            // sinon retour à 20 FPS (chaque 3 frames).
            OnDemandRendering.renderFrameInterval = 3;
        }
    }

Voilà ! C'est aussi simple que cela ... A vous de tester et prendre en main cette nouvelle API.

Venez nous en parler sur discord.

Retrouvez un projet mis à disposition par Unity pour voir en action l'API On Demand Rendering.

Connectez-vous pour applaudir applause logo 0 claps