As animações do Minecraft estão codificadas no jogo? [fechadas]

12

Gostaria de saber como o sistema de animação funciona no minecraft. Tenho a sensação de que todos os monstros estão codificados no jogo. Entalhe realmente ficou lá e criou as matrizes para todos os ossos da animação manualmente?

Eu gosto de recriar jogos por diversão, então eu gostaria de saber como ele fez isso. Além disso, se ele realmente os codifica ... existe uma maneira melhor?

radenon
fonte
2
por que você acha que ele pode ter animações codificadas?
Ali1S232 16:11
Parece que essa pergunta é respondida apenas pelo Notch.
Michaelhouse
9
Mais ao ponto, por que você se importa como o Minecraft fez isso? Você tem alguma idéia de como realizar a mesma coisa de outra maneira?
Tetrad
1
minecraftforum.net/topic/361430-181smp-smart-moving O criador deste mod pode ter uma resposta para você, mas a animação não é uma área do código minecraft que eu examinei antes.
James
1
Examinei o código MCP antes e tenho 99% de certeza de que lembro de ter visto as animações codificadas. Eu não tenho mais minecraft (ou mesmo Eclipse) para verificar, no entanto.
BlueRaja - Danny Pflughoeft

Respostas:

18

Como outros já disseram, sim, os modelos e as animações são codificados. Se você gostaria de ver como isso foi feito, vá para o wiki Minecraft Coder Pack .

O pacote foi criado para ajudar os criadores de mods a descompilar, alterar e recompilar as classes do Minecraft. As instruções estão incluídas nos arquivos leia-me que acompanham o pacote. O pacote contém scripts para descompilar, recompilar e reobstruir o jogo e o servidor.

As classes que você deseja examinar são: ModelBase, ModelBiped e ModelRenderer.

ModelBiped contém as seguintes funções que fazem as animações humanóides:

public void render(Entity entity, float time, float f1, ...)
{
    setRotationAngles(time, f1, ...);
    ...
}

public void setRotationAngles(float time, float f1, ...)
{
    ...
    bipedRightArm.rotateAngleX = MathHelper.cos(time * 0.6662F + 3.141593F) * 2.0F * f1 * 0.5F;
    bipedLeftArm.rotateAngleX = MathHelper.cos(time * 0.6662F) * 2.0F * f1 * 0.5F;
    ...
}

Os balanços do braço são simplesmente funções cosseno. O braço direito é deslocado pelo PI para fazê-los girar em direções opostas.

gráfico das oscilações do braço

Espero que responda sua pergunta =)


Se você quiser obter mais informações sobre como realmente modificar o Minecraft, confira esta pergunta:

Como adiciono um mob personalizado ao Minecraft?

zfedoran
fonte
Sis! Rotação euclidiana :(.
Jonathan Dickinson
8

Os modelos no Minecraft são codificados. Não há noção de hierarquia de blocos (apenas uma lista de blocos). Isso significa que as animações são feitas proceduralmente (de uma maneira muito básica) ou valores codificados com interpolação.

Existem alguns editores de modelos do Minecraft, como o Techne ou o FMCModeler, que permitem importar / exportar o código do modelo do Minecraft para mods, mas eles não suportam animações, pois provavelmente são tratados de maneira diferente para cada modelo.

Aqui está uma amostra rápida gerada com o FMCModeler:

//variables init:
public ModelRenderer box;

//constructor:
box = new ModelRenderer(0, 0);
box.addBox(0F, 0F, 0F, 16, 16, 16);

//render:
box.render(f5);

Uma maneira melhor de fazer isso seria criar um modelador completo baseado em bloco com algumas noções de hierarquia de blocos, para que você possa animar os modelos com quadros-chave e interpolação.

Atualmente, estou construindo uma ferramenta de criação de jogos multiplayer que faz exatamente isso (entre outras coisas, http://craftstud.io/ ). Ele já permite a construção de modelos estáticos texturizados complexos e mais está a caminho.

Aqui está um modelo complexo criado com o CraftStudio Como você pode ver, os blocos estão dispostos em uma árvore à direita: http://i.stack.imgur.com/FRQeV.png

Cada bloco é serializado em disco / pela rede com os seguintes dados:

  • ID único
  • ID do nó pai
  • Posição (afeta os descendentes)
  • Escala (afeta os descendentes)
  • Ângulo (afeta descendentes)
  • Deslocamento do ponto de articulação
  • Tamanho do bloco
  • Deslocamento da textura do bloco (deslocamento das coordenadas UV para a texturização)

Pretendo adicionar suporte à animação armazenando um mapa com nomes de animação como chave e uma lista de quadros-chave como valor. Cada quadro-chave será associado a um bloco e um valor para animar. Entre os quadros-chave, os valores devem ser interpolados (linearmente para posição ou esfericamente para ângulos, procure lerp e slerp).

Elisée
fonte
0

Na verdade, os modelos de blocos do Minecraft não são codificados no jogo a partir do 1.8 e podem ser editados usando pacotes de recursos. O sistema de modelagem JSON é bastante fácil de entender e os modelos existem em / models / block. Você pode ver o código para ver como ele interpreta os modelos JSON.

Tubular
fonte