Skip to content

Animando caudas para as quais o rig automático nunca criou um osso ​

Por Oleg Sidorkin, CTO e cofundador da Cinevva

Atualizado em 11 de setembro de 2026: o que o camundongo nos ensinou acrescenta flexões elásticas, contato com o chão e um segundo tipo de elevação corporal causada pela cauda.

Um usuário criou o rig de uma raposa antropomórfica no nosso criador de rigs e reproduziu o clipe Walk. O corpo estava bom. A cauda se dobrou contra a perna esquerda como uma toalha molhada e, onde os pesos das pernas esquerda e direita se encontravam, ela rasgou. Essa raposa é o exemplo recorrente abaixo, e a correção já está disponível no criador de rigs e na biblioteca de runtime que reproduz seus clipes.

Tanto a raposa quanto o camundongo apresentados neste artigo foram gerados com o nosso gerador de modelos 3D e depois receberam rig e animação na Cinevva.

Três cópias de uma raposa caminhando vistas por trás: o rig original com a cauda dobrada ao redor da perna esquerda, uma cauda rígida pendendo em linha reta e uma cauda sobre uma cadeia de ossos erguida para cima e para trás

Da esquerda para a direita, no meio da passada e no mesmo quadro: o rig como saiu do criador, o mesmo rig com a cauda atribuída à pelve como uma única peça e a cauda em sua própria cadeia de ossos, balançada pelo runtime. Você pode girar a câmera ao redor das três mais abaixo.

Por que um criador de rigs humanoides faz isso ​

Nosso mecanismo Fast é baseado no Make-It-Animatable, que prevê um esqueleto fixo no estilo Mixamo: 22 ossos corporais, ou 65 com os dedos. Cada vértice da malha precisa ser atribuído a um desses ossos. Uma cauda não está na lista, então o modelo faz o melhor que sabe fazer e entrega os vértices da cauda à parte do corpo mais próxima em seu espaço de características aprendido. Para essa raposa, foi a canela esquerda, com o restante dividido entre as duas coxas.

Isso não é um bug nos pesos. É o template. Nenhum prompt ou configuração faz o modelo emitir um osso de cauda, pois não existe um osso de cauda para ele emitir. O mesmo acontece com asas, capas, cabelos longos e qualquer outra coisa que fique pendurada no torso.

Medimos o custo disso nos 1.582 vértices da cauda da raposa antes de mexer em qualquer coisa. A distância de cada vértice até os ossos que realmente o movem, ponderada pelos pesos, teve média de 47 cm em um modelo de 191 cm. A cauda estava sendo controlada a meio metro de distância.

Encontrando a cauda ​

O GLB com rig é tudo o que temos nesse ponto, e é tudo de que precisamos. O processamento funciona com a saída de qualquer criador de rigs, não apenas o nosso.

Um campo de distância sobre o esqueleto. Para cada vértice p e cada segmento de osso da articulação a até a articulação b no espaço de bind, a distância até o segmento é

d(p,ab)=‖p−(a+t(b−a))‖,t=clamp((p−a)⋅(b−a)∥b−a∥2,0,1)

e a distância de um vértice ao esqueleto é o mínimo entre todos os segmentos. Articulações terminais recebem uma pequena extensão além da articulação, para que um focinho ou uma mão não sejam considerados distantes de seu próprio osso. Um vértice está distante quando essa distância ultrapassa 7% da altura do modelo. Para a raposa, isso corresponde a 13 cm.

Partes conectadas de pele distante. Os vértices distantes são agrupados em componentes conectados ao longo das próprias faces da malha. Um detalhe nos custou uma hora: os exportadores separam vértices nas costuras de UV e de normais rígidas, então essa malha tem 23.129 vértices, mas apenas 29.081 triângulos, e só o grafo de faces divide uma cauda em dezenas de ilhas. Primeiro, soldamos os vértices por posição, executamos a conectividade no grafo soldado e gravamos os pesos de volta em cada vértice original.

