S3.A3.

 

3.3. Tracking Constraints.

Novembro 16, 2011

 

3.3.4. Locked Track.


Locked Track impõe que um dos eixos do sistema de coordenadas local do objecto a que o restritor está associado aponte sempre, o mais aproximadamente possível, para o alvo, e que um outro eixo nunca mude de direcção.
Este último apenas poderá rodar sobre si próprio, ou deslocar-se mantendo a direcção.

To: Eixo, do sistema local do objecto, que aponta para o alvo.

Lock: Eixo, do sistema local do objecto, que não pode mudar de direcção.

3.3.4.1. Exemplo.


Para clarificar a dinâmica imposta pelo restritor Locked Track, e nomeadamente as suas diferenças relativamente ao restritor Track To, vamos retomar o Exemplo 3.3.3.1.

Seleccione a câmara, active o contexto Object Constraints, e elimine o restritor Track To.

Posicione-se na 1ª frame, [Shift]+[LA], e rode a câmara de modo a que o seu eixo dos yy local fique alinhado com o eixo dos zz global.

Seleccione o cubo, [RMB], o alvo, seleccione a câmara, [Shift]+[RMB], o objecto, e associe um restritor Locked Track à câmara, [Ctrl]+[T] > Locked Track.

Seleccione a câmara e active o contexto Object Constraints na janela de propriedades. No painel do restritor, altere o parâmetro To para -Z, e Up para Y, para garantir a correcta orientação da câmara.

Pressione [Alt]+[A] e observe como a câmara percorre a trajectória sempre com o eixos dos yy local alinhado com a vertical.

Note como o cubo sai do enquadramento. Da restrição imposta ao eixo dos yy, resulta que o eixo dos zz não aponta garantidamente para o alvo, mas apenas o mais aproximadamente possível.

Neste caso, a aplicação do restritor Track To seria adequada para garantir um travelling sobre um objecto que se estendesse ao longo do eixo dos zz global.

Seleccione o cubo, [RMB], e escale-o segundo zz, [S] > [Z] > 10.

Pressione [Alt]+[A] e observe como a câmara percorre a trajectória sempre com o eixos dos yy local alinhado com a vertical, e roda sobre este eixo de modo a que o seu eixo dos zz aponte sempre para o eixo do paralelepípedo, garantindo o seu enquadramento.

3.3.5. Inverse Kinematics.


Inverse Kinematics (Cinemática Inversa), é um restritor apenas associável a objectos do tipo osso, e permite animar toda a cadeia de ossos de que o osso objecto é descendente em resposta ao movimento do osso alvo.

Para além de poder ser evocado a partir da janela de propriedades, o restritor IK tem uma combinação de teclas dedicada.

Em modo pose, com dois ossos seleccionados, primeiramente o osso alvo seguido do osso objecto, pressione [Shift]+[I] e seleccione [To Active Bone] na janela que surge no ecrã.

Pole Target: Alvo secundário da cadeia IK, indicativo da direcção que algumas dinâmicas alternativas da cadeia devem preferir (ver exemplos).

Iterations: Número de iterações utilizadas no cálculo da cinemática IK da cadeia de ossos.

Chain Length: Número de ossos a incluir na cadeia IK. Se o valor for 0 serão incluídos todos os ossos ascendentes do osso objecto.

Use Tail: Quando activo, a cadeia IK tem início na raiz do osso objecto (e não na ponta).

Stretch: Quando activo, permite o alongamento dos ossos que constituem a cadeia IK, se o parâmetro Stretch do painel Inverse Kinematics do contexto Bone for não nulo.

Weight Position/Rotation: Apenas relevante em múltiplas cadeias IK com troços comuns, estes parâmetros permitem especificar a percentagem de influência de cada uma das cadeias IK sobre os ossos comuns.

Target: A sua desactivação permite criar cadeias IK sem alvo, sendo toda a cadeia de ossos guiada pelo osso a que o restritor está associado.

Rotation: Quando activo, o osso da cadeia IK a que o restritor está associado segue as transformações de rotação do alvo.

3.3.5.1. Exemplo.


Abra o Blender, passe a Front Ortho, [Num1] > [Num5], e elimine o cubo, [X].

