Fluxo de trabalho e exemplos

Apresentamos aqui alguns exemplos de controladores e fluxo de trabalho.

Fluxo de trabalho

Controlador de transformações

Este exemplo mostra a você como definir um controlador de transformações. Primeiro certifique-se de que você está dentro da visão frontal e no modo de visualização ortográfico. Caso não, use os atalhos Tecl. Num. 5, Tecl. Num. 1.

  1. No Modo de objeto, selecione e então duplique o cubo padrão usando Shift-D. Mova o «Cubo.001» para uma nova localização.
  2. Com o «Cubo.001» selecionado, adicione um único controlador para a propriedade de Rotação Y.
  3. Abra o Editor gráfico, e defina o modo para Controladores.
  4. Mostrar somente os selecionados está desativado para os controladores de maneira útil, e marcado em verde na imagem de exemplo.
  5. Na região de canais, selecione a propriedade de Rotação Y do Euler.
  6. Pressione N para abrir a região de propriedades, e role os painéis até encontrar os painéis de controladores.
  7. Altera o Tipo para Valor médio, isto retornará o valor médio das variáveis do controlador.
  8. Modifica as definições das variáveis do controlador:
    • Tipo – Canal de transformação
    • Objeto ou osso – Cubo
    • Tipo de transformação – Localização em X
    • Espaço de transformação – Espaço do ambiente
../../_images/animation_drivers_workflow-examples_transform-driver-1.png
../../_images/animation_drivers_workflow-examples_transform-driver-2.png

Quando finalizado, o «Cubo.001» deverá ser rotacionado no eixo Y quando o objeto «Cubo» for movido da esquerda para a direita.

Exemplos

Expressões para controladores

Aqui apresentamos alguns exemplos usando expressões em formato de scripts para definir o valor do controlador.

../../_images/animation_drivers_workflow-examples_object-rotation.png

Exemplo de Rotação do objeto.

Orbitando um ponto

Aqui, dois controladores foram adicionados ao «Cubo», Localização em X e Localização em Y.

As expressões em formato de script estão seno usadas para definir a localização do objeto.

Expressão da localização em X
0 + (sin(frame / 8) * 4)
(frame / 8) : é o quadro atual da animação, dividido por 8 para reduzir a velocidade da órbita. (sin( )*4) : Isto retorna o seno do valor presente no ( frame / 8), e então o multiplica por 4 para formar um grande círculo. 0 + : é usado para controlar o deslocamento da localização em X da órbita.
Expressão da localização em Y
0 + (cos(frame / 8) * 4)
(frame / 8) : é o quadro atual da animação, dividido por 8 para reduzir a velocidade da órbita. (cos( ) * 4) : Isto retorna o cosseno do valor presente no ( frame / 8), e então o multiplica por 4 para formar um grande círculo. 0 + : é usado para controlar o deslocamento da localização em Y da órbita.

O valor de frame é obtido a partir da variável de mesmo nome definida a partir de bpy.context.scene.frame_current.

Espaço de nomes dos controladores

Existe uma lista embutida das funções dos controladores e suas propriedades. Estas podem ser mostradas através do console interativo Python:

