Tutoriais - 3ds max avançado

Reactor Rigid Body e simulação

Neste tutorial vamos começar a estudar o Reactor, que é um módulo para simulações físicas no 3ds max. Ele era um plug-in separado até a versão 4 e foi integrado ao programa na versão 5. No Max 3 este plug-in se chamava Havok. Até a versão 5, o programa conta com a versão 1 do Reactor, a partir do Max 6 vem a versão 2 do Reactor, com várias modificações. O Reactor foi criado para simular animações onde forças físicas atuam sobre os objetos da cena, por exemplo, o choque entre dois ou mais objetos. É isso que vamos aprender neste tutorial, mas vamos estudar também a base do Reactor, para saber como configurar os objetos e as propriedades da cena adequadamente.

Para iniciar precisamos criar uma cena simples, como mostra a imagem ao lado. Um Plane como piso, uma rampa feita com Line, formando um triângulo e depois extrudindo com o Modify Extrude, uma esfera que está dentro de um cilindro cortado ao meio, que foi criado deletando metade das suas faces no Polygon do Edit Mesh, e alguns cubos empilhadas no lado oposto da rampa, além de uma câmera para focar a cena.
Com os objetos criados e posicionados na cena, precisamos criar os Gizmos do Reactor para adicionar estes objetos na simulação.
Os principais recursos do Reactor estão no painel Creat > Helpers, o item Reactor fica dentro da lista que se encontra no início deste painel, como mostra a primeira imagem ao lado, com ele selecionado, aparecem os principais comandos do Reactor, como mostra a segunda imagem ao lado.
Alguns comandos do Reactor aparecem na lista do painel Modify e o Reactor Water está na lista do painel Creat > Space Warps.

Os comandos que aparecem no menu Creat > Helpers permitem criar todos os tipos de interações ofereceiras pelo Reactor, exceto interação com água, pois o Reactor Water fica no painel Creat > Space Warps. Os itens que aparecem no menu Modify são para adicionar propriedades de tecido, de corpos maleáveis e de corda nos objetos.
Clique no botão RBCollection (Rigid Body Collection) e clique em qualquer lugar da Viewport para criar o Gizmo. A sua localização não tem nenhuma influência na cena, portanto, é adequado que coloque-o em algum canto onde não atrapalhe a manipulação e a visualização dos demais objetos, como mostra a imagem ao lado. A partir do Max 6 os Gizmos do Reactor mudaram o desenho, mas seus recursos são exatamente iguais aos das versões anteriores e tem as mesmas funções.
Antes de configurar as propriedades físicas da cena e dos objetos, você deve checar cuidadosamente a disposição deles. O Reactor trabalha com uma margem de tolerância para reagir a colisões, portanto, os objetos não podem estar com suas faces se encostando, o correto é manter uma pequena distância entre eles. Devem receber este cuidado apenas os objetos que são ativos na simulação da cena, não precisa se preocupar com objetos imóveis como a rampa. Já no caso das caixas e da esfera dentro do cilindro cortado, você deve tomar este cuidado, para evitar problemas e reações estranhas durante a simulação, por exemplo, os objetos podem pular para longe quando iniciar a simulação. Outra questão importante é inverter as Normals do cilindro que foi cortado, apontando-as para o lado de dentro, pois é o lado que vai colidir com a esfera, se você não sabe o que é Normal, leia o tutorial Edit Mesh Face/Polygon aqui na seção Tutoriais do site www.tresd1.com.br.
O objetivo da nossa animação é fazer a esfera derrubar os cubos, então, o cilindro deve girar para a esquerda liberando a bola para rolar pela rampa. O giro do cilindro é animado normalmente com Key Frames, a primeira providência é colocar o ponto Pivot na posição correta para fazer o giro. Entre no painel Hierarchy e clique no botão Affect Pivot Only, como mostra a primeira imagem ao lado, assim, você pode mover o Pivot do objeto, coloque-o na parte de baixo do cilindro, como mostra a segunda imagem ao lado. Desligue o botão Affect Pivot Only, para voltar a trabalhar normalmente na cena. Habilite o botão Auto Key (N) (Animate até o Max 4), coloque no Frame 60 e gire o cilindro para esquerda 90 graus, em seguida, desligue o Auto Key (N), para não correr o risco de animar outra coisa sem querer. Clique em Play e veja, o cilindro leva dois segundos para girar, clique no ícone Time Configuration, ao lado do Zoom, e aumente o número de quadros da animação para 200.
As configurações básicas estão prontas, agora, vamor configurar as propriedades da cena para trabalhar com o Reactor. A primeira coisa a fazer é adicionar os objetos na simulação, selecione o RBCollection que está na cena e entre no painel Modify, clique no botão ADD para abrir a janela Select Rigid Bodies, onde estão listados todos os objetos da cena que podem ser atribuidos como Rigid Body, escolha todos os objetos clicando em All, pois todos serão objetos rígidos no nosso caso, depois, clique no Select logo baixo, assim, todos os objetos aparecem no quadro do Modify RBCollection. Você também pode adicionar objetos clicando no botão Pick e selecionando o objeto na Viewport. O botão Delete permite apagar um objeto selecionado no quadro do RBCollection.

