O que é um arquivo EXR?

Um arquivo EXR é uma imagem de alta faixa dinâmica armazenada no formato OpenEXR: um ou mais canais nomeados com amostras de ponto flutuante de 16 bits ou de 32 bits, ou amostras inteiras sem sinal de 32 bits, além de atributos de cabeçalho que descrevem esses canais. Os dados dos pixels podem ficar sem compressão ou usar um dos vários métodos de compressão com ou sem perdas.

Como funcionam os arquivos EXR

Um arquivo OpenEXR começa com um número mágico de quatro bytes (76 2f 31 01) e um campo de versão cujos bits de sinalização indicam um arquivo em blocos de parte única, um arquivo com várias partes ou a presença de dados profundos. O sinalizador de blocos só é ativado para uma imagem em blocos de parte única; em arquivos com várias partes e arquivos com dados profundos, o atributo type de cada parte informa se ela contém linhas de varredura ou blocos. Em seguida, há um cabeçalho de atributos nomeados para cada parte; channels, compression, dataWindow, displayWindow, lineOrder, pixelAspectRatio, screenWindowCenter e screenWindowWidth são obrigatórios em todos os cabeçalhos. Os pixels são armazenados em trechos de dados, formados por grupos de linhas de varredura ou blocos, localizados por meio de uma tabela de deslocamentos. Somente arquivos em blocos podem conter vários níveis de resolução (mipmaps ou ripmaps); um arquivo de linhas de varredura contém um nível. Desde o OpenEXR 2.0, um arquivo pode conter várias partes independentes e dados profundos, nos quais cada pixel contém uma lista de amostras de comprimento variável. Por convenção, os canais de cor são pré-multiplicados pelo alfa. Em produção, um EXR normalmente contém quadros renderizados ou compostos que são transformados posteriormente para exibição.

Informações essenciais

  1. Não presuma que haja uma única imagem RGBA. Cada canal declara seu próprio nome e tipo: HALF (ponto flutuante de 16 bits) para dados comuns de imagem, FLOAT (de 32 bits) quando é necessário maior alcance ou precisão, como na profundidade, e UINT (de 32 bits) para valores discretos, como IDs de objetos. Apenas alguns nomes, como R, G, B e A, têm um significado predefinido; as camadas são uma convenção de nomenclatura como light1.specular.R, e um arquivo com várias partes adiciona partes nomeadas separadamente. Um conversor precisa receber a indicação, ou escolher, quais desses elementos se tornam a imagem de saída.
  2. O tamanho da imagem vem de dois retângulos, não de um. A janela de exibição é o enquadramento pretendido; a janela de dados é a região que de fato contém pixels e pode ser menor (uma região de interesse renderizada) ou maior (área excedente preservada para desfoques ou tremor de câmera). Cada janela é definida pelas coordenadas dos pixels dos cantos, portanto uma janela de exibição de (0, 0) a (1919, 1079) tem 1920 por 1080. A documentação do OpenEXR informa que os pixels além da janela de exibição normalmente não são exibidos e que um visualizador preenche a área de exibição fora da janela de dados com uma cor padrão. Um software que dimensiona sua saída apenas pela janela de dados atribui dimensões ou posicionamento incorretos a esses arquivos.
  3. A ausência de perdas na compressão depende do método e, às vezes, do tipo de canal. O atributo compression do cabeçalho se aplica a todos os seus canais, portanto um método precisa ser aceitável para cada tipo de canal armazenado em conjunto. PIZ, ZIP, ZIPS e RLE não têm perdas. PXR24 mantém exatos os canais HALF e UINT, mas arredonda os dados FLOAT para 24 bits. B44 e B44A têm perdas nos canais HALF e deixam os canais UINT e FLOAT sem compressão. DWAA e DWAB são métodos com perdas baseados em DCT para dados RGB. Os dados profundos permitem apenas armazenamento sem compressão ou com RLE, ZIPS ou ZIP. A documentação atual também lista métodos mais recentes: HTJ2K256 e HTJ2K32 (sem perdas, High-Throughput JPEG 2000), LJ2K (com perdas) e ZSTD (sem perdas). Confirme que todos os leitores do pipeline oferecem suporte ao método que você usa na gravação.
  4. Por convenção, os valores RGB são lineares em relação à luz da cena, e 1,0 não é um limite de truncamento. A convenção do OpenEXR coloca o cinza médio em 0,18, e objetos brilhantes, como fogo e realces, legitimamente excedem 1,0, portanto a exibição dessa imagem exige pelo menos correção de gama e, muitas vezes, mapeamento de tons. Isso é uma convenção, não uma garantia: a documentação informa que as imagens devem ser lineares e que a biblioteca não exige que um espaço de cor declarado seja linear. O arquivo também pode não informar de forma confiável quais primárias RGB usa: a documentação afirma que se perdeu a confiança no atributo chromaticities, que a ausência de colorInteropID não implica Rec. 709 linear e que colorInteropID, introduzido no OpenEXR 3.4, é agora o identificador recomendado. Combine o espaço de cor, incluindo se os valores são lineares, com quem produziu os arquivos, em vez de inferi-lo.

Quando os arquivos EXR são importantes

Os pipelines de efeitos visuais escolhem EXR para composição em luz linear, passes de renderização e arquivos intermediários de alta precisão. É um formato de trabalho: por convenção, seus valores de cor descrevem a luz da cena, não um sinal de exibição, portanto produzir uma versão derivada que possa ser visualizada exige uma transformação de cor deliberada e uma decisão sobre quais canais, parte e janela usar.

Como a Transloadit ajuda com arquivos EXR

A tabela de formatos de imagem da Transloadit, que abrange Robots baseados em ImageMagick, como /image/resize, lista EXR como um formato que esses Robots podem ler e gravar. A linha informa a versão da biblioteca OpenEXR na compilação do ImageMagick, o que delimita os métodos de compressão e os atributos que essa compilação pode reconhecer.

A tabela informa o que a compilação do ImageMagick pode ler e gravar. Ela não documenta quais canais, parte, janela ou transformação de cor uma conversão usa. Processe um arquivo representativo de produção na sua Assembly e inspecione o resultado antes de depender dele.

Explore os formatos de arquivo e os recursos de compressão da Transloadit

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente