1 pontos por GN⁺ 2025-08-20 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Apresenta o Space Invader Generator e explica o princípio de geração automática de vários invaders em pixel art
  • A estrutura usa geração simples de corpos vetoriais poligonais com regras geométricas como simetria, pontos aleatórios e espelhamento
  • Elementos de membros, como braços, tentáculos e chifres, também são expandidos com aleatoriedade e métodos geométricos, oferecendo possibilidades fáceis e criativas de variação
  • A partir da forma vetorial, faz a conversão para pixels e aplica cores, olhos e outros detalhes para concluir um visual familiar de gráfico de jogo
  • Todo o processo de criação e a lógica de implementação do código são apresentados, permitindo que estudantes e desenvolvedores personalizem ou pratiquem por conta própria

Visão geral

O Space Invader Generator é uma ferramenta com a qual qualquer pessoa pode criar facilmente, de forma aleatória, invaders em estilo pixel art. Este texto explica como ele funciona e descreve o processo criativo de geração aleatória com animações e exemplos. A abordagem se destaca por combinar design e programação, incluindo a estrutura geométrica dos invaders, a conversão de vetor para pixel e a aplicação de cores.

Contexto inicial

  • Ao desenvolver uma ferramenta de renderização 3D chamada Rayven, o autor percebeu a importância de criar resultados criativos concretos
  • Escolheu um alvo intuitivo e facilmente reconhecível, como Space Invaders, por gerar resultados simples e divertidos
  • Depois de desenhar vários invaders clássicos com renderização 3D baseada em vetor, surgiu a ideia de expandir isso para um gerador aleatório
  • Essa experiência de criação também foi compartilhada no desafio de código da Creative Coding Amsterdam

Desafio de código

  • O desafio de código de Space Invaders atraiu o interesse de muitos criadores e desenvolvedores
  • Diferentes implementações e resultados estão sendo reunidos e compartilhados ativamente em comunidades de desenvolvimento

Do esboço ao pixel

  • No início, o autor fez rabiscos e esboços à mão no papel para analisar a estrutura dos invaders
  • Com a ferramenta Aseprite, experimentou desenhar várias formas de invader em uma grade de 15x15 pixels
  • Descobriu padrões geométricos em comum, como simetria no eixo central e corpos poligonais simples
  • Ao combinar as vantagens da pixel art e dos gráficos vetoriais, conseguiu implementar uma função que gera automaticamente a maioria dos designs antes desenhados à mão
  • Mais detalhes da implementação podem ser vistos no repositório no GitHub

Processo de geração dos invaders

Encontrando o centro

  • Define o ponto central, que serve de referência para todas as operações
  • Os tentáculos são gerados na parte inferior, então o corpo principal é posicionado um pouco mais acima
  • Aproveita a simetria geral, desenhando apenas um lado e depois espelhando horizontalmente para concluir a forma

Definindo topo e base

  • Ao projetar as laterais do corpo, escolhe aleatoriamente os pontos superior e inferior
  • A forma dos dois lados permanece idêntica de acordo com o eixo de simetria

Desenhando o lado esquerdo

  • Posiciona aleatoriamente de 1 a 5 pontos no lado esquerdo do corpo
  • Gera diversos resultados a partir de um polígono convexo simples com deformações livres
  • A sobreposição de linhas é corrigida naturalmente durante o processo de pixelização

Espelhamento à direita

  • Usa os dados dos vértices do lado esquerdo para gerar automaticamente o reflexo à direita

Conectando o polígono do corpo

  • Liga os pontos para completar o corpo poligonal vetorial
  • Ao adicionar membros sobre essa base, a forma essencial do invader é definida

Adicionando membros

Como gerar tentáculos e chifres

  • Gera separadamente tentáculos inferiores (tentacle) e chifres superiores (horn), aplicando o mesmo método com diferenças apenas de posição e ângulo

Encontrando a raiz do tentáculo

  • Toma como base o ponto mais inferior do corpo e começa a gerar aleatoriamente o tentáculo esquerdo