Onde ela se conecta? O colar de uma peça é o anel de vértices não distantes adjacentes a ela. Seu centro nos informa de onde a peça pende, por meio da articulação mais próxima, com uma preferência: uma articulação do torso ou da coxa a até 1,5 vez a menor distância prevalece, pois, ao redor da pelve, as cabeças das coxas ficam exatamente tão próximas quanto os quadris, e a raiz de uma cauda entre elas pertence ao corpo. Deliberadamente, não confiamos nos pesos do colar para isso. Em uma cauda modelada como uma casca separada, como ocorre na maioria dos modelos de jogos, o colar é o próprio anel da raiz da cauda e carrega os mesmos pesos incorretos que estamos tentando corrigir.

É um apêndice ou faz parte do corpo? Usamos dois testes. A pele distante de um torso grosso envolve um osso, então seu centro de massa volta a cair sobre o osso. Uma cauda se projeta para um lado, então seu centro de massa fica distante de todos os ossos. Exigimos que a distância do centroide ao esqueleto seja de pelo menos 40% do alcance da peça. Em seguida, fazemos um teste de forma: sendo λ1≥λ2 os dois maiores autovalores da covariância da peça, o alongamento é λ1/λ2. Uma cauda obtém cerca de 2,6 aqui; uma capa ou saia fica perto de 1. Apenas peças longas penduradas na pelve se tornam cadeias. Peças longas penduradas na coluna, como uma bainha, aljava ou tira, são vestidas, não crescidas, e acompanham rigidamente o osso ao qual estão conectadas. Orelhas penduradas na cabeça não são alteradas: permanecer rígidas com a cabeça é exatamente o que as orelhas precisam.

A cauda da raposa resultou em duas cascas sobrepostas, pelo sobre pele, nunca soldadas. Por isso, peças na mesma conexão cujas caixas delimitadoras se sobrepõem em mais da metade são mescladas. Uma cauda, uma cadeia.

Etapa um: torná-la rígida ​

A primeira correção honesta leva uma tarde. Cada vértice da peça recebe peso 1.0 em Hips. A cauda para de rasgar e se move como uma única peça junto com a pelve. Ela parece uma tábua, e é a raposa do meio na imagem. Lançamos isso como um marco porque seu alongamento é exatamente zero por construção, o que a torna uma referência útil para a medição abaixo.

Etapa dois: criar uma cadeia ao longo dela ​

Uma coordenada ao longo da cauda. Executamos Dijkstra a partir do colar em direção à peça, sobre as arestas da malha ponderadas pelo comprimento da aresta. Cada vértice da cauda recebe uma distância geodésica g a partir da raiz, e o percentil 99 de g é o comprimento da cauda L: 81 cm para a raposa, 42% de sua altura.

Articulações. O número de segmentos é K=clamp(round(L/0.1H),3,8), quatro para a raposa. A articulação J0 é o centroide do colar, e a articulação Ji é o centroide da pele cuja distância geodésica está dentro de meio segmento de iL/K. Duas passagens de Ji←12Ji+14(Ji−1+Ji+1) impedem que a cadeia ziguezagueie onde a seção transversal é assimétrica, como sempre ocorre na ponta de uma cauda volumosa. Os ossos vão de Tail_1 a Tail_K, mais um Tail_End sem peso, todos parentados sob Hips e compartilhando a rotação de bind de Hips, para que cada um seja uma translação pura no quadro de referência de seu pai. Suas matrizes inversas de bind são obtidas diretamente, e os clipes existentes nunca fazem referência a eles, portanto nada nas etapas seguintes é quebrado.

Pesos. Com s=Kg/L, k=⌊s⌋ e f=s−k, um vértice no segmento k pertence ao osso k+1 e compartilha as extremidades com seus vizinhos:

wprev=clamp(0.5−2f, 0, 0.5),wnext=clamp(2f−1.5, 0, 0.5),wself=1−wprev−wnext

Em uma articulação, os dois ossos se encontram em uma divisão 50/50; no meio de um segmento, um único osso controla completamente a pele. Para o segmento da raiz, "prev" é Hips, então a cauda se mistura ao corpo em vez de formar uma dobra no colar.

Após o processamento, a distância ponderada até os ossos na cauda caiu de 47 cm para 17 cm, aproximadamente o raio da própria cauda. É o mais perto que a pele chega do osso que a controla.

Vista lateral da raposa caminhando, com o esqueleto desenhado sobre a malha; quatro ossos de cauda saem da pelve e seguem ao longo da cauda, erguida para cima e para trás

