Three.js: Carregar animação de animação Mixamo

Criado em 11 fev. 2015  ·  67Comentários  ·  Fonte: mrdoob/three.js

Ei, estou montando e animando meu personagem com o mixamo ... então eu os importo para o blender via FBX ... eu os exporto para js com o seu exportador (tentei todos os exportadores ... todos).

O resultado está aqui:
http://instagram.com/p/y8NQjQkk9-/?modal=true

sempre parece distorcido assim e eu não consigo entender ... são sempre as mãos ... é por causa do número de ossos. mixamo tem 16 ou sth. e o marine_anim dos exemplos mais de 50.

Por favor, ajude um irmão ... depois de três dias, estou no fim da minha sabedoria |

Question

Comentários muito úteis

Alternativamente, você pode simplesmente exportar como FBX do Mixamo e carregar diretamente usando o FBXLoader.
Na última versão (R89), ele deve funcionar muito bem.

Todos 67 comentários

Depois que este PR https://github.com/mrdoob/three.js/pull/6052 for mesclado, sugiro tentar o exportador do branch dev. Tem 2 opções de posição de pose diferentes para POSE e REST . Defina sua armadura para um ou outro e, durante a exportação, certifique-se de que a propriedade Skeletal animation corresponda. Experimente os dois e veja se algum ajuda. Para algumas pessoas, POSE funciona, e para outras é REST .

hmm então exportado usando descanso de animação esquelética e em modo de pose ...

estes são meus arquivos http://we.tl/CNM5qEmBMs
incluindo o final original e ambas as exportações ...

Modo de repouso = nenhum movimento
Modo de pose = distorções estranhas

você disse "Tem 2 opções de posição de pose diferentes para POSE e REST. Defina sua armadura para uma ou outra" ... eu não sei como definir minha armadura para pose ou descanso ... eu quero usar o liquidificador apenas como um tradutor de mixamo para threejs ... desculpe se minha pergunta é para noob

você quis dizer os modos de edição pose e modo de edição para objetos?

Ok Modo de pose --- mesmas distorções
Modifique o seguinte log de erro:

error

Não é possível recriar esse erro, mas percebi que, olhando para os números das linhas no traceback, você provavelmente não está na mesma versão (mais recente) encontrada em dev . Certifique-se também de que não está fazendo uma exportação de Scene com este ativo. Apenas faça exportações de geometria única por enquanto (já que ObjectLoader ainda não funciona com malhas esmaecidas).

No que diz respeito às animações quebradas; Posso recriar a animação interrompida e o problema de animação ausente. Há pessoas que estão conseguindo exportar animações (exemplo: https://github.com/mrdoob/three.js/issues/5582#issuecomment-73444737), então suspeito que haja alguns problemas com o processo de importação do FBX. É muito difícil determinar se é o exportador ou a importação FBX. Eu me perguntei se há transformações que precisam ser aplicadas aos ossos, mas ainda não sei.

Ei cara, muito obrigado pelo seu tempo e visão!

você provavelmente não está na mesma versão (mais recente) encontrada no dev.

Acho que estou trabalhando com a versão mais recente porque posso selecionar pose e descanso:
"A opção de animação agora é um enum que requer que o usuário selecione entre POSE e REST"

já que ObjectLoader não funciona com malhas esmaecidas ainda

Pela minha experiência, isso não torna mais difícil ... carreguei geometrias e cenas com o objectloader em três. O seguinte erro é criado com Objectloader e dá o mesmo resultado das exportações anteriores do Geometrie.
newerror

Posso recriar a animação interrompida e o problema de animação ausente.

Seria muito interessante se você NÃO conseguisse recriar o problema ...
Portanto, você vê alguma possibilidade de exportar o modelo para threejs ...

É interessante em geral porque é um modelo exportet por mixamo. Se este modelo funcionar - todos os modelos mixamo funcionariam. (em teoria ;))

de qualquer maneira, obrigado por investigar isso.

Com a versão atual do Blender e apenas geometrias e nenhuma exportação de cena eu fico no modo pose:

poseterror

e em modo de descanso

resterror

só posso exportar a geometria se exportar a cena do furo

ok acho que encontrei ... é um bug na referência entre os vértices da geometria e os ossos animados ... a malha e o esqueleto estão desligados

