Neste terceiro tutorial da série sobre fogo e fumaça com o simulador de Fluid no Blender 4.5, vamos falar sobre as formas como o Blender executa e armazena o Bake, ou seja, a simulação física de fogo e fumaça.


Este tutorial faz parte de uma minissérie de 10 episódios sobre os fundamentos de Fogo e Fumaça no Blender 4.5. Para ver a lista completa de episódios, clique aqui.

A versão em vídeo deste tutorial não está disponível no momento neste idioma, mas está disponível em inglês selecionando o idioma correspondente na parte superior da página.


Transcrição do vídeo

Olá a todos! Neste terceiro tutorial da série sobre fogo e fumaça com o simulador de Fluid no Blender 4.5, vamos falar sobre as formas como o Blender executa e armazena o Bake, ou seja, a simulação física de fogo e fumaça. Entre outras coisas, veremos como calcular a simulação uma única vez para um Domain, para que ele possa ser duplicado e colocado em outras partes da cena sem recalcular as simulações para todas as cópias. Por fim, veremos como definir um Offset para a reprodução da simulação, de modo que a animação possa começar com o fogo já aceso, em vez de mostrar a ignição inicial da chama.

A cena inicial deste tutorial consiste em um braseiro contendo algumas toras de lenha.

São duas malhas separadas, com as toras formando uma única malha.

O braseiro está apoiado sobre um Plane retangular, que funciona como chão, e mais adiante colocaremos outros braseiros sobre ele. O mundo virtual tem Strength igual a 0 e não há fontes de luz, portanto no modo Rendered a cena aparece completamente preta.

Nos episódios anteriores, vimos que para fazer um objeto produzir chamas é necessário atribuir a ele um componente Physics Fluid do tipo Fire And Smoke Flow. Então adiciono um componente Physics Fluid à lenha, definindo Inflow como comportamento do componente, o que significa que a madeira irá gerar chamas em todos os frames.

Em seguida, crio um Cube, atribuo a ele um componente do tipo Domain e faço com que envolva toda a cena inicialmente. Logo percebemos um problema: a resolução padrão é muito baixa, produzindo Voxels grandes demais, o que faz com que as chamas fiquem grandes demais em relação aos objetos que as emitem.

Aumentar a resolução para 64 não melhora muito a situação, e a simulação também começa a demorar mais. Nem quero tentar aumentar ainda mais a resolução, porque está claro que essa não é a abordagem correta.

A solução mais óbvia é redimensionar o Domain para que ele envolva apenas o braseiro e um pouco de espaço acima dele para que as chamas e a fumaça se desenvolvam. Agora a resolução funciona até bem demais. Na verdade, talvez esteja até excessiva, então podemos reduzi-la para 32 e ainda assim obter chamas bem definidas. O problema, na verdade, é que a madeira está produzindo fogo demais.

Para reduzir a quantidade de fogo gerado, podemos ajustar o parâmetro Fuel do objeto Inflow. Intuitivamente, quanto maior o valor de Fuel, mais combustível será queimado a cada frame. Portanto, a solução é diminuir esse valor até que as chamas atinjam um tamanho adequado.

Como mencionado nos episódios anteriores, os dados relacionados ao Baking, ou seja, ao cálculo da simulação física, são armazenados em uma pasta dedicada, cujo caminho é especificado na seção Cache do objeto Domain. Antes de criar o Domain, salvei o arquivo no disco, então a pasta de cache fica localizada no mesmo diretório do arquivo do projeto do Blender.

Na seção Cache do Domain, podemos definir o intervalo de frames sobre o qual calcular a simulação do Domain. Esse intervalo não precisa necessariamente coincidir com o intervalo de frames da animação da cena. Isso pode ser útil para fazer o Bake de apenas um número limitado de frames, apenas para ter uma ideia de como o fogo está ficando antes de executar o Bake completo. Outro caso de uso é quando objetos Fluid não estão no campo de visão da câmera, o que significa que, nesses frames, não é necessário calcular a simulação física.

Antes de examinar os outros parâmetros da seção Cache, vamos ver o que acontece quando fazemos cópias do conjunto composto por Domain, braseiro e toras, com as toras atuando como objetos Inflow, e colocamos essas cópias pela cena. Como vimos anteriormente, um único Domain cobrindo toda a cena precisaria de uma resolução extremamente alta para produzir chamas de boa qualidade, além de deixar muito espaço vazio. Portanto, para adicionar vários braseiros, a única opção é duplicar o conjunto inteiro.

