As conversas sobre RGB linear devem ser evitadas, pois não informam nada sobre as intrínsecas do espaço de cores RGB, ou seja, funções de transferência de cores primárias, de ponto branco e de componente. Alguns anos atrás, assumindo que o sRGB era mediano, mas hoje em dia com o DCI-P3 e o BT.2020 sendo muito comuns, deve ser descartado.
A gama ideal para renderização é a que minimizará erros em relação a uma referência do mundo real ou, mais convenientemente, uma renderização espectral de verdade no solo. A primeira conclusão desta frase é que os vários espaços de cores RGB não são equivalentes e não produzirão resultados semelhantes.
Pode-se pensar que a execução de duas renderizações com as mesmas cores base, mas uma onde elas são codificadas com sRGB / BT.709 e a outra onde elas são codificadas com DCI-P3 e depois converter as duas imagens resultantes, por exemplo, ACES2065-1 produzir as mesmas imagens, mas não é o caso. Algumas operações matemáticas, devido à natureza da álgebra e das matrizes lineares, dependem das primárias de espaço de cores RGB especificadas, ou seja, com base nos espaços de cores. As mesmas operações executadas em diferentes espaços de cores RGB produzirão diferentes valores de tristímulos, uma vez convertidos novamente no espaço de cores CIE XYZ. Por exemplo, operações de multiplicação, divisão e potência são primárias do espaço de cores RGB dependentes, enquanto adição e subtração não são.
Esta imagem ilustra o efeito de multiplicar várias cores por si mesmas em diferentes espaços de cores RGB: as cores resultantes são diferentes. As várias amostras são geradas da seguinte forma: 3 valores aleatórios do espaço de cor do sRGB são selecionados e convertidos nos três espaços de cor RGB estudados, são exponenciados, convertidos novamente em espaço de cor do sRGB, plotados no diagrama de cromaticidade CIE 1931 à esquerda e exibidos como amostras no certo.
Testes e pesquisas realizados por Ward e Eydelberg-Vileshin (2002) , Langlands e Mansencal (2014) e Mansencal (2014) mostraram que as gamas com primárias mais próximas do locus espectral, ou seja, primárias espectralmente nítidas, tendem a minimizar os erros em comparação com o solo espectral a verdade rende.
Aqui está uma imagem que renderizei recentemente com a Mitsuba para re-validar nossas descobertas com Anders:
Essas são renderizações da mesma cena usando primárias BT.709 (primeira linha), 47 caixas espectrais (segunda linha), primárias BT.2020 (terceira linha), menos espectrais BT.709 primárias processa resíduos (quarta linha), espectral menos BT .2020 primárias processam resíduos (quinta linha). A última linha mostra imagens compostas montadas com três faixas verticais, respectivamente, das primárias BT.709, primaria espectral e BT.2020. A iluminação direta tende a corresponder entre as renderizações. Áreas que mostram o efeito de múltiplas oscilações de luz, ou seja, o teto, nas renderizações primárias BT.709 e BT.2020 tendem a exibir saturação aumentada, especialmente nas primárias BT.709, que produzem ou apresentam leve perda de energia, especialmente na BT .2020 render. Excluindo valores discrepantes, por exemplo, a fonte de luz visível, o RMSE com a renderização espectral são 0,0083e 0,0116 para, respectivamente, as primárias BT.2020 e BT.709 primárias.
Agora, isso não significa que eles sempre terão um desempenho melhor, e é possível produzir exemplos que exibirão um viés em relação ao BT.709 / sRGB. O principal argumento é que as renderizações RGB não podem corresponder às renderizações espectrais e as gamas amplas e nítidas tendem a ter um desempenho melhor. Quanto à escolha de um espaço de cores de renderização, eu escolheria um com uma ampla gama que engloba o Gamut do Pointer e o DCI-P3, BT.2020 ou ACEScg são excelentes candidatos para isso.
Existem dois lados do porquê do sRGB em particular. Para imagens não HDR de entrada, alega-se que elas devam ser comprimidas para sRGB (se essa afirmação é precisa é uma história diferente). Portanto, antes de poder executar qualquer operação matemática linear com eles, é necessário descompactá-los do sRGB. Também é possível que uma imagem tenha sido capturada e compactada para uma representação diferente que não seja sRGB; nesse caso, você precisará descompactar essa representação específica. De qualquer forma, a codificação implica em uma certa gama que a imagem de entrada nunca escapa (porque as imagens armazenadas em sRGB são normalmente truncadas para 8 bits por canal), mas a matemática do sombreador não precisa permanecer nessa gama após a entrada a imagem está descompactada. Mas, no final, você deve considerar a exibição.
Se você tiver uma imagem e estiver na hora de exibi-la, codifique-a em uma representação exigida pelo dispositivo de exibição. Os CRTs escolheram sRGB e os LCDs emularam que, portanto, a compactação de sRGB para a tela do monitor tem sido a escolha comum nas últimas décadas e que restringia a saída a ficar dentro da gama de sRGB, caso contrário, ocorreria um recorte. Os monitores de maior alcance não precisam seguir exatamente essa gama.
(Eu acho que a base para a alegação de que imagens criadas pelo homem são codificadas por sRGB é porque essas imagens foram criadas como sendo criadas em monitores sRGB)
Portanto, agora você provavelmente pode entender melhor por que o sRGB, em particular, foi suportado no hardware para entrada matemática do shader e exibição de imagens. É o caso comum. Além disso, possui bons méritos para reduzir artefatos de faixas de cores perceptivas, portanto, é uma boa maneira de compactar cores em 8 bits e mantê-las plausíveis para os seres humanos.
fonte
Se você permitir valores fora do intervalo 0..1, mesmo com as primárias bastante limitadas do sRGB, ainda será possível abordar toda a gama visual humana. Portanto, para armazenar valores de cores claras de ponto flutuante, não importa muito quais primárias você usa. No entanto, fazer qualquer tipo de matemática multiplicativa fica um pouco estranho, pois as coordenadas arbitrárias das primárias atuam como o 'pivô' da escala. As primárias sRGB geralmente são usadas porque, tradicionalmente, os dados de entrada são codificados por sRGB e a exibição de saída é sRGB ou rec709 ... Com o rec2020, metade disso foi alterada, mas, por enquanto, a maioria dos dados de entrada ainda é provavelmente codificada por sRGB, portanto, use as mesmas primárias do seu armazenamento são apenas a opção mais fácil.
fonte