Animação esquelética eficiente

11

Estou pensando em adotar um formato de animação esquelética ( como solicitado aqui ) para um jogo RTS. A representação individual de cada modelo na tela será pequena, mas haverá muitas!

Na animação esquelética, por exemplo, arquivos MD5, cada vértice individual pode ser anexado a um número arbitrário de juntas.

Como você pode apoiar isso com eficiência enquanto faz a interpolação no GLSL? Ou os motores fazem suas animações na CPU?

Ou os mecanismos definem limites arbitrários no máximo de juntas por vértice e invocam multiplicações de nop para as juntas que não usam o número máximo?

Existem jogos que usam animação esquelética em um ambiente semelhante ao RTS, provando assim que, nas placas gráficas integradas, não tenho com o que me preocupar em seguir o caminho dos ossos?

Vai
fonte
+1, esta é uma boa pergunta. Eu sempre me perguntei se a animação deve ser feito em linguagem de sombreamento ou na CPU ...
James
RTS jogos utilizando o motor de EA SAGE (C & C 3 e depois, série BFME) usar animação esquelético, mas não vértices estão ligados a um único osso (pelo menos em BFME)
Bart van Heukelom

Respostas:

6

Limitar o número de influências ósseas é comum, sim. Você pode influenciar não utilizado com peso 0 ou ter um mecanismo de loop / saída antecipada para pular.

Quanto a saber se funciona para um RTS, não tenho uma referência para você, mas imagino que você precisará de LOD se trabalhar com um grande número de caracteres na tela e também se esses caracteres forem pequenos.

LODing caracteres esqueléticos é o mesmo que LODing em qualquer outra coisa, exceto que você provavelmente desejará LOD as influências ósseas e esqueléticas, bem como a malha.

Por exemplo, um baixo nível de detalhe pode usar apenas um único osso com a maior influência por vértice (também conhecido como "esfolamento").

Você provavelmente também limitaria o número de ossos no esqueleto para um modelo com baixo nível de DMI.

Finalmente - considere se você sempre precisa para tornar os personagens close-up. Você provavelmente só quer modelar, skin e animar os personagens para a distância mais próxima da visualização ... certamente você não deseja armazenar todos os dados de tempo de execução em uma resolução muito maior do que jamais renderizará. Você pode achar que não precisa de mais do que um esqueleto muito básico e algumas influências por vértice para sua situação.

JasonD
fonte
Eu estava esperando que alguém poderia dizer: "você realmente não quer ossos para torres em um RTS, se suas peças são pequenas, considere MD3 com ele é ligado modelos apresentam vez" ou algo
Will
Bem, eu não usaria skinning para esses tipos de malhas nesse tipo de situação, mas "bones" são apenas um nome sofisticado para transformações hierárquicas. Nada impede você de anexar malhas a eles, em vez de pesar vértices. (em outras palavras, para uma torre, você pode ter apenas dois ossos e duas malhas, sem esfolar / pesar).
JasonD
2

Eu não acho que a animação esquelética seja boa para um jogo de RTS, a animação esquelética exigirá processo extra para todos os personagens, enquanto a animação do quadro-chave consome mais memória, mas você usará o mesmo para muitos personagens, também um jogo de rts exige poucas animações por personagem

James
fonte