Pular para o conteúdo
Jogos Digitais
Nesta página
  1. Objetivos de aprendizagem
  2. Pré-requisitos
  3. Materiais
  4. Conceitos
  5. Exemplos
  6. Tutorial passo a passo
  7. Imagens
  8. Indicação da interface
  9. O código completo
  10. Explicação do código
  11. Resultado esperado
  12. Problemas comuns
  13. Exercício guiado
  14. Desafio individual
  15. Desafio avançado (opcional)
  16. Critérios de avaliação
  17. Checklist de conclusão
  18. Extensão

Módulo 9 · Aula 9.7 · Ambiente e otimização básica

Carga horáriaDificuldadeFerramentaCompetências
6 h/a⭐⭐Godot 4.7C2, C4, C5

Objetivos de aprendizagem

  1. Configurar céu, luz ambiente e neblina com WorldEnvironment.
  2. Ligar e desligar a sombra do sol e ver a diferença.
  3. Medir quantos objetos e quantas "chamadas de desenho" o jogo faz por quadro.
  4. Aplicar três regras simples de otimização em 3D.

Pré-requisitos

Aulas 9.1 a 9.6.

Materiais

Godot 4.7; chave-da-porteira (nós Ambiente e Sol em labirinto.tscn).

Conceitos

WorldEnvironment. Um nó que guarda o "clima" da cena num recurso Environment:

Parte (no Inspetor)No Chave da Porteira
Background → Mode = Skycéu azul em degradê (ProceduralSkyMaterial)
Ambient Light → Source = Colorluz de fundo cor de areia, energia 0,35: as sombras não ficam pretas
TonemapLinear
Fogligada, densidade 0,015, cor de poeira

Luz ambiente. O sol ilumina só o que ele "vê". O que fica na sombra recebe só a luz ambiente. Sem ela, a sombra vira um buraco preto; com ela demais, tudo fica lavado.

Neblina. Deixa o que está longe mais apagado. Ajuda a dar distância e, no sertão, parece poeira no ar.

Um ajuste que deu errado. Na primeira versão, com Tonemap Filmic e luz ambiente vinda do céu, o chão de areia saiu quase branco e as sombras ficaram azuladas. A troca para Linear, luz ambiente cor de areia e sol um pouco mais fraco (0,9) resolveu. Ajuste de luz é assim: muda um número, tira foto, compara.

Quanto custa cada coisa. O Godot conta, a cada quadro, quantos objetos desenhou e quantas vezes pediu para a placa de vídeo desenhar (chamadas de desenho). Medido no Chave da Porteira, na posição inicial, numa placa Intel Iris Xe:

SituaçãoObjetos desenhadosChamadas de desenho
sombra e neblina ligadas146102
sombra e neblina desligadas6925

A sombra faz o Godot desenhar a cena de novo, do ponto de vista do sol. Por isso dobrou os objetos e quadruplicou as chamadas.

Três regras de otimização.

  1. Reaproveitar malha e material (as 72 paredes usam uma malha e um material).
  2. Desligar o que não aparece: sombra em objetos pequenos, luzes longe da câmera.
  3. Medir antes e depois: sem número, "ficou mais leve" é só palpite.

O Módulo 10 volta ao assunto com tamanho de imagens e número de objetos.

Exemplos

# Medir objetos e chamadas de desenho do quadro atual
print("objetos: ", Performance.get_monitor(Performance.RENDER_TOTAL_OBJECTS_IN_FRAME))
print("chamadas: ", Performance.get_monitor(Performance.RENDER_TOTAL_DRAW_CALLS_IN_FRAME))

Tutorial passo a passo

Parte A. Mexer no clima (100 min)

  1. Em labirinto.tscn, selecione Ambiente e clique no recurso Environment para abrir as opções (captura).
  2. Mude a cor do céu (Sky → Sky Material), a cor e a densidade da neblina. Rode a cada mudança.
  3. Faça três climas e tire uma foto de cada: meio-dia, fim de tarde (sol baixo e alaranjado) e noite (sol fraco, neblina escura).