Depois de dimensionar e girar manualmente a malha em direção ao esqueleto como este

for (var i = 0; i < geometry.children[0].geometry.vertices.length; i++) {
                vector = geometry.children[0].geometry.vertices[i];
                var axis = new THREE.Vector3(0, 1, 0);
                var angle = Math.PI / 2;
                geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle);
                geometry.children[0].geometry.vertices[i].multiplyScalar(0.01);
 }

eu obtive um resultado bastante bom.

Então, primeiro de tudo - por que eu preciso girar a malha ... eu me lembro quando importei para o mixamo que eu tive que girar meu modelo exatamente 90 graus ... é por causa da direção -z
Por que escalar? nenhuma pista ...

agora vem o bugiganga que meu modelo não tinha os TPos perfeitos ... os braços eram muito baixos ... montei no mixamo e ainda estava perfeito depois ... vi no liquidificador ... e ficou perfeito para ... vi no máximo foi perfeito também.
ENTÃO, a exportação para o Threejs e o mapeamento entre os ossos e o corpo estavam se referindo ao corpo originalmente criado no max.

tpose

portanto, há um bug matemático em referenciar vértices e ossos em sua matriz de transformação.

Eu me pergunto se é realmente um bug ou em vez disso, um recurso opcional. Isso poderia muito bem corrigir o problema que você está tendo, mas interromper as exportações para outra pessoa que não precisa importar ativos FBX (algo que já vi antes com animações POSE e REST). A lógica que está sendo usada (para ossos e vértices) já existe há algum tempo (copiada do antigo exportador) e não estou dizendo que é perfeita ou sem falhas, mas se isso fosse um bug na matemática, acho que teríamos visto mais questões. Tem que aplicar seu exemplo de código no exportador e, em seguida, executar muitos testes em muitos casos de teste (o que não é algo que eu tenha mentindo).

Já vi problemas semelhantes na produção, onde um ativo faz várias viagens por meio de vários programas e exportadores. Adicione a esta equação as reorientações do eixo e você terá uma receita para peripécias certificáveis. Se eu conseguir descobrir como fazer com que isso seja implementado no exportador, será uma opção apenas até que haja muito mais certeza de que de fato se aplica a todos os usuários e não a casos isolados.

Com a versão atual do Blender e apenas geometrias e nenhuma exportação de cena eu fico no modo pose:

O erro diz especificamente "Não é um objeto de malha válido". As exportações de geometria são baseadas em seleção e provavelmente você tem a armadura selecionada e não a malha.

Ei cara novamente, obrigado por investigar isso.
Eu não queria dizer que meu código deveria entrar no exportador. O que eu queria salientar é: que dentro da cadeia do máximo ao mixamo e ao liquidificador - tudo é atribuído da maneira que deveria ser. uma vez que chega a três Js - há um deslocamento de transformação simples acontecendo (no meu caso foi podridão e escala) que causou o erro .. esta transformação está se referindo à malha original que foi criada uma vez (onde quer que) e é ignorada no blender e mixamo ... mas reviveu durante a exportação.

infelizmente, tenho que admitir que não sou um mago de matriz - caso contrário, adoraria ajudar, pois vocês estão trabalhando muito duro. Obrigado por seus insights.

Eu nunca usei mixamo. Ele usa Y-up? O que eu me pergunto o que aconteceu é que se maximo for Y-up, a importação FBX teria que reorientar o ativo para Z-up e o exportador reorientar novamente para Y-up para three . Gostaria de saber se as transformações do ativo precisariam ser aplicadas no Blender na importação se isso fosse exportar corretamente para three .

Traduzir rigs de uma plataforma / formato para outro fica feio depois de mais do que algumas iterações. Mesmo em alguns dos pipelines e ferramentas mais avançados com os quais já trabalhei, sempre havia limites para os recursos manipulados. Pode haver uma solução que funcione para você e para todos, mas certamente não está imediatamente claro qual é.

Eu não queria dizer que meu código deveria entrar no exportador.

E eu estava me referindo de forma mais geral a algo que tentaria aplicar ângulos de eixo às posições dos vértices.

vector = geometry.children[0].geometry.vertices[i];
var axis = new THREE.Vector3(0, 1, 0);
var angle = Math.PI / 2;
geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle); <-- would need something like this as well

