Fluxo de trabalho & Exemplos#
Drivers Simples podem ser configurados pelo pop-over que aparece ao adicionar um novo Driver. Ao adicionar múltiplos Drivers ou para configurações mais avançadas, é útil ter aberto o Drivers Editor.
Transform Driver#
Controla uma propriedade com uma transformação de objeto. Nesse exemplo, a rotação Y do Objeto 2 será dirigida pela posição X do Objeto 1. Partindo de uma configuração simples com dois objetos:
Adicione um Driver à propriedade Rotação Y do segundo objeto via o menu de contexto ou com Ctrl-D.
Abra o Drivers Editor e selecione a propriedade Y Euler Rotation na região de canais.
Abra o menu lateral e selecione a aba Drivers.
Configure o driver para ser o Averaged Value de um Transform Channel do primeiro objeto.
Experimente mover o primeiro objeto e perceba como ele afeta a rotação Y do segundo objeto.
Expressão com Script - Orbitar um Ponto#
Orbite a posição de um objeto ao redor de um ponto com uma Expressão com script personalizada. A posição do objeto irá mudar ao tocar a timeline. Usando trigonometria, movimento circular pode ser definido em 2D usando funções seno e cosseno. (Veja Unit Circle.) Nesse exemplo, o quadro atual é usado como a variável que induz o movimento. frame` é uma Expressão Simples que corresponde a bpy.context.scene.frame_current
.
Adicione um driver a propriedade X Location.
Defina o Driver Type para Scripted Expression.
Adicione a expressão
0 + (sin(frame / 8) * 4)
, onde:frame/8
: é o quadro atual da animação, divido por 8 para desacelerar a órbita.(sin( )*4)
: multiplica o resultado desin(frame/8)
por 4 para um círculo maior.0 +
: é usado para controlar o deslocamento para o ponto central da órbita.
Adicione um driver para a propriedade Y Location com a expressão
0 + (cos(frame / 8) * 4)
.Toque a timeline para ver o efeito. Experimente com variáveis para controlar o tamanho e centro da órbita.
Função Personalizada - Valor ao Quadrado#
Crie uma função personalizada para obter o quadrado de um valor (i.e valor2). Adicionar a função ao Driver Namespace permite utilizá-la a partir de expressões de driver. O Driver Namespace tem uma lista de funções embutidas para uso em expressões de driver, bem como constantes como π e e. Eles podem ser inspecionados pelo Console Python:
>>> bpy.app.driver_namespace[' <tab>
acos']
acosh']
asin']
asinh']
atan']
...
Para adicionar uma nova função ao Driver Namespace, a própria função precisa ser implementada e então adicionada ao bpy.app.driver_namespace
.
Adicione o seguinte ao Text Editor dentro do Blender e pressione Run Script.
import bpy def square(val): """Returns the square of the given value""" return val * val # Add function to driver_namespace. bpy.app.driver_namespace['square'] = square
Adicione um driver com uma Scripted Expression como
square(frame)
.Observe o efeito ao tocar a timeline.
Existem mais exemplos de funções personalizadas disponíveis no Text Editor do Blender Simple Expressions não podem acessar funções personalizadas, usá-las só faz sentido para cálculos complexos.
. ComoAviso
Trying to replace built-in entries of the driver namespace may result in undefined behavior.
View Layer Attribute Lookup#
The material Attribute Node in the View Layer mode automatically searches for the attribute property in multiple locations. This, for example, can allow setting a certain value of the custom attribute at the Scene or World level, and then overriding it differently for one View Layer.
Context Properties of drivers don’t implement this behavior, so if necessary it has to be manually emulated via fallback values and a conditional expression (conditions are Simple Expressions).
For an attribute named attr
, the node tries the following six RNA path lookups in order:
["attr"]
in the active View Layer (custom property).attr
in the active View Layer (built-in property).["attr"]
in the active Scene.attr
in the active Scene.world["attr"]
in the active Scene.world.attr
in the active Scene.
Depending on the specific property it may be sufficient to check only a subset of these locations. For example, the image on the right shows how to access an attribute that is known to definitely be a custom property with a color value.
Driver variables accessing locations that are not final in the lookup chain should use fallback values that are invalid for the attribute (e.g. negative color values), which can then be checked by the conditional expression. The final variable should fallback to a valid default value to be used when the property is not set at all.
Shape Key Drivers#
Deformação de Malha Aprimorada#
Conserte problemas de intersecção que acontecem ao usar armaduras e weight painting, especialmente em articulações. Shape keys também podem ser usadas para ajustar e refinar um rig, por exemplo para sugerir formações de músculos. Nesse exemplo, uma shape key é usada para melhorar a deformação no cotovelo de um braço rudimentar.
- Configuração
Adicione uma malha (nesse exemplo, um cilindro com loop cuts.
Adicione uma armadura com uma cadeia de bones.
Associe a malha à armadura usando weight painting.
(Nota: para fazer o parent da malha à armadura: selecione a malha primeiro, depois a armadura e use Ctrl-P para criar o parentesco com pesos automáticos.)
Experimente posar a armadura e observe a deformação na articulação. Para consertar problemas de interseção ou ângulos que parecem insatisfatórios, você pode associar um Shape Key com uma pose.
- Shape Key
Posicine a armadura de forma que os problemas sejam visíveis. Certifique-se de cobrir as poses extremas que você deseja suportar para o rig.
Com a malha selecionada, adicione um novo Shape Key além da chave Basis.
Para criar a shape key sobre a deformação da armadura, habilite tanto Edit Mode Display e Cage Editing no modificador Armature.
Entre no Edit Mode e selecione a nova shape key no painel de propriedades. Ajuste os vértices como desejado. Selecione a chave Basis para alternar entre a malha original e suas edições. (Nota: cuide para aplicar edições apenas à sua shape e não à malha original ou outras chaves existentes.
Quando estiver satisfeito em como a deformação parece para a pose problemática, você precisará configurar um driver para ativar a shape suavemente ao entrar nessa posição.
- Driver
Adicione um driver ao Value da shape key que você criou.
Abra o Drovers Editor e selecione o driver.
- Método 1 – Mapeamento direto para um valor de rotação do osso
Uma maneira simples de configurar o driver é com uma correspondência direta do valor do canal de rotação do osso para o Value de ativação da shape key. Esse método tem a desvantagem de depender de um único canal de rotação de osso que pode ser insuficiente para expressar precisamente a condição sob a qual a shape key deve ser ativada.
Na aba Drivers, selecione Averaged Value da rotação do osso que você está posando.
Entenda o eixo de rotação que você está interessado habilitando a exibição dos eixos na armadura ou observando os valores de transformação do osso nas Propriedades.
Selecione o canal de rotação e defina-o como local, ou seja, o valor da rotação do osso relativa ao seu osso pai.
Defina pontos manualmente na curva do driver selecionando um controlador e arrastando-o ou inserindo valores na aba F-Curve. O eixo Y representa o Value da shape key, que deve ir de 0.0 a 1.0. O eixo X é geralmente o quadro, mas para esse driver representa o valor da rotação em radianos. Você pode ter mais de dois pontos na curva e ajustar as transições com controladores na vista da curva (G para mover).
Para verificar se o driver se comporta corretamente, desmarque a opção para mostrar os drivers de objetos selecionados. Dessa forma, você pode posar a armadura e manter um olho no driver.
- Método 2 – Diferença rotacional para um osso alvo
Esse método requer um osso alvo ou corretivo adicinoal, mas ele expressa melhor a condição espacial no espaço 3D do osso que está causando o problema.
No Edit Mode da armadura, adicione um novo osso extrudado do Bone 1, na posição que o Bone 2 deve ter a shape key ativa. Esse tipo de osso geralmente segue a convenção de nomenclatura como «TAR-» (target - alvo) ou («COR-» (corretivo).
Na aba Drivers, selecione Averaged Value da diferença rotacional entre o osso que você está rotacionando e o osso alvo. Uma diferença rotacional é o ângulo mínimo entre dois objetos no World Space. Portanto, é importante que os ossos tenham a mesma raiz, de modo que a única coisa que afeta o ângulo entre os ossos é a rotação de um deles. Quando o osso de deformação (Bone 2) alcança a rotação alvo (TAR-Bone 2) a diferença rotacional será 0º.
Ajuste manualmente os controladores da curva do driver de modo que o Value da shape key (eixo Y) é 1.0 quando a diferença rotacional (eixo X) é 0º. O Value deve ser 0.0 quando o braço é estendido, ponto em que a diferença rotacional deve ser cerca de 90º ou mais (em radianos).
Veja os passos nos Método 1 para como ajustar os controladores da curva e confirmar que a funcionalidade está funcionando. Posicione a armadura para verificar se os intervalos estão corretos.
Encadeamento Relativo de Shape Keys#
Ative diferente shape keys sucessivamente. Nesse exemplo, mover um único osso irá ativar primeiro Key 1 e então *Key 2. Veja também shape keys relativas misturadas aditivamente.
- Shape Keys
Adicione duas shape keys a uma malha, além da Basis.
- Drivers
Adicione uma armadura com um único osso para controlar as shape keys. O objetivo é ativar as chaves em sucessão conforme esse osso sobe.
Como mostrado na figura acima, quando o osso está na metade do caminho para cima, tanto Key 1 e Key 2 tem uma influência. É uma questão de preferência se a Key 1 deve estar em seu Value máximo antes que a Key 2 comece a tornar-se ativa, ou o quanto elas devem se sobrepor. Este exemplo mostra uma mistura perfeita.
Para uma mistura perfeita onde há sobreposição, Key 1 deve tever um Value de 0.0 quando o osso estiver na parte inferior e aumentar linearmente para 1.0 até que o osso ultrapasse a altura do ponto médio. Key 2 deve ter um valor de 0.0 antes da altura do ponto médio e depois aumentar na mesma taxa que a Key 1 até atingir o Value 1.0 quando o osso estiver na altura máxima.
Adicione um driver ao Value da Key 1 e Key 2. Na aba Drivers, configure ambos driver para Averaged Value de uma variável com a Z location do bone.
Determine a amplitude do movimento do osso no eixo World Z movendo-o para cima de modo que fique alinhado com o topo da malha quando ambas chaves estão ativas. Aqui vamos usar [0.0, 2.5]
Configure as funções do driver para que o Value das shape keys (eixo Y) seja o desejado para a altura do osso (eixo X).
As funções do driver devem ser lineares, portanto, podem ser definidas analiticamente com uma função do tipo \(y = a + bx\), onde \(a\) é um deslocamento em \(y\) e \(b\) é a inclinação.
Na aba Modifiers, adicione um Generator do tipo Extended Polynomial para ambos drivers.
Brinque com os valores de \(a\) e \(b\) para que as curvas vão de [0.0, 1.0] no eixo Y e de [0.0, 2.5] no eixo X. As curvas devem se sobrepor na área central do eixo X e devem ter a mesma inclinação (\(b\)).
Valores possíveis são Key 1: \(y = 0.0 + 0.6x\) e Key 2: \(y = -0.5 + 0.6x\).
Note que as funções ficam fora do intervalos [0.0, 1.0] para o Value das shape keys, mas isso não tem efeito por que o Value é restrito em um Intervalo no painel Shape Keys.