Como posso implementar sprites 2D pré-renderizados que podem enfrentar qualquer direção?

28

Eu tenho pesquisado no Google como jogos como Clash of Clans renderizam suas tropas, e parece que eles estão pré-renderizando modelos 3D em folhas de sprite 2D antes do tempo de execução, e renderizando essas imagens 2D em tempo de execução. No entanto, as tropas em Clash of Clans podem enfrentar qualquer direção.

No meu jogo semelhante, se eu fosse criar uma imagem para cada orientação (0-360 graus) para cada tipo de tropa (existem 18 tipos) em cada quadro em sua animação, eles teriam que produzir uma quantidade enorme de imagens. Não posso imaginar que isso é o que outros desenvolvedores estão fazendo, então como posso realmente fazer isso?

Kyle Lin
fonte
2
A técnica a que você está se referindo é chamada "Billboarding", a propósito.
Weckar E. 15/03

Respostas:

45
  1. Normalmente, existem menos de 360 ​​direções. O caso comum é 8 ou 16. As animações também são curtas.

  2. A automação é sua amiga. Escreva um script Blender / 3DMax / etc para carregar um modelo da lista, renderize-o em todos os quadros e direções necessários para uma imagem. Etiquetar imagens de acordo com o conteúdo e abordá-las no jogo.

  3. Coloque tudo em atlas de textura (também conhecidos como folhas de sprite) para acesso mais rápido.

No final, você terminará com vários milhares de sprites, organizados em apenas uma dúzia de atlas. Não é grande coisa;)

Não consegui encontrar uma imagem do CoC, mas aqui está o Diablo II, que usou a mesma abordagem para animações de personagens. Por exemplo, ataque corpo a corpo da Amazon:

insira a descrição da imagem aqui

Kromster diz apoio Monica
fonte
4
O equilíbrio entre poder / tempo de renderização versus espaço de armazenamento e tempo de download.
M. Mimpen
3
O que é um "atlas"? Algum link?
22417
7
@ B Procure por "Atlas de textura". É um conceito muito comum.
Kromster diz apoio Monica
2
Pode valer a pena notar que, nas discussões sobre essa técnica pelos desenvolvedores da Blizzard North, eles chegaram basicamente à conclusão de que era uma medida estranha de interrupção para lidar com um momento embaraçoso nas capacidades gráficas de PC, e mesmo assim realmente não acabam valendo a pena. Houve uma entrevista sobre isso e, no final, demorou tanto tempo para renderizar tudo que a conclusão geral foi que não era uma ótima abordagem (e o próximo jogo seria definitivamente 3D).
KRyan
1
@KRyan boa adição! Eu acho que foi devido à quantidade VAST de NPCs e equipamentos no D2. Para CoC e plataformas móveis, esse é um equilíbrio diferente.
Kromster diz apoio Monica
8

Lembre-se também da baixa resolução dessas imagens. Há mais algumas coisas que você pode fazer para economizar espaço, embora eu não saiba qual delas é usada pelo Clash of Clans:

  • Você pode influenciar o posicionamento das tropas para enfrentar as direções padrão (N, E, S, W, NE, SE, SW, NW) com mais frequência do que nunca, e otimizar apenas para as direções padrão.

  • Você pode fazer uma abordagem combinada, na qual pré-renderiza apenas algumas direções. Durante o quadro, você pode renderizar as tropas que não correspondem a uma imagem existente ou usar a imagem mais próxima se o tempo acabar.

  • Use simetrias esquerda / direita sempre que possível para reduzir pela metade o número de quadros armazenados.

  • Você pode priorizar certas animações, como caminhar e descansar, armazenando mais instruções e quadros para elas. Em seguida, desioriorize outras animações, como o giro de uma espada, onde você armazena menos direções e quadros (sugiro manter mais instruções para o primeiro e o último quadro do giro).

  • Você pode falsificar as direções restantes usando a imagem mais próxima e esticando-a.

No geral, podemos estar falando de 18 unidades, até 8 direções, talvez 2 segundos de animações a 20 quadros por segundo, uma média de 64x64 pixels e cerca de 2 bytes por pixel. Isso significa 18x2x20x64x64x2 = 50 MB. Eles também podem dimensionar o número de direções, resolução e número de quadros com base nos recursos do dispositivo e no número de unidades usadas no mapa.

Pedro
fonte
2
Você também pode alternar de outdoors para modelos 3D se aumentar o zoom perto de um determinado objeto - para que ele fique próximo ao 3D e use o 2D mais rápido quando houver muitas imagens em segundo plano. Lidar com a transição sem problemas pode ser complicado.
Tim B
@ TimB O que é especialmente bom porque você acaba renderizando altas resoluções e usando imagens para baixas resoluções.
Peter Peter
2

Além da resposta do @Kromster, observe que as imagens geralmente são compactadas significativamente e nas imagens grandes de "atlas", onde há muitos elementos repetidos (por exemplo, fundo em branco), a compactação é significativa. Portanto, o "tamanho" final das imagens não é apenas uma multiplicação direta do tamanho da imagem individual.

afaulconbridge
fonte
5
A compactação funciona de maneira diferente para GPUs e para jpegs, especialmente GPUs móveis nos dispositivos para os quais o Clash of Clans foi escrito. en.wikipedia.org/wiki/S3_Texture_Compression Em outras palavras: o plano de fundo em branco é 100% irrelevante para a compactação de textura.
Peter
-2

Para um exemplo clássico, sugiro que você baixe o Doom original, que usou sprites 2D em um ambiente pseudo-3D. Os sprites tinham 8 direções opostas (em relação ao ponto de vista do jogador) e da memória cerca de 8 tamanhos diferentes à medida que se aproximavam. Isso era muito visível, mas era aceitável o suficiente para o jogo. No Clash ou em outros jogos de visualização isométrica, não há necessidade de considerar a distância, é claro.

Graham
fonte
Não havia tamanhos diferentes. A renderização acabou de aumentar o tamanho do vizinho mais próximo, conforme necessário.
R ..
@R .. Obrigado pela correção. Faz alguns anos desde que eu joguei! :)
Graham
1
Desculpe, mas isso não responde à pergunta "Como posso implementar ..".
Kromster diz apoio Monica
@Kromster Então, para uma pergunta que faz "como implementar isso?", Não estou respondendo à pergunta com uma rápida visão geral de um jogo clássico implementado (8 ângulos em vez de 360) e mencionando que como eles o fizeram é particularmente fácil de ver quando você toca, já que o OP aparentemente não sabia dizer no Clash? E observando as diferenças entre esse caso geral e o caso específico de uma vista isométrica? Admito livremente que não é tão boa quanto a sua resposta, mas há uma diferença entre uma resposta de qualidade inferior e não responder à pergunta.
Graham