Domanda

Spazio colore. Bene, tutti conoscono RGB: tre valori normalizzati nell'intervallo [0,0,1,0], che hanno il significato dell'intensità dei componenti del colore blu verde rossi; Questa intensità è intesa come lineare, no?

Gamma. Per quanto posso capire, Gamma è una funzione che mappa i componenti del colore RGB su un altro valore. Google su questo, ho visto funzioni lineari e funzioni non lineari ... le funzioni lineari sembrano ridimensionare i componenti RGB, quindi sembra mettere a punto la luminosità dell'immagine; Le funzioni non lineari sembrano "decomprimere" componenti più scuri/più chiari.

Ora sto iniziando ad implementare un visualizzatore di immagini, che deve visualizzare diversi formati di immagine come trama. Vorrei modificare il gamma di queste immagini, quindi dovrei costruire uno shader di frammenti e correre sopra il quad testuonato. Bene, ma come posso determinare la correzione gamma giusta?

OpenGL funziona utilizzando lo spazio a colori RGB lineare, usando componenti a punta mobile. In effetti, potrei calcolare i valori corretti da gamma a partire da quei valori (con speciale precisione a virgola mobile), quindi vengono visualizzati dopo aver bloccato il valore corretto dalla gamma.

Innanzitutto, determinerò la rampa gamma. Come potrei determinarlo? (analgualmente o usando le tabelle di ricerca)

Quindi, sono venuto per indagare sull'estensione OpenGL Ext_FrameBuffer_Srgb, che sembra molto correlata all'estensione Ext_texture_srgb.

Ext_texture_srgb Introdurre un nuovo formato di trama che viene utilizzato per linearizzare i valori di Textel nello spazio lineare RGB. (Nota a piè di pagina 1) In questo modo, sono a conoscenza dello spazio dei colori SRGB e lo uso come spazio di colore lineare RGB.

Invece, Ext_FrameBuffer_SRGB Extension mi consente di codificare i valori RGB lineari sul frameBuffer SRGB, senza preoccuparci.

...

Aspetta, tutte queste informazioni per cosa? Se riesco a usare SRGB FrameBuffer e caricare trame SRGB, elaborare che le trame senza conversioni SRGB ... perché dovrei correggere la gamma?

Forse posso correggere la gamma uguali, anche su un buffer SRGB? O è meglio no? E luminosità e contrasto: devono essere applicati prima o dopo la correzione gamma?

Sono molte informazioni, ora mi confongo. Spero che qualcuno di voi possa spiegarmi di più tutti questi concetti! Grazie.

...

C'è un'altra domanda. Nel caso in cui il dispositivo gamma è diverso dallo "standard" 2.2, come si "accumula" correzioni gamma diverse? Non so se sia chiaro: nel caso Impiet Implement i valori RGB sono già corretti per un monitor con un valore gamma di 2.2, ma il monitor ha una gamma di valore 2.8, come correggere la gamma?


(1) Ecco un po 'di estratto per evidenziare ciò che intendo:

Lo spazio colore SRGB si basa sulle caratteristiche tipiche del monitor (non lineare) previste in un ufficio scarsamente illuminato. È stato standardizzato dalla International Electrotechnical Commission (IEC) come IEC 61966-2-1. Lo spazio colore SRGB corrisponde approssimativamente alla correzione gamma 2.2.


Questa estensione fornisce qualsiasi tipo di formati di framebuffer SRGB o immagini garantite con trame SRGB "avranno un bell'aspetto" quando si output a un dispositivo che supporta uno spazio di colore 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.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top