Módulo 9 · Aula 9.7 · Ambiente e otimização básica
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 6 h/a | ⭐⭐ | Godot 4.7 | C2, C4, C5 |
Objetivos de aprendizagem
- Configurar céu, luz ambiente e neblina com
WorldEnvironment. - Ligar e desligar a sombra do sol e ver a diferença.
- Medir quantos objetos e quantas "chamadas de desenho" o jogo faz por quadro.
- 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 = Sky | céu azul em degradê (ProceduralSkyMaterial) |
Ambient Light → Source = Color | luz de fundo cor de areia, energia 0,35: as sombras não ficam pretas |
Tonemap | Linear |
Fog | ligada, 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ção | Objetos desenhados | Chamadas de desenho |
|---|---|---|
| sombra e neblina ligadas | 146 | 102 |
| sombra e neblina desligadas | 69 | 25 |
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.
- Reaproveitar malha e material (as 72 paredes usam uma malha e um material).
- Desligar o que não aparece: sombra em objetos pequenos, luzes longe da câmera.
- 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)
- Em
labirinto.tscn, selecioneAmbientee clique no recursoEnvironmentpara abrir as opções (captura). - Mude a cor do céu (
Sky→Sky Material), a cor e a densidade da neblina. Rode a cada mudança. - 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)
- Selecione
Sole desmarqueShadow→Enabled. O jogo fica mais "chapado"? A chave fica mais difícil de achar?
Parte C. Medir (100 min)
- Cole as duas linhas do exemplo no fim do
_readydolabirinto.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))- 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.
- Tire as linhas de medição antes de entregar o projeto.
Imagens
../../../recursos/imagens/godot/captura-godot3d-ambiente-recurso.png
: o Environmentaberto no Inspetor (Background,Sky,Ambient Light,Tonemap).../../../recursos/imagens/godot/captura-godot3d-sol.png
: o SolcomShadowligada.
Indicação da interface
| Item | Nome na tela |
|---|---|
| clima | nó WorldEnvironment, recurso Environment |
| seções | Background, Sky, Ambient Light, Reflected Light, Tonemap, Fog (em inglês) |
| sombra do sol | DirectionalLight3D → Shadow → Enabled |
| painel de números do jogo rodando | Depurador → 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.015Explicaçã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_densitypequeno 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
| Sintoma | Causa | Solução |
|---|---|---|
| tudo branco e estourado | luz demais (sol + ambiente) | baixar a energia de um dos dois |
| sombras pretas | sem luz ambiente | Ambient Light com cor e energia |
| céu cinza no jogo, azul no editor | sem WorldEnvironment na cena (o editor usa o céu de prévia) | pôr o nó na cena |
| números de medição zerados | mediu 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?