Parte: 2 — Desarrollo 3D: motores, escenas y transformaciones · Fuente: Godot Engine 4 — Documentación oficial: Environment and post-processing ⏱️ Duración estimada: 60 min · Nivel: Intermedio
Configurar un nodo WorldEnvironment con un recurso Environment para dar atmósfera a una escena 3D de Godot 4: un cielo procedural que aporta iluminación ambiental, niebla para dar profundidad, glow/bloom para brillos y tonemapping (ACES/Filmic) con exposición para lograr una imagen final equilibrada.
Al finalizar, el alumno podrá:
WorldEnvironment con un recurso Environment y un ProceduralSkyMaterial.| # | Tema | Por qué importa |
|---|---|---|
| 1 | Nodo WorldEnvironment | Aplica un Environment global a toda la escena. |
| 2 | ProceduralSkyMaterial | Genera un cielo sin texturas, gratis y editable. |
| 3 | Luz ambiental | Ilumina lo que las luces directas no alcanzan. |
| 4 | Niebla (fog) | Da sensación de distancia y atmósfera. |
| 5 | Glow / Bloom | Simula el desborde de luz en zonas brillantes. |
| 6 | Tonemapping | Mapea el rango HDR a la pantalla (ACES, Filmic). |
| 7 | Exposición | Controla el brillo global antes del tonemap. |
| 8 | Fondo (background) | Define qué se ve donde no hay geometría. |
Environment para toda la escena. Clave: solo debe haber uno activo.ambient_light_source).fog_enabled y color/densidad.glow_enabled más umbral e intensidad.TONE_MAPPER_ACES, TONE_MAPPER_FILMIC.Necesitas Godot 4.x y una escena con un DirectionalLight3D (sol) y algunos objetos, para que el cielo y la niebla tengan contexto. Ten a mano una superficie brillante (material con emisión) para apreciar el glow. Consulta la guía de entorno en https://docs.godotengine.org/en/stable/tutorials/3d/environment_and_post_processing.html y la API de Environment en https://docs.godotengine.org/en/stable/classes/class_environment.html. Descarga: https://godotengine.org/download.
WorldEnvironment. En el inspector, en la propiedad Environment, crea un nuevo recurso Environment.Environment, pon Background → Mode en Sky, crea un Sky y asígnale un ProceduralSkyMaterial. En Ambient Light → Source elige Sky para que el cielo ilumine.extends Node3D
@onready var world_env: WorldEnvironment = $WorldEnvironment
var _env: Environment
func _ready() -> void:
_env = world_env.environment
# Niebla atmosférica.
_env.fog_enabled = true
_env.fog_light_color = Color(0.7, 0.8, 0.9)
_env.fog_density = 0.02
# Glow / bloom sobre zonas muy brillantes.
_env.glow_enabled = true
_env.glow_intensity = 0.8
_env.glow_bloom = 0.1
# Tonemapping cinematográfico ACES y exposición.
_env.tonemap_mode = Environment.TONE_MAPPER_ACES
_env.tonemap_exposure = 1.0
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_accept"):
_alternar_tonemap()
func _alternar_tonemap() -> void:
# Rotar entre ACES, Filmic y Reinhard para comparar.
match _env.tonemap_mode:
Environment.TONE_MAPPER_ACES:
_env.tonemap_mode = Environment.TONE_MAPPER_FILMIC
Environment.TONE_MAPPER_FILMIC:
_env.tonemap_mode = Environment.TONE_MAPPER_REINHARD
_:
_env.tonemap_mode = Environment.TONE_MAPPER_ACES
func _process(_delta: float) -> void:
# Ajustar la exposición con las flechas.
if Input.is_action_pressed("ui_up"):
_env.tonemap_exposure = clamp(_env.tonemap_exposure + 0.5 * _delta, 0.1, 3.0)
if Input.is_action_pressed("ui_down"):
_env.tonemap_exposure = clamp(_env.tonemap_exposure - 0.5 * _delta, 0.1, 3.0)
ProceduralSkyMaterial para crear un atardecer.fog_density hasta 0.1 y describe el efecto en la lectura de la escena.emission fuerte y ajusta glow_intensity para verlo brillar.ambient_light_source en modo Color en lugar de Sky y compara.fog_aerial_perspective.Configura un WorldEnvironment con cielo procedural que ilumine la escena como única fuente ambiental, niebla suave para dar profundidad y glow activo. Añade un botón por tecla que alterne entre tonemapping ACES y Filmic.
Criterio de aceptación: al ejecutar, la escena se ilumina con el cielo, la niebla difumina el fondo, los materiales emisivos brillan y la tecla alterna visiblemente entre los dos tonemappings sin errores.
| Síntoma | Causa y arreglo |
|---|---|
| No se ve ningún cielo | El Background Mode no está en Sky o falta el Sky; configúralo. |
| La escena se ve lavada o sin contraste | Tonemapping Reinhard o exposición alta; prueba ACES y baja exposición. |
| El glow no aparece | glow_enabled desactivado o no hay zonas suficientemente brillantes. |
| Todo demasiado oscuro | Falta luz ambiental; pon ambient_light_source en Sky. |
| Dos entornos compiten | Hay más de un WorldEnvironment; deja solo uno activo. |
| La niebla tapa todo | fog_density demasiado alta; redúcela. |
❓ ¿Qué tonemapping debería usar? ACES es un buen punto de partida para un look cinematográfico; Filmic ofrece otra respuesta de altas luces. Prueba ambos con tu iluminación.
❓ ¿El cielo procedural ilumina de verdad? Sí, si pones ambient_light_source en Sky actúa como iluminación basada en imagen (IBL) de bajo coste.
❓ ¿Puedo tener niebla y glow a la vez? Sí, son efectos independientes del mismo Environment y se combinan sin problema.
❓ ¿La exposición reemplaza a la energía de las luces? No; trabajan juntas. La exposición es un ajuste global de imagen; la energía es por luz.
Clase 052 - Iluminación 3D: tipos de luz y sombras