Anti-aliasing no Yaf(a)Ray


Esse é um post explicativo sobre o sistema de anti-aliasing do Yaf(a)Ray. Apesar de existir uma página na documentação do Yaf(a)ray que é a melhor explicação possível de como funciona esse sistema, ainda vejo bastante gente com dúvida e fazendo coisa errada nesse sentido, então resolvi dar uma explicação em português de como funciona isso. Claro, é uma explicação bem amistosa, mas que produziu resultados bem contundentes comigo.

O que é Aliasing?

Aliasing pode ser entendido como serrilhado, na linguagem popular. Mas na realidade, aliasing é um nome dado a uma pobre pixelização de uma imagem. Anti-alising é a técnica que evita esse efeito.

Existe também outros problema relacionados ao alias (texturas, pequenos detalhes, luz…), porém esse é realmente o mais comum em nosso mundo. As técnicas de anti-alising tomam mais tempo de render pois são elas que eliminam esses serrilhados e granulados na imagem. Existem também vários filtros, mas no Yaf(a)Ray nós temos três: Gaussian, Box e Mitchell. Não há tanta necessidade de saber como funciona cada filtro, basta ver uma imagem e saberá o que cada um faz. Agora vamos entrar nas explicações de como usar o AA no Yaf(a)Ray…



Agora deixe-me explicar separadamente como funciona cada valor da imagem.

  • AA samples: Está diretamente relacionado a todos os valores de sample do render (area, background, FG, pathtracing…). É um valor multiplicativo, pois multiplica qualquer valor de samples da cena pelo número indicado pelo usuário. É o “tirador-chefe” de noise e alias.
  • AA passes: É uma opção inteligente e está incluida no que chamamos de Adaptive Sampling, que será explicado mais abaixo. Parece com o AA samples, porém é mais limitado.
  • AA inc. samples: Essa opção adiciona samples ao valor AA passes.
  • AA Threshold: É a sensibilidade do que o renderizdor considera alias.
  • AA pixelwidth: É um valor que determina o tamanho do filtro de reconstrução dos pixels. Valores altos significam menos noise e mais embaçado, valores baixos significam mais noise e imagem mais nítida.

Pontos de intersecção e o tempo de render

Ao contrário da vida real, no 3D, a camera é quem atira os raios para interagir com a cena para que você tenha o resultado final. Sim, o caminho feito no 3D é inverso! Enfim, esses raios são chamados de raios primários e o ponto de encontro entre um raio primário e uma superfície é chamado de ponto de intersecção, que é também a origem de raios de sombras onde os samples serão usados. Cada ponto de intersecção dá origem a raios secundários, que são definidos pelo valor de sample de cada luz. Isso é chamado de First AA pass. Então o número de pontos de intersecção está relacionado diretamente ao valor do AA samples e os samples relacionado, logicamente, ao valor dos samples determinado para a luz.

A imagem da direita possui 3 samples para a area e 1 para o AA samples. Nesse contexto, o que faz o tempo de render aumentar, na verdade, é o número de pontos de intersecção a ser calculado no render. Imagine a seguinte fórmula hipotética: Rs.Pi = Rt, onde Rs são os raios secundários (samples), Pi são os pontos de intersecção (AA samples) e Rt é o número de raios totais. Nós podemos conseguir o resultado 9 de três maneiras:

  • Rs.Pi = Rt … 3.3 = 9
  • Rs.Pi = Rt … 9.1 = 9
  • Rs.Pi = Rt … 1.9 = 9

Partindo do principio onde diz que o tempo de render está diretamente relacionado ao valor do Pi, o último resultado será o mais lento de todos. Daí a gente conclui que é mais vantajoso ter um raio primário (AAs = 1) com três raios secundários (Samples das luzes/FG = 3) a três raios primários (AAs = 3) com um raio secundário (Samples das luzes/FG = 1). E sim, é mais vantajoso. Mas temos de pensar que cada caso é um caso. Isso não é regra, mas você precisa saber como funciona a coisa pra botar a cabeça para funcionar. Isso é estratégia de AA. Agora continuando…

Adaptive Sampling

Adaptive Sampling não é uma opção a ser ativada, mas sim uma forma inteligente de eliminar o noise e alias do render, mais especificamente o alias. As estrelas dessa técnica são: AA passes e o Threshold. Mais acima, eu falei que o AA passes parecia com a opção AA samples, porém mais limitada… Isso porque o AA passes não aplica samples em toda a imagem, somente em pixels específicos, limitados pela opção Threshold. Se a diferença de luminância (ou o contraste) dos pixels for maior que o específicado nessa opção, os samples adicionais são aplicados. Isso evita que pixels que não precisam mais de samples, sejam “sampleados”, fazendo assim um render mais eficiente (pois a velocidade do AA passes tende a aumentar com o tempo, pois menos pixels precisam de samples).  Diferentemente do AA samples, que aplica a mesma quantidade de samples para todos os pixels, mesmo que eles já não precisem mais – por isso o apelido “tirador-chefe” de noise e alias, hahah. Como dito mais acima, quanto menor o valor, mais sensível é a opção e mais pixels serão beneficiados com a adição de samples. Igualando o valor do Threshold a 0, teoricamente, o AA passes se comporta como o AA samples. É possível também adicionar pixels extra a opção AA passes. A opção que faz isso é a AA inc. samples.

Threshold > Threshold

Estratégia de Anti-Aliasing

Acho que depois disso tudo dá pra chegar a conclusão de sempre deixar o AA samples em 1, aumentar os samples de todas as luzes e aumentar o AA passes. Mas não é assim que rola… Existem algumas coisas que é preciso ponderar ao montar a sua estratégia de render. Abaixo listo algumas.

  • Em adaptive sampling e com o threshold alto, a melhor forma é usar o AA inc. samples somente em 1 e com o AA passes bem alto. Isso porque se um pixel precisa de 4 samples, o filtro aplicará um sample a cada pass, sem desperdício. Se o AA inc. samples for 3, por exemplo, precisará de dois passes para fazer o pixel ficar bom, porém haverá um desperdício. Dessa forma, você reduz aliasing e muito pouco noise.
  • Em adaptive sampling e com o threshold baixo, a melhor forma é usar o AA inc. samples maior que 1 e com o AA passes mais baixo. Isso porque mais samples serão aplicados em cada pixel (e serão muitos) e a cada passe, o número de pixels precisando de samples cairá mais rápido, tornando assim o render mais eficiente. Dessa forma, você reduz aliasing e um pouco de noise.
  • DOF, até onde eu conheça, só possui um valor que controla sua qualidade: AA samples. Então, se for usar DOF, lembre-se de não exagerar nos samples – ainda sim recomendo que você faça por pós-produção.
  • Relembrando: a opção AA samples multiplica todos os valores que controlam os samples. Então lembre-se de não exagerar nesses valores caso a opção AA samples for alta.
Anúncios

Tags:, , , , ,

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: