Por que os mapas Bump, Normal e Deslocamento não devem ser corrigidos com gama?

9

Então, eu estou tentando entender isso de um ponto de vista bastante técnico.

Quando você adiciona um mapa de Bump ou Normal ou Deslocamento no seu sombreador, eles não devem ser corrigidos por gama. Mas texturas difusas devem ser. Mas por que?

Quando você salva um arquivo em 8 bits (ou inteiro de 16 bits) com um formato como JPEG, PNG ou TIFF, eles recebem a gama de 0,4545 (1 / 2,2). Assim, uma câmera captura a luz do mundo real (linear) e ao salvar a foto como JPEG, é adicionado um valor gama de 1 / 2.2, como forma de compactar as informações em 8 bits e, em seguida, quando você visualiza a imagem em um monitor que adiciona uma gama de 2.2, tornando a luminância linear novamente.

Portanto, ao usar texturas difusas (como uma foto), é necessário "remover" essa gama de 1 / 2,2 para torná-la linear (chamada linearização). Agora, a textura parece mais escura, mas esses valores estão corretos do ponto de vista matemático, para que o renderizador faça os cálculos corretos. Nota lateral: o software usou uma gama de exibição de 2,2 para garantir que as texturas pareçam corretas, é apenas para o cálculo interno que elas são linearizadas. Mas quando eu crio um mapa Bump no Photoshop e o salvo como JPG ou PNG, a gama 1 / 2.2 também é queimada nessa imagem. Por que esse mapa Bump não precisa ser linearizado também?

Se eu carregar um mapa de Bump no 3ds Max com uma gama de entrada de 2,2, como faria com uma textura Diffuse, o difuso parece certo, mas o bump parece errado, então tenho que definir a gama de entrada como 1.0 para o bump, a fim de para fazer parecer certo, mas como eu disse: por que os dois arquivos de imagem têm a gama 1 / 2,2 queimada, certo?

Kristoffer Helander
fonte

Respostas:

5

O fato de uma foto ser armazenada no espaço gama não tem a ver com PNG ou JPEG, mas com o fato de ser uma foto.

A câmera detecta uma intensidade de 50%, mas a salva como 187 em vez de 127, porque é mais eficiente manter as informações de cores importantes para o olho humano quando você tiver apenas 256 valores possíveis. E o Photoshop também, se você diz.

Para mapas normais ou de deslocamento, você não tem essa necessidade, portanto não há razão para usar o espaço gama para eles (usar gama para eles seria realmente um erro, pois afetaria a distribuição da precisão). Assim, quando você decodifica uma textura normal ou uma textura de deslocamento, não precisa aplicar gama.

Se o mapa normal estiver codificado em um espaço diferente, como pode ser o caso de um G-Buffer, por exemplo , você deverá aplicar a correção correspondente.

Julien Guertault
fonte
Como você diz ao Photoshop para salvar uma imagem com a gama incorporada, como você disse acima: "E o Photoshop também, se você diz."
Kristoffer Helander
Isso não explica o "porquê". Apenas reitera o "o quê".
precisa saber é o seguinte
@ user1118321: Eu acredito que sim. Eu adicionei ênfase na tentativa de torná-lo mais claro.
Julien Guertault
Bem, é verdade, mas ainda não explica realmente o porquê. Admito que tenho o mesmo problema, apenas mencionei a falta de benefícios ou danos causados ​​por essa compressão. Não há necessidade, mas o motivo é que os dados de imagens é peculiar devido aos sentidos humanos, enquanto o nosso raciocínio espacial é mais linear na natureza (tanto quanto o aplicativo 3D está em causa)
joojaa
3

JPG, PNG ou qualquer outro formato de imagem de 8 bits não possui intrinsecamente 1 / 2.2 gama associado a ele. Eles apenas armazenam valores de 0 a 255. Como esses dados são interpretados depende do software que lê e grava esses arquivos. O fato interessante é que a maioria dos softwares de edição de imagens usa o espaço de cores gama por padrão. Todos os pincéis, efeitos, filtros e até o seletor de cores operam no espaço gama. Basta olhar para os tons de cinza no seletor de cores no Photoshop. Eles não seguem uma distribuição linear.

