Animando um personagem recortado
Receitas para um personagem construído a partir de uma armação de partes: um corpo, uma cabeça, braços em duas peças e sobreposições faciais (formatos de boca e uma piscada) desenhadas na própria tela da cabeça. Elas se encaixam no loop do montagent na etapa de construção; carregue o montagent primeiro, se ainda não o fez. Para um curta onde um personagem fala uma fala, abra a estrutura de curta com personagem antes de planejar.
O que a armação deve fornecer
Leia a descrição da armação antes de qualquer outra coisa. Você precisa, para cada parte: sua imagem, seu tamanho, seu pivô (a articulação em torno da qual gira, como um ponto no desenho original), seu parente e a ordem em que as partes desenham, de trás para frente. Você também precisa de uma tabela dos identificadores de visema da voz para os formatos de boca. A imagem de cada parte deve ser preenchida para que seu pivô seja o centro exato de sua tela. As sobreposições faciais compartilham a tela e o pivô da cabeça.
Se a brief fornecer apenas um único desenho, sem partes ou pivôs, você não pode recortar uma armação às cegas. Avise o usuário e peça uma armação pré-recortada.
Assar a armação
O Montagent não tem herança parental, e um elemento não pode mudar sua imagem. Então um personagem é assado: o script integrado calcula a posição e rotação na tela de cada parte a partir de seus parentes em cada frame desenhado, e escreve cada formato de boca e piscada como seu próprio elemento, exibido por seu próprio intervalo com a transformação da cabeça. Não escreva isso manualmente.
python3 scripts/bake_rig.py <projeto> <armacao> <especificacao> imprime o projeto com uma trilha por parte adicionada. Execute com --help para a especificação: onde o personagem fica, poses nomeadas, os movimentos entre elas, balanços, pulos, a voz e seu arquivo de visemas, e as piscadas. Execute novamente após cada alteração na especificação. Ele substitui apenas as trilhas que escreveu. Mantenha a especificação junto ao projeto: ela é a verdadeira fonte do personagem.
Leia seu relatório. Ele lista cada intervalo de boca que mesclou, a maior lacuna entre qualquer filho e seu parente em cada frame desenhado, e os instantes a observar: a chegada de cada movimento e os ângulos extremos de cada articulação. As posições são em pixels inteiros, então uma lacuna de até cerca de 1,5 px é arredondamento, oculta pelas articulações redondas. Uma lacuna maior significa que os pivôs da armação estão errados.
O validate relata R-EASE-INERT em cada pose que o personagem mantém, e N-TRACK-GAP nas trilhas de boca e piscada entre os intervalos. Ambos são esperados (veja o guia de descobertas).
O resultado assado se parece com isto: cada parte é centralizada em seu pivô, com quadros-chave apenas onde se move, e cada elemento de boca ou piscada copia a transformação da cabeça ao longo de seu intervalo.
{
"frame": {"width": 640, "height": 360}, "fps": 30, "background": "#2E3440", "duration": 2000, "output": "out/baked.mp4",
"tracks": [
{"name": "set", "layer": 0, "elements": [
{"id": "set", "type": "image", "start": 0, "end": 2000, "source": "media/still.png", "x": 0, "y": 0, "origin": "top-left", "width": 640, "height": 360, "fit": "literal"}
]},
{"name": "puppet-torso", "layer": 10, "elements": [
{"id": "puppet-torso", "type": "image", "start": 0, "end": 2000, "source": "rig/parts/torso.png", "x": 320, "y": 330, "origin": "center", "fit": "literal", "width": 80, "height": 280}
]},
{"name": "puppet-head", "layer": 12, "elements": [
{"id": "puppet-head", "type": "image", "start": 0, "end": 2000, "source": "rig/parts/head.png", "x": 320, "y": 190, "origin": "center", "fit": "literal", "width": 90, "height": 160, "rotation": [{"t": 0, "v": 0}, {"t": 500, "v": 6.0, "ease": "linear"}, {"t": 1000, "v": 0.0, "ease": "linear"}]}
]},
{"name": "puppet-mouth", "layer": 13, "elements": [
{"id": "puppet-mouth-0", "type": "image", "start": 400, "end": 700, "source": "rig/parts/mouth_open.png", "x": 320, "y": 190, "origin": "center", "fit": "literal", "width": 24, "height": 60, "rotation": [{"t": 400, "v": 4.8}, {"t": 500, "v": 6.0, "ease": "linear"}, {"t": 666, "v": 4.0, "ease": "linear"}]}
]}
]
}
Receitas
Cada receita fornece intervalos iniciais, não respostas. Cada uma termina em uma etapa de olhar: carregue montagent-craft, então olhe onde a etapa diz antes de prosseguir.
Os ângulos são em graus a partir da pose de descanso desenhada, cada um relativo ao seu parente, e giram no sentido horário na tela. Portanto, um braço no lado direito do espectador sobe com ângulos negativos, e um no lado esquerdo sobe com ângulos positivos.
Colocá-lo no cenário
- Fundo: uma imagem de cenário em tela cheia com
origintop-left, em 0, 0, do tamanho do quadro, na camada mais baixa. Defina aoriginexplicitamente. - Pés no chão: a raiz da armação (o corpo, pivotando nos pés) vai onde o chão encontra a linha de sombra da parede, ou um pouco à frente dela. Em um cenário de 1080 de altura, a borda superior do chão costuma estar 80–85 % do caminho para baixo, então coloque os pés 5–10 % abaixo disso.
- Tamanho: o personagem 55–75 % da altura do quadro, definido pela escala da especificação (px do quadro por px do desenho). Meça o personagem visível, não o desenho preenchido: a altura do desenho vezes a escala superestima.
- Lugar: descentralizado para o lado oposto ao seu adereço ou cartão, a um terço do caminho, a menos que esteja sozinho.
- Olhe:
frameem um momento de descanso, e verifique se os pés estão no chão, não flutuando acima ou afundados nele, e que a cabeça está livre do topo do quadro por pelo menos 5 %.
Entrada: pular
- Pulos: 2–3, cada um 300–450 ms, ficando mais baixos: o primeiro 8–12 % da altura do personagem, o último 4–6 %. O movimento horizontal cobre o mesmo intervalo em
ease-out, então o último pulo pousa suavemente. - Pose: braços para baixo enquanto pula. Pouse em um quadro desenhado e segure por 150–300 ms antes do primeiro gesto.
- Tempo: termine antes da voz começar, com pelo menos 200 ms de sobra.
- Olhe:
frame --from --to --keyframessobre a entrada. Verifique se os pés tocam o chão em cada quadro de pouso, e nenhuma parte se arrasta ou pula à frente do corpo.
Gestos
Um gesto é uma pose nomeada, e movimentos para dentro e para fora dela. Dê a cada movimento um tempo de preparação (o in da especificação) para que a pose segure até partir.
- Braços para baixo: de uma pose de descanso com os braços estendidos, gire cada braço superior 40–55° em direção ao corpo, e o antebraço 5–15° além.
- Acenar: o braço superior levantado 40–50° do descanso, para o lado, e o antebraço 25–35° mais para cima. Balance o antebraço a partir do cotovelo por 15–20° cada lado, com um período de 350–450 ms, por pelo menos 2 balanços completos (800 ms ou mais). Levante mais alto e a mão vai atrás da cabeça no extremo interno do balanço: a cabeça desenha sobre os braços.
- Apontar para algo: o braço superior próximo da horizontal em direção ao alvo (10–25° para cima do descanso para um braço segurado para fora e para baixo), e o antebraço dentro de 20° do reto, para que a mão aponte para a borda próxima do alvo. Chegue 1–3 quadros antes da palavra que o nomeia.
- Comemorar: ambos os braços superiores para cima 40–50°, e os antebraços mais 20–30° para cima. Dobre-os mais e as mãos se escondem atrás da cabeça no pico do exagero.
- Movimentos: para dentro em 250–400 ms. Chegue na curva bezier de exagero
[0.34, 1.56, 0.64, 1], e volte ao descanso emease-in-out. Para continuidade, adicione um segundo movimento que nomeia apenas o antebraço, 2–4 quadros após o do braço superior. - Nunca congelado: a cabeça inclina 2–5° em palavras acentuadas, como um balanço curto ou um movimento de ida e volta em 250–400 ms. Um personagem que segura uma pose por mais de 1,5 s sem nada se movendo parece uma imagem parada.
- Olhe: para cada gesto,
frame --atos instantes que o relatório de assamento lista para os extremos daquela articulação. Verifique se a mão está livre da cabeça e da borda do quadro, e se a pose é lida como o gesto sem o som. Depoisframe --cropno ombro e no cotovelo na pose mais levantada, em escala real, e verifique se há uma lacuna ou uma parte solta.
Sincronia labial a partir de visemas
A assadura escreve a boca a partir do arquivo de visemas da voz. Cada identificador de visema mapeia para uma boca através da tabela da armação, e o silêncio é o bico ou lábios em repouso, sem sobreposição. Nomeie o elemento de voz e o arquivo de visemas na especificação. A boca então segue o início e o intervalo de origem desse elemento, então mover a voz e assar novamente mantém a sincronia.
- Forma mais curta: 2 quadros. A assadura mescla uma mais curta na forma anterior e relata cada mescla. Uma dúzia de mesclas em uma fala de 6 s é normal.
- Avanço: 0 ms. Se a boca parecer atrasada ao assistir a renderização, avance em um quadro (33 ms a 30 fps), nunca mais.
- Tempos: sonde o arquivo de voz. Quando sua duração discordar da duração declarada no arquivo de visemas, confie na sonda.
- Olhe:
query --atno meio de três palavras faladas e verifique se um elemento de boca está ativo em cada uma. Depoisquery --atno meio da pausa mais longa e após o término da fala, e verifique se nenhum está ativo.
Piscadas
- Duração: 3 quadros (100 ms a 30 fps), no máximo 4.
- Ritmo: a cada 2–4 s, irregular, nunca em uma batida. Coloque uma logo após um grande movimento pousar, e uma em uma pausa na fala. Pelo menos 2 em cada 8 s.
- Evite: uma piscada no mesmo quadro da chegada de um gesto, o que esconde a chegada.
- Olhe:
frame --ato quadro do meio de uma piscada e verifique se os olhos fechados estão exatamente sobre a cabeça, em sua inclinação.