Pourquoi les cartes Bump, Normal et Déplacement ne devraient-elles pas être corrigées gamma?

9

J'essaie donc de faire le tour de cette question d'un point de vue assez technique.

Lorsque vous ajoutez une texture Relief, Normal ou Déplacement dans votre shader, elles ne doivent pas être corrigées gamma. Mais les textures diffuses devraient l'être. Mais pourquoi?

Lorsque vous enregistrez un fichier en 8 bits (ou 16 bits en entier) avec un format comme JPEG, PNG ou TIFF, ils obtiennent le gamma de 0,4545 (1 / 2,2) gravé. Ainsi, une caméra capture la lumière du monde réel (qui est linéaire) et lors de l'enregistrement de la photo au format JPEG, une valeur gamma de 1 / 2,2 est ajoutée, afin de compresser les informations en 8 bits, puis lorsque vous affichez l'image sur un moniteur qui ajoute un gamma de 2,2 rendant la luminance linéaire à nouveau.

Donc, lorsque vous utilisez des textures diffuses (comme une photo), vous devez "supprimer" ce gamma 1 / 2.2 pour le rendre linéaire (appelé linéarisation) alors maintenant la texture semble plus sombre, mais ces valeurs sont correctes d'un point de vue mathématique afin que le rendu faire les bons calculs. Remarque: le logiciel a utilisé un gamma d'affichage de 2,2 pour s'assurer que les textures semblent correctes, c'est juste pour le calcul interne qu'elles sont linéarisées. Mais quand je crée une carte Bump dans Photoshop et que je l'enregistre en JPG ou PNG, ce gamma 1 / 2.2 est également gravé dans cette image, alors pourquoi cette carte Bump n'a-t-elle pas besoin d'être également linéarisée?

Si je charge une mappe de relief dans 3ds Max avec un gamma d'entrée de 2,2 tout comme le ferait une texture diffuse, le diffus semble correct mais le relief semble incorrect, donc je dois définir le gamma d'entrée à 1,0 pour le relief dans l'ordre pour le faire bien paraître, mais comme je l'ai dit: pourquoi, les deux fichiers image ont le gamma 1 / 2.2 gravé, non?

Kristoffer Helander
la source

Réponses:

5

Le fait qu'une photo soit stockée dans un espace gamma n'a pas à voir avec PNG ou JPEG, mais avec le fait qu'il s'agit d'une photo.

L'appareil photo détecte une intensité de 50% mais va l'enregistrer en tant que 187 au lieu de 127, car cela est plus efficace pour conserver les informations de couleur qui comptent pour l'œil humain lorsque vous n'avez que 256 valeurs différentes possibles. Et Photoshop en fait autant si vous le dites.

Pour les normales ou les cartes de déplacement, vous n'avez pas ce besoin, il n'y a donc aucune raison d'utiliser l'espace gamma pour elles (l'utilisation de gamma pour elles serait en fait une erreur, car cela affecterait la distribution de la précision). Ainsi, lorsque vous décodez une texture normale ou une texture de déplacement, vous n'avez pas besoin d'appliquer de gamma.

Si la carte normale est encodée dans un espace différent, comme cela peut être le cas pour un G-Buffer par exemple , alors vous devez appliquer la correction correspondante.

Julien Guertault
la source
Comment dites-vous à Photoshop d'enregistrer une image avec le gamma incrusté comme vous l'avez dit ci-dessus: "Et Photoshop en fait autant si vous le dites."
Kristoffer Helander
Cela n'explique pas du tout le "pourquoi". Il réitère simplement le "quoi".
user1118321
@ user1118321: Je pense que oui. J'ai ajouté de l'emphase afin de clarifier les choses.
Julien Guertault
Eh bien, c'est vrai, mais cela n'explique toujours pas vraiment pourquoi. J'avoue que j'ai le même problème, je mentionne simplement le manque d'avantages ou de dommages causés par une telle compression. Il n'y a pas besoin mais le pourquoi est que les données d'images sont particulières en raison des sens humains alors que notre raisonnement spatial est de nature plus linéaire (en ce qui concerne l'application 3D)
joojaa
3

JPG, PNG ou tout autre format d'image 8 bits ne sont pas intrinsèquement associés à un gamma 1 / 2,2. Ils stockent juste des valeurs de 0 à 255. L'interprétation de ces données dépend du logiciel qui lit et écrit ces fichiers. Le fait intéressant est que la plupart des logiciels d'édition d'images utilisent par défaut l'espace colorimétrique gamma. Tous les pinceaux, effets, filtres et même le sélecteur de couleurs fonctionnent tous dans l'espace gamma. Regardez simplement les nuances de gris sur le sélecteur de couleurs dans Photoshop. Ils ne suivent pas une distribution linéaire.

