Parte: 9 — Arte, animación y pipeline de assets · Fuente: Documentación de Blender 4 (Shading / Bake) y guías glTF PBR ⏱️ Duración estimada: 90 min · Nivel: Intermedio
El PBR (Physically Based Rendering) es el estándar por el que un mismo material se ve creíble bajo cualquier iluminación. En esta clase entiendes su lenguaje de mapas: albedo (color base sin luz), metallic (metal o no), roughness (qué tan pulida es la superficie), normal (relieve fino falseado) y AO (oclusión ambiental). Con esos cinco canales puedes describir desde madera vieja hasta acero pulido.
Vas a construir un material PBR completo para el prop de las clases anteriores, aprenderás a hornear (bake) mapas —transferir detalle de una malla de alta densidad o de nodos procedurales a texturas planas— y a comparar el comportamiento de un material metálico frente a uno no metálico. Terminarás viendo el material tanto en Blender como en Godot para confirmar que el flujo cruza al motor sin sorpresas.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Qué es PBR y por qué es estándar | Un material creíble bajo cualquier luz. |
| 2 | Albedo (base color) | El color "real" del material sin sombras. |
| 3 | Metallic y roughness | Definen si es metal y cuán pulido está. |
| 4 | Normal map | Simula relieve sin añadir geometría. |
| 5 | Ambient Occlusion | Añade sombras de contacto sutiles. |
| 6 | Texture sets y baking | Cómo se producen y transfieren los mapas. |
| 7 | Metal vs no-metal | Reglas distintas de albedo y reflexión. |
| 8 | Exportar PBR a motor | Que el material se vea igual fuera de Blender. |
Trabajar en PBR significa dejar de "pintar" cómo se ve algo y empezar a describir de qué está hecho, dejando que el motor calcule la apariencia según la luz. Ese cambio de mentalidad es lo que hace que un mismo asset funcione igual de bien en un nivel diurno y en una mazmorra oscura.
_albedo, _rough, _normal).Trabajaremos en Blender 4.x con el motor Cycles activado para poder hornear (Render Properties → Render Engine → Cycles). Para ver el resultado en un motor usaremos Godot 4 (https://godotengine.org/download), que importa glTF con materiales PBR de forma nativa. El prop con UVs de la clase 179 es el punto de partida.
Puedes crear texturas de forma procedural con nodos (Noise, Musgrave, Voronoi) sin descargar nada, o mencionamos que herramientas como Substance 3D Painter o Adobe Substance son el estándar profesional para pintar sets PBR. Documentación clave: shading y materiales (https://docs.blender.org/manual/en/latest/render/shader_nodes/index.html) y baking (https://docs.blender.org/manual/en/latest/render/cycles/baking.html).
Ten claro el orden mental del flujo PBR: primero decides si el material es metal o no (metallic), luego lo pulido que está (roughness), después su color puro (albedo) y por último el detalle fino (normal y AO). Este orden evita el error clásico de "pintar" sombras dentro del color base.
Crearemos un material PBR de madera para el barril, hornearemos un AO y lo veremos en Godot. Todo el material vivirá en el editor de nodos alrededor de un único Principled BSDF, que concentra los cinco canales que estudiamos.
Abre el barril con UVs y ve a la pestaña Shading. Con el objeto seleccionado, crea un material nuevo en el editor de nodos inferior. Ya trae un Principled BSDF, el nodo que concentra todos los canales PBR.
Construye el albedo procedural. Añade Shift+A → Texture → Wave Texture (vetas de madera), pásalo por un ColorRamp para darle dos tonos marrones y conéctalo a Base Color del Principled. Ajusta la escala de la Wave para el grano.
Define metálico y rugosidad. La madera es no metálica: deja Metallic = 0. En Roughness, conecta un Noise Texture suave (valores 0.6–0.85) para que unas zonas brillen algo más que otras, como madera desgastada.
Añade relieve con normal. Crea un Bump (o un Normal Map si tienes textura) alimentado por otro Noise de escala alta y conéctalo a Normal del Principled. Verás poros y vetas en relieve sin tocar la geometría.
💡 Bump vs Normal: el nodo Bump calcula el relieve al vuelo a partir de una altura; un normal map guarda la información de relieve ya cocida en RGB. Para el motor exportarás siempre un normal map, así que si usas Bump aquí, hornéalo a textura en el paso siguiente.
barril_ao (1024x1024) en un nodo Image Texture, déjalo seleccionado pero sin conectar. En Render Properties (Cycles) → Bake, elige Bake Type: Ambient Occlusion y pulsa Bake. El AO queda cocido en barril_ao.💡 Requisito del bake: el nodo de imagen destino debe estar seleccionado (recuadro blanco) y la malla necesita UVs. Si el bake sale negro, casi siempre es porque olvidaste seleccionar el nodo o el modelo no tiene despliegue UV de la clase 179.
Integra el AO. Multiplica el albedo por el mapa barril_ao con un nodo MixRGB → Multiply (factor bajo, 0.3–0.5) hacia Base Color. Da sombras de contacto sutiles en las juntas de las duelas.
Compara metal vs no-metal. Duplica el material, sube Metallic = 1 y baja Roughness ≈ 0.2: el barril se vuelve un tanque metálico reflectante. Observa que en metal el albedo actúa como color del reflejo, no como color difuso.
💡 La regla de oro del PBR: metallic es prácticamente binario. En metal, el color difuso desaparece y el albedo tiñe el reflejo; en dieléctrico (madera, plástico, piedra), el albedo es el color difuso y el reflejo es blanquecino y tenue. Entender esta dualidad es el 80 % de dominar PBR.
Exporta a glTF. File → Export → glTF 2.0, marca Materials y, si horneaste, Export Textures. Como glTF empaqueta metallic-roughness en un solo mapa, Blender combina los canales automáticamente. Guarda barril_pbr.glb.
Verifícalo en Godot. Crea un proyecto, arrastra barril_pbr.glb a FileSystem, instáncialo en una escena con un WorldEnvironment y una DirectionalLight3D. Confirma que la madera y la variante metálica se ven como en Blender.
Añade un cielo o HDRI al WorldEnvironment para que el metal tenga algo que reflejar. Sin entorno, cualquier superficie metálica se ve negra o plana porque el reflejo no encuentra nada que devolver.
Entregable: barril_pbr.glb con material PBR (albedo, roughness, normal y AO horneado) importado en Godot, más una captura comparando la versión metálica y la no metálica.
Para autoevaluarte, gira una luz alrededor del prop en Godot: un material PBR correcto responde de forma creíble desde cualquier ángulo, con el brillo especular desplazándose por la superficie según la rugosidad. Si el material se ve plano o "de plástico" sin importar la luz, revisa que roughness tenga variación y que exista un entorno que reflejar.
💡 Verifica en el motor, no solo en Blender: Cycles y el renderizador de Godot no calculan la luz de forma idéntica. Un material que se ve perfecto en Blender puede necesitar ajustes en el motor. Por eso el laboratorio siempre cierra el ciclo importando el
.glby revisándolo en Godot.
1.0 y bájala a 0.1; describe cómo cambia la lectura del material bajo la misma luz.nombre_albedo, nombre_rough, nombre_normal y explica por qué ayuda al pipeline..glb y ábrelo en el visor glTF web; compara la reflexión con la de Godot.💡 Nomenclatura del set: guarda los mapas con nombres predecibles (
barril_albedo,barril_ormpara el empaquetado occlusion-roughness-metallic,barril_normal). Los pipelines modernos empaquetan AO, roughness y metallic en los tres canales RGB de una sola imagen para ahorrar memoria; glTF lo hace automáticamente al exportar.
Produce un texture set PBR completo para tu prop (albedo, metallic, roughness, normal y AO), con al menos el AO horneado a una imagen, y llévalo a Godot con glTF. Prepara además una variante metálica del mismo prop.
Criterio de aceptación: en Godot el prop muestra los cinco canales activos (color, relieve por normal, rugosidad variable y sombras de contacto por AO), la variante no metálica no refleja como espejo y la metálica sí reflejiza el entorno; los mapas siguen una nomenclatura coherente y el .glb importa sin advertencias de material.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| El bake sale negro o vacío | La imagen destino no está seleccionada o no hay UVs. Selecciona el nodo Image Texture y verifica el unwrap. |
| El normal map se ve invertido (huecos por bultos) | Espacio de normal o canal verde invertido. Usa Tangent space y revisa el flip de Y. |
| El metal se ve plano y sin reflejo | No hay entorno que reflejar. Añade un WorldEnvironment/HDRI en el motor. |
| Los colores del albedo llevan sombras "quemadas" | Metiste AO o luz dentro del base color. El albedo debe ir limpio; el AO va aparte. |
| En Godot el material aparece gris | glTF no exportó texturas. Marca Export Textures y usa formato .glb autocontenido. |
| Roughness uniforme se ve "de plástico" | Falta variación. Alimenta el canal con una textura de ruido en vez de un valor fijo. |
❓ ¿Metallic debe ser 0 o 1, nunca intermedio? En la práctica sí: una superficie es metal o no lo es. Los valores intermedios solo tienen sentido en transiciones (bordes oxidados), no como "medio metálico".
❓ ¿Qué diferencia hay entre metallic-roughness y specular-glossiness? Son dos flujos PBR equivalentes; glTF y los motores modernos estandarizaron metallic-roughness, así que ese es el que usamos aquí.
❓ ¿Para qué hornear si puedo usar nodos procedurales? Los motores en tiempo real no ejecutan tus nodos de Blender; el bake convierte ese detalle en texturas planas que el motor sí puede leer eficientemente.
❓ ¿El AO va dentro del albedo? No conviene: el motor suele calcular su propia oclusión. Se exporta como canal AO separado (o se multiplica muy sutil) para no ensuciar el color base.
Clase 179 - UV mapping y texturizado