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?
Respostas:
Normalmente, existem menos de 360 direções. O caso comum é 8 ou 16. As animações também são curtas.
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.
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:
fonte
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.
fonte
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.
fonte
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.
fonte