Impact de la compression sur le temps de rendu
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 3046
Bonjour à toutes et à tous,

Je travaille sur une animatique simple, rendue avec le workbench de Blender, et dont les temps de calculs sont très rapides.
Je n'avais jamais pensé à un élément rentrant pourtant dans l'équation du temps de calcul d'une animation : la compression des images rendues.

Comme chacun le sait, nos disques durs n'ont pas un espace de stockage infini. Or, pour une animation, outre les meshs, textures et autres assets pouvant occuper un espace non négligeable, les résultats des rendus en occupent probablement une plus grande partie encore suivant la durée du projet. On doit alors peser sur la balance l'espace occupé par les rendus et leur qualité visuelle.

D'ordinaire, et probablement comme un certain nombre d'entre vous, je privilégie les images PNG pour mes rendus car leur méthode de compression est dite sans perte. Le processus de compression est réversible, autrement dit, la compression n'endommage pas l'image. A contrario, le JPEG est un algorithme de compression avec perte, donc non réversible. On a des défauts visuels qui apparaissent surtout si on compresse trop l'image. Pire encore, plus on ré-enregistre un fichier JPEG, plus sa qualité se dégrade. On peut penser à une séquence d'images JPEG qu'on va ensuite compresser en MPEG-4 pour rendre son animation finale puis uploader sur YouTube qui va réencoder la vidéo... En tout, on a 3 compressions successives qui dégradent chacune un peu plus les images.
La compression nous permet cependant de préserver de l'espace disque pour un même fichier.

En revanche, il faut prendre un autre point en compte : la vitesse à laquelle un fichier est compressé.
L'algorithme de compression JPEG est plutôt rapide.
L'algorithme de compression PNG, le même que pour les fichiers ZIP, est plus lent. Mais à quel point ? Quel impact a-t-il sur le temps de rendu ?

J'ai fait un test de rendu sur 100 frames en WQHD (2560x1440), où les images sont calculées en environ 0.2s. J'ai donc ainsi une bonne visibilité du temps pris pour écrire le fichier sur le disque.

J'ai utilisé une qualité de 100% pour les JPEG pour limiter au maximum les défauts visuels et m'approcher au plus de celle d'un PNG. Quant au PNG, j'ai limité la compression à 5% dans un premier temps. Cependant, le niveau de compression étant très faible, le poids des images était plus que conséquent et donc non viable pour une animation complète. J'ai donc ensuite choisi le taux de compression minimal pour m'approcher du poids d'un rendu de 100 images avoisinnant celui en JPEG.

Afin de limiter au maximum les biais, j'ai écrit les fichiers sur un RAMDisk, c'est-à-dire un espace de stockage dans la RAM de l'ordinateur. L'avantage ici est de limiter au maximum le temps en écriture sur le disque*, la RAM étant toujours bien plus rapide que le meilleur SSD actuel.
J'ai sélectionné les mêmes instants de départ (lancement du rendu) et de fin (arrivée à la frame 100) pour chaque résultat.

Voici les résultats. Le format BMP, qui ne compresse rien ici, sera la valeur étalon.
BMP (sans compression):  1.02 Go (100%), 39.05s  (100%)
JPEG     qualité 100% :  79.6 Mo (7.8%), 37.20s  (95.2%)
JPEG2000 qualité 100% :  2.99 Mo (0.3%), 42.14s (107.9%)
PNG  compression 5%:     1,03 Go (101%), 35.11s  (89.9%)
PNG compression 67%:     94.7 Mo (9.3%), 79,09s (202,5%)


On voit donc qu'en PNG, si on veut prioriser la rapidité de compression, il faut en payer un prix conséquent en espace disque. De l'autre côté, en optimisant l'espace disque, la compression prend un temps non négligeable sur le temps de calcul total de l'animation. De son côté, malgré les défauts qu'il peut apporter aux rendus, le JPEG constitue un très bon compromis entre rapidité, qualité et taille des fichiers.
Le JPEG2000, légèrement plus lent, est lui aussi recommandable grâce à sa capacité impressionnante à compresser. On pourra le privilégier pour des rendus en format 4K ou supérieurs... à condition de pouvoir l'ouvrir dans son logiciel de montage favori, ce qui est loin d'être généralisé. Blender en est capable bien entendu !

Pour conclure, le temps de compression peut avoir un impact plus ou moins important sur le temps de rendu des images. Avec EEVEE et les calculs très rapides, l'impact sera évidemment plus important. Si le temps de calcul d'une frame est plus long, comme avec Cycles, alors le surplus de temps consacré à la compression de l'image sera plus négligeable. Il faut donc veiller à optimiser non seulement le rendu mais aussi le moyen d'enregistrement des fichiers suivant la situation.
Enfin, il faut aussi noter que la compression est opérée par le processeur et donc intimement liée à ses performances. L'impact du disque utilisé est quant à lui peu voire pas du tout visible pour de petits fichiers (le RAMDisk utilisé ici n'accélère aucunement l'écriture des fichiers mais évite d'éventuels aléas).

