S3.A2.
3.3. Tracking Constraints.
3.3.1. Clamp To.
Clamp To restringe o posicionamento do centro do objecto
a que o restritor está associado ao lugar geométrico no
espaço 3D de um alvo do tipo Curve, fazendo, em cada instante,
o mapeamento da posição do centro do objecto no espaço 3D sobre o
ponto mais próximo da curva.
• Main Axis: Eixo coordenado cuja direcção está mais próximo da direcção da tangente à curva.
• Cyclic: Quando activo, ao atingir um dos extremos, o objecto continua o movimento sobre a curva, em direcção ao outro extremo. Normalmente relevante no caso em que se pretende uma contínua evolução sobre uma curva fechada.
3.3.1.1. Exemplo.
Vamos exemplificar a utilização do restritor Clamp To na definição da trajectória da câmara.
Abra o Blender e passe a Top Ortho, [Num7] > [Num5].
Insira uma curva tipo Bezier, [Shift]+[A] > Curve > Bezier.
Entre em modo edição, [Tab], escale a curva 10 vezes, [S] > 10, e subdivide-a, [W] > Subdivide.
Seleccione sucessivamente cada um dos 3 controladores centrais e controladores de curvatura, e posicione-os, [G], de modo a dar à curva a forma desejada.
No presente exemplo foi dada à curva a forma que se mostra na
figura.
Note que, se desejado, pode controlar rigorosamente
o posicionamento de cada um dos controladores, seleccionando-os e
definindo as suas coordenadas no painel Transform da tabela de
propriedades da janela 3D, [N].
Admitamos que a trajectória tem início no ponto
[-10, *, *], e fim no ponto [10, *, *].
Note que pode seleccionar
a curva da trajectória na janela 3D, entrar em modo edição,
seleccionar, sucessivamente o primeiro e o último ponto,
e verificar as suas coordenadas no painel Transform da
tabela de propriedades da janela 3D.
Por razões diversas, a definição de uma trajectória é,
tradicionalmente, definida com base num restritor Follow Path,
que veremos mais à frente, e não num restritor Clamp To.
Embora aparentemente com a mesma funcionalidade,
estes dois restritores têm características
bastante diferentes.
Entre outras diferenças, nomeadamente, enquanto no restritor Clamp To a restrição imposta às coordenadas do centro do objecto tem por base a dinâmica das curvas de interpolação do objecto, no restritor Follow Path a dinâmica é determinada pelas curvas de interpolação do alvo.
No presente exemplo, a curva tem a direcção principal ao longo do eixo dos xx. Vamos por isso começar por definir uma curva de interpolação do objecto associada à variação desta coordenada.
Comece por se posicionar na 1ª frame, [Shift] + [LA]. Seleccione a câmara, [RMB], e insira uma keyframe relativa à sua localização, [I] > Location.
Posicione-se na última frame, 250 na configuração padrão, [Shift] + [RA]. Desloque a câmara para a direita e insira uma nova keyframe relativa à sua localização, [I] > Location.
O posicionamento exacto da câmara não é relevante, dado que vamos em seguida corrigir a curva de interpolação.
Subdivida a janela 3D e mude uma delas para uma janela Graph Editor.
Com a câmara seleccionada, expanda o canal Location,
[LMB] sobre o pequeno triângulo.
Elimine os canais Y e Z Location,
[LMB] sobre o nome do canal, seguido de [X].
Na barra da janela Graph Editor, seleccione View >
View All, para expandir a representação da curva X Location.
Vamos agora associar um restritor Clamp To à câmara.
Na janela 3D, comece por seleccionar o alvo,
ou seja, a trajectória, [RMB], seleccione em seguida
o objecto, ou seja a câmara, [Shift]+[RMB],
e associe um restritor Clamp To à câmara,
[Shift]+[Ctrl]+[C] > Clamp To.
Seleccione a câmara e active o contexto Object Constraints na janela de propriedades.
Note que, como o restritor foi associado à câmara com a combinação de teclas [Shift]+[Ctrl]+[C], o campo correspondente ao nome do alvo foi preenchido automaticamente.
No painel do restritor, altere o parâmetro Main Axis para X.
Volte agora à janela Graph Editor
A curva representa a coordenada X da câmara em função da fame da animação. O declive da curva é, portanto, proporcional à velocidade do movimento da câmara segundo X.
Na configuração padrão a curva de interpolação é uma curva de Bezier. Vamos começar por alterar o método de interpolação, para que a velocidade da câmara segundo X seja constante.
Certifique-se que a curva de interpolação está seleccionada, [A]. Na barra da janela Graph Editor, seleccione Key > Interpolation Mode > Linear.
Na janela Graph Editor, seleccione o ponto da curva de
interpolação à esquerda, correspondente à 1ª keyframe,
[RMB]. Pressione, [N], para tornar visível a tabela de
propriedades da janela Graph Editor, e altere as
coordenadas da keyframe para [1, -10.0].
Note que, na curva de interpolação, a coordenada horizontal, e por isso designada por X, diz respeito à frame da animação, e a coordenada vertical, e por isso designada por Y, diz respeito, neste caso, e por que se trata da curva X Location à coordenada X da posição do objecto na cena 3D.
Repita o procedimento para a 2ª keyframe, alterando as suas coordenadas para [250, 10.0].
Coloque o cursor do rato sobre a linha vertical verde vertical da janela Graph Editor, pressione [LMB], e arraste o rato, ou, em alternativa, pressione [Alt]+[A]. Verifique, na janela 3D, que a câmara segue a trajectória definida.
Note que o restritor se limita a definir o posicionamento do centro do objecto, não exercendo qualquer outra influência. Nomeadamente, note que à medida que percorre a trajectória, não há qualquer alinhamento da câmara com a tangente à trajectória.
A manipulação da curva de interpolação permite definir
completamente a dinâmica da coordenada X do objecto.
Para terminar, vamos em seguida ver um pequeno exemplo
de definição dessa dinâmica.
Na janela Graph Editor, arraste a linha verde vertical para uma posição central da curva de interpolação e insira um keyframe, [I] > Only Selected Channels. Arraste a linha verde para a direita e insira nova keyframe. De novo, arraste a linha verde para a direita e insira nova keyframe.
Procedendo à semelhança do ponto 15, dê às 3 keyframes agora criadas as coordenadas [100, 0.0], [150 0.0] e [200, -5].
Pressione [Alt]+[A] e verifique que a câmara evolui ao longo da trajectória até à frame 100, fica parada entre as frames 100 e 150, dado que o declive da curva de interpolação é nulo, recua entre as frames 150 e 200, dado que, sendo o declive da curva de interpolação negativo, a velocidade é dirigida segundo -X, e finalmente evolui até ao fim da trajectória, agora a uma maior velocidade, dado que o declive da curva de interpolação é mais acentuado. |
3.3.2. Damped Track.
Damped Track impõe que um dos eixos do sistema de coordenadas
local do objecto a que o restritor está associado aponte
sempre para o alvo, tendo os outros dois eixos total liberdade
de movimento.
A qualquer movimento do alvo o objecto responde, rodando de modo a ter sempre o mesmo eixo a apontar para o alvo.
Se for o objecto a movimentar-se, a translação será sempre acompanhada de uma rotação de modo a que se tenha sempre o mesmo eixo a apontar para o alvo.
• To: Eixo, do sistema local do objecto, que aponta para o alvo.
3.3.2.1. Exemplo.
Vamos retomar o Exemplo 3.3.1.1. , e associar um restitor Damped Track à câmara, de modo a que esta evolua ao longo da trajectória apontando constantemente para o cubo.
Na janela 3D, seleccione o alvo (o cubo), [RMB], seleccione o objecto (a câmara), [Shift]+[RMB], e associe um restritor Damped Track à câmara, [Shift]+[Ctrl]+[C] > Damped Track.
Na barra da janela 3D,
active a visualização dos transformadores e seleccione
o sistema de eixo local. Passe a Front Ortho. Seleccione a câmara.
Como pode ver, a câmara está dirigida segundo -Z.
Com a câmara seleccionada, active o contexto Object
Constraints na janela de propriedades.
No painel do restritor, altere o parâmetro To para -Z.
Subdivida a janela 3D, e passe uma delas a
Camera Perps.
Na janela Graph Editor, arraste a linha verde vertical para a direita e para a esquerda.
Verifique, nas janelas 3D, que a câmara percorre a
trajectória apontando sempre para o cubo, que aparece
sempre enquadrado na janela Camera Perps.
Pressione [Alt]+[A] e verifique que a câmara evolui ao longo da trajectória até à frame 100, fica parada entre as frames 100 e 150, dado que o declive da curva de interpolação é nulo, recua entre as frames 150 e 200, dado que, sendo o declive da curva de interpolação negativo, a velocidade é dirigida segundo -X, e finalmente evolui até ao fim da trajectória, agora a uma maior velocidade, dado que o declive da curva de interpolação é mais acentuado.
Verifique também que, como consequência do processo de alinhamento do eixo dos zz, e à medida que evolui sobre a trajectória, a câmara sofre rotações em torno desse mesmo eixo.
Normalmente, este comportamento não é desejado, pretendendo-se que a câmara mantenha o alinhamento do eixo vertical. Para garantir automaticamente o alinhamento do eixo vertical do objecto deve ser utilizado um restritor Track To, que veremos já de seguida, e não um restritor Damped Track.
Vamos completar o tutorial admitindo que a torção do objecto é desejável, vendo como a podemos controlar com base numa curva de interpolação.
Naturalmente que a curva poderia servir para garantir a não torção, mas nesse caso faria mais sentido utilizar o restritor Track To.
Desactive o restritor no respectivo painel.
Seleccione a câmara e limpe a informação relativa à rotação da câmara, [Alt]+[R].
Active de novo o restritor.
Comece por se posicionar na 1ª frame, [Shift]+[LA].
Seleccione a câmara, [RMB], insira XYZ[0.0, 0.0, -90.0]
nos dados referentes à rotação, no painel Transform
da tabela de propriedades da janela 3D, e insira uma
keyframe relativa à rotação, [I] > Rotation.
Posicione-se na última frame, [Shift]+[RA],
e insira XYZ[0.0, 0.0, 450.0] nos dados referentes à
rotação, e insira uma nova keyframe relativa à sua
rotação, [I] > Rotation.
Com a câmara seleccionada, expanda o canal Rotation, [LMB] sobre o pequeno triângulo, e elimine os canais X e Y Rotation, [LMB] sobre o nome do canal, seguido de [X].
Na barra da janela Graph Editor, seleccione View > View All, para expandir a representação da curva Z Rotation.
Certifique-se que a curva de interpolação está seleccionada, [A]. Na barra da janela Graph Editor, seleccione Key > Interpolation Mode > Linear.
Coloque o cursor do rato sobre a linha vertical verde da janela Graph Editor, pressione [LMB], e arraste o rato, ou, em alternativa, pressione [Alt]+[A]. Observe a rotação da câmara à medida que segue a trajectória definida.
Pode agora modificar a cuva de interpolação
conforme pretendido.
Na janela Graph Editor, seleccione o ponto da curva de interpolação à esquerda, correspondente à 1ª keyframe, [RMB]. Pressione, [N], para tornar visível a tabela de propriedades da janela Graph Editor.
Note que a escala vertical está expressa em graus mas a coordenada na tabela Active Keyframe da tabela de propriedades está expressa em radianos (por exemplo, se pretender inserir o valor 90o escreva pi/2).
Pressione [Alt]+[A] e verifique a evolução da câmara e do emquadramento. |
3.3.3. Track To.
Track To impõe que um dos eixos do sistema de coordenadas
local do objecto a que o restritor está associado aponte
sempre para o alvo.
Para além disso, é imposto que outro dos eixos locais do objecto aponte o mais aproximadamente possível (tendo em conta as retrições impostas pela ortogonalidade entre os eixos) segundo uma outra direcção coordenada.
• Head/Tail: No caso do alvo ser um osso de uma armação, permite a especificação da localização do ponto alvo ao longo do eixo raiz (0.0)/ponta (1.0).
• To: Eixo, do sistema local do objecto, que aponta para o alvo.
• Up: Eixo, do sistema local do objecto, que aponta o mais aproximadamente possível segundo o eixo dos zz do sistema de eixos global.
• Target Z: O eixo Up apontará o mais aproximadamente possível segundo o eixo dos zz do sistema de eixos local do alvo.
Por ser um dos restritores mais utilizados, Track To
tem uma combinação dedicada de teclas.
Para associar um restritor Track To a um objecto, seleccione o alvo, [RMB], seleccione o objecto, [Shift]+[RMB], pressione [Ctrl]+[T], e seleccione o restritor no menu que surge no ecrã.
3.3.3.1. Exemplo.
Vamos retomar o exemplo Exemplo 3.3.1.1. ,
e associar um restritor Track To à câmara,
de modo a que esta evolua ao longo da trajectória
apontando constantemente para o cubo, mantendo
o eixo vertical sempre orientado para cima,
isto é, orientado segundo o eixo dos zz do
sistema de eixos global.
Na janela 3D, seleccione a câmara, [Shift]+[RMB],
o objecto, seleccione o cubo, [RMB],
o alvo, e associe um restritor Track To à
câmara, [Ctrl]+[T] > Track To.
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 cubo no enquadramento e sem qualquer torção em torno do eixo dos zz. Seleccione a câmara, pressione [R], e tente fazer uma qualquer rotação. Como vê não obtém qualquer resposta. Um objecto a que esteja associado um restritor Track To não responde a qualquer transformação de rotação imposta directamente na janela 3D. |
Passe a Front Ortho. Seleccione a trajectória,
[RMB], e entre em modo edição, [Tab]. Seleccione
os controladores da direita e arraste-os segundo
Z.
Pressione [Alt]+[A] e observe como a câmara percorre
a trajectória sempre com o cubo no enquadramento.
Compare as condições impostas pelo restritor Track To com as condições impostas pelo restritor Locked Track |
3.3.3.2. Exemplo.
Neste exemplo e no próximo vamos ver como modelar a dinâmica de um piston com base no restritor Track To.
O presente exemplo baseia-se na utilização de Emptys e o exemplo seguinte na utilização de uma Armação.
Abra o Blender, passe a Front Ortho, [Num1] > [Num5], e elimine o cubo, [X].
Insira um cilindro, [Shift]+[A] > Mesh > Cylinder.
Rode-o de 90o segundo Y, [R] > [Y] > 90.
Escale-o 5 vezes segundo X, [S] > [X] > 5.
Entre em modo edição, [Tab], seleccione o vértice central
da base à esquerda, [RMB], e coloque o cursor 3D sobre o
vértice, [Shift]+[S] > Cursor to Selected.
Saia de modo edição, [Tab], e coloque a origem do cilindro sobre o cursor 3D, [T] > Origin > Origin to 3D Cursor.
Novamente em Font Ortho, duplique o cilindro,
[Shift]+[D] > [LMB], e rode a réplica de 180o segundo
Y, [R] > [Y] > 180.
Translade-o para a direita, [G] > [X], e escale-o ligeiramente, [S] > 0.7.
Seleccione o cilindro da esquerda e coloque o
cursor 3D sobre o centro do cilindro, [Shift]+[S] > Cursor to Selected.
Insira um cilindro, [Shift]+[A] > Mesh > Cylinder, e rode-o de 90o em torno do eixo dos xx, [R] > [X] > 90.
Com este último cilindro seleccionado, seleccione o cilindro da esquerda, [Shift]+[RMB], e junte as duas malhas, [Ctrl]+[J].