Etapa três: algo precisa mover os ossos ​

Nenhum clipe da nossa biblioteca tem trilhas de cauda, então, sem trabalho adicional, a cadeia mantém sua pose de bind e a raposa anda por aí com uma tábua. Jogos resolvem isso com movimento secundário procedural, e nós também, na biblioteca de runtime que todo modelo com rig já carrega.

A ponta de cada articulação é uma partícula p com velocidade v. Seu alvo de repouso T é o ponto onde a pose de bind diz que a ponta deveria estar, calculado a cada quadro com base na transformação mundial atual do osso pai. A partícula segue uma mola amortecida:

p¨=ω2(T−p)−2ζωp˙+g

com ω=2πf. O segmento da raiz balança a f=0.9 Hz, e a ponta, à metade dessa frequência, pois uma cauda é músculo na base e pelo na extremidade. A taxa de amortecimento original era ζ=0.45; a atualização do camundongo abaixo a eleva para 0.65 a fim de reduzir a ultrapassagem. A gravidade é de 1 m/s², não 9,8; uma cauda tem músculos. Integramos com Euler semi-implícito e, em seguida, aplicamos a restrição de corda projetando p de volta sobre a esfera definida pelo comprimento do osso ao redor da cabeça do osso. Uma corda não pode se alongar, portanto a velocidade ao longo dela também não: o componente radial (p˙⋅n^)n^ é descartado, e o balanço é mantido. Por fim, recuperamos a rotação do osso: o quatérnio que leva sua direção de bind até a direção da partícula.

Como as partículas existem no espaço global, girar ou acelerar os quadris faz a cauda ficar para trás e balançar por conta própria. Nada é roteirizado.

Vale a pena admitir três erros aqui, pois todos pareciam aceitáveis até que alguma medição os revelasse.

A primeira versão puxava cada partícula uma fração fixa do caminho até seu alvo a cada quadro, 12% a 60 fps. Expressa como uma mola, isso resulta em ω≈0.12/Δt≈21 rad/s, uma trepidação de 3,4 Hz. Como essa rigidez mal permitia que os segmentos da raiz se movessem, todo o movimento se acumulava na ponta. Expressar a mola em unidades físicas corrigiu os dois problemas de uma só vez.

A segunda versão realimentava a correção da corda como velocidade, dividindo a correção por Δt. Isso parece a atualização padrão de dinâmica baseada em posição e é estável enquanto os quadris se movem lentamente, como ocorre em um ciclo de caminhada. Quanto mais rápido o pai se move, maior é a correção e maior é a velocidade injetada. Um deslocamento de meio metro dos quadris ao longo de dois terços de segundo foi suficiente: um osso girou 95°, enquanto seus vizinhos se moveram 3°. Um teste sem interface que balançava os quadris com mais força do que qualquer clipe que distribuímos detectou o problema; o ciclo de caminhada jamais o teria feito.

O terceiro erro foi o ângulo de elevação abaixo. Ele era aplicado no quadro de referência de cada articulação, de modo que uma cauda com quatro ossos era elevada quatro vezes, enrolava-se em uma bola contra as costas da raposa e rasgava a própria pele em cada dobra. A medição abaixo revelou isso: o alongamento das arestas da cauda chegou a um p99 de 2,3, contra uma referência corporal de 1,3, pior do que quando ela estava presa à canela. Agora, carry representa a elevação da cauda inteira, compartilhada entre suas articulações.

Interpenetração. A cauda foi modelada pendendo em linha reta entre as pernas, e o ciclo de caminhada fazia os pés atravessarem-na. Portanto, a pose de repouso visada pela mola não é a própria pose da malha: um carry de 50° eleva os alvos de repouso para trás e para cima ao redor do eixo lateral dos quadris, como uma raposa segura a cauda ao se mover. Esses 50° representam a elevação da cauda inteira, compartilhada entre suas articulações, de modo que o arco seja suave tanto quando a cadeia resulta em quatro ossos quanto em oito. Além disso, nenhuma partícula pode atravessar o plano voltado para a frente que passa pela raiz da cauda, então ela jamais pode balançar entre as pernas.