O problema é que, ao pressionar Play na Timeline, o Blender usará a mesma pasta de cache para todos os Domains, o que significa que eles compartilharão os mesmos dados de simulação. Se você tiver certeza de que deseja manter os mesmos parâmetros para todas as simulações, talvez possa tentar enganar o espectador girando levemente os Domains ou atribuindo Materials diferentes a cada Domain, variando assim a aparência das chamas no render.

O verdadeiro problema surge se alterarmos a resolução ou qualquer outro parâmetro de um Domain e depois executarmos o Bake novamente. Por exemplo, estou reduzindo a resolução dos Domains mais distantes, já que não precisamos de alta resolução para objetos de fundo. Agora o Blender realmente está misturando os dados, porque é o mesmo conjunto de dados volumétricos sendo compartilhado por objetos com características diferentes.

Se você quiser que cada Domain tenha seus dados claramente separados dos demais, é necessário especificar pastas de cache diferentes para cada Domain antes de executar a simulação. Nem é preciso dizer que isso aumentará significativamente o espaço em disco utilizado pelos dados dos vários Domains. Cabe a você, de acordo com suas necessidades, decidir qual estratégia adotar: um ou mais Domains muito grandes duplicando a mesma simulação, ou criar caches separados para os diferentes Domains.

Até agora, o Blender vem calculando o Bake da simulação toda vez que pressionamos Play na Timeline. Esse não é o único modo possível. Na verdade, existe outro modo que também nos permite usar uma ferramenta muito útil. Para simplificar, deixo apenas um braseiro com seu Domain na cena e excluo os outros. Tome cuidado, pois excluir Domains não remove seus dados do disco. Isso é algo positivo, porque significa que podemos salvar e reutilizar os dados da simulação depois. Mas neste caso, não preciso mais desses dados, então vou excluí-los manualmente.

Na seção Cache do Domain, encontramos o menu Type, que por padrão está definido como Replay. Este é o modo que temos usado até agora: o Blender recalcula um novo Bake toda vez que voltamos ao frame 1 e pressionamos Play, sobrescrevendo os dados anteriores.

O modo Modular permite realizar Bakes separados para diferentes aspectos da simulação. Isso pode ser útil em alguns casos, para examinar ou substituir certas partes individualmente sem precisar refazer toda a simulação.

O modo All, por fim, permite fazer o Bake de toda a simulação, mas calculando em segundo plano, e não na Timeline. Para iniciar o Bake, é necessário clicar no botão Bake All no painel. O Blender exibirá uma barra de progresso durante o processo. Quando o cálculo estiver concluído, você pode pressionar Play na Timeline para visualizar o resultado de forma muito mais fluida, já que ele já foi pré-calculado pelo Blender.

Para modificar as configurações da simulação, primeiro é preciso limpar os dados existentes clicando no botão Free All. Nesse momento, os parâmetros voltarão a ficar editáveis e você poderá alterá-los. Naturalmente, depois será necessário clicar em Bake All para que o Blender recalcule a simulação.

Ao observar a pasta que está sendo utilizada, você poderá ter uma ideia dos diferentes módulos ou etapas de baking que são calculados e armazenados separadamente ao usar os modos Modular e All.

O modo All disponibiliza o parâmetro Offset, que ajuda a resolver um problema que você talvez já tenha notado. Até agora, todas as simulações de fogo começaram com a chama se acendendo no primeiro frame da animação.

Isso nem sempre é desejável, porque às vezes queremos que a animação comece com o fogo já queimando.

Para resolver essa questão, podemos inserir um número negativo no campo Offset.

A dica exibida informa que isso não significa que o Baking começará antes, mas apenas que a simulação será reproduzida como se já tivesse avançado aquele número de frames no primeiro frame da animação.

A duração da animação em frames continuará sendo a especificada entre Frame Start e Frame End.

Neste caso, os últimos 25 frames da Timeline ficam sem simulação, porque com o Offset dissemos ao Blender para reproduzir o frame 25 da simulação no primeiro frame da Timeline.

Para resolver isso, basta fazer com que o Bake calcule mais frames, de modo que a simulação cubra toda a Timeline. Então defino Frame End como 275 na seção Cache do Domain, clico em Free All e depois executo o Bake novamente clicando em Bake All.

Este site tem como único objetivo apresentar alguns dos meus trabalhos, sem qualquer finalidade promocional. Observe que, no momento, não estou procurando - nem responderei a - solicitações de trabalhos personalizados, consultorias ou qualquer outro tipo de colaboração profissional.


INFORMAÇÕES DE POLÍTICA DE PRIVACIDADE AVANÇADAS E USO DOS FICHEIROS DE COOKIES