Linear Workflow no Blender e Linux


Essa é uma tradução livre feita por mim, Victor Phellipe, de um tutorial sobre as Linear Workflow no Blender. O tutorial original pode ser lido aqui.
___________________________________________________________________

Enquanto estava trabalhando no meu projeto atual para explorar as diferenças entre Luxrender e o Blender, surgiu o linear workflow pra mim. Até agora eu sabia o que era e nunca achei necessário testar ou usar em nenhum dos meus projetos. Os passos envolvidos usando Blender, especialmente no Linux, pareciam tediosos.

Como esse projeto estava mirando em fotorrealismo, essa era uma boa oportunidade para tentar usar linear workflow. E eu tenho que dizer: estou convertido agora. Não deve ter nenhum projeto sério feito sem a aplicação do Linear Workflow.

Introdução

Eu não vou entrar em detalhes sobre o que é Linear Workflow pois existem vários bons artigos por ai, então vou me concentrar na parte mais prática dos problemas usando Blender no Linux… Especialmente no Linux.

Veja os seguintes links para uma discussão mais profunda sobre a teorias e outras coisas a mais sobre linear workflow:

As principais vantagens são:

  • Tons melhores e mais naturais
    • Menos estouros de luz e recortes nas luzes
    • Áreas escuras ficam mais claras
  • Aparência mais natural
    • O cálculo usando domínio linear não precisa de nenhuma “gambiarra” e corresponde a um mundo mais fisicamente real, resultado numa imagem que reflete um fato.
  • Menos trabalho na configuração das luzes
    • No meu projeto atual sem Linear Workflow, eu tive que usar 5 luzes. No projeto onde eu inclui Linear Workflow só precisei de duas. O tempo de renders fazendo testes também diminuiu, pois somente duas lâmpadas foram necessárias para me deixar satisfeito.
  • Necessidade absoluta quando está fazendo uma cena “live-action”
    • Para ter uma iluminação natural que leve você para a cena onde existe uma ação, você precisa de um modelo de cálculo que permita você fazer isso sem muito trabalho.

Resumo

Se você leu os artigos mencionados acima, você sabe que existem alguns pontos chaves que precisam ser implementados para o linear workflow. Todas as informações de cores devem ser convertidas para o espaço linear, isso inclui todas as texturas do tipo diffuse, assim como as cores escolhidas diretamente do painel de materiais do Blender. Todas as luzes que oferecem uma propriedade de atenuação devem ser configuradas para “Inverse Square”, já que essa é a lei de como a luz se comporta no mundo real.

Uma vez que todas as informações estão “linearizadas”, o algoritmo do renderizador pode atuar em cima e produzir uma imagem que está, é claro, dentro do espaço linear com todas as informações da exposição da cena, de modo que a imagem que você vê é um HDR. Como a informação de exposição está armazenada dentro de uma imagem que é muito “alta” para ser mostrada no monitor, você precisa aplicar um Tone Mapping e converter de volta para um espaço não-linear.

Para tirar um máximo proveito do processo de conversão, os passos feitos aos dados de entrada não devem destruir a informação, então o ideal é que ela seja também uma imagem HDR ou ser, pelo menos, uma imagem com 16 bits de cor. Se você usa Windows e tem dinheiro, o caminho a seguir para essas conversões é usar o photoshop. Ele suporta vários tipos de bits e manipulação de cor, criação de imagem e edição sem destruir nada da imagem. É um sonho trabalhar com ele. Se você está usando Linux (como eu) e não pode ter o photoshop e/ou não quer ter que rodá-lo no Wine (como eu), suas opções estão bem limitadas e nenhuma é perfeita. Especialmente aquelas com mais bits, que trazem problemas.

Ferramentas disponíveis