Medindo o resultado ​

Estas são as medições originais da raposa, feitas em 6 de setembro, antes das alterações do camundongo descritas abaixo. Elas documentam o primeiro solver da cadeia, não um novo benchmark dos padrões revisados.

Imagens estáticas não provam nada sobre rasgos, então medimos o alongamento das arestas durante o clipe. Para cada aresta da malha cujos dois vértices pertencem à cauda, calculamos a proporção entre seu comprimento após o skinning e seu comprimento de bind em 24 momentos igualmente espaçados ao longo do clipe Walk. Uma proporção de 1 representa pele sem deformação. Uma aresta alongada além de 1,5 ou comprimida abaixo de 0,67 conta como rasgada. As arestas do corpo são medidas da mesma maneira, como referência da aparência de uma distorção normal de skinning.

Clipe Walk, 96.864 amostras de arestas da caudap95p99máx.rasgadas
Rig original1.602.424.0311.4%
Rígida em Hips1.001.001.000%
Cadeia da cauda1.091.181.300%
Corpo, como referência1.131.291.78—

O rig original alongava uma em cada nove arestas da cauda além do ponto de rasgo, e sua pior aresta alcançava quatro vezes o comprimento de bind. A pior aresta da cadeia fica 30% mais longa, dentro da própria referência corporal de 1,78, e nada rasga. A cauda rígida permanece exatamente em 1,00 porque se move como uma única peça; foi esse número que nos mostrou que o sistema de teste estava correto antes de confiarmos nele para a cadeia.

Uma cauda que realmente balança precisa deformar um pouco a própria pele, então o objetivo da cadeia não é alcançar 1,00, mas permanecer abaixo do que o corpo já apresenta. Uma versão anterior desta tabela mostrava a cadeia com p99 de 1,03, o que parecia melhor, mas era pior: a cauda quase não se movia, pois o bug de velocidade acima a havia amortecido em excesso, deixando-a parecida com a versão rígida.

A comparação interativa ​

Três cópias da raposa, mesmo clipe, mesmo quadro. Arraste para girar a câmera e use a roda para aplicar zoom. Troque de clipe, desative a física da cauda para ver a cadeia em sua pose de repouso elevada e ative os ossos para ver onde a cadeia fica.

A mesma cadeia vista de lado, isolada, com o esqueleto desenhado. Sprint é o clipe que melhor mostra o efeito de mola.

O que o camundongo nos ensinou ​

A raposa demonstrou que uma cadeia podia impedir as rupturas. Um camundongo com uma cauda longa e fina tornou os erros de movimento restantes muito mais fáceis de enxergar. Uma dobra acentuada que desaparece dentro da pelagem de uma raposa parece uma articulação quebrada no camundongo. A cauda dele também alcança o chão, e sua forma modelada se curva para um dos lados. São três problemas diferentes; aumentar a rigidez da mola não resolve todos eles.

Experimente o camundongo com toda a biblioteca de animações abaixo. Arraste o personagem para orbitar, role horizontalmente a faixa de miniaturas ou use a pesquisa e o filtro de categorias para encontrar um movimento. Clique em um bloco para reproduzi-lo na visualização grande. Walk, Crouch Backward, Crawl Idle e Back Flip são bons pontos de partida para inspecionar a cauda. A faixa usa as mesmas prévias de animação em tempo real da seção principal de animações e disponibiliza o catálogo completo, carregando os movimentos conforme você navega.

Abra a biblioteca completa de animações → para experimentar esses movimentos em seu próprio personagem com rig e exportar os clipes que escolher.

Uma cadeia de molas ainda precisa de resistência à flexão ​

As partículas estavam restritas a preservar o comprimento de cada osso, mas cada articulação ainda podia oscilar de forma quase independente. As restrições de comprimento evitam o alongamento; elas não impedem que uma dobradiça se dobre. O camundongo revelou exatamente essa distinção.

Antes das correções no camundongo: o esqueleto da cauda muda bruscamente de direção perto da ponta, e a malha termina com uma dobra para baixo

Antes das correções: manter os comprimentos dos segmentos intactos não bastava para preservar a suavidade da curva.

