S4.A2.

 

3.4. Relationship Constraints.

Novembro 28, 2011

 

3.4.5. Rigid Body Joint.


O restritor Rigid Body Joint impõe uma articulação do tipo corpo rígido entre o objecto a que o restritor está associado e o alvo.

O restritor destina-se a ser usado no contexto do motor de jogo. A sua utilização em animação só pode ser feita com base na gravação das curvas de interpolação nesse contexto, a partir da barra da janela Info, Game > Record Animation.

Pivot Type: Tipo de articulação, seleccionável a partir do menu dropdown.

Hinge: Articulação do tipo dobradiça, em torno do eixo dos xx do pivot.

Limits: Angle X Min./Max.: Permite especificar limites para a rotação em torno do eixo dos xx.

Ball: Articulação com apenas um ponto fixo, permitindo a rotação, sem limites angulares, em torno de qualquer dos eixos.

Cone Twist: Articulação com apenas um ponto fixo, permitindo a rotação, com limites angulares, em torno de qualquer dos eixos.

Limits: Angle X/Y/Z: Permite especificar a abertura do ângulo sólido.

Generic 6DoF: Articulação com apenas um ponto fixo com 6 graus de liberdade (Degrees of Freedom). Para além de poder rodar em torno de qualquer dos eixos, o objecto pode ainda afastar-se da origem do pivot segundo qualquer dos eixos.

Limits: X/Y/Z Angle X/Y/Z: Permite especificar os limites para a rotação e afastamento relativos a cada um dos eixos.

Linked Collision: Quando activo, desactiva a detecção da colisão entre o objecto e o alvo.

Display Pivot: Quando activo, mostra o pivot na janela 3D.

Pivot X/Y/Z: Permite o posicionamento do pivot, com coordenadas relativas ao centro do objecto.

Axis X/Y/Z: Permite a rotação do pivot, originalmente orientado segundo o sistema de eixos local do objecto, em torno de cada um dos eixos coordenados.

3.4.5.1. Exemplo.


Abra o blender. Designe o cubo por M1. Entre em modo edição, [Tab]. Subdivida o cubo 4 vezes, [W] > Number of Cuts : 4.

Active o contexto Object Modifiers da janela de propriedades e associe um modificador Subdivision Surface ao cubo. Altere o parâmetro Subdivisions View para 2.

Saia de modo edição, [Tab]. Passe a Top Ortho, [7] > [5]. Duplique o cubo, [Shift]+[D] > [LMB]. Desloque o cubo 3 UB para a direita, [G] > [X] > 3. Designe o segundo cubo por M2.

Seleccione o cubo M1 e escale-o para metade segundo y, [S] > [Y] > 0.5

Passe Front Ortho, [1] > [5]. Seleccione ambos os cubos e escale-os para metade segundo z, [RMB] > [Shift]+[RMB] > [S] > [Z] > 0.5.

Seleccione o cubo M1 e aplique a transformação de escalamento, [Ctrl]+[A] > Scale. Repita o procedimento para o cubo M2.

Seleccione o cubo M1, active o contexto Object Constraints, associe-lhe um restritor Rigid Bogy Joint, seleccione o cubo M2 como alvo, especifique Pivot Type Hinge, e active Display Pivot.

Especifique Pivot X: 1.4 de modo a colocar o pivot entre os dois cubos.

Especifique Axis Z: 90o, de modo a colocar o plano XZ do pivot paralelamente às faces transversais dos cubos.

Note que a dobradiça roda sempre em torno do eixo dos XX do pivot.







Na barra da janela Info, seleccione Blender Game.




Com o cubo M1 seleccionado, active o contexto contexto Physics da janela de propriedades.

Como pode ver no painel Physics, o objecto é do tipo Static. Mantenha as especificações.

Active o painel Collision Bound. Mantenha a especificação Box.








Seleccione o cubo M2. No painel Physics, especifique Physics Type : Rigid Body. Mantenha as restantes opções.

Active o painel Collision Bound. Mantenha a especificação Box.















Na barra da janela Info, active Physics Visualization, de modo a poder ver os limites físicos dos corpos em cena.





Pressione [P] para entrar em modo Blender Game.

Pode ver que o cubo M1, por ser um corpo rígido com massa e estar sujeito à força da gravidade, se movimenta segundo -Z. Em consequência da restrinção existente, o cubo roda em torno do eixo dos xx da dobradiça.

Para sair de modo jogo pressione [Esc].