mas também estou entendendo um pouco, e talvez isso esteja tentando fazer o exportador lidar com muitas variáveis

Comentário interessante aqui sobre FBX
https://github.com/mrdoob/three.js/issues/2803#issuecomment -11458920

Você aplicou a rotação que provavelmente fez ao seu modelo e à armadura dentro do arquivo do blender? Você sabe, com ctrl + A> Rotação e Escala, no modo de objeto. Eu vi coisas muito semelhantes acontecendo por não fazer isso. @princemio

Minha malha sai constantemente distorcida ou recebo erros e não consigo exportar várias animações. Mudou de volta para o exportador r69 que parece funcionar bem mesmo no Blender 2.73a

@ por favor, espere ... não, na verdade eu não ... mas talvez do mixamo ao liquidificador ...
@kimasendorf você tentou recriar manualmente a malha em três js?

A malha foi modelada no Blender. Mesmo sendo um caractere de baixo polígono, é certamente muito complexo recriar manualmente a malha em três js. E como isso poderia ajudar?

no meu caso, a malha e os ossos não estavam alinhados uns com os outros ... daí a curva do modelo tentando encaixar os ossos ... se você não tem ossos, então isso não tem nada a ver com isso ...

btw ... eu não quero dizer "recriar" lol ... desculpe, eu tentei escrever "realinhar" o modelo ...

Tive problemas semelhantes com todos os esqueletos mais complexos que experimentei até agora. Incluindo o fuzileiro naval incluído no repo three.js e apresentado nos exemplos. Aqui está o que eu ganho com isso usando o botão de pose:

Marinho em pose:
https://antont.github.io/three.js/examples/webgl_animation_skinning.html

Essa exportação está em:
https://github.com/antont/three.js/blob/blenderexport_buggy_marineskinning/examples/models/skinned/marine/marine_anims-pose.json

O exemplo mínimo de testes de exportador funciona. O auxiliar de esqueleto corresponde ao modelo ao usar o modo de pose lá.

Vou tentar (alguns) estes truques daquele outro problema já encerrado (# 4660) a seguir:

  1. Você precisará de quadros-chave em cada osso que deseja exportar.
  2. A malha precisa estar na postura em T. Aqui estão duas maneiras de fazer isso: a. Faça uma pose de T. Esta ação precisa de um quadro onde todos os ossos tenham as transformações apagadas. Este deve ser o quadro atual quando o exportador é selecionado. b. Exclua o modificador de armadura da malha imediatamente antes de exportar. Depois que o arquivo for exportado, desfaça a última ação para obter o modificador de volta.

e:

Só consegui fazer isso funcionar quando mantive o modificador Armature, mas desativei os grupos de vértices e os envelopes de ossos (e depois reativei após a exportação). No meu caso, excluir o modificador não ajudou.

talvez também:

Você aplicou a rotação que provavelmente fez ao seu modelo e à armadura dentro do arquivo do blender? Você sabe, com ctrl + A> Rotação e Escala, no modo de objeto.

Se alguém me vencer em obter uma exportação funcional dessa mistura de exemplo e disser o que era necessário ... muito obrigado! :) Estou usando esta mistura: https://github.com/mrdoob/three.js/blob/master/examples/models/skinned/marine/marine_anims.blend

Ok, ele está funcionando agora, https://antont.github.io/three.js/examples/webgl_animation_skinning.html atualizado (se alguém viu a versão com erros antes, certifique-se de não obtê-la do cache agora)

Tentei várias coisas de um lado para o outro, verifiquei se todos os ossos estavam digitados, as opções de descanso e pose, etc., mas no final parece que foi só que quando eu tinha apply modifiers em, peguei a deformação estranha. Faz sentido porque então o modificador de armadura foi aplicado ao geom base na exportação e, em seguida, deformado pelo skel anim em three.js.

Portanto, há uma exportação em funcionamento da mistura marinha não modificada com o novo exportador em: https://github.com/antont/three.js/blob/example_skinning/examples/models/skinned/marine/marine_anims.json

Acho que tem apenas uma das animações, porém, preciso descobrir a seguir como exportar todos os anims com a nova exportação.

Captura de tela das opções usadas:
threejs-skelexport-marineoptions

@antont obrigado por pesquisar isso!