O RBCollection é apenas um objeto de auxílio, ele não aparece no render, serve apenas para informar ao Reactor quais objetos da cena serão tratados como corpos rígidos, permitindo que as forças aplicadas na cena atuem sobre eles. Você pode ter vários RBCollections na cena, para separar os objetos rígidos em grupos e facilitar o ajuste em simulações complexas. A opção Disabled na parte inferior do menu permite desligar da simulação os objetos que fazem parte deste RBCollection. O menu Advanced guarda as opções de Solver. A opção Euler é mais veloz e normalmente é a mais adequada. Em simulações complexas com vários Constraints, a opção Runge-Kutta é mais adequada, mas é mais lenta.
As propriedades físicas dos objetos e da cena são configuradas no menu do Reactor, que se encontra no painel Utilities. Até o Max 4 você precisa clicar no botão More para escolher o Reactor na lista, a partir do Max 5 o botão do Reactor está entre os botões do Utilities. Os menus mudaram depois do Max 6, quando recebeu a versão 2 do Reactor, como mostram as duas primeiras imagens ao lado, mas os recursos e são pratiacamente os mesmos.

Selecione a esfera e entre no menu Properties do Reactor, mostrado na terceira imagem ao lado. Logo no início aparecem os campos Mass, Elasticity e Friction. No parâmetro Mass você define o peso do objeto em Kg. Aqui tem uma questão muito importante, o Reactor trabalha com equações físicas reais e o tamanho do objeto é muito importante para o resultado final, uma bola de 3 cm se comporta diferente de uma bola de 3 Km, e uma bola de 3 cm com 1 Kg é muito densa e pesada, enquanto que uma bola de 3 Km com 1 Kg é muito leve e pouco densa, portanto, trabalhar em escala real quando envolve imulações ajuda muito na configuração das propriedades. Você pode trabalhar na escala padrão do programa sem problemas, mas deve usar valores exagerados nas propriedades, geralmente 13 vezes maiores do que seriam na escala real. O meu exemplo não está em escala real, eu estou usando 80 Kg na esfera e 5 Kg em cada cubo. Você deve fazer o mesmo na sua cena, atribuindo peso para a esfera e para os cubos. Agora, tem uma notação muito importante do Reactor, como informar que um objeto é imóvel, igual o piso, a rampa e o cilindro da nossa cena de exemplo. Isso é feito mantendo o valor zero no campo Mass, os objetos com zero no Mass participam da simulação e são calculados nas colisões, mas eles não se movem.