Agora acoplamos as flexões adicionais das articulações vizinhas, medidas em relação à curva de repouso. As flexões são comparadas em um sistema de referência comum, para que eixos ósseos diferentes não transformem uma flexão para a esquerda em uma torção sem relação na articulação seguinte. Cada etapa lê um instantâneo dos vizinhos, em vez de valores parcialmente atualizados. A interpolação do acoplamento é 1−e−kΔt, com uma taxa padrão de k=12 por segundo, em vez de uma fração fixa por quadro renderizado.

A flexão elástica de uma articulação é limitada a 30° além de sua direção de repouso. Também aumentamos o amortecimento para 0,65 e removemos a velocidade que continua forçando contra o limite de flexão, para que ela não possa se acumular e ser liberada como um tranco. A base continua sustentada pelos quadris, e a ponta permanece mais flexível. O contato pode se sobrepor ao limite de flexão quando a cauda precisa repousar no chão.

Acoplamento de rotações, não de posições de partículas. Numere os N elos a partir de i=0 nos quadris. Seja hi a cabeça de um elo, pi sua ponta prevista e ℓi seu comprimento. Sua direção candidata é di=(pi−hi)/∥pi−hi∥. No referencial do pai atual, seja ri a direção unitária de repouso e d~i a direção candidata. Escreva swing(a,b) para o quaternion unitário mais curto que leva o vetor unitário a até b. Se Ai rotaciona o referencial de repouso desse pai para o referencial comum dos quadris, a flexão que comparamos com as vizinhas é

qi=Aiswing(ri,d~i)Ai−1.

Essa conjugação altera o sistema de coordenadas da flexão; ela não adiciona outra rotação ao personagem. Usando instantâneos qjold da etapa anterior, o alvo dos vizinhos e a flexão acoplada de uma articulação interna são

q¯i=slerp(qi−1old,qi+1old,12),α=1−exp⁡(−kΔt),qi∗=slerp(qi,q¯i,α).

Na base, o alvo dos vizinhos fica no meio do caminho entre a flexão da próxima articulação e o quaternion identidade I, representando o suporte dos quadris. A ponta livre usa seu único vizinho; uma cauda com um só elo ignora o acoplamento entre vizinhos. Com k=12s−1, α é aproximadamente 0,181 a 60 fps e 0,330 a 30 fps. Isso dá ao acoplamento uma taxa baseada no tempo, embora o solver completo ainda tenha erros de integração e contato que dependem do passo de tempo.

Para um quaternion unitário qi∗ com componente escalar wi, seu menor ângulo de rotação é θi=2arccos⁡(clamp(|wi|,0,1)). O limite elástico é