Insira uma armação, [Shift]+[A] > Armature > Single Bone.

Entre em modo edição, [Tab]. Rode o osso para a direita e leve a ponta do osso até ao ponto [-2.0, 0.0, 0.0], [G] > [Ctrl].

Na janela de propriedades, active o contexto Object Data, e, no painel Display, active Names.








Active o contexto Bones, e altere o nome do osso para B1.



Com a ponta do osso B1 seleccionada, faça uma extrusão, [E], e leve a ponta do novo osso até ao ponto [-2.0, 0.0, -2.0], [G] > [Ctrl].

Altere o nome do osso para B2.

Com a ponta do osso B2 seleccionada, faça uma extrusão, [E], e leve a ponta do novo osso até ao ponto [-2.5, 0.0, -2.0], [G] > [Ctrl].

Altere o nome do osso para B3.

O princípio fundamental da animação de uma cadeia de ossos com base na cinemática inversa (IK) é o da manipulação do último osso da cadeia para posicionar automaticamente todos os ossos que a constituem, portanto uma acção que se desenrola do último osso para o primeiro, e dai o nome de cinemática inversa.

Relativamente ao exemplo em desenvolvimento, poderíamos pensar que os ossos B3, B2, e B1 estão associados, respectivamente, ao pé e à parte inferior e superior da perna de um modelo, e que, em resultado de uma cadeia IK, poderíamos automaticamente animar os ossos da perna em resultado da decisão sobre onde colocar o osso do pé.

Ou seja, particularizando ainda mais, uma cadeia IK pode, em princípio, decidir automaticamente toda a dinâmica das pernas de um movimento de caminhada, apenas com base na informação sobre a posição dos pés em cada instante.

Seleccione o osso B3 e entre em Modo Pose, [Ctrl]+[Tab]. Tente mover o osso B3, [G].
Como vê, por ser um filho ligado do osso B2, o osso B3 não tem liberdade de translação, pelo que não pode ser o alvo de uma cadeia IK.

Seleccione o osso B3 e entre em modo edição, [Tab]. Quebre a ligação entre o osso B3 e B2, [Alt]+[P] > Disconnect Bone.



Entre em modo pose, [Ctrl]+[Tab]. Mova o osso B3, [G]. O osso não tem agora qualquer restrição de movimentos.

Seleccione o osso B3, [RMB], o alvo, seleccione o osso B2, [Shift]+[RMB], o objecto, e associe um restritor IK ao osso B2, [Shift]+[Ctrl]+[C] > Inverse Kinematics.

Mova o osso B3, [G]. Como vê, ao mover o osso B3, os ossos B2 e B1 respondem ao movimento. A resposta no entanto é completamente descoordenada. Um osso com relação de parentesco, embora não ligada, com os ossos de uma cadeia, não pode ser o alvo de uma cadeia IK.

Seleccione o osso B2, active o contexto Bone Constraints, e elimine o restritor IK.

Entre em modo edição, [Tab]. Seleccione o osso B3 e quebre a relação de parentesco entre o osso B3 e B2, [Alt]+[P] > Clear Parent.



Alternativamente, para quebrar a relação de parentesco, pode activar o contexto Bone, e eliminar o nome do osso pai da célula Parent.









Entre em modo pose, [Ctrl]+[Tab]. Seleccione o osso B3, [RMB], o alvo, seleccione o osso B2, [Shift]+[RMB], o objecto, e associe um restritor IK ao osso B2, [Shift]+[Ctrl]+[C] > Inverse Kinematics.







Fica assim definida uma cadeia IK composta pelos ossos B2 e B1 e cujo alvo é o osso B3.

Note que a coloração do osso B2 passou a verde-claro, indicando que tem associado um restritor IK. Note também a linha amarela tracejada, que liga a ponta do osso B2 à raiz do osso B1, indicando a extensão da cadeia IK.

Seleccione o osso B2 e active o contexto Bone Constraints. Na configuração padrão o parâmetro Chain Length tem o valor 0, significando que todos os ossos ligados da cadeia de osso são incluídos na cadeia IK. No presente exemplo, obterá a mesma dinâmica da cadeia de ossos se alterar o parâmetro para 2.