Os campos Elasticity e Friction definem a elasticidade e o atrito do objeto respectivamente, a elasticidade é a forma como ele reage a colisões, por exemplo, é diferente jogar no chão uma bola de plástico duro e uma bola de madeira, mesmo os dois sendo corpos rígidos, o plástico é mais elástico do que a madeira. Quanto maior for o valor de Elasticity, mais o objeto pula na reação a colisão. O atrito define a resistência ao movimento, por exemplo, um cubo polido desliza fácil sobre um piso polido, mas um cubo áspero não desliza tão bem no mesmo piso polido, e muito menos se o piso também for áspero. Quanto maior for o valor de Friction, mais o objeto resiste ao movimento.
Depois que configurar as propriedades físicas do objeto, você precisa definir como o Reactor vai tratar a malha dele no cálculo. Isso é feito neste mesmo menu, nos grupos Convex e Concave, de convexo e côncavo, como mostram as imagens ao lado. Em geometria, um objeto é convexo quando você pode traçar uma linha por dois pontos contidos nele sem que essa linha saia de seus limites, para o Reactor é a mesma coisa, mas muitas vezes você pode preferir definir um objeto concâvo como convexo, por exemplo um Torus, se algum objeto vai passar pelo furo no centro do Torus durante a simulação, é necessário defini-lo como côncavo, mas se o furo no centro não terá influência na simulação, é melhor defini-lo como convexo, porque deixará a simulação mais veloz. Uma outra notação importante do Reactor, é que planos são côncavos, assim como toda malha aberta, portanto, todo piso deve ser definido como Concave. Quando um objeto é convexo, você pode escolher entre várias opções para simplificar o cálculo. Se o objeto tem a geometria próxima de um cubo, voce ganha velocidade na simulação escolhendo Use Bounding Box no menu Convex, se o objeto tem a geometria próxima de uma esfera, você ganha velocidade na simulação escolhendo Use Bounding Sphere no menu Convex. A opção Use Mesh Convex Hull é usada quando o objeto não se aproxima nem de cubo e nem de esfera, como no caso da rampa na nossa cena de exemplo. A opção Use Proxy Convex Hull permite que você escolha um objeto Proxy (simplificado) para usar no lugar do objeto original. Quando o objeto for côncavo, você só pode escolher usar a própria malha do objeto no cálculo, escolhendo Use Mesh, ou usar um objeto Proxy no lugar do original, escolhendo Use Proxy Mesh. Ainda tem a opção Use Optimized Mesh, que permite simplificar a malha do objeto na barra abaixo para usar no cálculo, mas neste caso, é melhor você simplificar o objeto e usar como Proxy.

No meu exemplo eu defini os cubos, a esfera e a rampa como Convex, nos cubos usei a opção Use Bounding Box, na esfera usei a opção Use Bounding Sphere e na rampa usei a opção Use Mesh Convex Hull. O piso foi definido como Concave com a opção Use Mesh, assim como o cilindro cortado.
Logo abaixo do Friction temos algumas opções importantes, como mostra a imagem ao lado. O Inactive define o objeto como inativo, ele faz parte da cena e da simulação, é considerado em colisões, mas não tem nenhuma influência sobre a cena. Você pode definir o piso e a rampa como inativos se desejar. Em algumas situações precisamos que objetos animados normalmente com Key Frames sejam considerados durante a simulação, como é o caso do cilindro cortado com a esfera dentro no nosso exemplo. Você pode indicar isso para o Reactor selecionando a opção Unyielding. Selecione o cilindro e marque a opção Unyielding, assim, o Reactor vai verificar a posição do cilindro em cada quadro da simulação, para poder definir a reação da esfera. Se o objeto está na cena e na simulação mas não deve reagir a colisões, basta selecionar a opção Disable All Collisions. O Phantom é uma opção nova no Reactor 2 e funciona igual ao Disable All Collisions, mas ele guarda as informações dos objetos que teriam colidido com ele durante a simulação, usando o recurso de Store Collisions do menu Collisions, para depois usar estes dados no MaxScript.
Com isso que fizemos até agora, a cena já está configurada adequadamente para simular, mas tem alguns parâmetros importantes de outros menus do Reactor para serem explicados, assim, você fica conhecendo os principais recursos de configuração da cena e não precisarei retornar a este assunto nos próximos tutoriais de Reactor.