Eu configurei um canal de equipe do Slack para three.js, principalmente para trabalhar em questões de animação, mas pode ser usado para qualquer coisa relacionada a três. Este é um canal de equipe privado, então as pessoas só podem entrar por convite. Estou à procura de:

  • pessoas que conhecem Python
  • pessoas com um conhecimento sólido de manipulação no Blender
  • pessoas com experiências de animação _e_ cenas dispostas a compartilhar

Isso não é uma coisa elitista. Tenho pouco tempo e não tenho largura de banda para ensinar Python ou Blender a alguém, então peço desculpas se isso não parece amigável para novatos (é para isso que serve o IRC). Isso é para aqueles que realmente querem beliscar isso na bunda e têm alguns conjuntos de habilidades úteis para contribuir. IRC me irrita e até mesmo tópicos do github não são meu lugar favorito para colaboração. Tenho usado o Slack com outros grupos e tem sido ótimo.

Envie-me um e-mail (e observe seu identificador no github também) para um convite
ed [ponto] caspersen [arroba] gmail [ponto] com

Acho que uma mudança nas últimas apis do blender quebrou o método que o exportador usa para selecionar a ação na malha.

O comportamento que estou vendo (não totalmente confirmado) é que o exportador está exportando:

  1. A ação que é selecionada na armadura que é o pai da malha selecionada ...
  2. Tentar exportar as outras animações não selecionadas e falhar ao tentar definir a animação na armadura, a fim de percorrer os quadros-chave de ações. O resultado é que a animação da etapa 1 é exportada repetidamente com os nomes de ações diferentes ... A duração parece estar correta, no entanto, entre as diferentes ações.

Eu acho que uma mudança recente no Blender agora requer que a armadura seja o objeto selecionado na visualização 3D para que a mudança de ação tenha efeito.

Isso poderia ser resolvido alterando o exportador para exigir que a armadura seja selecionada para exportação, em vez da malha, e a ação de alteração realizada no script pode funcionar.

Deixe-me saber se você quiser mais ajuda com o exportador do blender. Eu tenho um histórico decente no script para pré 2.6 ..

Outro problema, eu precisava ter a combinação certa de "descanso" selecionada nos parâmetros do script e na armadura. Isso parece frágil ..

Outro problema é o "Aplicar modificadores" ...
Pelo que eu posso dizer, na circunstância normal de exportar uma malha sem pele, isso nunca deve ser o caso e deve ser desativado ou ter um botão separado para excluir malhas sem pele.
Aplicar modificadores faz com que a armadura transforme a malha em qualquer quadro que esteja definido no momento.
Isso mangueira a ligação para a malha e demonstra os problemas mostrados em outras partes deste tópico.

Seria bom encontrar uma maneira de simplificar essas etapas.

Acabei de fazer alguns testes e confirmar que o exportador está exportando os frames da mesma animação para cada animação exportada ...

Então, como eu exportei minha malha com a ação "andar" selecionada ...
Todas as animações no arquivo são cópias da animação "caminhada" com nomes e durações diferentes.

Estou surpreso que o exportador não esteja travando completamente no caso de você ter uma ação com mais frames do que as outras animações no arquivo.

Uma descrição sucinta desse bug:

Todos os quadros-chave de animações exportados são aqueles da animação selecionada, em vez de seus próprios quadros-chave.

Eu encontrei pelo menos uma correção parcial para isso ...

Em "io_three \ exporter \ api \ animation.py"

no início de "parse_pose_action" (em torno da linha 183)

inserir:

context.scene.objects.active = armature

Com essa mudança, agora consigo exportar animações exclusivas ...

Olá, obrigado por este feedback + correção. Fiz a alteração recomendada e exportei com "Pose" e "Aplicar modificador" = desativado e funcionou muito bem !!
obrigado

context.scene.objects.active = armadura

Ansioso para tentar isso.

Tive os mesmos problemas que levantei em:

https://github.com/mrdoob/three.js/issues/7165

Trabalhar ao redor funcionou para mim, feliz que eu possa realmente conseguir várias animações. Obrigado por isso!

Ótimo! Que bom que pude ajudar!

Liguei alguns outros bugs que podem ser manifestações disso, de volta a este tópico.

