//
you're reading...
Animação, Artigos, Autodesk 3ds MAX, Autodesk Maya, Autodesk Softimage/XSI, Tutorial

Gimbal Lock: que diabo é isso?

Depois de passar por alguns problemas causados pelo “misterioso” Gimbal Lock, resolvi postar aqui sobre o assunto: o que é, por que ocorre, como evitar e como resolver as dores de cabeça causadas por esse efeito.

Gimbal é o nome inglês de um aparelho chamado Giroscópio, que consiste em um rotor e mais 3 aros concêntricos. E Gimbal Lock é quando dois  ou os três aros ficam na mesma posição.  Logo, esse problema ocorre somente em rotações, trazendo problemas em animações. Para entender melhor o Gimbal Lock, é preciso entender antes algumas coisas a respeito de rotações. Aproveito para destacar que o Gimbal Lock independe do software 3D. Isso acontece com todos que usem o método Euler para rotações. Para exemplificar o assunto, usarei o Autodesk Maya.

Tipos de orientação

Basicamente, existem 3 tipos de orientação dos eixos de um objeto:

World ou Global: rotaciona o objeto através dos eixos do espaço 3D (a rotação dos eixos não se alteram).

Local: rotaciona o objeto através dos eixos do próprio objeto (a rotação dos eixos seguem a orientação do objeto).

Gimbal: rotaciona o objeto através dos valores individuais dos eixos X, Y e Z.

Euler vs Quaternion

Normalmente, os softwares 3D usam dois tipos de equações matemáticas para rotação: Euler e Quaternion.

Euler: método de rotação que usa três valores angulares (X, Y e Z) mais uma ordem de rotação para especificar a orientação tridimensional. A manipulação é feita diretamente nos arcos de rotação do objeto levando em conta a hierarquia existente entre os eixos de rotação.

Quaternion: método de rotação que usa um quaternion para representar uma orientação em três dimensões.  Um quaternion é uma extensão de quatro dimensões para números complexos (pura matemática que até agora não explicou nada). Vamos lá: o software usa curvas XYZ e ainda computa uma quarta curva (W) para determinar a rotação de um objeto. Exemplo: ao mover o target de uma câmera, a câmera rotaciona, pois ela sempre aponta para o target. Esse mesmo efeito é conseguido através do uso de constraints “Look At” (Autodesk 3ds MAX), “Aim” (Autodesk Maya) e “Direction” (Autodesk Softimage). Ou seja, para calcular as curvas X, Y e Z de rotação do objeto A, usa-se a posição (olha aí a quarta curva W) de um objeto B. Esse objeto B se move e o objeto A, que está sempre apontando para ele, rotaciona.

Vantagens
Euler Quaternion
  • Cria facilmente rotações simples ao redor de um único eixo.
  • Suporta rotação maior que 360°.
  • Trata as tangentes de forma independentemente.
  • Interpola suavemente a orientação de um eixo para outro.
  • Não sofre Gimbal Lock.
Desvantagens
Euler Quaternion
  • Pode gerar Gimbal Lock.
  • Cria rotações difíceis de prever pois a interpolação é calculada separadamente para cada eixo.
  • Não suporta rotação maior que 360°.
  • As curvas de rotação são difíceis de visualizar.
  • Não suporta os manipuladores das tangentes.
  • É difícil de ver as tangentes no gráfico de animação e elas não são tratadas de forma independente.

Como visto acima, o Gimbal Lock, assim como a hierarquia entre os eixos de rotação, só ocorrem no método Euler.

Hierarquias entre os eixos de rotação (Método Euler)

Entre os eixos de rotação existe uma hierarquia que não pode ser ignorada. E essa relação hierárquica pode ser alterada para se adequar melhor à animação daquele determinado objeto. Isso de chama Ordem de Rotação (Rotation Order). No Maya, por exemplo, a ordem padrão de rotação é  XYZ, o que significa que o eixo X é filho do Y que é filho do Z. Assim, ao rotacionar o eixo Z, todos os eixos rotacionam juntos. Mas ao rotacionar o eixo Y, somente Y e X rotacionam. E ao rotacionar o X, somente este rotaciona. Quando se rotaciona um objeto usando a orientação Local, tem-se a ilusão de que essa ordem hierárquica muda a cada eixo rotacionando, o que não acontece na realidade.

O Gimbal Lock

Exatamente por causa da hierarquia na rotação usando o sistema Euler é que ocorre o Gimbal Lock. Usando a ordem XYZ, quando somente o eixo Z for rotacionado, nunca haverá Gimbal Lock, pois todos os eixos giram junto com ele. Ao rotacionar o eixo Y em 90º, o eixo X ficará na mesma posição do eixo Z. Isso é o Gimbal Lock! Nessa situação, não importa se você rotacionar o X ou Z, pois o movimento será o mesmo.