Em modo pose, Seleccione o osso B2 e movimente-o, [G]. Pode ver que todos os ossos da cadeia se dispõem de modo a que a ponta do osso B2, osso a que o restritor está associado, acompanhe, ou esteja o mais próxima possível, da raiz do osso B3, que constitui o alvo da cadeia IK, rodando em torno da raiz do osso B1, o último osso incluído na cadeia.

Rode o osso B3, [R], pode ver que não se regista qualquer movimento da cadeia.

3.3.5.2. Exemplo.


Retome o exemplo anterior. Seleccione o osso B2 e elimine o restritor.

Passe a modo edição, [Tab]. Seleccione o osso B3, e, no painel Relations do contexto Bone da janela de propriedades, torne o osso B3 filho ligado do osso B2.

Duplique o osso B3, [Shift]+[D] > [LMB]. Desloque o novo osso para a esquerda, [G] > [Ctrl], de modo a fazer coincidir a sua raiz com a ponta do osso B3.

O novo osso, por ter sido criado por duplicação do osso B3, herdou a sua relação de parentesco com osso B2.

No contexto Bone da janela de propriedades, dê ao novo osso o nome B4, e quebre a relação de parentesco com o osso B2.

Entre em modo pose, [Ctrl]+[Tab]. Seleccione o osso B4, [RMB], o alvo, seleccione o osso B3, [Shift]+[RMB], o objecto, e associe um restritor IK ao osso B3, [Shift]+[Ctrl]+[C] > Inverse Kinematics.

Fica assim definida uma cadeia IK composta pelos ossos B3, B2 e B1 e cujo alvo é o osso B4. Note a linha amarela tracejada, que liga a ponta do osso B3 à raiz do osso B1, indicando a extensão da cadeia IK.

Seleccione o osso B3 e active o contexto Bone Constraints.

O parâmetro Chain Length tem o valor 0, configuração padrão, neste caso obterá a mesma dinâmica da cadeia de ossos se alterar o parâmetro para 3.

Se alterar o valor para 2 a linha amarela estender-se-á até à raiz do osso B2, e a cadeia IK passará a conter apenas os ossos B1 e B2.

Active o parâmetro Rotation, de modo a que o osso B3 siga as transformações de rotação do alvo.

Seleccione o osso B4, [RMB] e rode-o, [R].

Pode ver como toda a cadeia IK acompanha convenientemente o movimento de rotação do alvo, o osso B4, em torno do seu pivot, a raiz, o osso B4.

3.3.5.3. Exemplo.


Quando os ossos da cadeia IK não estão todos no mesmo plano, originalmente ou em resultado da animação pretendida, podem resultar torções indesejadas.

O controle das torções dos ossos é feito no painel Inverse Kinematics do contexto Bone da janela de propriedades.

Vamos em seguida ver um exemplo de como proceder, tomando como base a armação desenvolvida no ponto anterior.

Em modo edição, seleccione e elimine os ossos B3 e B4.

Seleccione a ponta do osso B2, [RMB]. Passe a Top Ortho, [7]. Através de um conjunto de extrusões, [E] > [Ctrl], crie 3 ossos, conforme se mostra na figura, e dê-lhes os nomes B3, B4 e B5, por exemplo no painel Item da tabela de propriedades da janela 3D.

Seleccione o osso B5 e quebre a relação de parentesco que este tem com o osso B4, por exemplo no painel Relations do contexto Bone da janela de propriedades.

Passe a modo pose, [Tab]. Seleccione o osso B5, [RMB], o alvo, seleccione o osso B4, [Shift]+[RMB], o objecto, e associe um restritor IK ao osso B4, [Shift]+[Ctrl]+[C] > Inverse Kinematics.

Fica assim definida uma cadeia IK composta pelos ossos B4 a B1 e cujo alvo é o osso B5. Note a linha amarela tracejada, que liga a ponta do osso B4 à raiz do osso B1, indicando a extensão da cadeia IK.

Com o osso B4 seleccionado, active Rotation no painel do restritor IK.

Passe a Front Ortho, [1]. Seleccione o osso B5 e rode-o, [R].