@manthrax (com sua correção parcial) funciona bem para mim exportando 'Animações esqueléticas: Pose' e desmarcando 'Usar modificador durante a renderização' no modificador de armadura.
image

Uma demonstração de um personagem com 3 animações funcionando> http://unboring.net/lab/6326/hero_72/

Você acha que seria possível / fácil exportar e executar animações corretamente com 'Modo de descanso'?
Porque, nesse caso, o exportador só grava os quadros-chave, não todos os quadros, e o arquivo json passa de 873kb para 174kb

Enviou alguns convites do Slack. Não tenho certeza de que tipo de tempo terei amanhã, mas devo ter algumas horas no domingo.

@arturitu eu posso ver isso ... Qual é o comportamento agora para a pose rest_mode que está incorreto?
Parece o mesmo problema?

@repsac :

Exportar atualmente leva muito tempo na minha máquina para grandes animações ...

Acontece que a grande maioria das vezes é devido ao spam de log ...

E simplesmente desligar o logger provavelmente não resolverá isso. Eu tive esse problema com scripts Python no passado ... Mesmo se a saída de log estiver desabilitada, a construção da string ainda ocorre nas instruções de log.
O script precisará ser reescrito para fazer algo como "if (logging) log.debug (" blah ");" em todas as instruções de registro, para não incorrer na sobrecarga de formatação de todas as mensagens.

Simplesmente comentar as mensagens de registro que vi na exportação de animação / quadro-chave, fez meu tempo de exportação ir de 2 minutos para cerca de 5 segundos.

@arturitu Eu tentei exportar rest_pose ... Consegui um arquivo menor, mas as ligações do esqueleto estão bagunçadas ao tentar reproduzir ... Alguma idéia?

Estou testando com o arquivo de mistura marinha, ligado a uma malha diferente ...

image

Animações esqueléticas: descanso

image

Animações esqueléticas: pose

@manthrax Eu acho que em Rest tem um problema com a parte bones em JSON, porque muitos deles têm muito "parent": null, enquanto em Pose os bones têm o valor parent correcto. E o número de ossos é diferente (no meu caso em Pose escreva 38 e em Rest apenas 28)

Mas não sei se seria necessário outro tipo de BlendCharacter.js para mostrar uma animação correta

O script precisará ser reescrito para fazer algo como "if (logging) log.debug (" blah ");" em todas as instruções de registro, para não incorrer na sobrecarga de formatação de todas as mensagens.

Provavelmente não, isso pode ser endereçável dentro do próprio módulo de registro. Olha isso agora

Outro problema, eu precisava ter a combinação certa de "descanso" selecionada nos parâmetros do script e na armadura. Isso parece frágil ..

É, e eu tentei resolver isso no passado. Existem seções comentadas com

armature.data.pose_position =

por toda parte. Ao tentar no shell do Blender funcionou, mas não funcionou durante a exportação. Eu não tentei nas versões recentes do Blender, então talvez isso tenha sido corrigido (até que esteja quebrado novamente).

Com essa mudança, agora consigo exportar animações exclusivas ...

Boa pegada. A consciência contextual do Blender que ele requer é tão implícita às vezes que se torna simplesmente enlouquecedor de lidar.

A desativação do log foi fácil. Como o repo de três é muito grande, criei um repo temporário que pertencerá apenas ao exportador, tudo acabará sendo mesclado de volta.
https://github.com/repsac/io_three

Pelo que eu posso dizer, na circunstância normal de exportar uma malha sem pele, isso nunca deve ser o caso e deve ser desativado ou ter um botão separado para excluir malhas sem pele.

Se não for possível explicar por que ele deve permanecer ativado, eu optaria por configurá-lo como False se as animações estiverem habilitadas. O único problema pode estar nas exportações de cenas, o que não posso deixar de ser se as exportações de cenas suportarem animações de qualquer maneira. Tive problemas com a forma como o Blender lida com ações sob o capô que o faz parecer muito frágil.

@repsac Só queria dizer ... O exportador é incrível. Espero que nenhum dos meus comentários pareça crítica ... Já escrevi para exportadores de liquidificadores muito mais primitivos no passado ... mas nada com o escopo deste, então não é exagero dizer que é uma grande conquista.

re Logging: ainda não tenho certeza de como a sobrecarga da formatação da mensagem de log é eliminada apenas desabilitando a saída na estrutura de log, mas talvez eu não entenda as nuances da estrutura.