Esboçando a linha central

  • Usa pontos aleatórios para criar uma polilinha (linha central)
  • Isso permite variar o comprimento e a forma dos tentáculos em vários sentidos

Aplicando espessura (fat line)

  • Como a linha central sozinha é fina demais, gera pontos dos dois lados para criar um tentáculo mais espesso
  • A forma fica mais grossa perto do corpo e mais fina na ponta, produzindo um efeito de afunilamento
  • Em partes com ângulos acentuados, reduz a largura da linha para representar uma conexão mais natural
  • Usa um parâmetro de easing para controlar a largura

Finalizando o tentáculo

  • Conecta os pontos das duas extremidades para completar o tentáculo espesso

Expandindo para vários tentáculos e chifres

  • O mesmo método pode ser expandido para simetria esquerda-direita, tentáculos centrais e chifres superiores
  • No caso do tentáculo central, a geração é encerrada mais cedo para evitar colisão com os tentáculos laterais já desenhados
  • Os chifres são posicionados à esquerda e à direita com um intervalo de ângulo mais estreito para evitar sobreposição

Conversão de vetor para pixel

Pixelização do corpo

  • Um pixel do corpo é definido verificando se o centro de cada pixel está dentro do polígono vetorial
  • A prioridade aqui é a simplicidade e a velocidade de execução, mais do que a precisão

Pixelização dos membros

  • Tentáculos e chifres são finos, então muitas vezes o centro não fica dentro da forma
  • Nesses casos, o pixel é atribuído verificando a distância entre os pontos e os centros dos pixels adjacentes
  • Também é possível melhorar a naturalidade dos tentáculos refinando a linha central com line splitting

Adicionando olhos

  • Escolhe aleatoriamente entre vários conjuntos de olhos pré-preparados
  • Posiciona os olhos perto do centro do corpo e aplica padding externo com pixels de margem
  • Pixels sobrepostos são removidos automaticamente para parecerem buracos

Aplicação de cores

Lógica de geração de cores

  • Usa o espaço de cores OKLCH
  • Em comparação com HSL, mantém uma luminosidade (lightness) mais consistente e permite combinações de cores vibrantes e variadas
  • Mantém um valor fixo de luminosidade e define aleatoriamente os outros dois parâmetros para criar múltiplas variações
  • Isso produz invaders com continuidade visual e uma aparência consistente

Uso de variações em CSS

  • As cores podem ser ajustadas com variáveis CSS
  • Alterações de luminosidade e saturação podem ser aplicadas conforme a situação, como contraste com elementos da UI e modo de depuração

Implementação da animação

  • Como no jogo original, aplica uma animação simples de 2 frames para dar movimento aos tentáculos, chifres e olhos
  • Gera um frame modificado duplicando a linha central dos membros e deslocando-a aleatoriamente
  • Os olhos também são movidos em um pixel para aumentar a sensação de vida

Redimensionamento

  • Ao aumentar o tamanho da grade, o invader se torna cada vez mais detalhado e complexo
  • Se ficar grande demais, a abstração vetorial se destaca e a sensação original de invader se perde
  • O limite vai até 31x31 pixels, com uma opção oculta permitindo chegar a 51x51

Conclusão

  • Foi concluído um gerador capaz de criar automaticamente uma variedade infinita de invaders coloridos
  • O processo de criação e de escrita do post proporcionou aprendizado, diversão e liberdade criativa
  • Como tanto o código quanto os princípios estão abertos, fica fácil praticar, experimentar e personalizar

Impressões sobre a produção

  • O código JavaScript presente no post foi organizado para facilitar estudo e consulta
  • A animação foi projetada com uso de Anime.js e várias dependências externas, e implementada em TypeScript
  • Há também um modo de depuração separado e opções de etapa para explorar diretamente o processo de geração

Bônus - post sobre desenhar cordas

  • Também vale conferir um post interativo anterior sobre como desenhar formas de corda (rope) com SVG e JavaScript

Ainda não há comentários.

Ainda não há comentários.