Imagina a confusão que isso causa na manipulação do objeto e nas curvas do gráfico de animação. Com o objeto em orientação Local, você vai rotacionar o eixo X  achando que a única alteração será feita na curva X, mas não! Pode ocorrer em duas ou nas três curvas ao mesmo tempo…

Na prática, o que o Gimbal Lock causa na animação são rotações inesperadas, bem estranhas. Algumas poderão ser mais sutis, mas na minha experiência, essas rotações erradas são bem visíveis.

Como evitar o Gimbal Lock?

  1. Sempre que puder, opte pelo sistema Quaternion.
  2. Em personagens ou qualquer outro objeto que possua um esqueleto (sistema de Bones), as partes que forem animadas através de FK (Foward Kinematics, ou Cinemática Direta) correrão o risco de gerarem o Gimbal Lock, se a rotação ocorrer em mais de um eixo. Porém, se for IK (Inverse Kinematics, ou Cinemática Inversa), o Gimbal Lock nunca acontecerá, pois a rotação dos objetos dentro da hierarquia do IK serão rotacionados através da mudança de posição do IK Handle.
  3. No gráfico, cuidado com mudanças de valores muito drásticos de uma key para outra. Veja se não há valores incompatíveis com o movimento. Por exemplo, uma mão que dobra 45º e no gráfico está dando uma volta completa + 45º (405º). Em termos de pose, isso faz parecer que a posição está correta, porém, não está. Isso ocorre principalmente se você estiver montando as poses “blocando” a animação, pois, sem interpolação, fica parecendo que está tudo ok.
  4. Altere a ordem de rotação do objeto para minimizar os riscos de Gimbal Lock. Por exemplo, os controladores dos pés e mãos de um personagem, rotacionarão mais em eixos diferentes. Se o eixo mais usado no pé for o X, use uma ordem em que o X seja o pai de todos os eixos. Na mão, pode ser o Z. Mudando a ordem de rotação pode minimizar bastante o problema. Pense nisso.

Como corrigir o Gimbal Lock?

Dificilmente, num personagem, ficaremos livres do sistema Euler. Mesmo que braços e pernas estejam em IK, a maior parte dos rigs mantém os pés e mãos em FK. Isso facilita as coisas, mas mantém o tormento do Gimbal Lock.

Abaixo seguem algumas explicações e um vídeo sem áudio que eu fiz para ilustrar o procedimento:

  1. Para saber qual ou quais curvas estão dando problema, teste uma curva por vez. Para isso, desabilite temporariamente as animações de duas delas. Por exemplo, se for testar a curva Y, desabilite as curvas X e Z. Assim, vai ficar fácil de saber qual curva está dando problema. No Maya, para desabilitar temporiariamente a animação de um atributo, basta clicar com o botão direito no nome do atributo no Channel Box e escolher a opção Mute Selected. Para habilitar, faça o mesmo e escolha a opção Unmute Selected. Faça esse teste com as curvas do gráfico em Linear.
  2. Ao encontrar a key onde está ocorrendo a rotação errada, altere o valor da key, em tempo real, até chegar na pose correta. Continue verificando as outras.
  3. Às vezes, o Gimbal Lock acontece em mais curvas, ocasionando o problema na mesma key. E normalmente da pra ver pelo gráfico, por causa dos valores das curvas. A forma das curvas ajuda muito a identificar essas anomalias.

Quaisquer dúvidas, mande um comentário que eu retorno.

Fontes

Discussão

7 comentários sobre “Gimbal Lock: que diabo é isso?

  1. parabens pelo material.
    muito interessante mesmo, essa semana tive problemas com isso e consegui resolver com quaternion

    Publicado por conradost | 29/03/2011, 3:12 pm
  2. Muito esclarecedor, parabéns!!!!

    Publicado por Romeu Rezende | 04/11/2011, 4:42 pm
  3. Parabéns. Ótima a explicação. me ajudou muito… Abraços

    Publicado por Queila | 21/11/2011, 12:14 pm
  4. Com os termos de hereditariedade ficou bem simples, muito bem útil.
    Lendo então da direita para esquerda.

    XYZ

    Z
    ˪Y
    ˪X

    Entendi dessa forma.

    Publicado por Richelly Italo (@RichellyItalo) | 17/07/2013, 7:46 pm

Deixar mensagem para Leandro Oliveira Cancelar resposta

Arquivados