Estou tentando obter a representação correta do espectro visível para renderizar na tela. Meu progresso atual é com o uso das funções de correspondência de cores do observador padrão CIE 1931, analiticamente aproximadas pelas equações apresentadas neste artigo . A imagem atual é assim:
Aqui, o plano de fundo não é idealmente preto para possibilitar a introdução de contribuições negativas das funções de correspondência de cores:
Mas o problema é que a imagem parece ter uma queda de intensidade em algum lugar em torno de 490 nm. Eu acho que isso está relacionado à soma das três funções com um mínimo lá. Veja a soma plotada em relação ao comprimento de onda:
Então, minha pergunta é agora: como faço para corrigir a intensidade da imagem? Existe algum padrão para levar em consideração a sensibilidade espectral ao converter o comprimento de onda em representação RGB / XYZ?
Respostas:
Esta é realmente uma maneira errada de somar essas funções: o modelo sRGB especifica que, para obter luminosidade, é necessário pesar os componentes RGB com pesos apropriados. Então a luminosidade, sem surpresa, se tornará igual ao componente Y da representação XYZ.
Na verdade, eu posso ver o mergulho não apenas perto de 490 nm, mas também um menor perto de 570 nm.
Enfim, acho que encontrei o motivo disso. Primeiro, vamos traçar as cores dessaturadas usadas na renderização no diagrama de cromaticidade:
O triângulo tracejado é a escala de sRGB e a cúspide formada pelas duas linhas inferiores da curva verde corresponde ao ponto branco (cinza) do D65. Observe que existem três "saliências" afastadas do ponto branco, correspondentes a violeta, verde azulado e vermelho. Ou que há uma grande queda na saturação na direção de 490 nm e uma diminuição moderada na direção de cerca de 570 nm. Vamos caracterizar isso graficamente, plotando a norma de diferença dos pontos renderizados do ponto branco:
É exatamente isso que percebo visualmente na imagem em termos de saturação e, portanto, misturando-me com o fundo.
De onde vem essa forma estranha, você pode se perguntar. E a resposta é, a partir do locus espectral no espaço XYZ completo. Veja a figura a seguir: a curva azul é o locus espectral e a laranja é sua projeção em um plano normal ao vetor
{1,1,1}
.Portanto, a forma que obtivemos no diagrama de cromaticidade é algo como um desdobramento planar do locus espectral.
Quanto ao realismo dessa renderização, estou razoavelmente certo de que, se tentarmos projetar o espectro real em uma superfície cinza não fluorescente, também veremos esses dois mergulhos "estranhos". E eles se tornarão menos visíveis à medida que você aumenta o brilho do espectro em relação ao brilho da superfície.
fonte