Abra o menu World, como mostra a primeira imagem ao lado, nele você encontra as propriedades físicas da cena, e não dos objetos, como vimos no menu Properties. O Gravity define a força da gravidade na cena, normalmente é usado um valor negativo em Z, indicando que a gravidade puxa os objetos para baixo. O valor não está correto com o real, porque a cena não está em escala real e o Reactor calcula automaticamente a gravidade de acordo com a escala. O World Scale indica a relação entre as unidades reais e as unidades da cena atual, também é calculada automaticamente pelo Reactor. O Col. Tolerance define a tolerância mínima para colisão entre duas superfícies, este número deve ser o menor possível, para os objetos ficarem bem próximos nas colisões, mas não pode ser muito baixo, pois pode criar problemas, fazendo os objetos desrespeitarem as colisões e se interpenetrarem. Se os seus objetos estão ficando distantes do piso, ou se é um tecido e ele está distante do objeto onde se apoia, você deve diminuir o valor do Col. Tolerance. Eu estou usando 1.5 no exemplo deste tutorial. O Grupo Add Desactivator também é novo no Reactor 2, ele permite parar o cálculo do objeto depois que sua posição não modificar mais, é muito útil, pois os objetos ficavam se movendo levemente na versão anterior, agora eles param por completo, normalmente não é necessário alterar estes valores.

Até o Max 5, esses recursos que expliquei ficavam no menu Advanced, como mostra as duas últimas imagens ao lado, nele você encontra o Tolerance e o World Scale. Também havia o menu Resolver, onde você podia definir o tipo de equação que seria usada no cálculo da simulação, a Naive era a mais simples, geralmente não oferecia o resultado desejado. O No Friction fazia a simulação sem levar em conta o atrito entre os objetos, era mais veloz mas não refletia a realidade. Na Simp Friction era usada uma equação otimizada para calcular o atrito, era mais veloz e poderia ser útil em diversas situações onde a simulação era mais simples. A opção Comp Friction era a mais perfeita, usava uma equação mais complexa e real para calcular o atrito entre os objetos, era mais demorada também, mas permitia os melhores resultados. A partir do max 6, essas opções não existem mais.
O Reactor 2 tem um novo menu chamado Collisions, a principal função dele foge do escopo deste tutorial. As opções de Store Collisions são para criar um Log de colisões e depois serem usadas com o MaxScript, permitindo programar efeitos pela linguagem de Script do Max de acordo com as colisões. Mas na parte inferior deste menu tem um novo recurso importante, é o Global Collisions. Clicando no botão Define Collision Pairs, aparece uma janela com 3 quadros, o primeiro quadro da esquerda (Entities) mostra os objetos envolvidos na simulação. Selecione qualquer um deles, assim, aparece todos os objetos que ele pode colidir no quadro do centro (Enabled Collisions). Selecione um dos itens neste quadro e clique na setinha indicando o quadro da direita (Disabled Collisions), assim, este par não sofrerá mais colisão. Isso é importante em simulações complexas, onde nem todos os elementros de um conjunto devem colidir entre si, evitando problemas, como no braço de suspensão de um carro, por exemplo.
Agora, o último procedimento antes da simulação é analizar a cena. Entre no menu Utils e clique no botão Analyze World, como mostra a primeira imagem ao lado. Até o Max 5, este botão ficava no menu Advanced.
Quando você clica nele, pode aparecer a mensagem mostrada na segunda imagem ao lado, indicando que está tudo bem com a cena, as propriedades estão dentro dos limites corretos e você pode simular. Mas se mostrar um quadro com avisos, como mostra a última imagem ao lado, sua cena tem problemas e você precisa ler os avisos para saber quais são. Os mais comuns são objetos se interpenetrando e densidade muito baixa, quando a densidade do objeto for menor do que a da água, ou seja, quando for menor do que 1, o Reactor vai exibir essa mensagem antes da simulação. Isso acontece porque o objeto é muito grande para o peso que você definiu, para corrigir você precisa aumentar o peso do objeto no Mass do menu Properties, como expliquei mais acima.