Pelo que posso dizer, qualquer registro da forma "someLoggingFunction (" formatted text: xyz ")" SEMPRE incorrerá na conversão / formatação do texto da mensagem, mesmo que a função não emita o texto internamente

Para zero overhead de log, as coisas teriam que tomar a forma de "Logger.log (function () {return SomeFormattedText;}), onde a função passada só é chamada se o log estiver habilitado.

. Em uma linguagem realmente compilada e otimizada, o compilador pode ser capaz de detectar que a função é autônoma e evitar as chamadas de formatação, mas mesmo assim, as chamadas de formatação podem ter efeitos colaterais para o resto do programa, então geralmente eles ainda seria incluído.

re: Exportações de cena com suporte a animação ...
Eu concordo, que no curto prazo, provavelmente é muito cedo para seguir esse caminho, MAS, se chegarmos ao ponto em que isso poderia funcionar ... seria incrível ser capaz de construir níveis inteiros com animação e exportar WYSIWYG para three.js Os moinhos de vento girariam ... rios e cachoeiras poderiam ser animados com UV .. plataformas poderiam voar .. tudo sem escrever nenhum código. Algum dia ...: D

Pelo que posso dizer, qualquer registro da forma "someLoggingFunction (" formatted text: xyz ")" SEMPRE incorrerá na conversão / formatação do texto da mensagem, mesmo que a função não emita o texto internamente

Bem, qualquer chamada de registro deve ser formatada da seguinte forma:

logger.info("foo bar %s", arg)

Portanto, a string não é formatada até que a API de registro seja passada *args sob o capô. Eu mudei a lógica de registro para

https://github.com/repsac/io_three/blob/master/addons/io_three/exporter/__init__.py

        level = options.get(constants.LOGGING, constants.DISABLED)
        version = options.get('addon_version')
        if level != constants.DISABLED:
            logger.init('io_three.export.log', level=level)

https://github.com/repsac/io_three/blob/master/addons/io_three/logger.py

def _logger(func):

    def inner(*args):
        if LOGGER is not None:
            func(*args)

    return inner


<strong i="18">@_logger</strong>
def info(*args):
    LOGGER.info(*args)


<strong i="19">@_logger</strong>
def debug(*args):
    LOGGER.debug(*args)


<strong i="20">@_logger</strong>
def warning(*args):
    LOGGER.warning(*args)


<strong i="21">@_logger</strong>
def error(*args):
    LOGGER.error(*args)


<strong i="22">@_logger</strong>
def critical(*args):
    LOGGER.critical(*args)

Nenhuma mensagem deve ser formatada. Eu não tenho nenhuma cena grande, então não posso testar isso, mas em teoria deveria, e se não tiver, então isso se torna a razão # 4576 porque eu odeio programação.

Espero que nenhum dos meus comentários pareça crítica

Não dificilmente, entre empresas de tecnologia cheias de bro-grammers aqui em SF (incluindo Silicon Valley) e a indústria de VFX eu já ouvi muuuuuuito pior, dito para mim em entrevistas.

No momento, revisando todo este tópico e tentando montar uma lista com marcadores do que especificamente deve ser feito. Vou postar quando tiver algo para vocês verem se está fechado.

Oh, excelente! Parece que você cuidou do registro. Minha python estava um pouco fraca para entender as nuances da sua solução.

Mundo pequeno, eu também estou em SF!

Muito legal ... pelo que posso deduzir deste tópico, é principalmente a correção de uma linha e, em seguida, resolvendo a ambiguidade do modo "resto" ... Ainda não tenho certeza de qual modo de descanso de caso de uso já .. se você conhece um, eu ficaria grato em entendê-lo ...

Eu teria que vasculhar todos os problemas antigos para fornecer links específicos, mas para uma resposta rápida, aqui está um detalhamento:

  • por volta de r66, houve um commit que alterou as exportações de usar REST para usar o modo POSE
  • Eu comecei minha própria versão do exportador nessa época, que se tornou aquela da qual estamos falando agora, e baseei minha lógica original na lógica REST
  • na r70, o meu era o exportador substituto, foi quando o inferno começou
  • Substituí a lógica com suporte POSE, que então interrompeu as exportações para outros usuários
  • Eu não conseguia entender o que diabos estava acontecendo, então implementei a alternância entre os 2

