Integer ou floating point

Integer

C’est le système le plus simple pour décrire un certain nombre de nuances. Il convient bien à l’enregistrement/stockage des images vidéo.

Dans un système décimal avec 4 chiffres, le noir est codé “0” et le blanc est codé “9999”, cela fait “10000” nuances en tout.

Même dégradé noir-blanc avec 3 nombre de nuances différents

Il en va de même en numérique/informatique : Dans un sytème binaire avec 16 bits,  le noir est codé “0” et le blanc est codé “1111 1111 1111 1111” et l’on a “65535” nuances en tout.
Par défaut la répartition des nuances est « régulière » – Linéaire. Ce n’est pas toujours le cas : pour plus de détails voir l’article sur les courbes Log

Toujours plus

Si le système binaire convient bien à l’enregistrement/stockage de la plupart des images fixe ou vidéo. Mais il atteint ses limites quand on veut un nombre trop important de nuance.

  • Exemple 1 : de la matière lumineuse ultra précise que sont les “map d’éclairage” pour la 3D. Bien qu’à œil les hautes lumières soient “cramées”, le fichier a bien des valeurs différentes.
  • Exemple 2 : L’espace de travail/rendu des logiciels. Apres un étalonnage un peu violent, le logiciel a toujours des valeurs différentes dans la partie « cramée » de l’image. Un second étalonnage pourra les récupérer. Cela permet donc de faire des manipulations apparemment non destructive.

Pour cela on pourrait donc travailler avec un nombre de nuance plus élevé : 64 bits par couche, 128 bits par couche voir 256 bits par couche. Mais cela alourdirai terriblement les calculs. C’est là que le sytème à virgule flottante intervient et rend bien service.

Float : virgule flottante.

Je reprends mes 4 chiffres (décimal) mais je les répartit en 2 paquet: les 3 premier chiffres sont une valeur entre 0 et 999 et le dernier chiffre est la puissance de 10. Regardons ce qui ce passe pour toute les puissance de 10 :

0 ➧ 1000 nuances entre 0,00 ➧ 9,99
1 ➧ 1000 nuances entre 10,0 ➧ 99,9
2 ➧ 1000 nuances entre 100 ➧ 999
3 ➧ 1000 nuances entre 1 000 ➧ 9 990
4 ➧ 1000 nuances entre 10 000 ➧ 99 900

9 ➧ 1000 nuances entre 1 000 000 000 ➧ 9 990 000 000

Au final on a toujours le même nombre de nuances – 10 000 – qu’avec le système Integer mais c’est plus précis entre o et 10 et la valeur maximale est bien, bien plus grande.
En binaire c’est pareil , avec 4 bits integer on a 16 valeurs de 0 à 15, avec 4 bits float, on a plus de valeurs entre 0 et 1 et moins entre 8 et 15

float_illustration
Répartition des valeurs de 4 bits float … dont 2 bits pour les « paquets » de 4 valeur
Le concept va plus loin car il gère les valeurs négatives
Le concept va plus loin car il gère en fait les valeurs négatives

J’avais l’habitude d’entendre dire que le 10 bits float est aussi précis que le 16 bits integer, ce n’est pas exhaustif, mais ça donne un ordre d’idée de l’économie de stockage et de puissance de calcul qu’apporte la virgule flottante .

Norme IEEE754 des chiffres à virgule flottante

Utilisation

La virgule flottante est donc un must pour les espace de travail des logiciels : Davinci Resolve et Nuke sont en 32 bits Float.
Ca l’est aussi pour « la matière » – les fichiers image/vidéo : fichiers EXR sont en 16 ou 32 bits Float.

Vue la précision de la virgule flottante 16 ou 32 bits cela n’a pas trop de sens de faire en plus de la compression destructive ➧ Simplification. C’est d’ailleurs le cas pour les espaces de travail bien évidement et aussi les fichiers EXR.

De fait tout les codec video sont en Integer