O Menu World ainda tem os recursos para redução de Keys, quando você faz a simulação de um Rigid Body, o Reactor criará Key Frames a cada quadro para indicar a posição do objeto, tornando muito difícil a edição posterior no Curve Editor se for necessário. Com o Reduce Keys você pode diminuir a quantidade de Keys no final da animação, mantendo o resultado o mais próximo possível do original. Para isso, basta clicar no botão Reduce Now com o objeto selecionado, ou pode habilitar a opção Reduce After Simulation, assim, o Reactor faz a redução logo que terminar a simulação.
O Reactor oferece um recurso maravilhoso que era ainda mais impressionante quando foi lançado no Max 3, eu estou falando da janela de Preview em tempo real. Antes disso só havia o Dynamics padrão do 3ds max, e era necessário esperar bastante tempo para ver o resultado da simulação, se estivesse errado, teria que ajustar, simular novamente e esperar o mesmo tempo para ver o resultado, além de não simular roupas, cordas e objetos maleáveis. O Reactor acabou com tudo isso, nessa janela de Preview ele mostra a simulação em tempo real se a máquina for boa, se não for tão potente ou se a simulação for muito complexa, você verá o resultado muito mais rápido do que veria no Dynamics. Essa janela permite outras facilidades, como modificar a vista durante a simulação, exibir informações diversas sobre quantidade de frames, tempo de simulação, tempo real, entre outras, também oferece vários modos de exibição, exibe luzes, texturas e permite a interação com os objetos durante a simulação usando o Mouse. A janela de Preview mostra um exemplo de como será a simulação, para você resolver os problemas antes de simular de verdade.

O menu Display do Reactor no painel Modify configura as propriedades dessa janela de Preview. Você pode adicionar uma câmera no botão Camera, assim, a janela mostra a simulação pela vista da câmera que escolher. Até o Max 5 é muito importante colocar uma câmera na simulação, porque a janela de Preview mostrava a cena distante dos objetos. Você também pode colocar luzes na simulação, clicando no botão Pick e selecionando na Viewport, ou clicando no botão Add e selecionando na janela. No grupo Texture Quality você define a qualidade das texturas exibidas na janela de Preview. No grupo Mouse Spring você define a sensibilidade do Mouse para interagir com os objetos na simulação. Normalmente não é necessário alterar essas configurações. Na parte inferior do menu existe a opção Use DirectX, o Reactor usa OpenGL nessa janela de Preview e quando o driver de vídeo do Max também está configurado para OpenGL, causa um problema e fecha o programa. Essa opção evita este problema, usando DirectX na janela de Preview do Reactor.

Até o Max 5, o botão para abrir a janela de Preview também ficava neste menu, como mostra a última imagem ao lado, a partir do Max 6 este botão passou para o menu Preview & Animation.
Entre no menu Preview & Animation e clique no botão Preview in Window, assim, abre a janela de Preview do Reactor.

Na janela de Preview você vê a cena em Shade, como mostra a imagem ao lado, com o botão esquerdo do mouse você pode girar a vista, com o botão do meio você pode mover a vista horizontalmente e verticalmente, com o botão direito você pode mover os objetos durante a simulação. Segurando o Shift e clicando com o botão direito, você empurra o objeto em vez de move-lo. Até o Max 5 você também podia mover a vista para frente e para trás nas setas do teclado e movimentar horizontalmente nas setas laterais. O Zoom era na tecla Z e o F mostrava o indicador de quadros por segundo (FPS). A partir do max 6, o Zoom só funciona na rodinha do Mouse, quem usa Table ou mouse sem rodinha não consegue mais dar Zoom. A indicação de Frames por segundo aparece o tempo todo na parte inferior da janela e as setas do teclado não tem mais função, você pode ver todas as teclas de funções teclando H.
A tecla P inicia e pausa a simulação na janela de Preview. Presione P no teclado e veja o resultado da sua simulação, pode ser que fique bom de primeira, mas pode ser que não, muitos resultados indesejáveis podem acontecer e vai depender da sua habilidade e prática com o plugin para saber resolve-los. Um problema muito comum é os objetos serem repelidos drasticamente no início da simulação, como mostra a imagem ao lado. Isso acontece quando os objetos estão muito próximos uns dos outros, abaixo do limite definido no Col. Tolerance, ou quando estão se interpenetrando. Outro problema comum é o ajuste dos objetos no início da simulação, isso é normal. O ideal é deixar alguns frames antes da parte onde acontece a simulação, para dar tempo dos objetos acentarem. Outra opção é simular os objetos por um tempo na janela de Preview, esperando eles se acomodarem corretamente, depois, clica na opção Update Max dentro do menu Max na própria janela de Preview do Reactor, assim, os objetos são posicionados na cena de acordo com suas posições na janela de Preview.
Pode acontecer também dos objetos se interpenetrarem durante a simulação, isso acontece por diversos motivos, pode ser por causa do valor muito baixo no Col. Tolerance, pode ser porque o atrito (Friction) está baixo de mais e pode ser que o Mesh Convex Hull ou o Optimized Mesh estão com resolução muito baixa.