Em Front Ortho, [1] > [5], seleccione o cubo M1, [RMB], e coloque sobre ele o cursor 3D, [Shift]+[S] > Cursor to Selected.

Insira um cilindro, [Shift]+[A] > Mesh > Cylinder.

Rode o cilindro 90o sobre o eixo dos xx, [R] > [X] > 90.

Desloque o cilindro para a direita 1.4 UB, [G] > [X] > 1.4, de modo a fazer coincidir o centro do cilindro com o pivot.

Escale o cilindro para metade, [S] > 0.5, e escale-o em y para o triplo da dimensão, [S], > [Y] > 3.

Active o contexto Object Modifiers, e associe um modificador Subdivision Surface, View:2, ao cilindro.

Entre em modo edição, [Tab], insira 4 contornos transversais, [Ctrl]+[R], e desloque-os para cada uma das extremidades do cilindro.

Passe a modo objecto, [Tab], duplique o cilindro, [Shift]+[D], e desloque-o 2.8 UB para a esquerda, [G] > [X] > -2.8.

Seleccione os dois cilindros e junte as malhas, [RMB] > [Shift]+[RMB] > [Ctrl]+[J].

Aplique as transformações de escalamento e rotação sofridas pelo cilindro, [Ctrl]+[A] > Scale, [Ctrl]+[A] > Rotation.

Centre a origem da malha, [T] > Origin > Origin to Geometry.

Passe a Front Ortho, [1] > [5]. Seleccione a malha dos cilindros, [RMB].

Passe a modo edição, [Tab]. Seleccione o vértice central do cilindro da direita, [RMB]. Coloque sobre ele o cursor 3D, [Shift] > [S] > Cursor to Selected.

Insira um círculo, [Shift] > [A] > Circle. Rode-o 90o em torno do eixo dos xx, [R] > [X] > 90.

Faça uma extrusão, [E] > [LMB], e escale o vértices extrudidos até aproximadamente a superfície do cilindro, [S].

Seleccione todos o vértices do círculo, [Ctrl]+[L]. Passe a Top Ortho, [1], e faça uma extrusão em yy até aproximadamente a superfície do cubo M1, [E] > [Y].







Seleccione todos os vértices do círculo, [Ctrl]+[L], e separe-os da malha dos cilindros, [P] > Seleccion. Saia de modo edição, [Tab].

Seleccione o círculo, [RMB]. Entre em modo edição, [Tab]. Insira um conjunto de contornos, [Ctrl]+[R], de modo a dar à malha a forma desejada.




Active o contexto Object Modifiers da janela de propriedade, associe um modificador Mirror à malha, e active Axis: Y.

















Passe a modo objecto, [Tab]. Seleccione o cubo M2, [RMB]. Coloque o cursor 3D sobre a sua origem, [Shift]+[S] > Cursor to Selected.

Seleccione a malha do círculo, [RMB]. Coloque a sua origem sobre o cursor 3D, [T] > Origin > Origin to 3D Cursor.

Aplique o modificador Mirror, pressionando o botão Aplly do painel do modificador.

Designe a malha do cilindro por C1 e a malha do círculo por C2.

Seleccione a malha C1, [RMB], seguida da malha M1, [Shift]+[RMB] e torne C1 filha de M1, [Ctrl]+[P] > Object.

Seleccione a malha C2, [RMB], seguida da malha M2, [Shift]+[RMB] e torne C2 filha de M2, [Ctrl]+[P] > Object.

Seleccione a malha C1, evoque o contexto Physics, e seleccione Physics Type: No Collision.

Repita o procedimento para a malha C2.

Pressione [P] para entrar em modo Blender Game.

Seleccione as 4 malhas,[B]. Duplique o conjunto, [Shift]+[D] > [LMB], e desloque as cópias para a direita 6 UB, [G] > [X] > 6.

Dê às cópias, da esquerda para a direita, os nomes C3, M3, C4, e M4.

Seleccione M2, [RMB], active o contexto Object Constraints, associe-lhe um restritor Rigid Body Joint, seleccione M3 como alvo, seleccione Pivot Type: Hinge, active Display Pivot, especifique Pivot X: 1.6, e Axis Z: 90o.


Como pode verificar, M3 herdou o pivot de M1, estando devidamente parametrizado.

Com M3 seleccionado, active o contexto Physics do painel de propriedades, e, no painel Physics, seleccione Physics Type: Rigid Body.

Pode verificar que Collision Bounds já se encontra activo, com Bounds: Box seleccionado.














