Procedural Mesh Geometry
Using the Mesh Class

Anatomía de una Malla (Mesh)

Una malla se compone de triángulos organizados en un espacio 3D para crear la impresión de un objeto sólido. Un triángulo está definido por sus tres puntos de las esquinas o vértices. En la clase Mesh, los vértices están almacenados en una sola matriz y cada triángulo es especificado usando tres enteros que corresponden a los índices de la matriz de vértices. Además, los triángulos se agrupan en una sola matriz de enteros; los enteros están tomados en grupos de tres desde el inicio de la matriz, y por tanto los elementos 0, 1 y 2 definen el primer triángulo, 3, 4 y 5 definen el segundo, y así sucesivamente. Cualquier vértice dado se puede reutilizar en tantos triángulos como se desee, pero hay razones por las que puede que no quiera hacer esto, tal como se explica a continuación.

Iluminación y Normales

Los triángulos son suficientes para definir la forma básica del objeto pero se requiere información extra para mostrar la malla en la mayoría de los casos. Para permitir que el objeto sea sombreado adecuadamente por la iluminación, se debe proporcionar un vector normal para cada vértice. Una normal es un vector que apunta hacia afuera, perpendicular a la superficie de la malla en la posición del vértice con el que está asociado. Durante el cálculo del sombreado, la normal de cada vértice se compara con la dirección de la luz entrante, que también es un vector. Si los dos vectores están perfectamente alineados, entonces la superficie está recibiendo la luz de frente en ese punto y se utilizará el brillo máximo de la luz para el sombreado. Una luz que entre exactamente paralela al vector de la normal, no iluminará la superficie en esa posición. Normalmente, la luz llegará a la normal con un cierto ángulo y por tanto el sombreado estará en algún lugar entre el brillo completo y la completa oscuridad, dependiendo del ángulo.

Dado que la malla está hecha de triángulos, puede parecer que las normales en las esquinas van a ser simplemente perpendiculares al plano de su triángulo. No obstante, las normales en realidad están interpoladas a través del triángulo para dar la dirección de la superficie de las posiciones intermedias entre las esquinas. Si todas las tres normales están apuntando en la misma dirección, entonces el triángulo se encenderá de manera uniforme por todas partes. Los efectos de tener triángulos separados, uniformemente sombreados, es que los bordes serán bien nítidos y claros. Esto es exactamente lo que se requiere para un modelo de un cubo u otro sólido con bordes afilados, pero la interpolación de las normales se puede usar para suavizar el sombreado de una superficie curva.

Para obtener bordes nítidos, es necesario duplicar los vértices en cada borde, ya que ambos triángulos adyacentes van a necesitar sus propias normales. Para superficies curvas, normalmente los vértices se comparten a lo largo de los bordes, pero a menudo se requiere un poco de intuición para determinar la mejor dirección para las normales compartidas. Una normal podría ser simplemente el promedio de las normales de los planos de los triángulos que rodean. Sin embargo, para un objeto como una esfera, las normales deben estar apuntando directamente hacia fuera del centro de la esfera.

Al llamar a Mesh.RecalculateNormals, puede hacer que Unity trabaje las direcciones de las normales por usted haciendo unas suposiciones sobre el “significado” de la geometría del mesh; esto supone que los vértices compartidos entre los triángulos indican una superficie suave mientras que los vértices duplicados indican un borde liso. Mientras que ésta no es una mala aproximación en la mayoría de los casos, RecalculateNormals tropezará en algunas situaciones de texturización en las que los vértices deben ser duplicados incluso aunque la superficie sea suave.

Texturización

Además de la iluminación, un modelo también hará un uso frecuente de la texturización para crear detalles finos en su superficie. Una textura es un poco como una imagen de un bit impresa en una hoja estirable de goma. Para cada triángulo de la malla, se define un área triangular de la textura de la imagen y ese triángulo con textura es estirado y “fijado” para encajar en el triángulo de la malla. Para hacer este trabajo, cada vértice necesita almacenar las coordenadas de la posición de la imagen en la que va a ser fijado. Estas coordenadas son bidimensionales y con un rango de 0..1 (0 significando la parte izquierda/inferior de la imagen y 1 significando la parte derecha/superior de la imagen). Para evitar confundir estas coordenadas con las coordenadas Cartesianas del mundo 3D, éstas son referidas como U y V en vez de las familiares X y Y, y por ello se les llama comúnmente coordenadas UV.

Como las normales, las coordenadas de textura son únicas para cada vértice y entonces hay situaciones en donde uno necesita duplicar los vértices solamente para obtener diferentes valores UV a través de un borde. Un ejemplo obvio es en el que dos triángulos adyacentes usan partes discontinuas de la textura de la imagen ( digamos unos ojos en una textura de la cara) Además, la mayoría de los objetos que son volúmenes completamente encerrados van a necesitar una “costura” en donde una superficie de textura envuelve y junta. Los valores UV de un lado de la costura van a ser diferentes de los del otro lado.

Véase también

Procedural Mesh Geometry
Using the Mesh Class