Seleccione o cilindro da direita e coloque o cursor 3D sobre o centro do cilindro, [Shift]+[S] > Cursor to Selected.
Insira um cilindro, [Shift]+[A] > Mesh > Cylinder, e rode-o de 90o em torno do eixo dos xx, [R] > [X] > 90.
Com este último cilindro seleccionado, seleccione o cilindro da direita, [Shift]+[RMB], e junte as duas malhas, [Ctrl]+[J].
Fica assim definido o corpo do piston, tendo cada uma das malhas a sua origem, respectivamente, no extremo central esquerdo e no extremo central direito, o que é extremamente importante para a correcta definição do restritor Track To, que passamos agora a associar aos objectos.
Na barra da janela 3D, active a visualização
dos transformadores e seleccione o sistema de eixo
local. Seleccione o cilindro da esquerda.
Poder ver que o eixo dos zz aponta para o centro do cilindro da direita e o eixo dos xx está alinhado com o eixo dos zz do sistema global.
Com o cilindro da esquerda seleccionado , o alvo,
seleccione o cilindro da direita, [Shift]+[RMB], o objecto,
e associe-lhe um restritor Track To, [Ctrl]+[T] > Track To.
Pode ver que o cilindro da direita mudou abruptamente a sua orientação. Tal deve-se ao facto da configuração padrão do restritor não ser a apropriada para o presente exemplo.
Na janela de propriedades, active o contexto
Object Constraints.
A rotação sofrida pelo objecto deve-se à sua orientação de acordo com a configuração padrão do restritor Track To, com o eixo dos yy apontar para o alvo, e o eixo dos zz orientado segundo o eixo dos zz global.
No painel do restritor, seleccione To: Z.
Pode ver que o objecto ficou correctamente orientado,
mas o restritor passou a ter o nome a vermelho, o
que significa que está mal parametrizado.
Para corrigir a situação, será necessário especificar
correctamente o parâmetro Up.
No painel do restritor, seleccione Up: X.
Vamos agora associar um restritor Track To
ao cilindro da esquerda.
Seleccione o cilindro da direita, [RMB], o alvo,
seleccione o cilindro da esquerda, [Shift]+[RMB], o
objecto, e associe-lhe um restritor Track To,
[Ctrl]+[T] > Track To.
Com o cilindro da esquerda seleccionado, active o
contexto Object Constraints, e, no painel do restritor,
seleccione To: Z e Up: X.
Seleccione o cilindro da direita e coloque o
cursor 3D sobre o centro do cilindro,
[Shift]+[S] > Cursor to Selected.
Insira um empty, [Shift]+[A] > Empty.
Seleccione o cilindro da direita, [RMB], seguido do empty, [Shift]+[RMB], e estabeleça um relação de parentesco entre os dois, [Ctrl]+[P] > Object.
Seleccione o empty e movimente-o livremente, [G], no espaço 3D. |
Seleccione o cilindro da direita, [RMB], e desloque
ligeiramente segundo Z, [G]. Em seguida, seleccione o empty e rode-o, [R].
Em ambas as situações, observe o comportamento típico de um piston, determinado pelos dois restritores Track To. |
3.3.3.3. Exemplo.
Vamos agora ver como simular o funcionamento de um piston recorrendo a uma armação.
Retome o tutorial anterior dos pontos 1 a 14, ou, do ponto 24, elimine o empty e os restritores associados a cada um dos cilindros.
Vamos começar por criar a armação.
Seleccione o cilindro da esquerda e coloque o cursor 3D sobre o centro do cilindro, [Shift]+[S] > Cursor to Selected.
Insira uma armação, [Shift]+[A] > Armature > Single Bone.
Na janela de propriedades, active o contexto Object Data e, no painel Display, active X-Ray.
Passe a modo edição, [Tab]. Rode o osso sobre
a raiz 90o para a direita e leve a ponta até
ao limite do cilindro da esquerda.
Note que para rodar o osso sobre a raiz, e dado que a ponta se encontra seleccionada, deve pressionar [G]. Para rodar o osso com precisão, isto é, com incrementos de 5o, basta pressionar [Ctrl] quando arrasta o rato.
Saia de modo edição [Tab]. Seleccione o cilindro
da direita e coloque o cursor 3D sobre o centro do
cilindro, [Shift]+[S] > Cursor to Selected. Seleccione
a armação e entre em modo edição [Tab].
Insira um novo osso, [Shift]+[A], rode-o sobre a raiz 90o para a esquerda e leve a ponta até aproximadamente ao limite do cilindro da direita, [G] > [Ctrl].
Vamos agora associar os restritores a cada um dos ossos.
Entre em Pose Mode, [Ctrl]+[Tab].
Seleccione o osso da esquerda, o alvo, seleccione o osso da direita, [Shift]+[RMB], o objecto, e associe-lhe um restritor Track To, [Shift]+[Ctrl]+[C] > Track To.
Pode ver que a cor do osso da direita mudou a cor para turquesa, sinal de que tem um restritor associado.
Note também que o osso ficou alinhado como se
esperava, porque a configuração padrão é adequada
à situação. Todos os ossos têm o seu eixo dos yy
alinhado com o sentido raiz/ponta.
Caso tenha dúvidas sobre o alinhamento do sistema de eixos dos ossos da armação, active Axes no painel Display do contexto Object Data da janela de propriedades.
Recorde que para ver o painel do restritor, deve activar o contexto Bone Constraints, e não o contexto Object Constraints.
Seleccione o osso da direita, o alvo, seleccione
o osso da esquerda, [Shift]+[RMB], o objecto,
e associe-lhe um restritor Track To,
[Shift]+[Ctrl]+[C].
Seleccione um dos ossos, pressione [G] e
arraste o rato, pode ver que o outro osso
mantém o alinhamento, rodando sobre a sua raiz.
Vamos agora associar os ossos à malha.
No painel Display, seleccione Stick para facilitar a visão do modelo.
Passe a Object Mode, [Ctrl]+[Tab]. Seleccione o
cilindro da esquerda, [RMB], e seleccione a armação, [Shift]+[RMB].
Passe a Pose Mode, [Ctrl]+[Tab]. Seleccione o osso da esquerda, e estabeleça uma relação de parentesco entre o cilindro e o osso, [Ctrl]+[P] > Bone.
Verifique que a relação ficou estabelecida. Mova o
osso, [G], e verifique que a o cilindro da esquerda
acompanha o movimento (faça [Ctrl]+[Z] para anular os movimentos).
Pode também verificar a existência da relação de parentesco no contexto Object. Seleccione o cilindro da esquerda, active o contexto Object da janela de propriedades e verifique a relação de parentesco no painel Relations.
Passe a Object Mode, [Ctrl]+[Tab]. Seleccione o
cilindro da direita, [MRB], e seleccione a
armação, [Shift]+[RMB].
Passe a Pose Mode, [Ctrl]+[Tab]. Seleccione o osso da direita, e estabeleça uma relação de parentesco entre o cilindro e o osso, [Ctrl]+[P] > Bone.
Verifique que a relação ficou estabelecida.
Mova cada um dos ossos, [G], e verifique que o piston tem o movimento esperado. |
Seleccione a raiz do osso da direita, [RMB], faça uma extrusão
segundo z, [E] > [Z], e arraste o rato até dar ao novo osso uma
dimensão idêntica à que se mostra na figura.
Seleccione o corpo do novo osso, [RMB], e arraste-o para
baixo, segundo z, recorrendo, por exemplo, aos transformadores.
Seleccione a raiz do osso da direita, [RMB], e coloque
sobre ela o cursor 3D, [Shift]+[S] > Cursor to Selected.
Seleccione em seguida a ponta do novo osso, [RMB], e
coloque-a sobre a raiz do osso da direita, [Shift]+[S] >
Selection to Cursor.
Seleccione o osso da direita, [RMB], e, no painel
Relations do contexto Bone, torne-o filho ligado do novo osso.
Passe a modo Pose, [Ctrl]+[Tab], seleccione o novo osso, [RMB], rode-o, [R], e verifique que o piston tem o movimento esperado. (note que o desalinhamento do eixo dos ossos, visível no vídeo, resulta de um atraso na resposta dos objectos na janela 3D, e não tem correspondência na renderização, onde, como esperado, o eixo dos dois ossos sem mantêm alinhado.) |