La conséquence est que Photoshop n'effectue aucune conversion entre gamma et espace colorimétrique linéaire lors de l'ouverture ou de l'enregistrement d'une image (par défaut), uniquement lors de son affichage. Cela signifie que vous pouvez tout aussi facilement l'utiliser pour créer ou modifier des données linéaires telles qu'une carte de hauteur que vous pouvez modifier des photos. La carte de relief ne s'affiche pas correctement lorsqu'elle est chargée avec une correction gamma, car elle n'a pas été enregistrée avec.

Quinchilion
la source
Voici une vidéo YouTube expliquant également que la valeur stockée dans une image est le 1 / 2,2 (mais il le simplifie et dit simplement que c'est la racine carrée, il y a une clause de non-responsabilité dans le texte.) La couleur de l'ordinateur est cassée - lien
Kristoffer Helander
@KristofferHelander Oui, mais il dit que ce n'est que la caméra qui stocke les valeurs en tant que racines carrées et uniquement l'affichage qui la met au carré. Un logiciel de retouche d'image comme Photoshop ouvre et enregistre simplement l'image sans conversion, ce qui entraîne des artefacts affichés dans la vidéo lorsque vous essayez de mélanger les couleurs.
Quinchilion
Corrigez-moi si je me trompe. Lorsque je dessine une rampe de dégradé dans Photoshop qui me semble linéaire à l'écran, les valeurs de cette rampe sont en fait linéaires. Mais Photoshop ajoute un gamma de visualisation de 1 / 2,2 puisque le moniteur ajoute un gamma de 2,2, ainsi les valeurs des pixels des images sont linéaires et elles ont également un aspect linéaire. Mais ce gamma 1 / 2.2 n'est qu'un gamma de visualisation que Photoshop utilise pour afficher l'image, il n'est pas intégré à l'image, et donc aucune correction gamma de l'image ne doit être effectuée dans le logiciel 3D (utilisez gamma 1.0) car les valeurs sont déjà linéaires?
Kristoffer Helander
@KristofferHelander goo.gl/yqkeUP Le gradient inférieur représente la luminosité physique. Si Photoshop appliquait un gamma de 1 / 2,2 pour dessiner le dégradé ou afficher l'image, vous verriez le dégradé inférieur. Au lieu de cela, vous voyez celui du haut, qui semble être par hasard linéaire, mais ne l'est pas. Cela ne fonctionnerait pas non plus pour la visualisation de photos. L'appareil photo a appliqué 1 / 2,2 lors de l'enregistrement de la photo, puis Photoshop appliquerait un autre 1 / 2,2, mais l'affichage n'ajoute qu'un gamma de 2,2 une fois. Ça n'aurait pas l'air bien.
Quinchilion
Si je remplis un document dans Photoshop, moitié rouge (255,0,0) et l'autre moitié avec du vert (0,255,0), puis j'utilise un flou gaussien dessus, le dégradé résultant devient brunâtre plutôt que jaune au milieu, comme indiqué dans cette vidéo que j'ai postée. Pourquoi donc? Si les pixels de l'image sont linéaires, pourquoi les calculs sont-ils foireux? Je ne comprends pas comment une carte de déplacement peinte dans Photoshop est linéaire et agréable à utiliser pour le rendu, mais en même temps le flou des pixels est vissé avec le mauvais gamma et les couleurs deviennent sombres et brunâtres?
Kristoffer Helander
3

introduction

Cela dépend de la façon dont vous créez la carte! Considérez ce qui suit et laissez-le pénétrer pendant un certain temps avant de continuer:

  1. L'image est affichée avec une correction gamma au bénéfice de vos yeux
  2. Les données ne sont encore que des données. La correction gamma concerne la partie affichage et non la partie données.

Maintenant, une carte de relief est assez difficile à dessiner avec une application de peinture. Parce que c'est difficile à voir même si vous étiez correctement linéaire. Donc vous finissez par utiliser des choses comme regarder des valeurs. Maintenant, voici le hic:

  • Si vous décidez que 128 est à mi-chemin de votre intensité, alors c'est la réalité. Puisque c'est ce que votre encodage dans le flux de données. Les données sont ce que vous interprétez car elles ne sont pas destinées aux yeux humains et au moniteur. Peu importe ce que le moniteur affiche les valeurs comme son tout sur la façon dont vous interprétez les données en les éditant.

Faire la carte de relief / déplacement

D'accord, j'ai maintenant décrit que les données sont à interpréter. Mais pourquoi interpréteriez-vous les données comme linéaires? Parce qu'alors vous pouvez mieux concevoir votre profil latéral. Voyez ce que vous pouvez faire est de penser à l'opacité de 100% de votre pinceau comme la hauteur cible que vous souhaitez sculpter ou superposer. Vous pouvez ensuite utiliser l'outil courbes pour concevoir la forme de votre pinceau de tampons (car vous pensez que les données sont linéaires).

entrez la description de l'image ici

Image 1 : Un timbre à ventouse.

Maintenant, si vous faites quelque chose comme ça, votre image est linéaire malgré ce que tout le monde vous dit. Vous avez décidé de supprimer les règles d'image qui disent le contraire. Et c'est pourquoi l'image est linéaire , l'auteur choisit qu'elle soit linéaire pour qu'elle soit plus facile à travailler.

entrez la description de l'image ici

Image 2 : même image déplacée et interprétée de façon linéaire (notez que j'ai redimensionné un peu la hauteur pour l'adapter à ma taille de bb par défaut), fonctionnant comme prévu.

Techniquement linéaire, c'est mieux.

Une carte synthétique n'a aucun avantage à compresser certaines valeurs au détriment d'autres. Linéaire est intrinsèquement meilleur parce que la propagation de votre bosse est meilleure de cette façon. C'est pourquoi vous gaspillez des ressources en l'encodant d'une manière corrigée gamma.

Deuxièmement, une image n'a pas besoin de spécifier dans quel espace colorimétrique elle se trouve. Il suffit que les éditeurs d'image supposent qu'elle est codée sRGB. Vous n'avez aucune raison de faire la même interprétation, aucune info ne signifie simplement: "Personne n'a pris la peine d'écrire ce qu'ils pensaient". Alors peut-être que le point devrait être fait, vous devriez le marquer de façon linéaire. Mais voici le hic ... votre ordinateur n'est pas livré avec un profil linéaire facilement accessible.

Qu'en est-il de Photoshop et du flou?

C'est là que ça devient délicat. Photoshop essaie de faire beaucoup de travail pour s'assurer que vous n'avez pas besoin de savoir quoi que ce soit à ce sujet. Et c'est là que vous vous tirez une balle dans le pied. Photoshop n'est pas destiné à la création de texture, il est destiné à éditer des images et non des données aléatoires. Donc, comme le flou sur une image est différent de linéaire et non linéaire, il ne fonctionnera pas avec des données erronées.

Mais vous pouvez faire l'une des 2 choses pour résoudre ce problème:

  1. Désactiver la correction gamma du flou
  2. réglez votre espace de travail sur un profil linéaire

Conclusion

La raison pour laquelle vous avez du mal avec cela est

  1. Vous ne savez pas ce que pensent les autres, vous ne savez tout simplement pas s'ils doivent être corrigés gamma ou non.
  2. que vous utilisez une application qui traite les images comme des images

Le premier point est particulièrement déroutant. Je sais juste que TOUTES mes cartes de relief et de déplacement sont en fait linéaires. Mais je ne peux pas savoir quelles sont vos cartes. Les chances sont qu'ils sont linéaires car il est presque universellement compris que les données sont linéaires. Même les gens qui ne connaissent pas le gamma ont tendance à le faire de manière linéaire pour les chocs / déplacements pour une raison quelconque (parce que c'est facile et c'est ce que vous pensez que les images sont jusqu'à ce que quelqu'un vous dise le contraire).

joojaa
la source
Merci pour votre contribution - wow! :) Je vais y jeter un œil lorsque j'aurai plus de temps libre. Je vous répondrai, merci!
Kristoffer Helander
Even people who do not know about gamma tend to do it linear for bump/displacement for some reasonProbablement parce que ces cartes sont générées.
Tara
3

En fait, si votre carte de relief ou de déplacement est enregistrée avec cette correction gamma de 0,45, c'est faux. Ces cartes contiennent des informations géométriques plutôt que des couleurs, et en tant que telles, doivent être simplement encodées de façon linéaire.

Pour un problème connexe et un correctif pour Adobe Photoshop, consultez ce diaporama: https://docs.google.com/presentation/d/1vS5nAAnXbZ8Pt6-dXxy-xEXDkjfjXTmNnthNGccorl0/edit#slide=id.g14b3e28660_0_8

IneQuation
la source
Cela est particulièrement vrai pour une carte normale si vous vous attendez à ce que la longueur des vecteurs soit 1.
PaulHK