Voilou.


* Le temps d'écriture sur le disque pourra dépendre de la saturation du cache du disque. Le cache est une mémoire très rapide temporaire pour accélérer les transferts de données. lle est souvent comprise en 64 et 256Mo pour les disques durs grand public, voire un ou plusieurs gigaoctets pour les SSD.
Le disque s'occupe ensuite de copier le contenu du cache sur son espace permanent quand il n'est plus sollicité. Sous Linux, on peut forcer cette écriture avec la commande `sync` (recommandée par exemple avant de retirer une clé USB). Après avoir copié un gros fichier, vous pouvez voir le temps que prend cette opération parfois assez longue ! Pour les gros volumes de données, ce cache pourrait ne pas suffire en taille et donc entraîner un goulot d'étranglement le temps que le disque évacue le trop plein de données du cache vers sa mémoire permanente, pour pouvoir réceptionner les données qui continuent d'arriver.

Un RAMDisk n'a pas besoin de cache puisque le processeur est en ligne directe avec la mémoire RAM. Et petit bonus, le RAMDisk est très pratique pour écrire de nombreuses choses sans détériorer un SSD. Par contre la RAM coûte assez cher donc on peut pas en avoir des tonnes.

Voilà la différence entre mon SSD NVMe (PCI-E 3.0) et un RAMDisk (mémoire DDR4 3200MHz dual-channel). Il n'y a pas photo !

Contribution le : 25/07 09:57:17
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Graphisme alternatif les addons pour blender : bumarin etc 8 343 Aujourd'hui 02:09:45
meltingman 
The Blender Clan 'tchat Avenir du blender clan    [1][2][3]...[40] 397 38816 17/09 17:56:10
Bibi09 
Questions & Réponses [non résolu] IES Lights 4 116 17/09 16:24:14
jcnouveau 
Questions & Réponses Couleur de peau 0 55 17/09 14:31:20
Carne 
Hors Sujet !! Sinoceratops project - Ateliers suivies de A à l'Animation    [1][2][3][4] 34 4010 16/09 20:53:38
meltingman 
Questions & Réponses Combien pour me faire un script qui permet d'ajouter une option driver sur l'icone de l'oeil? 6 347 16/09 14:56:23
lucky 
Questions & Réponses Ouvrir une définition (fichier .txt) de l'objet actif avec un raccourci depuis la vue 3D 0 61 15/09 15:30:03
Melodicpinpon 
[WIP] et travaux terminés [terminé] Utilisation de Blender pour esquisser des objets réels    [1][2] 12 253 14/09 19:18:19
MilWolf 
The Blender Clan 'tchat ANNONCE IMPORTANTE : LE BLENDER CLAN REOUVRE !! Etat des lieux sur le présent et le futur :)    [1][2] 19 2268 14/09 12:20:39
Riggelm 
The Blender Clan 'tchat Les tutos de Stev ( CG Groovy ) 6 1117 13/09 11:17:43
stev 
Graphisme alternatif faire de la bd avec blender    [1][2][3]...[8] 79 6020 12/09 19:01:54
blend74 
Questions & Réponses Les objets qui voyagent seuls 2 148 12/09 14:20:48
D3DModelisation 
Hors Sujet !! les tutos de Moonboots    [1][2][3]...[21] 202 18583 11/09 20:09:34
moonboots 
Moteur de jeu GameBlender et alternatives [non résolu] Cs (vaisseau)    [1][2][3]...[55] 544 167615 11/09 10:08:20
sbkodama 
Questions & Réponses control sur le grow mask et smooth mask en sculpt 2 171 10/09 23:50:51
maxime 
Questions & Réponses Difficultés de reprise d'un vieux projet 4 277 10/09 12:39:47
GLM 
[WIP] et travaux terminés [WIP] La gabarre '' Le Gros Ventre''    [1][2][3]...[10] 90 15846 08/09 21:11:55
yawdpwal 
Questions & Réponses Comment faire la symétrie d’une multitude d’éléments. 4 312 06/09 14:55:39
jcnouveau 
Questions & Réponses Version portable et configurée sur Mac et Linux 0 169 06/09 13:43:15
Melodicpinpon 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS Unity - Version alpha disponible + discord    [1][2][3]...[67] 668 147108 06/09 12:44:54
Hook 

Qui est en ligne
91 utilisateur(s) en ligne (dont 51 sur Forums)

Membre(s): 0
Invité(s): 91


plus...
Nouveaux membres
ThaliaRubi 19/9/2021
LucileDunc 19/9/2021
Ruth73A306 19/9/2021
Norris0885 19/9/2021
DuaneOpas0 19/9/2021
KatlynFawk 19/9/2021
NanHindley 19/9/2021
AileenTova 19/9/2021
MarcosCdj 19/9/2021
QBTAnnie84 19/9/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Oct 8
Anniversaire du Grand Mechant Fadge
Nov 18
Anniversaire de RichDeg
Dec 29
Anniversaire d'ebrain
plus 248 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2021 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445