Pode ver que, do cálculo automático da posição dos ossos da cadeia, resulta que, ao acompanhar o movimento de rotação do osso B4, os ossos B3, B2 e B1 sofrem uma torção. Note, nomeadamente, que osso B3 perde o alinhamento com o eixo dos yy.

Vamos admitir que esta torção não é desejada, e ver como corrigir a situação.

Active Axes no painel Display do contexto Object Data da janela de propriedades

Pode ver na figura, que o sistema de eixos associado a um objecto do tipo osso corresponde ao sistema Normal, activável na barra da janela 3D, cuja representação pode ser usada em alternativa.

Em modo pose, seleccione o osso B1 e, no painel Inverse Kinematics do contexto Bone da janela de propriedades, bloqueie a possibilidade de rotação do osso em torno dos eixos dos xx e dos yy. Portanto, o osso, em resultado das acções da cadeia IK, apenas poderá rodar no plano XY.









Seleccione o osso B2 e bloqueie a possibilidade de rotação do osso em torno dos eixos dos xx e dos yy. Portanto, o osso, em resultado das acções da cadeia IK, apenas poderá rodar no plano XY.











Seleccione o osso B3 e bloqueie a possibilidade de rotação do osso em torno do dos eixos dos xx e dos zz. Portanto, o osso, em resultado das acções da cadeia IK, apenas poderá rodar em torno do seu eixo longitudinal, mantendo sempre a mesma direcção raiz/ponta.











Numa qualquer perspectiva, seleccione o osso B5 e rode-o em torno do seu eixo dos xx, [R] > [X] >[X].

Pode ver que a cadeia IK tem agora a dinâmica desejada, mantendo-se os ossos B1 e B2, sem qualquer torção, no plano, XZ do sistema global, e rodando o osso B3 sobre o seu eixo longitudinal, à medida que a sua ponta acompanha a raiz do osso B4.

3.3.5.4. Exemplo.


O exemplo seguinte mostra uma aplicação menos comum de uma cadeia IK, em que o restritor não é associado ao último osso de uma cadeia de ossos, como seria normal, e em que a animação é conduzida, não pelo osso alvo, mas sim pelo primeiro osso da cadeia, de onde resulta um misto de cinemática directa e inversa.

Em modo edição, seleccione a ponta do osso B1, [RMB], e proceda a uma extrusão, [E] > [Ctrl], levando a ponta do novo osso até ao ponto [2.0, 0.0, 0.0]. Proceda a 3 novas extrusões levando as pontas dos ossos até aos pontos [2.0, 0.0, -0.75], [2.0, 0.0, -1.5] e [2.0, 0.0, -3.0].

Dê ao ossos os nomes C1, C2, C3 e C4, por exemplo no painel Item da tabela de propriedades da janela 3D.

Seleccione o osso C3, [RMB], duplique-o, [Shift]+[D], e translade-o segundo Z, [G] > [Z], colocando a raiz no ponto [2.0, 0.0, -2.5].

Dê ao osso o nome C5. Por ter sido duplicado do osso C3. o osso C5 herdou a sua relação de parentesco com o osso C2. Seleccione o osso C5 e elimine a relação de parentesco, por exemplo, editando a célula parent do painel Relations do contexto Bone da janela de propriedades.

Passe a modo pose, [Tab]. Seleccione o osso C5, [RMB], o alvo, seleccione o osso C3, [Shift]+[RMB], o objecto, e associe um restritor IK ao osso C3, [Shift]+[Ctrl]+[C] > Inverse Kinematics.

Active Rotation no painel do restritor IK.

Dê ao parâmetro Chain Length o valor 2, de modo a que apenas os ossos C2 e C3 sejam incluídos na cadeia IK.


Seleccione o osso C1, rode-o, e observe a dinâmica da cadeia de ossos C1 a C4, determinada pela restrição imposta ao osso C3, que constantemente tenta manter a direcção do osso alvo.

Seleccione o osso C1, [RMB], passe a modo edição, [Tab], e torne-o filho do osso B1, editando a célula Parent do painel Relations do contexto Bone do painel de propriedades.

