A verdade sobre renderizadores unbiased

a-verdade-sobre-renderizadores-unbiased

Christopher Nichols, Diretor Criativo da Chaos Group, publicou no site Chaos Groups Labs um interessante e obrigatório artigo sobre os enganos a respeito de renderizadores unbiased e biased, mostrando suas reais diferenças. Uma leitura mais do que obrigatória que trazemos para você traduzida.

(Você pode ler o artigo original, em inglês, clicando AQUI.)
Nota do tradutor: alguns termos em inglês não foram traduzidos por serem amplamente conhecidos por seus nomes originais.

Ao longo dos anos têm havido vários debates sobre qual tipo de renderização seria melhor: biased ou unbiased. O termo “unbiased” tem sido usado por muitos com o significado de “mais preciso”. A verdade, no entanto, é que praticamente todos os renderizadores no mercado são de alguma forma biased, mesmo aqueles que alegam ser unbiased, porque soluções biased são na verdade mais rápidas, inteligentes e não necessariamente imprecisas. Para entendermos isso, é necessário destrinchar um pouco mais o assunto.

O que é “unbiased”?

Basicamente, um render unbiased significa que não foi tomado absolutamente nenhum atalho para seus cálculos. Cada raio é tratado de forma idêntica e não há “arredondamentos” ou aproximações de nenhum tipo ou importância. Por conta disso, enormes quantidades de raios são necessárias para se obter um resultado limpo. Nesse sentido, uma das melhores definições dos efeitos de cálculos unbiased que encontrei foi a dada por Vlado, que postou no fórum da Chaos Group o seguinte:

“Em teoria, um método unbiased para se computar uma integral (neste caso a equação de renderização) é um método que ao ser rodado múltiplas vezes com os mesmos dados de entrada (a cena 3D) dará, na média, o resultado correto (imagem final), mesmo que cada resultado individual possa estar relativamente errado (com ruído, por exemplo). Isto significa que se você rodar o algoritmo vezes suficiente e tirar uma média do resultado, você terá uma imagem final correta. Você pode imaginar isso mais ou menos como os vários passes que o progressive sampler do V-Ray faz para limpar o ruído (noise) da imagem: cada pass individual é bastante cheio de noise, mas quando um número suficiente de passes são calculados e mediados, você tem um resultado final limpo.”

Como tal, você poderia pensar que o render progressivo é unbiased, mas isso não é verdade. Há diversos atalhos de bias que renderizadores podem tomar para acelerar o render e ainda serem progressive path tracers. Estas otimizações podem ser controláveis pelo usuário em forma de settings ou escondidas totalmente.

Se o seu renderizador for rápido, é mais do que provável que ele seja biased. A que extensão ele é biased depende dos seus desenvolvedores, assim como das setagens feitas pelo usuário. Se seu renderizador expõe várias de suas settings de bias ao usuário para dar a possibilidade ou escolha de desligá-las, então o usuário deve estar ciente das consequências dessa escolha.

Erros comuns a respeito de unbiased

Se você acompanhar as discussões, verá que existem uma série de enganos a respeito do que unbiased realmente é. Aqui estão alguns pontos bastante comuns que observo:

Unbiased é fisicamente preciso – Unbiased rendering NÃO implica nisso ou o contrário (que renderizadores biased são fisicamente imprecisos): ambos são imprecisos. A simples ideia de usar um BRDF como Blinn ou GGX é, em si, uma aproximação de como os materiais funcionam no mundo real. A pergunta é qual método irá atingir um resultado fisicamente plausível mais rápido, o que será explicado mais abaixo.

Unbiased significa menos settings – Só porque um renderizador tem muito poucas settings não significa que ele seja unbiased. Muitas settings que tornam o renderizador biased podem estar direto em seu código, simplesmente escondidas dos usuários.

Brute Force GI = Unbiased – Muitas pessoas pensam que se você calcular o Global Illumination (GI) de uma certa forma e usar dados salvos, o render é biased. Apesar de ser verdade que dados de GI salvos são biased, GI brute force também pode ser biased.

Path tracing é unbiased – Muitos atalhos totalmente biased podem ser introduzidos até mesmo em um path tracer, portanto isto também não é verdade.

O que faz um renderizador ser biased?

A esta altura você deve estar se perguntando como um render poder ir de unbiased para biased e quais atalhos ele tomaria para isso acontecer. Há diversos truques bem comuns. Alguns ficam expostos para o usuário, como no caso do V-Ray, para dar a escolha de quais atalhos você quer tomar e quanto. Outros renderizadores nem sempre os expõem. Isso pode ser para simplificar a interface ou para fazer o usuário acreditar que nenhum atalho está sendo tomado (e que seu renderizador é unbiased). De qualquer forma, aqui estão alguns exemplos de settings e atalhos que fazem um renderizador ser biased:

Definir a quantidade de rebatimentos de luz (bounces) – Unbiased não limitaria os rebatimentos até que eles deixem a cena ou sejam completamente absorvidos.

Usar cache – Pode ser interpolado para problemas complexos de raytracing como Global Illumination com centenas de bounces ou caustics, sendo soluções biased que ajudam a acelerar essas soluções e/ou permitir um número significativamente maior de bounces de luz.

Adaptive Sampling – É o ato de favorecer raios em áreas que são provavelmente mais importantes. Por exemplo, voê pode favorecer raios ao redor de áreas onde você sabe que há luzes, ou onde o cache de GI indica que há uma grande contribuição do mesmo.

Suprimir ou remover raios de caustics – Muito comum em diversos renderizadores, já que caustics significam cálculos bastante custosos.