Parte B. Sombra (60 min)

  1. Selecione Sol e desmarque Shadow → Enabled. O jogo fica mais "chapado"? A chave fica mais difícil de achar?

Parte C. Medir (100 min)

  1. Cole as duas linhas do exemplo no fim do _ready do labirinto.gd, dentro de uma espera de 1 segundo:
await get_tree().create_timer(1.0).timeout
print("objetos: ", Performance.get_monitor(Performance.RENDER_TOTAL_OBJECTS_IN_FRAME))
print("chamadas: ", Performance.get_monitor(Performance.RENDER_TOTAL_DRAW_CALLS_IN_FRAME))
  1. Rode com sombra e sem sombra e preencha a tabela no diário. Os números do seu computador podem ser diferentes dos da tabela acima: o que importa é a diferença entre as duas linhas.
  2. Tire as linhas de medição antes de entregar o projeto.

Imagens

  • ../../../recursos/imagens/godot/captura-godot3d-ambiente-recurso.png: o Environment aberto no Inspetor (Background, Sky, Ambient Light, Tonemap).
  • ../../../recursos/imagens/godot/captura-godot3d-sol.png: o Sol com Shadow ligada.

Indicação da interface

ItemNome na tela
climanó WorldEnvironment, recurso Environment
seçõesBackground, Sky, Ambient Light, Reflected Light, Tonemap, Fog (em inglês)
sombra do solDirectionalLight3D → Shadow → Enabled
painel de números do jogo rodandoDepurador → aba Monitores

A aba Monitores aparece nas capturas do depurador (Aula 10.1); a lista de monitores dentro dela não foi fotografada.

O código completo

O ambiente é configurado no editor. No arquivo labirinto.tscn, ele fica assim:

[sub_resource type="Environment" id="ambiente"]
background_mode = 2
sky = SubResource("ceu")
ambient_light_source = 2
ambient_light_color = Color(0.8, 0.72, 0.6, 1)
ambient_light_energy = 0.35
tonemap_mode = 0
fog_enabled = true
fog_light_color = Color(0.86, 0.8, 0.68, 1)
fog_density = 0.015

Explicação do código

  • background_mode = 2 é Sky; ambient_light_source = 2 é Color; tonemap_mode = 0 é Linear. No arquivo ficam números; no Inspetor aparecem os nomes.
  • fog_density pequeno já faz diferença: 0,015 por metro.

Resultado esperado

Três climas fotografados e uma tabela própria de medição com sombra e sem sombra.

Problemas comuns

SintomaCausaSolução
tudo branco e estouradoluz demais (sol + ambiente)baixar a energia de um dos dois
sombras pretassem luz ambienteAmbient Light com cor e energia
céu cinza no jogo, azul no editorsem WorldEnvironment na cena (o editor usa o céu de prévia)pôr o nó na cena
números de medição zeradosmediu cedo demais, ou rodou sem janela (--headless)esperar 1 segundo, com janela

Exercício guiado

Por que a sombra aumenta tanto as chamadas de desenho? (Resposta: para saber onde há sombra, o Godot desenha a cena mais uma vez, vista pelo sol.)

Desafio individual

Faça a "versão noite": sol fraco e azulado, neblina escura e uma OmniLight3D presa ao jogador, como uma lamparina.

Desafio avançado (opcional)

Faça um menu de opções com "Sombra: ligada/desligada" que muda shadow_enabled do sol enquanto o jogo roda.

Critérios de avaliação

  • Três climas diferentes e coerentes.
  • Tabela de medição preenchida e explicada.
  • Cita as três regras de otimização com exemplo do próprio jogo.

Checklist de conclusão

Extensão

Repare na hora do dia em que a sombra das coisas na rua fica maior. Como você faria esse horário no Godot?