Seleccione o osso B5 e rode-o, [R]. Observe a dinâmica de toda a armação, característica dos sistemas de bombeamento de água, ou petróleo (por exemplo dos mecanismos típicos de extração de petróleo conhecidos por PumpJack).

3.3.6. Spline IK.


Sline IK é um restritor apenas associável a objectos do tipo osso, que impõe o alinhamento de uma cadeia de ossos ao longo de um alvo do tipo Curve.

O restritor é especialmente indicado para a fácil recriação da dinâmica de corpos filiformes longos e flexíveis, orgânicos ou não, e pressupõe a utilização de uma cadeia de ossos, cujo último osso é o objecto a que o restritor é associado, e de um objecto do tipo Curve que constitui o alvo do restritor.

Spline Fitting:

Chain Length: Número de ossos que constitui a cadeia, incluindo o osso a que o restritor está associado.

Even Divisions: Quando activo, o comprimento relativo dos ossos da cadeia é ignorado no processo de adaptação à curva

Chain Offset: Quando activo, permite o deslocamento da cadeia de ossos relativamente à posição do alvo.

Chain Scaling:

Y Stretch: Alonga o comprimento de cada um dos ossos de modo a adaptar a cadeia de ossos ao comprimento total da curva.

XZ Scale Mode: Tipo de escalamento da cadeia no plano XZ seleccionável a partir do menu dropdown.

Use Curve Radius: Quando activo, procede a um segundo ajustamento no plano XZ com base na forma da curva.

3.3.6.1. Exemplo.


Abra o Blender. Elimine o cubo, [X]. Passe a Right Ortho, [3] > [5].

Insira uma curva Bezier, [Shift]+[A] > Curve > Bezier. Rode a curva de 90o em x e em z, [R] > [X] > 90, [R] > [Z] > 90.

Entre em modo edição, [Tab]. Inverta o sentido da curva, [W] > Switch Direction. Desloque toda a curva para a esquerda, [G] > [Y], de modo a fazer coincidir aproximadamente a extremidade direita com a sua origem.

Subdivida a curva, [W] > Subdivide, e, manipulando os controladores de Bezier, dê-lhe aproximadamente a forma da figura.



Seleccione o controlador da direita, [RMB], e coloque sobre ele o cursor 3D, [Shift]+[S] > Cursor to Selected. Saia de modo edição, [Tab].

Insira uma armação, [Shift]+[A] > Armature > Single Bone.

Seleccione de novo a curva, [RMB], entre em modo edição, [Tab], seleccione o controlador da esquerda, [RMB], coloque sobre ele o cursor 3D, [Shift]+[S] > Cursor to Selected, e saia de modo edição, [Tab].

Seleccione o osso, [RMB], entre em modo edição, [Tab], e coloque a ponta do osso sobre a extremidade esquerda da curva, [Shift]+[S] > Selection to Cursor.

Seleccione o osso, [RMB], entre em modo edição, [Tab], e subdivida-o 2 vezes, [W] > Subdivide, [W] > Subdivide. Saia de modo edição, [Tab].

Insira um cilindro, [Shift]+[A] > Mesh > Cylinder. Escale-o em x e em y, [S] > [Shift]+Z. Rode-o de 90o em x, [R] > [X] > 90, e desloque-o para a direita, [G] > [Y], sobrepondo-o à armação.

Seleccione a armação, [RMB], e, no painel Display do contexto Object Data, active X-Ray.

Selecione o cilindro, [RMB]. Active Shading Smooth no painel de operadores da janela 3D, [T].

No contexto Object Modifiers da janela de propriedades, associe um modificador Subdivision Surface ao cilindro e altere Subdivision View para 2.

Entre em modo edição, [Tab]. Insira uma série de contornos, [Ctrl]+[R], nomeadamente, nas extremidades e coincidentes com as junções dos ossos. Saia de modo edição, [Tab].

Seleccione a curva, [RMB], e coloque o cursor 3D sobre a sua origem, [Shift]+[S] > Cursor to Selected.

Insira uma nova armação, [Shift]+[A] > Armature > Single Bone. Entre em modo edição, [Tab], e rode o osso 90o para a direita, [G] > [Ctrl]. Saia de modo edição, [Tab].