Acontece também de estar tudo certo mas a bola não consegue derrubar as caixas, apenas bate nelas e para, isso ocorre quando ela está leve demais para derrubar as caixas ou as caixas estão pesadas demais para serem afetadas pela colisão com a bola, modifique os valores de peso dos objetos no campo Mass do menu Properties no painel do Reactor.

Com tudo resolvido a simulação deve obter o resultado desejado, onde a bola rola pela rampa e derruba as caixas que estão empilhadas, como mostram as 3 imagens ao lado retiradas da simulação da janela de Preview do Reactor.
Quando obter o resultado desejado na janela de Preview, você pode mandar o Reactor fazer a animação para valer nos obejtos da cena. Acesse o menu Preview & Animation, como mostra a imagem ao lado. Este menu se chamava Animation & Export até o Max 5.
No campo Start Frame você define em qual quadro da animação a simulação começa a ser calculada, no End Frame você define em qual quadro a simulação para o cálculo. No Frames/Key você define a cada quantos quadros um Key Frame será criado, o ideal é sempre deixar com 1, assim, o Reactor criará um Key em cada Frame da animação, mantendo maior precisão na simulação. No Substeps/Key você define a qualidade do cálculo, normalmente 10 é um bom valor, mas pode ser necessário aumentar em simulações mais complexas. Em Time Scale você define a escala de tempo, não deve modificar este valor, se deseja que a ação aconteça mais rapidamente ou mais lentamente, você deve mudar o tempo da animação, as propriedades físicas dos obejtos, as forças que atuam na cena, mas não o Time Scale. Habilitando a opção Update Viewports, o Reactor vai atualizar as Viewports durante a simulação, assim, você pode ver o que está acontecendo e até parar o cálculo se algo sair errado. Para iniciar a simulação de verdade na cena, basta clicar no botão Creat Animation, como mostra a imagem ao lado. Até o Max 5 este botão se chamava Perform Simulation. Aparecerá uma barra abaixo das Viewports indicando o progresso da simulação. Quando terminar, você pode clicar no Play e ver a simulação pronta nas Viewports. Por fim, eu deixo o vídeo com o meu exemplo dessa simulação.

Andre Luiz Buttignoli Vieira
Exemplo da animação calculada com o Reactor.

Faça o login para poder comentar

Adminin Comentou em 21/06/2011 14:19 Ver comentário

Usuários conectados

Total de mensagens publicadas pelos membros da comunidade: 707613.

Total de membros registrados: 135228

Últimos membros registrados: adudis_, mauriciovrc, rodneitjr, anacarolfinardic, saulo favero, sanerreddie, Humberto1082, pdsanbvha.

Usuário(s) on-line na última hora: 1376, sendo 26 membro(s) e 1350 visitante(s).

Membro(s) on-line na última hora: pinart, Osvaldo Arquiteto, Thiago Couto, Eber.Silva, ThaisLumi, rodolfosantos3d, cretz, nandao, Le_Andro, Eduardo Ramos, Abilio, marcola, magster, Felipe Duarte, Reinaldo Silva, gago, mauriciovrc, Baldo, Ronaldo Junior, Henrique Ribeiro, Fabio Amorim, Allen Anderson, Gabriel.C, JMDesign, Adalberto Batista, Marco Rocha.

Legenda: Administrador, Especial, Moderador, Parceiro .

3D1 © Três D1 © 1999-2024. Todos direitos reservados.