Até agora, parece haver 2 itens para resolver:

1) definir o contexto ativo na armadura

context.scene.objects.active = armature

2) não aplique modificadores a malhas esmaecidas

Vou testar a troca automática de pose novamente. Alguém uma vez disse que descobriram isso a partir de um script diferente, mas que o molho secreto não chegou ao exportador.

@manthrax Você pode verificar meu branch e ver se está funcionando para você?
https://github.com/repsac/three.js/tree/anim_fix

Isso está funcionando bem para animações no modo de pose, desde que seu primeiro quadro-chave tenha a armadura configurada exatamente da mesma forma que sua malha. Se você tentar adicionar quaisquer transformações loc / rot / scale, no modo de pose, e atribuí-las como o primeiro quadro-chave, o modelo será renderizado distorcido.

Também encontrei o problema REST / POSE (dev-branch atualizado). O modelo tem mais de 40 ossos e 7 ações. POSE funciona bem, mas o arquivo exportado é enorme. REST tem animações totalmente distorcidas.

O problema parece estar localizado no array _skinIndices_ exportado. Esteja no modo POSE ou REST, a matriz _skinIndices_ é idêntica, mas a ordem e, portanto, os índices na matriz _bones_ exportada são completamente diferentes. Acho que é porque __rest_bones () _ usa _armature.data.bones_ para indexar os ossos e __pose_bones_ usa _armature.pose.bones_ (api / mesh.py). Posteriormente, __skinning_data () _ sempre usa _armature.pose.bones_ independentemente da configuração REST / POSE. Um teste rápido parece confirmar isso. Usar _armature.data.bones_ em __skinning_data () _ exporta meu modelo e animações corretamente no modo REST.

Não conheço three.js bem o suficiente para responder a isso e enviar uma correção, mas qual é realmente _skinIndices_ errado ou a ordem de _bones_? A ordem de _bones_ em REST parece ser idêntica aos índices dos grupos de vértices do Blender, o que provavelmente é uma coisa boa.

Olá, este problema não foi fechado nem concluído sobre o que é agora? portanto, tenho outra preocupação com esse problema: alguém experimentou a reprodução simultânea de 2 animações? Meus testes não funcionam, mas não tenho certeza sobre a qualidade do meu objeto 3D. Por outro lado do que li acima me pergunto se isso é realmente possível?

para completar a preocupação: o exportador de liquidificador permite NLA?

@Derived yes

Nla mais geralmente é compatível apenas com ossos AFAIK

Oi, obrigado por este feedback. Sim, posso executar várias animações e há uma "mistura" das animações; Eu uso o v71, mas com a versão exportadora do blender atualizada (conforme discutido aqui acima). No entanto, deixe-me explicar melhor minha observação:

Meu modelo tem 2 animações manipuladas: (A1) levantar o braço e (A2) virar a cabeça para a esquerda.

1) Jogue (A1) "levante os braços" e pare na metade da animação (os braços estão na metade)
2) jogar (A2) "virar a cabeça para a esquerda" => a cabeça virar para a esquerda MAS os braços retornam à posição inicial em vez de ficar onde estão.
3) Finalmente, se eu jogar os 2 juntos, a cabeça vira para a esquerda e os braços levantam, mas não como deveriam fazer, mas sim como uma mistura de (A1) (levantar) e (A2) (não mover os braços) com a influência dos ossos imóveis de (A1) para os móveis de (A2) e oposto.
Portanto, olhei para o arquivo json e posso ver que a animação descreve as posições dos ossos para TODOS os ossos em cada animação. Portanto, para (A2) "virar a cabeça para a esquerda", a animação inclui posições dos ossos para os braços que simplesmente não mudam (direita, A2 eles não se movem em A2). Mas como o three.js adivinha que essas posições ósseas não são significativas e não devem influenciar a execução de (A1)?
Espero que este exemplo seja compreensível.

Perdendo minha cabeça com isso

Aqui está minha malha manipulada no liquidificador:

blender-cycle

Aqui está em três meses:

three-cycle

Passei 2 dias direto na exportação. Último liquidificador, último três. Qual é o estado atual do exportador?

@DelvarWorld Acho que você precisa usar o exportador do Blender no branch DEV para funcionar corretamente.