Seleccione o cilindro, [RMB], em seguida a 1a armação, [Shift]+[RMB], e estabeleça uma relação de parentesco com associação automática de pesos, [Ctrl]+[P] > With Automatic Weights.

Seleccione o cilindro, e, no contexto Object Modifiers da janela de propriedades, troque a ordem no stack dos modificadores Armature e Subsurf.

Seleccione a 1ª armação, [RMB], entre em modo pose, [Ctrl]+[Tab], e seleccione o osso da esquerda, [RMB].

Active o contexto Bone Constraints da janela de propriedades, e associe um modificador Spline IK ao osso. Seleccione o nome da curva Bezier na célula Target, incremente Chain Lenght para 4, active Even Divisions, e desactive Y Stetch.















Seleccione a curva Bezier, [RMB], seleccione de seguida a segunda armação, [Shift]+[RMB], e estabeleça uma relação de parentesco, [Ctrl]+[P] > Bone.




Seleccione a curva Bezier, [RMB], active o contexto Physics da janela de propriedade, e associe um simulador do tipo Soft Body à curva.

Seleccione a curva Bezier e esconda-a, [H]. Seleccione a 1ª armação e esconda-a, [H].





Pressione [Alt]+[A] e observe a animação do cilindro sobre a influência da força da gravidade.

Com a animação a decorrer, seleccione a segunda armação, [RMB], entre em modo pose, [Ctrl]+[Tab], e movimente o osso.

3.3.7. Stretch To.


Stretch To orienta o eixo dos yy do objecto a que o restritor está associado na direcção do alvo, e, se necessário, deforma o objecto, alongando-o, ou comprimindo-o, nessa direcção.

Rest Length: Especifica a distância entre o objecto e o alvo para a qual a deformação do objecto é nula.

Reset: Quando pressionado, desfaz a deformação e atribui a Rest Length a distância actual entre o objecto e o alvo.

Volume Variation: Factor de proporcionalidade da deformação.

Volume: Especifica as direcções de deformação do osso de modo a que o volume se mantenha constante. Se None for especificado o parâmetro Volume Variation não terá qualquer efeito.

Plane: Especifica qual o eixo (X ou Z), do sistema local do objecto, que deve estar, o mais aproximadamente possível, alinhado com o eixo dos zz do sistema de eixos global.

3.3.7.1. Exemplo.


Abra o Blender. Elimine o cubo, [X]. Passe a Front Ortho, [1] > [5]. Insira uma armação, [Shift]+[A] > Armature > Single Bone.

Passe a modo edição, [Tab]. Seleccione o osso, [RMB] sobre o corpo, e duplique-o, [Shift]+[D] > [LMB].

Arraste o novo osso para a esquerda, por exemplo, recorrendo ao transformador X.

Passe a modo pose, [Ctrl]+[Tab].

Seleccione o osso da direita, o alvo, [RMB], em seguida seleccione o osso da esquerda, o objecto, [Shift]+[RMB], e associe-lhe um restritor Stretch To, [Shift] > [Ctrl] > [C] > Stretch To.

Note que o osso objecto rodou, tendo ficado com a ponta sobre a raiz do osso alvo.

Tal deve-se a, na configuração padrão, o parâmetro Head/Tail ter o valor 0.0.

Especifique Head/Tail 1.0.

O osso objecto sofrerá um escalamento ao longo do seu eixo dos yy e a sua ponta passará a ficar sobreposta à ponta do osso alvo.



Altere o parâmetro Rest Length para 1.5 de modo a corrigir a deformação do osso objecto.















Seleccione o alvo, rode-o, aproximando-o e afastando a sua ponta do osso objecto, e observe como este se deforma, comprimindo-se e alongando-se segundo o eixo raiz/ponta.

Note que, na configuração padrão, o corpo do osso se deforma no plano XY. Altere a opção do parâmetro Volume e observe os resultados.




Passe a modo objecto [Ctrl]+[Tab]. Insira uma UV Sphere, [Shift]+[A] > UV Sphere. Arraste-a para cima do osso objecto.

Aplique a informação sobre a rotação e a escala, [Ctrl]+[A] > Location, [Ctrl]+[A] > Rotation.