>>> bpy.app.driver_namespace['
                              __builtins__']
                              __doc__']
                              __loader__']
                              __name__']
                              __package__']
                              acos']
                              acosh']
                              asin']
                              asinh']
                              atan']
                              atan2']
                              atanh']
                              bpy']
                              ceil']
                              copysign']
                              cos']
                              cosh']
                              ..

Este script irá adicionar uma função ao espaço de nomes dos controladores, o qual poderá então ser usado dentro da expressão formatada como função_do_controlador(quadro) ou («driver_func(frame)»)

import bpy

def driver_func(val):
    return val * val    # return val squared

# add function to driver_namespace
bpy.app.driver_namespace['driver_func'] = driver_func

Controlador de chaves de formato

Este exemplo é um controlador de chaves de formato. O controlador foi adicionado ao Valor da chave de formato.

../../_images/animation_drivers_workflow-examples_shape-key.png

Exemplo de Controlador de Chaves de formato.

Este exemplo usa a rotação do osso da armação «b» para controlar o valor de uma chave de formato. A rotação do osso foi definida para o arranjo Euler XYZ.

A curva-f do controlador está mapeada desta maneira:

  • Rotação do osso em Z 0.0 (0.0): Valor da chave de formato: 0.0
  • Rotação do osso em Z -2.09 (-120.0): Valor da chave de formato: 1.0

Este tipo de controlador pode também ser definido com a variável que contém os valores de diferença rotacional variável.

Veja as páginas sobre Chaves de formato para mais informações.

Controladores e múltiplas chaves de formato relativas

As seguintes imagens de tela ilustram a combinação de chaves de formato, ossos, e controladores para criar múltiplas chaves de formato relativas encadeadas que compartilham uma única raiz. Mesmo que faça falta a conveniência do tempo de avaliação único de uma chave de formato absoluta, esse arranjo permite que você tenha relacionamentos mais complexos entre as duas chaves de formato.

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-base.png

Chave de formato base.

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-1.png

Chave de formato Key1.

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-2a.png

Chave de formato Key2A.

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-shape-2b.png

Chave de formato Key2B.

A chave de formato de base possui a pilha totalmente retraída. A Chave_1 possui a base totalmente estendida. A chave chamada de Chave_2A possui a pilha esquerda totalmente estendida. A chave chamada de Chave_2B possui a pilha direita totalmente estendida. A chave chamada de Chave_2A e a Chave_2B são ambas relativas a Chave_1 (como você pode ver no campo na lateral inferior direita do painel de chaves de formato).

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-key1.png

A Chave_1 deve manipular valores conflitivos a partir de dois ossos.

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-key2a.png

A Chave_2A possui diferentes geradores de coeficientes, portanto é ativada em uma amplitude diferente da posição do osso.

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-key2b.png

A Chave_2B é a mesma que a Chave_2A, mas é controlada pelo segundo osso.

O valor da Chave_1 está atrelado a posição dos ossos através de um controlador com duas variáveis. Cada variável usa a coordenada Z do ambiente de um osso e usa o valor máximo pra determinar o quanto a base deverá ser estendida. O gerador polinomial é encaixado (posicionado) de maneira que o topo da pilha dominante deve estar em linha com o osso para esta pilha.

O valor da Chave_2A é atrelado a posição do «Osso.L». Seus parâmetros de geração são encaixados (posicionados) de maneira que quando a Chave_1 alcança o valor de 1, o valor da Chave_2A inicia seu incremento a partir do zero. desta maneira, o topo da pilha esquerda irá se mover com o Osso.L (na maior parte dos casos).

O valor da Chave_2B é atrelado a posição do «Osso.R». Seus parâmetros de geração são similares aos da Chave_2A de maneira que o topo da pilha direita irá se mover com o «Osso.R» (na maior parte dos casos).

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-retracted.png

Quando ambos os ossos estão com valores baixos a Chave_2B e a Chave_2A são desativadas e a Chave_1 está sob uma influência de baixo valor.

../../_images/animation_drivers_workflow-examples_for-multiple-shape-keys-extended.png

Extendido.

Devido ao fato de ser bastante fácil para o Osso.L e para o Osso.R estarem em posições que indiquem valores conflitantes para a Chave_1, haverá ocasiões em que os ossos não se alinharão com os topos de suas pilhas respectivas. Caso o controlador para a Chave_1 utilizasse a «Média» ou «Valor mínimo» ao invés do valor «Máximo» para determinar o valor da chave de formato, então os «conflitos» entre o Osso.L e o Osso.R deverão em tese ser resolvidos de maneira diferente. Você deverá escolher de acordo com as necessidades de sua animação.