qilimited={qi∗,θi≤θmax,slerp(I,qi∗,θmax/θi),θi>θmax,θmax=π/6.

Transformamos essa flexão de volta para o referencial do pai e a aplicamos a ri antes das projeções de contato. Essa é uma regra local de suavização da flexão, não uma simulação completa de uma haste elástica: ela distribui a curvatura adicional e a limita sem alegar resolver uma energia de flexão global.

A pose carregada não é necessariamente a pose de bind ​

O arquivo salvo do camundongo já tinha cerca de 28° de rotação em sua última articulação da cauda. Estávamos interpretando essa rotação carregada como neutra e depois adicionando o movimento de mola por cima. Uma pose anteriormente animada ou exportada havia se tornado parte permanente do alvo da mola.

Agora o solver recupera as transformações locais neutras das matrizes inversas de bind do esqueleto, quando disponíveis. Se um rig não tiver um auxiliar Tail_End, seu último segmento continuará a tangente de entrada expressa no referencial local do próprio último osso. Copiar um vetor do referencial do pai é incorreto assim que o osso terminal tem uma orientação diferente.

A curvatura para um dos lados tinha outra causa: ela estava presente na geometria de bind real. Portanto, recuperar corretamente a pose de bind preservava o desvio. Agora, por padrão, a simulação usa um arco de repouso centralizado, construído no espaço dos quadris e convertido para o referencial de cada pai corrigido. restCurve pode interpolar de volta a curvatura modelada: 0 é o arco centralizado, 1 preserva a curva criada pelo artista. Isso muda o alvo das molas; não reescreve a malha nem seus pesos de skinning.

Recuperação das transformações de referência. Seja Bi a matriz inversa de bind de um osso. Sua transformação de bind no espaço global é Wi0=Bi−1; portanto, quando tanto o osso quanto o pai têm matrizes de bind, a transformação local neutra é

Li0=(Wparent(i)0)−1Wi0.

A decomposição de Li0 fornece a translação e a rotação locais de que precisamos. Ler o quaternion carregado em seu lugar substituiria essa referência por um quadro arbitrário da animação salva.

Construção do arco centralizado. Seja ai a direção unitária criada pelo artista para o segmento i no espaço dos quadris. Removemos o componente lateral da direção da raiz para obter c=normalize(0,a0y,a0z), usando a direção para baixo como alternativa caso essa projeção desapareça. Seja β∈[0,1] o valor de restCurve, e C o ângulo total de curvatura em radianos. Com rot(q,v) indicando a rotação do vetor v pelo quaternion q, a direção desejada no espaço dos quadris é

Qi(β)=slerp(I,swing(c,ai),β),ui=Rx(Ci+1N)rot(Qi(β),c),ri=rot(Ai−1,ui).

Aqui, Rx é a rotação em torno do eixo lateral dos quadris. É crucial que Ai inclua as correções de repouso já aplicadas às articulações anteriores na hierarquia. Isso faz de ui a direção absoluta pretendida para esse segmento, em vez de adicionar novamente a correção de alinhamento em cada articulação. Em β=0, a curvatura lateral modelada é removida; em β=1, suas direções são preservadas antes da aplicação da curvatura.

A cauda pode tocar o chão; ela não pode levantar o camundongo ​

O contato com o chão rotaciona um segmento até a interseção entre sua esfera de comprimento e o piso. Simplesmente limitar a altura de uma partícula encurtaria o osso; limitar a altura e depois restaurar seu comprimento pode colocá-lo novamente sob o chão. Deixamos 0,025 unidades do mundo abaixo da linha central para representar a espessura, descartamos a velocidade de contato descendente e amortecemos o deslizamento. Por padrão, o piso plano fica em Y global = 0 e pode ser movido ou desativado. Essa é uma restrição de plano, não uma colisão com terreno ou com a malha completa.

A interseção entre esfera e piso. Escreva F=g0+ρ para a altura do piso mais a folga da linha central, em que g0=0 e ρ=0.025 por padrão. O segmento deve satisfazer

∥pi−hi∥=ℓi,(pi)y≥F.

Se a extremidade prevista estiver abaixo do piso, defina u=(F−hiy)/ℓi. Quando |u|≤1, o contato fica sobre um círculo horizontal. Se t for uma direção unitária horizontal, a extremidade corrigida será

pi′=hi+ℓi(1−u2t+uey),ey=(0,1,0).

Sua altura é exatamente F, e sua distância até a cabeça é exatamente ℓi, pois (1−u2)+u2=1. Escolhemos t a partir da projeção horizontal da direção candidata, usando a direção de repouso como alternativa caso essa projeção desapareça. O plano dos quadris que mantém a cauda atrás pode restringir qual parte do círculo é permitida. O contato tem precedência sobre o limite elástico de flexão. Se a cabeça estiver tão abaixo do piso que u>1, nenhuma rotação desse segmento de comprimento fixo poderá alcançá-lo; a implementação limita u em vez de alongar o osso ou levantar o corpo.

Depois das outras projeções de velocidade, toda velocidade descendente restante de uma partícula em contato é removida, e sua velocidade é amortecida:

vi′=e−γΔt[vixmax(0,viy)viz],γ=8s−1.

Esse é um contato inelástico com amortecimento simples, não um modelo de atrito de Coulomb. Ele impede que a gravidade acumule velocidade descendente enquanto a cauda repousa no chão.

Isso resolveu a penetração da cauda, mas havia outros dois pontos em que uma cauda podia fazer os pés flutuarem.

Primeiro, o visualizador posicionava no chão o ponto mais baixo de toda a malha carregada. Se a cauda salva ficasse abaixo das solas, ele levantava o personagem inteiro para acomodá-la. Agora, ao determinar o piso do corpo, o posicionamento do visualizador ignora a pele dominada pela cauda, enquanto o enquadramento da câmera continua incluindo o personagem inteiro.

Segundo, a etapa de aterramento do corpo do retargeter também considerava a cauda. Durante Back Flip, ela elevava a pelve para manter essa pele afastada do chão, embora o solver independente da cauda fosse movê-la depois.

Qual parte da pele pode elevar a pelve? Seja S o conjunto de pontos de suporte amostrados da pele do corpo, T os dominados pelos ossos da cauda e E os controlados pelos solvers de contato dos membros. O piso de referência é medido durante a calibração a partir de S∖T. A folga do restante do corpo no quadro t é

fbody=minv∈S∖Tyv0,c(t)=minv∈S∖(T∪E)yv(t)−fbody,Lraw(t)=max(0,a(t)−c(t)).

Aqui, a(t)≤0 é a tolerância derivada da origem para ficar abaixo do piso de referência. Lraw é a elevação solicitada antes da suavização temporal e da reconciliação dos membros pelo retargeter. A mesma exclusão da cauda deve aparecer nos dois valores mínimos: removê-la apenas da sondagem da pose atual ainda deixaria o piso de referência incorreto. A implementação amostra a pele agrupada pelo osso dominante, em vez de avaliar cada vértice em todos os quadros.

Para a comparação abaixo, a elevação adicional informada é a diferença entre as trajetórias finais da pelve, não apenas a correção bruta:

Δyhips(t)=yhipstail counted(t)−yhipstail excluded(t).

Elevação medida da pelve perto do final de Back Flip

Amostramos o mesmo camundongo nos mesmos tempos da animação, alterando apenas se a cauda era incluída no aterramento do corpo. As duas colunas usam as mesmas coordenadas globais do modelo; a diferença isola a altura adicional introduzida ao considerar a cauda.

Tempo no clipe de 1,93 sAltura da pelve: cauda consideradaAltura da pelve: cauda excluídaElevação adicional ao considerar a cauda
1,16 s50,5 cm35,0 cm15,4 cm
1,55 s81,3 cm70,3 cm11,0 cm
1,84 s92,2 cm77,2 cm15,0 cm
1,93 s90,6 cm77,2 cm13,4 cm

O personagem deve se elevar ao ficar de pé depois de aterrissar. O erro é a elevação adicional da última coluna, não esse movimento de recuperação intencional. Os valores foram arredondados de forma independente a partir das posições globais amostradas.

Nesse camundongo, excluir a cauda removeu cerca de 15 cm de elevação adicional da pelve no trecho final de Back Flip. Perto do fim, a sondagem do corpo permaneceu a aproximadamente um milímetro de seu piso de referência, em vez de flutuar vários centímetros acima dele. Agora, a pele da cauda não define nem o piso do corpo nem a correção que eleva sua pelve. O solver da cauda apenas rotaciona os ossos da cauda; ele nunca translada o modelo, os quadris ou os pés.

Uma animação pode herdar uma pose antes mesmo de ser reproduzida ​

O agachamento elevado revelou um problema separado. Geramos os clipes da biblioteca progressivamente, para que o visualizador possa começar a reprodução antes que todos os clipes estejam prontos. O retargeting usava o mesmo esqueleto da reprodução. Entre os cálculos, a prévia podia mover a pelve, e o próximo clipe lia essa pose animada como referência de calibração. Redefinir a pose ao trocar de clipe não podia corrigir uma referência incorreta já incorporada às trilhas geradas.

Agora, o retargeting funciona em cópias privadas do esqueleto, criadas a partir de uma calibração estável capturada antes do início da reprodução. Solicitações posteriores de clipes reutilizam essa referência, e solicitações simultâneas têm ossos separados. Um teste de regressão move e rotaciona deliberadamente os quadris em uso entre os clipes entregues; as trilhas geradas devem permanecer idênticas às de uma execução limpa, e o cálculo não deve alterar a pose em uso. Nem todo movimento visível era um bug. O Climb Idle tem uma pequena oscilação da pelve no loop de origem, com a raiz parada. E uma nova solução do Crawl Idle manteve as mãos do camundongo abaixo da cabeça durante todo o loop; a captura de tela com as mãos levantadas correspondia a um clipe contaminado anterior, em vez de ser uma evidência de que a animação de origem pretendia aquela pose. Comparar a origem, uma nova solução e o resultado em reprodução evitou que achatássemos movimentos intencionais para esconder um erro de calibração.

O que verificamos agora ​

As verificações abrangem movimentos rápidos dos quadris em cadeias de diferentes comprimentos, flexões mais suaves entre ossos vizinhos, respostas iguais nos lados esquerdo e direito, recuperação da pose de vinculação, um osso terminal rotacionado sem auxiliar e fechamento do loop após o aquecimento. Os testes de piso abrangem agachamento, planos de piso elevados, estabilização e liberação quando os quadris sobem. Regressões separadas verificam que o contato da cauda nunca mova o corpo e que a influência da cauda sobre a malha não possa solicitar a elevação da pelve.

Essas verificações estabelecem invariantes específicos. Elas não substituem a observação do camundongo durante seus movimentos, nem estabelecem novos valores de alongamento para a raposa. Os exemplos ao vivo usam o solver revisado; a tabela anterior da raposa continua sendo um registro da medição original.

O que isso muda para você ​

Se você criar o rig de um personagem com cauda em cinevva.com/tools/rigger, a cauda será entregue em sua própria cadeia de ossos, o status da tarefa terá uma entrada appendages descrevendo o que foi encontrado e a prévia a movimentará. Modelos processados pela API da plataforma recebem o mesmo arquivo. A integração original no rt/1.1.12 fez com que createAnimator encontrasse os ossos Tail_* e os controlasse sem código adicional; a frequência, o amortecimento, a gravidade e o ângulo de sustentação da mola são opções configuráveis caso você queira uma cauda mais pesada ou mais lenta. Arquivos antigos sem uma cadeia de cauda podem passar novamente pelo processo refazendo o rig. As mudanças de 11 de setembro descritas acima já estão disponíveis nas prévias web da Cinevva. Jogos fixados em uma versão anterior do runtime e clipes exportados anteriormente não são atualizados automaticamente. Os clipes já pré-calculados precisam ser gerados novamente para receber as correções.

No Blender. O add-on executa o mesmo processo na tabela do rig antes de criar a armature, portanto uma cauda processada em sua própria máquina recebe a mesma cadeia com os mesmos nomes. Há uma caixa de seleção Cauda ao lado de Dedos, e o cartão de resultado informa o que foi encontrado.

Fora do nosso runtime. Uma mola em um jogo não ajuda quem abre o arquivo no Blender, Unity ou Unreal, onde a cauda ficaria parada. Por isso, a exportação agora a pré-calcula: cada clipe selecionado é simulado, e as rotações da cauda são amostradas em keyframes reais. O exportador executa o clipe silenciosamente até que a cauda retorne ao ponto em que o processo começou e só então inicia a gravação, pois um ciclo pré-calculado a partir de um estado frio não fecha e a cauda salta quando o loop reinicia. A ponta é intencionalmente o elo mais flexível, portanto seu estado transitório é o que demora mais para se estabilizar, e uma única passagem de aquecimento nem sempre é suficiente.

O processo é deliberadamente conservador. Ele cria uma cadeia apenas para uma parte longa pendurada na pelve. Orelhas, cabelos e mangas não são alterados, assim como qualquer elemento largo no torso: uma versão anterior atribuiu rigidamente uma capa ou saia ao osso do torso, mas vê-la em movimento em uploads reais nos fez mudar de ideia. Um dos casos era uma peça de roupa com 6.540 vértices na cintura, cuja influência o rigger havia distribuído de maneira adequada entre os quadris e as duas coxas; um único osso impediria completamente que ela acompanhasse as pernas. Atribuir uma peça de roupa a um único osso é uma grande alteração no personagem de alguém, feita com base em uma suposição sobre o que aquela peça representa. Por isso, agora é algo que você solicita, e não algo que simplesmente acontece com seu modelo. Não há colisão com as pernas além do plano frontal, nem balanço em idle quando o personagem está parado; assim, a cauda de uma raposa em pé permanece quieta em sua pose sustentada. Esses são os próximos dois itens da lista, juntamente com o mesmo tratamento para asas, que exigem uma pose de repouso e uma mola diferentes.