Seleccione a esfera, [RMB], seleccione a armação, [Shift]+[RMB], entre em modo pose, [Ctrl]+[Tab], seleccione o osso objecto, [RMB], e associe a malha da esfera ao osso objecto, [Ctrl]+[P] > Bone.

Em modo pose, seleccione o osso alvo rode-o, aproximando-o e afastando a sua ponta do osso objecto, e observe como a esfera se deforma.

Altere a opção do parâmetro Volume do painel do restritor e observe as diferenças na deformação da esfera.

O tipo de deformação sofrida pela malha associada a um osso com um restritor Stretch To associado torna este restritor mais apropriado a uma utilização na articulação de modelos orgânicos do que em modelo mecânicos. Ainda assim, a sua utilização nestes casos pode ser uma hipótese a ter em conta, dada a simplicidade da sua utilização.

É talvez de realçar que a animação da deformação de uma malha pode ser feita através de transformações de escalamento, inserção de keyframes, e manipulação adequada das curvas de interpolação, sendo que a utilização de um restritor Stretch To faz sentido enquanto fazendo parte de um processo mais vasto de articulação de uma malha.

3.3.7.2. Exemplo.


Vamos agora ver como podemos fazer a animação de uma mola recorrendo a técnicas diversas, entra as quais se inclui a utilização de uma armação com um restritor Stretch To.

Abra o Blender. Seleccione o cubo, [RMB], e passe a modo edição, [Tab].

Passe a modo de representação wireframe, [Z], passe a modo de selecção de faces, seleccione as duas faces em oposição perpendiculares ao eixo dos xx, [RMB], e elimine-as, [X].


Passe a modo objecto, [Tab]. Reduza as dimensões do cubo, [S] > 0.05. Aplique a transformação sofrida, [Ctrl]+[A] > Scale.

Coloque o cursor 3D sobre o centro do cubo, [Shift]+[S] > Cursor to Selected, e insira um Empty, [Shift]+[A] > Empty.

Seleccione o cubo, [RMB]. No contexto Object Modifiers da janela de propriedades, associe-lhe um modificador Array.

No painel do modificador, desactive Relative Offset, active Object Offset e, na respectiva célula, seleccione o nome do Empty que criou.

Incremente o parâmetro Count para 250 e active Merge.

Rode ligeiramente o empty em torno do eixo dos zz, [R] > [Z], e desloque-o, também ligeiramente, segundo z e segundo x, utilizando, por exemplo, os transformadores.

Dos valores escolhidos para as translações e rotação dependerá o raio e comprimento da mola. Pode optar por inscrever os valores directamente no painel Transform da tabela de propriedades da janela 3D.

Seleccione o cubo e, no painel do modificador Array, ajuste o valor do parâmetro Distance de modo a garantir a continuidade da malha.

Associe ao cubo um modificador Subdivision Surface de modo a arredondar a secção transversal da mola.

Salve o ficheiro.

Vamos em seguida ver diversas técnicas que podem ser utilizadas na animação da mola.

Desenvolva cada um dos exemplos num ficheiro diferente, partindo do ficheiro salvo no ponto anterior.








Passe a Front Ortho, [1] > [5]. Seleccione o empty, [RMB].

Passe à frame 1, [Shift]+[LA]. Desloque ligeiramente o empty segundo -z, de modo a comprimir a mola. O modo mais fácil é editar directamente o seu valor na respectiva célula do painel Transform da tabela de propriedades da janela 3D.

Insira uma keyframe de localização, [I] (com o cursor do rato sobre a célula Transform Location Z).

Passe à frame 21, [Shift]+[UA] > [Shift]+[UA]. Desloque ligeiramente o empty segundo z, de modo a expandir a mola, editando directamente a coordenada z na respectiva célula do painel Transform da tabela de propriedades da janela 3D.

Insira uma keyframe de localização, [I] (com o cursor do rato sobre a célula Transform Location Z).

Passe à frame 41, [Shift]+[UA] > [Shift]+[UA]. Desloque ligeiramente o empty segundo -z, de modo a comprimir a mola, editando directamente a coordenada z na respectiva célula do painel Transform da tabela de propriedades da janela 3D, e inserindo o mesmo valor da frame 1.