Travar (clamp) ou reduzir a intensidade de certos raios para reduzir fireflies – Este é um truque comum para coisas como raios de reflexos glossy que podem ocasionalmente pegar fontes de luz bem brilhantes. Ao travar (clamping) raios secundários, você reduz a chance de esses picos de intensidade (conhecidos como fireflies) aparecerem.

Na verdade, usar qualquer tipo de clamping ou tolerância ou threshold para determinar se um path deve ser continuado ou não – Novamente, essas técnicas podem reduzir os cálculos e acelerar seu render.

Qual é o correto? Biased ou unbiased?

Devemos notar que todos esses truques não necessariamente significam que uma solução biased menos correta, precisa ou fisicamente correta. Aqui temos mais uma citação de Vlado, do fórum da Chaos Group:

Fiquei recentemente surpreso ao saber que muitas pessoas assumem que o termo ‘unbiased’ signifique ‘fisicamente correto’ e ‘biased’ seja, de alguma forma, fisicamente incorreto, quando, de fato, a relação entre esses dois termos é parecida com a relação entre  ‘precisão’ and ‘exatidão’ quando usadas no contexto científico. Cálculos unbiased têm maior precisão, mas isso não significa que tenham qualquer exatidão (quão próximos estão do que realmente acontece). O contrário também é verdade – cálculos biased podem ser bastante corretos (bastante próximos ao resultado real), mas tipicamente um tanto imprecisos.

Assim, renders biased podem ser de fato fisicamente corretos e, na maioria dos casos, podem chegar ao resultado correto. Se o objetivo é conseguir uma imagem que pareça o mais fisicamente correta possível no menor tempo possível, então você precisa de uma solução biased. Por outro lado, se você precisa ter certeza de que todos os raios possíveis são levados em conta, mesmo aqueles imperceptíveis, então você precisa de uma solução unbiased.

O que é melhor? Biased ou unbiased?

Conforme determinamos, a maioria dos renderizadores usa soluções que tornam seus render biased, mesmo quando insistem em se chamarem unbiased. Se não fosse assim, o processo seria extremamente lento. Engines biased são muito inteligentes, pois são a maneira mais eficiente de se conseguir uma imagem correta. De fato, você quase pode chamar unbiased de ineficiente.

No papel, o termo “unbiased” soa superior a “biased”, já que sugere não haver limitações ou amarras. Mas o engraçado é que se as pessoas passassem a chamar unbiased de “burra” e biased de “esperta” – o que seria tão válido quanto – o inverso provavelmente iria ocorrer.

Resumo da ópera: se você estiver fazendo cálculos realmente científicos e tem uma tonelada de poder de processamento e tempo, unbiased vai lhe servir perfeitamente bem. Mas se você estiver interessado em renderizar imagens fisicamente plausíveis em um tempo plausível, soluções biased são as ideais. E é muito provável que você já esteja fazendo isso, independente do renderizador que use.

Legal… tudo é, na verdade, biased. Mas eu quero menos settings.

Você pode tanto expor as settings que determinam quão biased sua solução será quanto escondê-las. O motivo que faz o V-Ray ter mais settings é que diferentes usuários têm diferentes necessidades. Ao longo das últimas versões temos feito esforços para diminuir a quantidade de settings que você vê inicialmente. Esta é a grande razão pela qual diversas settings estão disponíveis apenas ao selecionar o botão “advanced” ou “expert.” Também estamos trabalhando para deixar o V-Ray menos “manual”, então se um usuário quiser simplesmente abrir sua cena e apertar um ou dois botões, ele pode.

Em releases recentes do V-Ray, as settings estão de tal forma a ignorar a maioria das setagens do usuário (como ajustar subdivisões em luzes ou materiais) que podem, na verdade, deixar o render mais demorado. Muitos usuários simplesmente abriram suas cenas antigas nas novas versões e já perceberam enormes aumentos na velocidade de render. E enquanto o core do renderizador foi, realmente, bastante otimizado nas últimas versões, ignorar setagens antigas tem um grande efeito no tempo de render.

O bom é que, em muitos casos, o V-Ray pode ser controlado com apenas 3 settings. Este vídeo feito por Vlado explica seu processo geral para ajudar os usuários a acelerarem suas cenas limitando suas escolhas a apenas algumas variáveis.

Na verdade, as setagens recomendadas por Vlado no vídeo são os novos padrões, então muitos usuários simplesmente poderão clicar em render sem mexer em nada e ainda assim ter ótimos resultados.

V-Ray pode ser verdadeiramente unbiased.

Outro fato que muitas pessoas não sabem é que, já que o V-Ray expõe todas as suas settings, é tecnicamente possível ser unbiased com ele. Fazendo isso, é possível vermos realmente a diferença entre biased e unbiased. Além de ser significativamente mais lento, você notará que a diferença entre os dois resultados é praticamente imperceptível.

Conclusão: soluções biased funcionam, e é por isso que todo mundo as usa.

Novamente, nos viramos para John Carmack já que ele é sábio e já disse o que eu quero dizer. Apenas substitua a palavra “otimizar” por “bias”.

“Há uma porção de trabalho sendo feito nisso hoje, é aqui que o estado da arte da renderização está, como otimizar o path tracing para ser mais eficiente em diferentes casos. Mas você sempre estará fazendo suas aproximações naquilo que quer fazer. (…) Mas esse approach, ele basicamente funciona.”

2 comments

  1. Muito obrigado, já faz um tempo q li e add em meus favoritos, hoje li novamente e continua esclarecedor.

Leave a Reply

Discover more from V-Ray Masters

Subscribe now to keep reading and get access to the full archive.

Continue reading