@arturitu eu sou :(

@DelvarWorld

Qual é o estado atual do exportador?

eu acho que isto

repsac não foi atribuído por mrdoob em 30 de dezembro de 2015

pode ser o problema. Obviamente, precisa de algum amor.

Eu posso ir à caça de vários bugs que foram relatados recentemente. Você pode compartilhar um arquivo para reproduzir este problema (quanto mais simples, melhor)?

Por conveniência, vou postar isso aqui também. Eu tentei exportar um formulário de modelo de teste @DelvarWorld e postei um comentário e uma captura de tela em # 8412.

@phfatmonkey
https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561 este?

Excelente trabalho para corrigir todos esses problemas: +1:!

Quando terminar o patch, você se importaria de abrir um novo tíquete com descrições ou links para os problemas do exportador restantes, recém-criados ou descobertos?

É incrivelmente difícil acompanhar o que está sendo postado em algum lugar de tickets existentes.

Idealmente, um por caso (se ainda não existir) e um "Blender Exporter Issues" mestre (ou algo parecido) referenciando todos eles.

O que eu consigo lembrar do topo da minha cabeça é

  • Os normais estavam sem rotação (fixo)
  • Problemas de animação ao exportar uma hierarquia de cena. Funciona agora?
  • Depois, há o resto do problema mencionado em sua postagem
  • Depois, há o problema de skinning / keyframes (mensagens de erro?)
  • ... (tinha mais, eu acho)

Claro! Essa é uma ótima ideia. Vou tentar chegar neste fim de semana,
caso contrário, na segunda-feira, quando eu voltar ao escritório.
Em 15 de abril de 2016, 17:12, "tschw" [email protected] escreveu:

@phfatmonkey https://github.com/phfatmonkey

8412 (comentário)

https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561
este?

Excelente trabalho para corrigir todos esses problemas [imagem:: +1:]!

Quando terminar o patch, você se importaria de abrir um novo tíquete um
descrição ou link para o restante, recém-criado ou descoberto
problemas do exportador?

É incrivelmente difícil acompanhar o que está sendo postado
em algum lugar nos bilhetes existentes.

Idealmente, um por caso (se ainda não existir) e um mestre "Exportador de Blender
Problemas "(ou algo parecido) referenciando todos eles.

O que eu consigo lembrar do topo da minha cabeça é

  • Os normais estavam sem rotação (fixo)
  • Problemas de animação ao exportar uma hierarquia de cena. Funciona agora?
  • Depois, há o resto do problema mencionado em sua postagem
  • Depois, há o problema de skinning / keyframes (mensagens de erro?)
  • ...

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/mrdoob/three.js/issues/6050#issuecomment -210693332

E quanto à edição de animação não linear como pode ser feita no Blender? Não há ninguém interessado nesta questão? Expliquei o ponto em uma mensagem anterior, mas não recebi nenhum comentário.

@derivou
Qual mensagem?

Quando for necessário um código customizado, alguém terá que escrevê-lo. Uma contribuição pode ser bem-vinda ...

Aqui, a mensagem acima datada de 5 de fevereiro expliquei o problema ao combinar várias animações.
Eu ficaria feliz em ajudar no desenvolvimento, mas acho que requer primeiro algumas discussões para compartilhar ideias e discutir sobre como implementá-lo. Abri, portanto, um item de sugestão "Animação Não Linear" # 7913

Este é um longo problema e vou confessar que não li tudo, mas se o problema ainda é como descrito pelo OP (ou seja, preciso de uma maneira de animar um personagem no Mixamo e carregar em three.js), então você pode realizar isso com o exportador glTF Blender e THREE.GLTFLoader. Este é meu fluxo de trabalho: https://medium.com/@donmccurdy/creating -animated-gltf-characters-with-mixamo-and-blender-728dc120e678

Alternativamente, você pode simplesmente exportar como FBX do Mixamo e carregar diretamente usando o FBXLoader.
Na última versão (R89), ele deve funcionar muito bem.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Bandit picture Bandit  ·  3Comentários

scrubs picture scrubs  ·  3Comentários

filharvey picture filharvey  ·  3Comentários

yqrashawn picture yqrashawn  ·  3Comentários

donmccurdy picture donmccurdy  ·  3Comentários