Insira uma keyframe de localização, [I] (com o cursor do rato sobre a célula Transform Location Z).

A partir da barra da janela Info, seleccione a pré-definição de janelas Animation.




Na barra da janela Graph Editor, seleccione Key > Interpolation Mode > Linear.

Na barra da janela Graph Editor, seleccione Channel > Extrapolation Mode > Make Cyclic.

Note que, na figura, por simplificação de representação, foram eliminados os canais X location e Y Location.

Pressione [Alt] + [A] para pré-visulaizar a oscilação.

Esta a forma rápida e correcta de obter a animação de uma mola. Note que, tal como é suposto, a mola se expande e comprime mantendo sempre a mesma secção tranversal.

Vamos em seguida ver como a animação da mola pode ser feita recorrendo a um restitor StretchTo. Como se verá, a utilização deste restritor tem o inconveniente de deformar a secção tansversal da mola.

Abra o ficheiro com o modelo da mola. Passe a Front Ortho, [1] > [5]. Seleccione a mola, [RMB], e centre sobre ela o cursor 3D, [Shift]+[S] > Cursor to Selected.

Insira uma armação, [Shift]+[A] > Armature > Single Bone.

Passe a Top Ortho, [7], Centre aproximadamente o osso, [G] > [Y].

Passe novamente a Front Ortho, [1]. Com o osso selecionado passe a modo edição, [Tab], e arraste a ponta do osso ao longo do eixo dos zz, recorrendo aos tranformadores, até que o osso tenha aproximadamente o mesmo comprimento longitudinal da mola.

Dê ao osso o nome B1. Em Front Ortho, seleccione o osso, [RMB] sobre o corpo, e duplique-o, [Shift]+[D].

Dê ao novo osso o nome B2. Seleccione a raiz de B2, [RMB], e arraste-a para a esquerda até que o osso fique na horizontal, [G] > [Ctrl].

Se necessário, corrija a rotação dos ossos, [Ctrl]+[N] > X Axis.

Seleccione a armação, [RMB], e entre em modo pose, [Ctrl]+[Tab].

Seleccione o osso B1, [RMB]. active o contexto Bone Constraints da janela de propriedades, associe ao osso um restritor Stretch To, Seleccione o osso B2 como alvo, especifique Head/Tail: 1.0, altere o parâmetro Rest Length de modo a fazer coincidir a ponta de B1 com a ponta de B2, e active None.

Salve o ficheiro para que o possamos recuperar mais à frente.

Seleccione a mola, [RMB]. Active o contexto Object Modifiers da janela de propriedades, e aplique o modificador Array, pressionando o botão Apply.

Em modo pose, seleccione a mola, [RMB], seleccione o osso B1, [RMB], e estabeleça uma relação de parentesco entre ambos, [Ctrl]+[P] > Bone.

Seleccione novamente a mola, [RMB]. Pode ver, no painel Relations do contexto Object da janela de propriedades, que a relação de parentesco ficou estabelecida.






Seleccione o osso B2, [RMB] (deve entrar naturalmente em modo pose), e rode-o, [R].

Pode ver que o osso B1 se expande e alonga, e a mola acompanha o movimento.

Para pequenas oscilações a solução é aceitável. Para grandes oscilações a solução não é aceitável, devido à excessiva modificação da forma da secção transversal da mola.

Abra o ficheiro salvo no ponto 32.

Seleccione o osso B1, [RMB], e no painel do restritor Stretch To, altere Volume de None par Z.

Seleccione o Empty, [RMB]. Active o contexto Object Constraints da janela de propriedades e associe-lhe um restritor Transformation.

No painel do restritor, especifique o osso B1 como alvo, seleccione, Source: Scale, especifique Z: Min: 0.0 / Max: 2.0, seleccione Destination: Loc e especifique Z: Min: 0.015 / Max: -0.015.

















Seleccione o osso B2, [RMB] (deve entrar naturalmente em modo pose), e rode-o, [R].

Pode ver que o osso B1 se expande e alonga, e a mola acompanha o movimento.

Não há agora qualquer alteração da secção transversal da mola.