Como renderizar corretamente o espectro visível com intensidade uniforme?

8

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:

imagem atual que eu poderia gerar

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:

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:

soma de três funções de correspondência de cores

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?

Ruslan
fonte
Aqui eu encontrei algumas informações sobre esta questão #
Michael Weizenfeld
Dê uma olhada neste tópico, especificamente a resposta de Greg Ward mais adiante nas postagens. Eu acho que está relacionado à sua pergunta. radiance-online.org:447/pipermail/radiance-general/2015-June/…
ali
@ali, quer dizer que está relacionado à minha adição idiota de valores RGB não ponderados? Eu já encontrei esse erro e refleti sobre ele na minha resposta.
Ruslan

Respostas:

3

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

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.

o problema é que a imagem parece ter um mergulho de intensidade em algum lugar em torno de 490 nm

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:

diagrama de cromaticidade com o espectro dessaturado dentro

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:

gráfico de uma medida de saturação

É 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}.

locus espectral no espaço XYZ

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.

Ruslan
fonte