Vamos dar uma olhada em alguns arquivos, ver o programa associado e o que é possível usá-los dentro do contexto Linear Workflow.

  • Texturas fotográficas
    Se você está criando suas próprias texturas, eu recomendo que você tire as foto no modo RAW, para ter todas as informações possíveis sobre contraste que a câmera pode dar. Como um bônus, imagens RAW já estão “linearizadas”.
    Para trabalhar com imagens RAW no Linux, aqui vão alguns softwares que você pode usar.

    • digikam (gpl):
      Além de ser um completo editor e manipulador de fotos, suporta manipulação de cores e RAW. O núcleo de manipulação RAW é o dcraw, de Dave Coffin.
    • UFRaw (gpl):
      Uma ferramenta GTK exclusicamente focada em manipulação de imagens do tipo RAW. Esse software também é baseado no dcraw.
    • Lighzone (comercial)
      Editor de imagens RAW voltado para profissionais da fotografia. Foi feito em jaja e tem uma versão para o Linux. Tinha uma versão de graça para o Linux (Versão 2.1), mas infelizmente não existe mais.

    Se você está usando texturas LDR, ou formatos com 8 bits, as opções também se aplicam.

  • Texturas pintadas
    Aqui está a deficiência de ferramentas para o Linux. Aqui você tem que criar as coisas pintando realmente, então uma boa ferramenta que suporte altas profundidades de cor é desejável.

    • gimp (gpl):
      Muitas vezes apelidado como “Photoshop para Linux”, eu realmente tenho que dizer que é uma afirmação bem lisonjeira. O falta de suporte a altas profundidades de cor proíbe seu uso em imagens com alta qualidade. O sistema de pintura não é o foco principal e eu sinto falta de edição não-destrutiva.
      Altas profundidades de cor e edição não-destrutiva são agora tecnicamente possíveis com a integração do GEGL no GIMP, mas isso deve ser colocado a uso. Higher color depths and non destructive editing are now technically possible with the integration of GEGL into gimp, but this has yet to be put to use. Não existe roadmap ainda e devemos esperar o melhor.
    • cinepaint (gpl):
      Originalmente uma opção ao GIMP para prover altas profundidades de cor e manipulação de cor para o pós-produção na indústria do cinema tem agora um suporte incrível para essas coisas, mas ainda tem a falta das ferramentas de edição e pintura que o GIMP oferece agora.
    • krita (gpl)
      Teoricamente, oferece todas as opções desejadas. Na prática, é inútil para trabalhos sérios. Devagar e bem instável na versão 1.6.x. Slow and often crashing as of version 1.6.x. Resta ver se a versão 2.0, que está em desenvolvimento, oferece uma melhor experiência de uso. Adoraria ver isso ter vida.

Com essa lista limitada de ferramentas, eu estou atualmente criando minhas texturas tirando fotos do tipo RAW e usando o digikam. Para todas as outras texturas eu uso GIMP.

Uma vez que o “material bruto” foi produzido, ele tem que ser “linearizado”. Na maioria dos casos, nós usamos uma imagem LDR e, antes de convertê-las, temos de aumentar a profundidade de cor para 16bits, caso contrário se perde muita informação.

Ferramentas “linearizadoras” são ferramentas que podem aplicar uma correção de gamma em imagens 16bits, ou seja, digikam, cinepaint, convert (parte do ImageMagick) e Blender. Geralmente eu crio várias texturas, então eu prefiro usar um script para converter:

convert <inputfile> -depth 16 -gamma 0.45 <outputfile>

Isso vai fazer a imagem inicial aumentar a profundidade de cor para 16bits e aplicar um gamma de 0.45, resultado numa imagem linearizada. Lembre-se de que você tem que escolher um tipo de arquivo que seja capaz de manipular altas profundidades de cor. Meu formato preferido é PNG.

A conversão para 16bits não aumenta a informação na imagem. Isso pode ser visto olhando no histograma:

O que pode ser visto é existe vários valores sumidos, resultando num histograma bem quantizado. Se nada for feito para preencher essas informações, você vai ter uma imagem granulada e cheia de erros. Eu não tenho um conhecimento teórico sobre como conseguir uma suavização do histograma, mas eu achei uma solução viável (veja abaixo).

Com todas essas opções apresentadas, eu sigo o seguinte workflow.

Workflow

Planejamento e preparação