Pressione [P] para entrar em modo Blender Game.

Pode verificar que a extremidade direita de M4, em resultado da aceleração da gravidade, ganha suficiente velocidade para se elevar sobre o lado esquerdo e penetrar a malha do cilindro à esquerda de C1.






Seleccione C1 e active o contexto Physics da janela de propriedades. No painel Colision Bouds, seleccione Convex Hull.

Pressione [P] para entrar em modo Blender Game.

Pode verificar que agora já não se verifica a interpenetração das malhas.







Na barra da janela Info, active o registo dos dados do movimento das malhas, Game > Record Animation.

Pressione [P] para entrar em modo Blender Game.

Pressione [Esc] para sair do modo Blender Game.

Coloque-se na frame 1, [Shift]+[LA], e proceda à pré-animação, [Alt+[A].

3.4.6. Shrinkwrap.


O restitor Shrinkwrap limita à superfície do alvo a localização do centro do objecto a que o restritor está associado.

Distance: Distância, medida sobre a direcção definida pelos centros do objecto e do alvo, a que os dois centros serão colocados.

Shrinkwrap Type: Modo de projecção, seleccionável a partir do menu dropdown.

Nearest Surface Point: O centro do objecto será colocado na superfície do alvo sobre o ponto mais próximo.

Nearest Vertex: O centro do objecto será colocado na superfície do alvo sobre o vértice mais próximo.

Project: O centro do objecto será colocado na superfície do alvo sobre o ponto resultante da projecção do centro segundo o eixo seleccionado.

3.4.6.1. Exemplo.


Abra o Blender. Insira um plano, [Shift]+[A] > Mesh > Plane, e escale-o, [S].

Entre em modo edição, [Tab], e subdivida o plano, [W] > Subdivide, seis vezes, Number of Cuts > 6.

Seleccione os contornos transversais ao eixo dos xx, [Alt] > [RMB], e dê ao plano uma forma ondulada, arrastando-os ao longo do eixo dos zz, recorrendo, por exemplo, aos transformadores.

Seleccione todos os contornos, [A], e faça uma extrusão segundo o eixo dos zz local, [E] > [Z] > [Z].

Active o contexto Object Modifiers da janela de propriedades , e associe ao plano um modificador Subdivision Surface. Saia de modo edição, [Tab].

Selecione o cubo, [RMB], active o contexto Object Constraints, e associe-lhe um restritor Shrinwrap.

Na célula Target do painel do restritor, seleccione o nome do plano.






Movimente livremente o cubo, [G].

Pode ver que o centro do cubo se mantém sobre a superfície do plano.

O restritor funciona à semelhança do restritor Clamp To. Enquanto que no restritor Clamp To o centro do objecto se mantem sobre um linha que é o lugar geométrico de um alvo do tipo Curve, no restritor Shrinwrap o centro do objecto mantem-se sobre a superfície do alvo, que é um objecto do tipo Mesh.

Coloque-se na frame 1, [Shift]+[LA]. Desloque o cubo para a extremidade direita da superfície, [G]. Insira uma keyframe de localização/rotação. [I] > LocRotg.

Coloque-se na frame 100. Desloque o cubo para a zona central superfície, [G]. Rode o cubo 180o em torno do eixo dos yy, [R] > Y > 180. Insira uma keyframe de localização/rotação. [I] > LocRotg.

Coloque-se na frame 200. Desloque o cubo para a extremidade esquerda da superfície, [G]. Rode o cubo 180o em torno do eixo dos yy, [R] > Y > 180. Insira uma keyframe de localização/rotação. [I] > LocRotg.

Coloque-se na frame 1, [Shift]+[LA], e proceda à pré-animação, [Alt+[A].

Pode ver que o cubo roda ao longo da superfície, mantendo sobre ela o seu centro. Se necessário, edite as curvas de interpolação na janela Graph Editor, de modo a dar ao movimento uma dinâmica mais convincente.

Seleccione o cubo, [RMB], active o contexto Object Modifiers, e associe-lhe um modificador Subdivision Surface de nível 3.





Active o contexto Object Constraints, e aumente o valor do parâmetro Distance do painel do restritor ShrinkWrap de modo a que a superfície, agora arredondada do cubo, fique a tocar a superfície do plano.



Coloque-se na frame 1, [Shift]+[LA], e proceda à pré-animação, [Alt+[A].

3.4.6.2. Exemplo.


Abra o Blender. Elimine o cubo, [X]. Insira um plano, [Shift]+[A] > Mesh > Plane, e escale-o 9 vezes, [S] > 9.

Entre em modo edição, [Tab], e subdivida o plano 8 vezes, [W] > Subdivide, [T] > Number of Cuts > 8.



Active o contexto Object Modifiers da janela de propriedades, e associe um modificador Subdivision Surface ao plano.

Sai de modo edição, [Tab]. Passe a Top Ortho, [7] > [5]. Centre o curso 3D no plano, [Shift]+[S] > Cursor to Selected.

Insira uma curva Bezier, [Shift]+[A] > Curve > Bezier. Entre em modo edição, [Tab].

Pode ver que a curva tem apenas dois controladores.

Seleccione o controlador da direita, [RMB]. Insira mais três controladores, [Ctrl]+[LMB]. Seleccione todos o controladores, [A], e escale a curva à dimensão do plano, [S].

Passe a modo Front Ortho, [1]. Pode ver que todos os controladores estão no mesmo plano. Seleccione cada um dos controladores, [RMB], e araste-os segundo z, [G] > [Z], dando à curva uma forma ondulada. Saia de modo edição, [Tab].

Selecione o plano, [RMB]. Active o contexto Object Constraints da janela de propriedades, associe um modificador Curve ao plano, e seleccione o nome da curva Bezier na célula Object.

Passe o modificador Curve para a primeira posição do stack.

Arraste o plano, se necessário, ao longo do eixo dos xx, por exemplo recorrendo aos controladores, dando-lhe, segundo xx, a forma ondulada da curva de Bezier.


Aplique as transformações de escalamento sofridas pelo plano, [Ctrl]+[A] > Scale.

Associe ao plano um modificador do tipo Wave.

Neste momento deve ter três modificadores associados ao plano. Na primeira posição um modificador Curve, na segunda posição um modificador Subdivision Surface, e por último o modificador Wave.







Coloque-se na frame 1, [Shift]+[LA], e proceda à pré-animação, [Alt+[A].

Passe a Right Ortho, [3] > [5]. Insira uma armação, [Shift]+[A] > Armature > Single Bone.

Passe a modo edição, [Tab]. Proceda a duas extrusões, [E], criando uma cadeia de ossos como se mostra na figura.

Neste momento, o osso B1 é pai do osso B2, que, por sua vez, é pai do osso B3.




Seleccione o osso B3 e, no painel Bone da janela de propriedades, quebre a relação de parentesco com osso B2.








Seleccione a raiz do osso B1, e crie um novo osso, por extrusão, [E], como se mostra na figura.











Com o osso B4 seleccionado, seleccione o osso B1, e crie uma relação de parentesco não ligada, de modo a que o osso B4 se torne filho do osso B1, mas mantenha a sua raiz sobre a raiz do osso B1, [Ctrl]+[P] > Keep Offset.

Alinhe os ossos, [Ctrl]+[N] > X Axis.

Passe a modo Pose. Seleccione o osso B2, active o contexto Bone Constraints, associe um restritor Inverse Kinematics ao osso, e especifique o osso B3 como alvo.

Seleccione o osso B3, movimente-o, [G], e observe a resposta da armação.






Seleccione o osso B1, associe-lhe um restritor Copy Location, seleccione o osso B3 como alvo, e desactive a célula Z, de modo a que a raiz do osso B1 copie as coordenadas x e y do osso B3, mas tenha liberdade de posicionamento em Z.

Seleccione o osso B3, movimente-o, [G], e observe a resposta da armação. Seleccione o osso B1, movimente-o, [G], e observe a resposta da armação.

Seleccione o osso B4, associe-lhe um restritor Stretch To, seleccione o osso B2 como alvo, dê o valor 1.0 ao parâmetro Head/Tail de modo a que o osso B1 aponte para a ponta do osso B2, e dê ao parâmetro Rest Length o valor necessário para que a ponta de B1 se posicione sobre a ponta de B2.

Seleccione o osso B3, movimente-o, [G], e observe a resposta da armação. Seleccione o osso B1, movimente-o, [G], e observe a resposta da armação.

Seleccione o osso B3, associe-lhe um restritor Shrinkwrap, e seleccione o plano como alvo.




Se necessário, seleccione a raiz do osso B1, e desloque-a, [G], de modo a que a posição relativa dos ossos seja a que se mostra na figura.

Seleccione o osso B3, movimente-o, [G], e observe a resposta da armação.



Coloque-se na frame 1, [Shift]+[LA], desloque o osso B3 para um dos vértices do plano, e insira uma key frame de localização.

Coloque-se na última frame, [Shift]+[RA], desloque o osso B3 para o vértice oposto do plano, e insira uma key frame de localização.

Manipule as curvas de interpolação na janela Graph Editor, de modo a dar à armação a dinâmica desejada, por exemplo uma evolução cíclica sobre todo o plano, como se mostra na figura.

Coloque-se na frame 1, [Shift]+[LA], e proceda à pré-animação, [Alt+[A].

Note que o osso B3 se posiciona sempre sobre a superfície do plano , e a raiz do osso B1 se aproxima e fasta do plano, mantendo sempre a mesma coordenada em Z.

3.4.6.3. Exemplo.


Abra o ficheiro do exemplo anterior. Coloque-se na frame1, [Shift]+[LA]. Passe a Object Mode, [Tab], e a Front Ortho, [1] > [5].

Seleccione a armação, [RMB], e elimine-a, [X].

Importe a armação, e a malha que lhe foi associada, desenvolvida no exemplo 3.3.3.3, a partir da janela Info, File > Append, ..., > Object, etc.








Em modo objecto, seleccione a armação, [RMB], coloque na vertical, [R] > [Ctrl], escale-a [S], e coloque-a imediatamente acima do plano, [G].

Passe a modo edição, [Tab]. Seleccione a raiz do osso inferior, [RMB], e por extrusão, [E], crie um novo osso

Dê ao osso superior o nome B1 ao osso do meio o nome B2, e ao osso agora criado o nome B3.

Passe a modo pose, [Ctrl]+[Tab]. Seleccione o osso B3, [RMB], active o contexto Bone Constraints da janela de propriedades, associe-lhe um restritor Shrinkwrap, e seleccione o plano como alvo.


Seleccione o osso B2, [RMB]. O osso B2 deve ter um restritor do tipo Track To associado, tendo o osso B1 como alvo.

Associe ao osso B2 um restritor Copy Location, e seleccione o osso B3 como alvo.






Associe ao osso B2 um restritor do tipo Limit Rotation. Active Limit X, Limit Y e Limit Z e, no parâmetro Convert, especifique Local Space.

O osso B2 tem, portanto três restritores associados, um restritor Track To, um restritor Copy Location, e um restritor Limit Rotation.


Seleccione o osso B1, [RMB]. Este deve ter um restritor do tipo Track To associado, tendo o osso B2 como alvo.

Associe ao osso B1 um restritor do tipo Limit Rotation. Active Limit X, Limit Y e Limit Z e, no parâmetro Convert, especifique Local Space.


Associe ao osso B1 um restritor do tipo Copy Location, especifique o osso B3 como alvo, e desactive Z.

Em resultado desta restrição, o osso B1 copiará as coordenadas x e y do osso B3, mas terá liberdade de posicionamento em z.





Associe ao osso B1 um restritor do tipo Copy Location, especifique o osso B3 como alvo, e desactive X e Y. Active Offset, e altere o valor do parâmetro Influence para 0.3.

Em resultado desta restrição, o osso B1 respeitará apenas parcialmente o posicionamento em z do osso B3.

O osso B1 tem, portanto, quatro restritores associados, um restritor Track To, um restritor Limit Rotation, e dois restritores Copy Location.

Active o contexto Object Data (Armature), e no painel Display, desactive X-Ray, e active Stick, para desimpedir a observação do comportamento da malha dos cilindros.


Seleccione o osso B3, arraste-o sobre o plano, [G], e observe o comportamento do piston.

Note que, ao contrário do exemplo anterior, a raiz do osso B1 se aproxima e fasta do plano, mas não mantem sempre a mesma coordenada em Z, exibindo um factor de amortecimento relativamente à evolução da coordenada z do osso B3.

3.4.6.4. Exemplo.


Abra o Blender. Parta do cubo padrão, e, utilizando o conjunto de técnicas de modulação que conhece, modele uma peça semelhante à que se mostra na figura.







Insira um plano, [Shift] > Mesh > Plane, e modele uma peça semelhante à que se mostra na figura.








Seleccione o cubo, active o contexto Object Constraints da janela de propriedades, associe-lhe um restritor do tipo ShrinkWrapap, e altere o parâmetro Distance de modo a que o limite inferior do cubo toque a superfície do plano.


Coloque-se na frame 1, [Shift]+[LA]. Desloque o cubo para, aproximadamente, o centro do plano, [G].

Seleccione o plano, [RMB], e insira uma keyframe de localização, [I] > Location.




Coloque-se na frame 11, [Shift]+[RA]. Desloque o plano para a esquerda até que o cubo fique aproximadamente sobre o seu extremo, [G] > [X].

Seleccione o plano, [RMB], e insira uma keyframe de localização, [I] > Location.




Coloque-se na frame 31, [Shift]+[RA]. Desloque o plano para a direita até que o cubo fique aproximadamente sobre o seu extremo, [G] > [X].

Seleccione o plano, [RMB], e insira uma key frame de localização, [I] > Location.




Coloque-se na frame 41, [Shift]+[RA]. Desloque o cubo desloque o plano até que o cubo fique novamente sobre a sua zona central, [G] > [X].

Seleccione o plano, [RMB], e insira uma key frame de localização, [I] > Location.

Na janela Graph Editor, altere o modo de interpolação para linear, Key > Interpolation Mode > Linear, e altere o modo de extrapolação para cíclico, Channel > Extrapolation Mode > Make Cyclic.

Deve ficar com uma curva de interpolação X Location como a que se mostra na figura (opcionalmente, pode eliminar os canais Y e Z Location).

Coloque-se na frame 1, [Shift]+[LA], e proceda à pré-animação, [Alt+[A].

3.4.7. Action.


O restritor Action permite desencadear uma Acção em que o objecto a que o restritor está associado é protagonista, com base no controlo feito por uma transformação sofrida pelo alvo.

Action: Nome de uma Acção previamente definida para o objecto.

Transform Channel: Tipo de transformação do alvo que desencadeia a Acção, seleccionável a partir do menu dropdown.

Action Length Start/End: Do conjunto de frames a que corresponde a acção, especificação da primeira e última frame a mapear.

Target Range Min./Max.: Intervalo de variação do parâmetro relativo à transformação do alvo a que corresponderá o mapeamento da acção.

No caso correspondente à figura, o objecto executará a acção Cube2Action, evoluindo, proporcionalmente, entre as frames 0 e 100 dessa acção, sempre que a coordenada x do alvo, no sistema de coordenadas global, evolui entre os valores 0.0 e 1.0.

3.4.7.1. Exemplo.


Vamos começar por ver um exemplo de controle de uma acção definida para uma malha a partir da manipulação de um outro objecto do tipo malha.

Abra o ficheiro salvo no ponto 8 do exemplo 3.4.4.1

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


Seleccione o Cubo, [RMB]. Na barra da janela Dope Sheet, seleccione o contexto Action Editor.




Pode ver que o cubo tem associada a Acção Cube Action.

Pressione o botão com a letra F de modo a associar a acção ao objecto virtual Fake.

Pressione o botão com o símbolo X de modo a quebrar a associação entre a acção CubeAction e o Cubo.

Uma vez que a acção CubeAction deixou de estar associada ao cubo, e não estando associada a mais nenhum objecto, ao salvar o ficheiro a acção perder-se-ia. Daqui a necessidade de ter previamente associado a acção ao objecto virtual Fake.

Recorrendo à tabela de propriedades da janela 3D, [N], coloque o cursor 3D no ponto [XYZ: -25.0, 0.0, -10.0].


Passe a Front Ortho, [1] > [5]. Insira um plano, [Shift]+[A] > Mesh > Plane, e rode-o 90o sobre o eixo dos xx, [R] > [X] > 90.

Entre em modo edição, [Tab]. Dê à malha a forma que se mostra na figura, recorrendo às técnicas de modelação que conhece.

Passe a modo objecto, [Tab]. Active o contexto Object Constaints da janela de propriedades, e associe ao cubo um restritor Limit Location.

Especifique os limites de posicionamento da malha conforme se mostra na figura, e active For Transform.

Seleccione a malha, [RMB], movimente-a livremente, [G], e observe que esta apenas se desloca na vertical entre os limites inferior e superior do círculo.

Dê à malha o nome Controle.

Seleccione o cubo, [RMB]. Active o contexto Object Constraints, e associe-lhe um restritor do tipo Action.

Seleccione o nome da malha de controle como alvo, seleccione o nome da acção CubeAction, epecifique Transform Channel : Location Z, Action Length: [11, 31], Target Range: [-10, 10], e passe o restritor para a primeira posição do Stack.



Seleccione a malha Controle, [RMB], movimente-a livremente , [G], e observa como esta controla agora a evolução da acção CubeAction.

3.4.7.2. Exemplo.


Vamos agora ver um exemplo de controle de uma acção associada a um osso de controle de uma cadeia de cinemática inversa, com base na manipulação de um objecto do tipo malha.

Abra o ficheiro do exemplo 3.3.5.4.

A partir da barra da janela Info, active a pré-configuração de janelas Animation. Passe a Front Ortho, [1] > [5].


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

Seleccione o osso B5, [RMB].

Note que o exemplo que se segue é puramente didático. O osso B5 controla toda a cinemática do modelo, pelo que através da sua manipulação e inserção de keyframes em modo pose é possível uma qualquer dinâmica desejável para a animação.

Apenas por uma questão de simplificação de exposição, altere, no painel Transform da tabela de propriedads da janela 3D, o modo de registo das rotações de Quaternion para XYZ Euler.


Coloque-se na frame 1, [Shift]+[LA], e insira uma keyframe de rotação, [I] > Rotation.

Coloque-se na frame 41, por exemplo, editando a célula da janela Timeline.

Rode o osso B5 360o e insira uma keyframe, [I] > Rotation.

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

Na janela DopeSheet, seleccione o contexto Action Editor.

Pode ver que o osso B5 tem associada a acção ArmatureAction.

Pressione o botão com a letra F de modo a associar a acção ao objecto virtual Fake.

Pressione o botão com o símbolo X de modo a quebrar a associação entre a acção ArmatureAction e o osso B5.

Se pressionar [Alt]+[A], pode verificar que não existe agora qualquer animação activa.

Ainda em modo pose e com o osso B5 activo, centre o cursor 3D no osso, [Shift]+[S] > Cursor to Selected.

Saia de modo pose para modo edição, [Ctrl]+[Tab].

Insira um círculo, [Shift]+[A] > Mesh > Circle. Rode-o 90o em torno do eixo dos xx, [R] > [X] > 90.

Entre em modo edição, [Tab], e, recorrendo à técnicas de modelação que conhece, modele uma malha como a que se mostra na figura.

Aplique as transformações de rotação sofridas pela malha, [Ctrl]+[A] > Rotation.

Passe a modo objecto, [Tab]. Active o contexto Object Constaints da janela de propriedades, e associe à malha um restritor Limit Rotation.

Especifique os limites de posicionamento da malha conforme se mostra na figura, e active For Transform.

Seleccione a armação, [RMB], passe a modo pose, [Ctrl]+[Tab], e seleccione o osso B5, [RMB].

Active o contexto Bone Constraints da janela de propriedades, e associe ao osso B5 um restritor Action.

Especifique os parâmetros do painel do restritor conforme se mostra na figura.



Passe a modo objecto, [Ctrl]+[Tab], seleccione a malha do círculo, [G], e rode-a livremente, [R].

Com a malha do círculo activa, desloque-se para a frame 1 , [Shift]+[LA], e insira uma keyframe de rotação, [I] > Rotation.

Desloque-se para frame 11, [Shift]+[UA], rode o círculo até ao limite angular superior, [R], e insira uma keyframe de rotação, [I] > Rotation.

Desloque-se para frame 21, [Shift]+[UA], rode o círculo até ao limite angular inferior, [R], e insira uma keyframe de rotação, [I] > Rotation.

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

Coloque-se na frame 1, [Shift]+[LA], e proceda à pré-animação, [Alt+[A].

3.4.7.3. Exemplo.


Vamos agora ver um exemplo de controle de uma acção associada a uma cadeia de cinemática directa.

Abra o ficheiro Perna.zip.

Centre o cursor na malha, [Shift]+[S] > Cursor to Selected.

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

Entre em modo edição, [Tab]. Active o contexto Object Data (Armature), e, no painel Display, active X-Ray e Names.

A partir da ponta do primeiro osso, e procedendo a um conjunto de extrusões, [E], crie uma cadeia de 4 ossos, e disponha-os tal como se mostra na figura.




















Passe a Front Ortho, [1] > [5], e verifique o enquadramento da armação com a malha. Se necessário, seleccione todos os ossos, [A], e desloque-os, [G].




















Passe novamente a Right Ortho, [3], e alinhe a rotação dos ossos, [Ctrl]+[N] > X Axis.

Insira um osso sob a cadeia, [Shift]+[A], e coloque-o sobre a cadeia, como se mostra na figura.


Passe a modo objecto, [Tab]. Seleccione a malha da perna, [RMB], seleccione a armação, [Shift]+[RMB], e estabeleça uma relação de parentesco com atribuição automática de pesos, [Ctrl]+[P] > With Automatic Weights.


Seleccione a armação, [RMB], passe a modo pose, [Ctrl9+[Tab], seleccione a malha da perna, [Shift]+[RMB], e passe a modo Weight Paint, [Ctrl]+[Tab].

Seleccione sucessivamente cada um dos ossos, [RMB], e observe o peso da associação de cada um dos vértices da malha da perna aos ossos da armação.

Os vértices da malha que estão sob influência máxima do osso seleccionado estão coloridos a vermelho, e os ossos que não influenciados pelo osso têm cor azul.






Passe a modo Objecto, [Ctrl]+[Tab], e seleccione a armação, [RMB]. Deve passar automaticamente a modo pose.

Seleccione todos os ossos da cadeia, [B], e insira uma keyframe de localização e rotação, [I] > LocRot.

Passe à frame 11, [Shift]+[UA].

Seleccione a ponta do osso B2 e rode-a ligeiramente para a direita, [G]. Seleccione a ponta do osso B3 e rode o osso ligeiramente para cima, [G]. Seleccione a ponta do osso B4 e rode-o de modo a ficar de novo na horizontal, [G]. A cadeia de osso deve ficar aproximadamente na posição que se mostra na figura.



Seleccione o osso B1, e arraste a cadeia até colocar a ponta do pé na posição inicial, como se mostra na figura.

Seleccione todos os ossos da cadeia, [B], e insira uma keyframe de localização e rotação, [I] > LocRot.

Observe a animação, seleccionando, [LMB], a linha temporal na janela Timeline, e arrastando-a entre a frame 1 e 11.










Coloque-se na frame 1, [Shift]+[LA].

A partir da barra da janela Info, active a pré-configuração de janelas Animation

Com um dos ossos da cadeia seleccionado (em modo pose), active o contexto Action Editor na barra da janela DopeSheet.

Pressione o botão com a letra F de modo a associar a acção ArmatureAction ao objecto virtual Fake.

Pressione o botão com o símbolo X de modo a quebrar a associação entre a acção e a armação.

A partir da barra da janela Info seleccione novamente o modo Default.

Em modo pose, seleccione o osso B4, [RMB].

Active o contexto Bone Constaints da janela de propriedades, e associe-lhe um restritor Action. Configure os parâmetros do painel como se mostra na figura.

Seleccione sucessivamente todos os ossos da cadeia e repita o procedimento anterior.

Note que, ao contrário do exemplo anterior, em que a acção está associada a uma cadeia de cinemática inversa, numa cadeia de cinemática directa, como é aqui o caso, é necessário associar o restritor Action a todos os ossos que participam na acção.

Seleccione o osso Bone, desloque-o para a esquerda, e observe a evolução da acção.

Seleccione o osso Bone, active o contexto Bone Constaints da janela de propriedades, e associe-lhe um restitor Limit Location. Configure os parâmetros do painel como se mostra na figura.


Passe a modo edição, [Tab].

Insira um plano e dê-lhe a forma da malha que se mostra na figura, ou importe a malha do exemplo 3.4.7.1.

Dê à malha o nome cursor. Aplique as transformações de escalamento, [Ctrl]+[A] > Scale, e rotação, [Ctrl]+[A] > Rotation.

Seleccione o osso Bone, [RMB]. Em modo objecto, active o contexto Bone da janela de propriedades e, no painel Display, seleccione o nome da malha cursor na célula Custom Shape.





Note que no painel Display do contexto Object Data da janela de propriedades, a opção Shape deve estar activa.



Se necessário, seleccione a malha cursor, [RMB], passe a modo edição, [Tab], e escale, [S], e mova, [G], a malha de forma a dar ao osso a dimensão e posição desejada.

Seleccione a malha cursor e, em modo objecto, passe-a para a layer 2, [M] > 2.

Note que, como as referências nos restritores são locais, pode seleccionar a armação, em modo objecto, deslocá-la para outra posição do espaço 3D, passar a modo pose, e activar a acção, por deslocamento do osso Bone.

Com a armação seleccionada em modo objecto, active o contexto Object Data da janela de propriedades, e, no painel Display, desactive X-Ray, desactive Names, e active Stick.

Passe a modo pose, [Ctrl]+[Tab]. Seleccione o osso cursor e movimente-o livremente, [G].