A conseqüência é que o Photoshop não faz conversões entre gama e espaço de cores linear ao abrir ou salvar uma imagem (por padrão), apenas ao exibi-la. Isso significa que você pode usá-lo com tanta facilidade para criar ou editar dados lineares, como um mapa de altura, quanto editar fotos. O mapa de bump não parece corretamente quando carregado com correção de gama, porque não foi salvo com ele.

Quinchilion
fonte
Aqui está um vídeo do YouTube também explicando que o valor armazenado em uma imagem é 1 / 2.2 (mas ele o simplifica e apenas diz que é a raiz quadrada, existe uma isenção de responsabilidade no texto.) A cor do computador está quebrada - link
93016 Kristoffer Helander
@KristofferHelander Sim, mas ele diz que é apenas a câmera que armazena os valores como raízes quadradas e apenas a tela que a compara. Um software de edição de imagens como o Photoshop abre e salva a imagem sem conversões, o que resulta em artefatos mostrados no vídeo quando você tenta misturar cores.
Quinchilion
Corrija-me se eu estiver errado nisso. Quando desenho uma rampa de gradiente no Photoshop que parece linear para mim na tela, os valores dessa rampa são lineares. Mas o Photoshop adiciona uma gama de visualização de 1 / 2,2, uma vez que o monitor adiciona uma gama de 2,2, portanto, os valores de pixel das imagens são lineares e também lineares. Mas essa gama 1 / 2.2 é apenas uma gama de visualização que o Photoshop usa para exibir a imagem, não é incorporada à imagem e, portanto, nenhuma correção de gama na imagem precisa ser feita no software 3D (use a gama 1.0), pois os valores já são lineares?
Kristoffer Helander
@KristofferHelander goo.gl/yqkeUP O gradiente inferior representa o brilho físico. Se o Photoshop aplicasse uma gama de 1 / 2,2 para desenhar o gradiente ou exibir a imagem, você veria o gradiente inferior. Em vez disso, você vê o primeiro, que por coincidência parece ser linear, mas não é. Também não funcionaria para visualizar fotos. A câmera aplicou 1 / 2,2 ao salvar a foto; o Photoshop aplicaria outro 1 / 2,2, mas a tela adiciona gama de 2,2 uma vez. Isso não pareceria certo.
Quinchilion
Se eu preencher um documento no Photoshop com metade do lado vermelho (255,0,0) e a outra metade com verde (0,255,0) e depois usar um borrão Gaussiano, o gradiente resultante se tornará acastanhado e não amarelo no meio, como mostrado naquele vídeo que eu postei. Por que é que? Se os pixels da imagem são lineares, por que a matemática é complicada? Eu não entendo como um mapa de deslocamento pintado no Photoshop é linear e bom para renderização, mas ao mesmo tempo o embaçamento de pixels é estragado com a gama errada e as cores ficam escuras e acastanhadas?
Kristoffer Helander
3

Introdução

Depende de como você cria o mapa! Considere o seguinte e deixe-o afundar um pouco antes de prosseguir:

  1. A imagem é exibida com uma correção gama para o benefício dos seus olhos
  2. Os dados ainda são apenas dados. A correção gama é para a parte de exibição e não para a parte de dados.

Agora, é difícil desenhar um mapa de relevo com um aplicativo de pintura. Porque é difícil ver, mesmo se você fosse corretamente linear. Então você acaba usando coisas como olhar valores. Agora, aqui está o problema:

  • Se você decidir que 128 está na metade da sua intensidade, isso é realidade. Uma vez que é isso que sua codificação no fluxo de dados. Os dados são como você os interpreta, pois não são para olhos humanos e para o monitor. Quem se importa com o que o monitor mostra todos os valores sobre como você interpreta os dados editando-os.

Fazendo o mapa de saliência / deslocamento

