Módulo 10 · Aula 10.8 · Otimização: imagens e objetos
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 6 h/a | ⭐⭐ | Godot 4.7, Python, explorador de arquivos | C5, C6 |
Objetivos de aprendizagem
- Medir o tamanho de um jogo e de cada arquivo dele.
- Reduzir imagens (tamanho em pixels e formato) e comparar antes e depois.
- Reduzir o detalhe de modelos 3D que a câmera nem mostra de perto.
- Contar objetos e chamadas de desenho e diminuir o que não aparece.
Pré-requisitos
Aula 9.7; Aula 10.6.
Materiais
Projetos da turma; chave-da-porteira; Python com Pillow.
Conceitos
Por que otimizar. Um jogo na web é baixado inteiro antes de começar. No celular, com internet fraca, 10 MB a mais é muita espera. E computador de laboratório não é computador de jogo.
Regra de ouro (de novo). Medir antes, mudar uma coisa, medir depois. Sem número, "ficou mais leve" é palpite.
Imagens. Duas coisas mandam no peso: a quantidade de pixels e o formato. Medido na preparação do curso, com uma captura do editor de 1920 × 991:
| Versão | Tamanho |
|---|---|
| PNG original, 1920 × 991 | 412 KB |
| JPG qualidade 85, 1920 × 991 | 240 KB |
| PNG na metade, 960 × 496 | 254 KB |
| JPG qualidade 85 na metade | 78 KB |
PNG guarda tudo sem perder nada (bom para pixel art e desenho com cor lisa). JPG perde um pouco de detalhe e fica bem menor (bom para fotos e capturas). Nos desenhos de pixel art do curso, o PNG pequeno já é o melhor: os sprites do Sementes têm poucos KB.
GIF. Na Aula 10.6, o mesmo trecho caiu de 1953 KB para 1014 KB só mudando a largura e quantos quadros pular.
Modelos 3D. Uma cápsula redonda é feita de muitos triângulos. O mandacaru do Chave da Porteira usa cápsulas com o detalhe padrão do Godot. Gerando de novo com menos lados (radial_segments = 12 e rings = 2 em cada cápsula):
Versão do mandacaru.glb | Tamanho |
|---|---|
| detalhe padrão | 207 KB (211.816 bytes) |
| 12 lados, 2 anéis | 19 KB (19.472 bytes) |
Mais de 10 vezes menor. Os mandacarus ficam fora do labirinto, longe da câmera: vale conferir no jogo se a diferença aparece. (A comparação visual não foi feita nesta versão do curso; só o tamanho foi medido.)
Objetos e chamadas de desenho. Lembra da Aula 9.7: com sombra e neblina, 146 objetos e 102 chamadas de desenho; sem, 69 e 25. Outras ideias que diminuem: juntar objetos que nunca se mexem, reaproveitar malha e material, apagar (queue_free) o que saiu da tela e não volta.
Exemplos
Trecho do gerador do mandacaru com o detalhe reduzido (só duas linhas a mais):
var malha := CapsuleMesh.new()
malha.radius = raio
malha.height = altura
malha.material = material
malha.radial_segments = 12
malha.rings = 2Tutorial passo a passo
Parte A. Onde está o peso? (60 min)
- No explorador de arquivos, abra a pasta exportada de um jogo seu (ou a pasta do projeto). Ordene por tamanho. Anote os cinco maiores arquivos.
- Some o total da pasta (botão direito → Propriedades).
Parte B. Imagens (100 min)
- Escolha uma imagem grande do seu jogo ou do portfólio. Faça três versões: metade do tamanho, JPG e as duas coisas juntas. Pode usar o script abaixo.
- Abra cada versão no jogo ou na página. Qual dá para usar sem a turma perceber diferença?
from PIL import Image
import os
nome = "minha_imagem.png"
imagem = Image.open(nome).convert("RGB")
metade = imagem.resize((imagem.width // 2, imagem.height // 2))
imagem.save("teste_qualidade85.jpg", quality=85)
metade.save("teste_metade.png")
metade.save("teste_metade85.jpg", quality=85)
for arquivo in [nome, "teste_qualidade85.jpg", "teste_metade.png", "teste_metade85.jpg"]:
print(arquivo, os.path.getsize(arquivo) // 1024, "KB")Parte C. Modelo 3D (60 min)
- Numa cópia do Chave da Porteira, acrescente as duas linhas do Exemplo em
ferramentas/gerar_mandacaru.gde rode a ferramenta (Aula 9.2). Compare o tamanho do.glbe olhe no jogo.
Parte D. Relatório (40 min)
- Tabela "antes e depois" do seu jogo: tamanho total da pasta, maior arquivo, objetos e chamadas de desenho (Aula 9.7). Qual mudança deu mais resultado com menos trabalho?
Imagens
Não há capturas nesta aula; o resultado é a tabela de cada aluno.
Indicação da interface
| Item | Onde |
|---|---|
| tamanho de um arquivo ou pasta | Explorador de Arquivos do Windows, botão direito → Propriedades |
| ordenar por tamanho | Explorador, modo Detalhes, coluna Tamanho |
| números do jogo rodando | Godot, Depurador → Monitores |
O código completo
O script de imagens está na Parte B. O gerador do mandacaru está em modulos/modulo-09-3d/projetos/chave-da-porteira/ferramentas/gerar_mandacaru.gd.
Explicação do código
quality=85é um bom meio-termo do JPG; abaixo de 70 os borrões começam a aparecer.imagem.width // 2divide e descarta a parte quebrada (pixel não tem metade).radial_segmentsé quantos lados a cápsula tem em volta;rings, quantos anéis no meio. Menos lados, menos triângulos, arquivo menor.
Resultado esperado
Tabela de antes e depois de um jogo próprio, com pelo menos duas otimizações medidas.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| pixel art ficou borrada | salvou como JPG ou reduziu com suavização | manter PNG e o tamanho original da pixel art |
| JPG com fundo preto onde era transparente | JPG não tem transparência | manter PNG nas imagens com transparência |
| o jogo não mudou de peso | otimizou um arquivo que nem é usado | medir quais arquivos o jogo usa de verdade |
Exercício guiado
Por que o curso diz para medir antes de otimizar? (Resposta: o trabalho deve ir para o que pesa mais. No Chave da Porteira, o mandacaru.glb sozinho tinha 207 KB, mais que qualquer script ou cena.)
Desafio individual
Deixe o seu portfólio com menos de 5 MB no total, sem tirar nenhum jogo.
Desafio avançado (opcional)
Faça o labirinto apagar a sombra quando o jogador estiver parado numa tela de aviso, e meça.
Critérios de avaliação
- Medições antes e depois, com números.
- Escolhas justificadas (PNG ou JPG, quanto reduzir).
Checklist de conclusão
Extensão
Veja quanto espaço os jogos ocupam no seu celular. Qual é o maior? Ele precisa ser tão grande?