De um arquivo .xmp à imagem que você guarda.

Um preset é lido uma vez para virar um conjunto de parâmetros, convertido em tabela de consulta 3D para o visor e refeito com precisão total em ponto flutuante sobre o quadro não comprimido do sensor quando você aperta o botão. Uma única implementação, escrita em Rust, comanda os dois caminhos — é por isso que a prévia e a fotografia coincidem.

Última atualização:

O caminho de uma fotografia

  1. O arquivo é lido

    Um preset .xmp é XML. Cada atributo do Camera Raw é extraído para um único conjunto de parâmetros: balanço de branco e exposição, tons e curvas, HSL, gradação de cor, detalhe, efeitos e as máscaras que houver. Atributos que o motor não reconhece são ignorados em vez de tratados como erro — um preset exportado por um Lightroom mais novo carrega, portanto, com tudo o que ele entende.

  2. O preset vira um pipeline

    Esses parâmetros viram uma sequência fixa de operações — balanço de branco e exposição, depois tons e curvas, depois cor, depois o trabalho espacial: nitidez local, remoção de neblina, nitidez, máscaras, vinheta e grão. A ordem é fixa, porque os mesmos ajustes aplicados em outra sequência não produzem a mesma fotografia.

  3. O visor recebe uma tabela de consulta

    Tudo o que depende apenas da cor do próprio pixel — curvas, HSL, gradação de cor, Cor Pontual — é convertido uma vez em tabela de consulta 3D no momento em que você troca de preset. A GPU aplica então essa tabela a cada quadro sem custo adicional, e é isso que permite ao look acompanhar um sinal ao vivo.

  4. O disparo executa o processamento de verdade

    Apertar o botão refaz o mesmo pipeline em ponto flutuante sobre o quadro inteiro e não comprimido do sensor, sem nenhuma interpolação da tabela. Halação e grão usam código idêntico nos dois caminhos: a textura que você enquadrou é a que você recebe.

  5. O original é preservado

    Uma cópia intacta do quadro é salva ao lado da versão processada por padrão, e no modo RAW os dados brutos do sensor são gravados em um DNG ProRAW próprio. Aplicar um look se desfaz apagando um arquivo; não é algo gravado sem pedir.

Por que a prévia e a fotografia coincidem

A maioria das câmeras com filtro ao vivo roda um código para a prévia e outro para o arquivo, e os dois divergem — daí o conselho de sempre: fotografe plano e trate depois.

Aqui os dois caminhos chamam a mesma implementação em Rust com os mesmos parâmetros. A prévia troca precisão por velocidade, e nada além disso: uma tabela amostrada em uma grade em vez do cálculo pixel a pixel. Qual operação acontece, em que ordem e com que valor é comum aos dois.

O que uma tabela de consulta não consegue carregar

Uma tabela de consulta mapeia cor para cor, então só pode carregar ajustes que dependam apenas do pixel. Tudo o que precisa olhar os pixels vizinhos é espacial — nitidez local, remoção de neblina, nitidez, redução de ruído, vinheta, máscaras e grão — e roda como passagem própria nos dois caminhos.

É também por isso que um preset com várias máscaras custa mais no visor do que um sem nenhuma: cada máscara são várias passagens de GPU em quadro inteiro a cada frame, enquanto o trabalho de cor dela tinha entrado de graça na tabela.

Calibrado contra o Lightroom, não chutado

Os operadores HSL de saturação e luminância foram calibrados contra a saída do próprio Lightroom em vez de reimplementados a partir de um palpite sobre a fórmula — um preset feito no Lightroom cai onde seu autor o colocou.

Onde um controle realmente não está implementado, o motor o renderiza como neutro e pode avisar, em vez de substituí-lo por algo aproximadamente parecido. Um preset é um conjunto de números escolhidos de propósito; renderizar outros em silêncio é pior do que não renderizar nenhum.

Nada sai do aparelho

Não existe servidor. Leitura, renderização, captura e exportação acontecem todas no telefone, e as fotografias são gravadas direto na sua fototeca.

Entrar no Google Drive ou no OneDrive para buscar presets guarda o token no Chaveiro do iOS e o usa para ler arquivos .xmp, mais nada.