Eu mantenho sempre minhas texturas em um diretório separado. Por questões claras, eu criei uma pasta dentro do diretório de cada textura chamado linear. Nessa pasta irão conter todos os mapas de texturas linearizados. Para que a conversão automática seja possível, eu usei um padrão para o nome das minhas texturas do tipo diffuse: *color.png. Feito isso, usei um simples script para converter todas as texturas em um só lote.

#!/bin/sh
mkdir -p linear
for file in *color.png; do
    echo linearizing $file ...
    convert $file -depth 16 -gamma 0.4545 -depth 8 linear/$file
done
echo done

Usei o Nodes Compositor do Blender para fazer o tonemapping.

O primeiro nó, o RGB Curves, é para comprimir a faixa de tons da imagem HDR e o segundo nó é só para converter a imagem de volta para o gamma 2.2. O ajuste final no tons pode ser feito com outro RGB Curves. Sempre que eu crio ou mudo uma textura do tipo diffuse eu executo o script para encher o diretório com as texturas linearizadas. Consequentemente eu só uso texturas nesse diretório.

Durante o desenvolvimento do projeto, eu não regularizei os histogramas nas texturas convertidas, já que eu não tinha uma solução automática. Para a imagem final, eu usei a ferramenta de restauração da Digikam na opção “remove uniform noise”, para ter um histograma suave e ser perturbar a imagem.

Esse é o histograma suavizado do exemplo anterior. Não está perfeito, mas está muito melhor.

Luzes

As únicas lâmpadas que nos dão a opção de usar Inverse Square são: spot e lamp. A sun e hemi não tem nenhuma atenuação, são constantes, então tá tranquilo. O único problema para mim parecer ser a area lamp, mas eu não investiguei a fundo. Eu posso sempre usar uma spot com sombras raytrace com softshadow ativado para ter um efeito similar.

Cores e texturas procedurais.

Tenho que admitir que essa a parte onde é preciso mais ajuste, mais tempo gasto. Se eu tenho só uma cor sólida (sem variação), dá pra corrigir facilmente dessa forma:

  • Escolha a cor que você quer no Blender
  • Use o “conta-gotas” no GIMP e pegue a cor que você escolheu
  • Encha uma imagem qualquer com essa cor e faça uma correção de gama de 0.45 com a ferramenta nível.
  • Agora pegue o “conta-gotas” do Blender e pegue a cor da imagem do GIMP, que agora está corrigida.

Isso é tedioso e muitas vezes não é necessário, já que eu vou ajustando a cor avaliando o resultado.

Você não pode fazer isso com texturas procedurais já que tem uma dinâmica envolvida. Minha solução foi usar o Material Nodes para compensar. Você só precisa ficar atento em corrigir somente o Diffuse da textura e em não linearizar o diffuse de novo.

É uma solução “meia-boca”, mas é o que deu pra fazer.

Observação

Nenhuma janelinha de preview no Blender, assim como o render e o material preview, vai te mostrar como ela realmente é (no sentido de claridade), talvez até mais escura no monitor. Para configuração rápida, eu usei o preview como um guia relativo, digamos assim, porque eu sempre recorria ao render final para ajustar os materiais.

Conclusão

Com tudo isso, você deve estar se perguntando: “Isso realmente vale a pena?”. E eu te respondo: Sim, cada parte!

Anúncios

2 responses to “Linear Workflow no Blender e Linux”

  1. Jonathas Roberto says :

    Olá, sou curioso do mundo blender, e gostei bastante deste blog.
    ,
    Sobre as ferramentas de edição de bitmaps, se todas livres falharem, ainda da pra usar photoshop, via o wine este está funcionando muito bem, realmente acho um saco o gimp ser limitado quando a profundidade das cores, porém, pra se pintar a mão, tem o gimp-painter que é uma mão na roda.
    .
    .
    Eu usei por um tempo o RAWstudio, é mto bom tbm, deixei de usa-lo quando migrei pra interface KDE. mas é bom da uma olhada

Trackbacks / Pingbacks

  1. Linear Workflow no Blender e Linux « Victor Phellipe - 28 de abril de 2011

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: