Qué es una malla#
Todo objeto 3D (un personaje, una roca, un cubo) es una malla (mesh): una superficie hecha de triángulos. Entender sus piezas te ayuda a optimizar, a importar bien y a generar geometría por código.
Una malla se compone de:
- Vértices: puntos en el espacio 3D (posiciones).
- Triángulos: la unidad de dibujo de la GPU; cada cara se descompone en triángulos que unen tres vértices.
- Normales: la dirección "hacia afuera" de cada vértice/cara; decide cómo le da la luz (una normal mal puesta se ve oscura o del revés).
- UVs: coordenadas 2D que dicen qué parte de la textura cae en cada vértice (el "desplegado" del modelo). Ver materiales y texturas.
Cómo la dibuja Unity: MeshFilter + MeshRenderer#
Un objeto 3D visible tiene dos componentes que trabajan juntos:
| Componente | Su trabajo |
|---|---|
| Mesh Filter | Guarda qué malla es (la geometría) |
| Mesh Renderer | Dibuja esa malla con un material y decide sombras/luz |
Si un modelo no se ve, casi siempre falta uno de los dos, o el Mesh Renderer no tiene material (se ve magenta o invisible).
Recuento de polígonos (polycount)#
El polycount (número de triángulos) es el gran indicador de coste de una malla. Más triángulos = más detalle, pero más trabajo para la GPU.
No hay un número mágico, pero sí órdenes de magnitud: un personaje de móvil ronda unos pocos miles de triángulos; uno de PC/consola, decenas de miles. Un escenario suma muchas mallas: vigila el total en pantalla, no una sola. Para modelos lejanos, usa LOD (versiones de menos polígonos a distancia).
Topología: no solo cuántos, sino cómo#
La topología es cómo están organizados los triángulos. Una buena topología (cuadriláilteros limpios que se deforman bien) importa sobre todo en modelos que se animan (un personaje): triángulos mal repartidos se pliegan feos al mover las articulaciones. Esto se cuida al modelar (en Blender), no en Unity.
Generar una malla por código#
Puedes crear geometría en tiempo de ejecución (terreno procedural, formas dinámicas). A grandes rasgos:
using UnityEngine;
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class QuadProcedural : MonoBehaviour
{
void Start()
{
var mesh = new Mesh();
// 4 vértices de un cuadrado
mesh.vertices = new[] {
new Vector3(0,0,0), new Vector3(1,0,0),
new Vector3(0,1,0), new Vector3(1,1,0)
};
// 2 triángulos (índices de vértices, en sentido horario mirando la cara)
mesh.triangles = new[] { 0, 2, 1, 2, 3, 1 };
mesh.uv = new[] { Vector2.zero, Vector2.right, Vector2.up, Vector2.one };
mesh.RecalculateNormals(); // calcula las normales por nosotros
GetComponent<MeshFilter>().mesh = mesh;
}
}Los triángulos tienen una cara visible, determinada por el orden (winding) de sus vértices. Si un triángulo se ve "por dentro" (invisible desde fuera), invierte el orden de sus índices. Y llama a RecalculateNormals() o la luz saldrá mal.
Errores frecuentes#
- Objeto 3D sin Mesh Filter o sin material en el Renderer (invisible o magenta).
- Modelos con polycount disparado sin necesidad (hunden los FPS; usa LOD).
- Normales invertidas al generar mallas → el modelo se ve negro o del revés.
- Ignorar los UVs y que la textura salga estirada o repetida mal.
- Mala topología en un modelo que se anima (se pliega feo).
Ponte a prueba#
Resumen#
Una malla es una superficie de triángulos definida por vértices, normales (cómo le da la luz) y UVs (cómo se mapea la textura). Unity la dibuja con Mesh Filter (la geometría) + Mesh Renderer (el material). El polycount manda en el coste — usa LOD para lo lejano — y la topología importa en modelos que se animan. Puedes incluso generar mallas por código con Mesh (cuidando el orden de vértices y las normales). Para importar modelos ya hechos, ver Blender a Unity.