Question

Espace colorimétrique. Eh bien, tout le monde connaît RVB: trois valeurs normalisées dans la gamme [0,0,1,0], qui ont le sens de l'intensité des composants de couleur rouge vert rouge; Cette intensité est conçue comme linéaire, ce n'est pas?

Gamma. Pour autant que je puisse comprendre, le gamma est une fonction qui mappe les composants de couleur RVB à une autre valeur. Googler à ce sujet, j'ai vu des fonctions linéaires et des fonctions non linéaires ... les fonctions linéaires semblent évoluer les composants RVB, il semble donc régler la luminosité de l'image; Les fonctions non linéaires semblent "décompresser" des composants plus sombres / plus légers.

Maintenant, je commence à implémenter une visionneuse d'images, qui doit afficher différents formats d'image sous forme de texture. Je voudrais modifier le gamma de ces images, donc je devrais construire un shader fragment et courir sur le quad texturé. Très bien, mais comment déterminer la bonne correction gamma?

OpenGL fonctionne en utilisant l'espace colorimétrique RVB linéaire, en utilisant des composants à points flottants. En effet, je pouvais calculer des valeurs corrigées gamma à partir de ces valeurs (avec une précision de point flottante spécial), donc elles sont affichées après avoir fixé la valeur corrigée gamma.

Je vais d'abord déterminer la rampe gamma. Comment pourrais-je le déterminer? (de manière analogique ou à l'aide de tables de recherche)

Ensuite, je suis venu pour enquêter sur l'extension OpenGL ext_framebuffer_srgb, ce qui semble très lié à l'extension Ext_texture_srgb.

Ext_texture_srgb introduire un nouveau format de texture qui est utilisé pour linéariser les valeurs de textel dans l'espace linéaire RVB. (Note 1) De cette façon, je suis conscient de l'espace colorimétrique SRGB et je l'utilise comme espace colorimétrique RVB linéaire.

Au lieu de cela, l'extension ext_framebuffer_srgb me permet de coder des valeurs RVB linéaires sur le srgb framebuffer, sans s'en soucier.

...

Attendez, toutes ces informations pour quoi? Si je peux utiliser SRGB FrameBuffer et charger des textures SRGB, traitez ces textures sans conversions SRGB ... Pourquoi devrais-je corriger le gamma?

Puis-je corriger le gamma tout de même, même sur un tampon SRGB? Ou je ferais mieux de non? Et luminosité et contraste: doivent-ils s'appliquer avant ou après la correction gamma?

C'est beaucoup d'informations, je suis confus maintenant. J'espère que quelqu'un d'entre vous pourra m'expliquer plus tous ces concepts! Merci.

...

Il y a une autre question. Dans le cas, l'appareil gamma est différent de la "standard" 2.2, comment "accumuler" différentes corrections gamma? Je ne sais pas si c'est clair: dans l'image du cas, les valeurs RVB sont déjà corrigées pour un moniteur avec une valeur gamma de 2.2, mais le moniteur a un gamma de valeur 2.8, comment corriger le gamma?


(1) Voici un extrait pour souligner ce que je veux dire:

L'espace colorimétrique SRGB est basé sur des caractéristiques de moniteur typiques (non linéaires) attendues dans un bureau faiblement éclairé. Il a été standardisé par la Commission électrotechnique internationale (CEI) en tant que CEI 61966-2-1. L'espace colorimétrique SRGB correspond à peu près à la correction de 2,2 gamma.


Cette extension fournit-elle une sorte de formats SRGB FrameBuffer ou de garantie que les images avec des textures SRGB "auront l'air bien" lorsque la sortie d'un appareil prenant en charge un espace colorimétrique SRGB?

   RESOLVED:  No.

  Whether the displayed framebuffer is displayed to a monitor that
    faithfully reproduces the sRGB color space is beyond the scope
    of this extension.  This involves the gamma correction and color
    calibration of the physical display device.

    With this extension, artists can author content in an sRGB color
    space and provide that sRGB content for use as texture imagery
    that can be properly converted to linear RGB and filtered as part
    of texturing in a way that preserves the sRGB distribution of
    precision, but that does NOT mean sRGB pixels are output
    to the framebuffer.  Indeed, this extension provides texture
    formats that convert sRGB to linear RGB as part of filtering.

    With programmable shading, an application could perform a
    linear RGB to sRGB conversion just prior to emitting color
    values from the shader.  Even so, OpenGL blending (other than
    simple modulation) will perform linear math operations on values
    stored in a non-linear space which is technically incorrect for
    sRGB-encoded colors.

    One way to think about these sRGB texture formats is that they
    simply provide color components with a distribution of values
    distributed to favor precision towards 0 rather than evenly
    distributing the precision with conventional non-sRGB formats
    such as GL_RGB8.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top