Ok, agora eu descrevi que os dados estão prontos para interpretação. Mas por que você interpretaria os dados como lineares? Porque então você pode projetar melhor o seu perfil lateral. Veja o que você pode fazer é pensar em 100% de opacidade do seu pincel como a altura do alvo que você deseja esculpir ou colocar em camadas. Em seguida, você pode usar a ferramenta de curvas para projetar a forma do seu pincel de carimbos (já que os dados são lineares).

insira a descrição da imagem aqui

Imagem 1 : Um carimbo de ventosa.

Agora, se você fizer algo assim, sua imagem será linear, apesar do que todos dizem. Você decidiu descartar as regras de imagem que dizem o contrário. E é por isso que a imagem é linear , o autor escolhe que seja linear, para que seja mais fácil trabalhar com ela.

insira a descrição da imagem aqui

Imagem 2 : A mesma imagem deslocada e interpretada como linear (note que dimensionei a altura um pouco para se ajustar ao meu tamanho padrão de bb), funcionando conforme o esperado.

Tecnicamente linear é melhor.

Um mapa sintético não tem o benefício de compactar certos valores em detrimento de outros. Linear é inerentemente melhor porque a propagação do seu solavanco é melhor assim. É por isso que você estaria desperdiçando recursos que o codificam de maneira corrigida gama.

Em segundo lugar, uma imagem não precisa especificar em que espaço de cores ela está. É apenas que os editores de imagem assumem que ela é codificada por sRGB. Você não tem motivos para fazer a mesma interpretação, nenhuma informação significa apenas: "Ninguém se incomodou em escrever o que estava pensando". Portanto, talvez seja necessário esclarecer que você deve marcá-lo como linear. Mas aqui está o problema: seu computador não possui um perfil linear de fácil acesso.

E o Photoshop e o blur?

Isso é onde fica complicado. O Photoshop tenta fazer muito trabalho para garantir que você não precise saber nada sobre isso. E é aqui que você atira no próprio pé. Se o Photoshop não se destina à criação de texturas, destina-se a editar imagens e não dados aleatórios. Portanto, como a desfocagem de uma imagem é linear e não linear diferente, ela não funciona voltada para dados errados.

Mas você pode fazer uma de duas coisas para corrigir isso:

  1. Desativar a correção gama de desfoque
  2. defina seu espaço de trabalho para um perfil linear

Conclusão

A razão pela qual você tem dificuldade com isso é

  1. Você não sabe o que as outras pessoas pensam, você simplesmente não sabe se elas devem ser corrigidas ou não.
  2. que você está usando um aplicativo que trata imagens como imagens

O ponto um é especialmente confuso. Só sei que TODOS os meus mapas de deslocamento e deslocamento são de fato lineares. Mas não sei quais são seus mapas. As probabilidades são de serem lineares, porque é quase universalmente entendido que os dados são lineares. Mesmo as pessoas que não conhecem a gama tendem a fazê-lo linearmente por impacto / deslocamento por algum motivo (porque é fácil e é isso que você pensa que as imagens são até que alguém diga o contrário).

joojaa
fonte
Obrigado pela sua contribuição - uau! :) Vou dar uma olhada nisso quando tiver mais tempo livre. Eu voltarei para você, obrigado!
Kristoffer Helander
Even people who do not know about gamma tend to do it linear for bump/displacement for some reasonProvavelmente porque esses mapas são gerados.
Tara
3

Na verdade, se seu mapa de deslocamento ou deslocamento é salvo com essa correção de 0,45 gama, está errado. Esses mapas contêm informações geométricas em vez de cores e, como tal, devem ser simplesmente codificadas linearmente.

Para um problema relacionado e uma correção para o Adobe Photoshop, consulte este slide slide: https://docs.google.com/presentation/d/1vS5nAAnXbZ8Pt6-dXxy-xEXDkjfjXTmNnthNGccorl0/edit#slide=id.g14b3e28660_0_8

IneQuation
fonte
Isto é especialmente verdadeiro para um mapa normal, foram você espera comprimentos vetoriais para ser 1.
PaulHK