modos de iluminación


En estas entradas se prentende explicar con que criterio un soft interpreta información poligonal para luego poder pintarla e iluminarla en pantalla.

Lo primero a aclarar es que en un entorno virtual 3D la luz no ilumina los objetos, sino que les define sus sombras. Por lo que en un espacio sin iluminación (unLit), los objetos no son negros sino todo lo contrario: no tienen ni una sombra.



Entonces, el siguiente paso es la búsqueda de las sombras. Para ello se utiliza la normal de cada polígono y se compara con la dirección de la luz. Asumiendo que la fuente lumínica se trate de una directionalLigt (es el caso de iluminación más sencillo porque los rayos de luz son paralelos y no sufren decaimento en su intensidad en función de la distancia) y su intensidad sea igual a 1, cuando el angulo relativo entre la normal de un polígono y el del rayo de luz nos indique que el vector normal y el vector luz son paralelos y de sentido opuesto (el rayo de luz es perpendicular e incidente a la superficie que define el poligono), la iluminación de dicho polígono será total; no tendrá sombras y será equivalente al resultado en modo unLit. En el caso de que el ángulo relativo del vector luz y el vector normal de un polígono sean perpendiculares (el vector luz no interseca con el palno infinito definido por el polígono) el polígono no recibe influencia lumínica y por tanto se interpreta que no está iluminado, el valor RGB de los píxeles contenidos en él se multiplicará por cero dando como resultado el ansiado Negro, el padre de todas las sombras.
Este modo de iluminación se denomina "flat shaded" y es el modo de iluminación que utilizaban las primeras aplicaciones en realTime.






Para conseguir la sensación de superficies continuas con una iluminación más suave se utiliza la técnica smoothShaded. Esta técnica, en vez de utilizar el valor de la normal de la cara de un polígono, utiliza el valor de la normal en los vértices. Evidentemente un vertex no es más que un punto en el espacio, y los puntos no tienen normales por si mismos ya que son entidades adimensionales. La normal de un vertex esta formada por las diferentes normales que se encuentran el él. Estas normales son siempre igual al numero de edges que inciden el el vertex y tienen el valor de la normal del polígono en el que sea poyan. Un vertex con tres edges incidentes tiene tres polígonos que le rodean y tres normales que se alimentan de la normal de esos tres polígonos.
Para conseguir el efecto smoothShaded se extrae una normal unitaria definida por el valor medio de las normales de cada vertex, se compara con la fuente lumínica y se extrae un color en RGB. Teniendo esos colores como referencia, se interpolan linealmente los los valores RGB de cada vertex para así conseguir el sombreado de la superficie.



Sin embargo, no siempre nos interesa que las normales de cada vertex estén unificadas para suavizar una superficie. Todo lo contrario. A veces queremos romper con esa continuidad porque sino nos pueden quedar acabados no deseados. Para conseguirlo existen dos modos combinables entre sí.

El primero se trata de definir una ángulo por encima del cual las normales no se unifican. En XSI el valor de ese ángulo se encuentra en el apartado de GeometryApproximation. En 3DMax, por ejemplo, queda reflejado en el apartado de soothingGroups.
El segundo método se basa en marcar manualmente zonas que queremos que no se unifiquen sus normales. En XSI y Maya lo conseguimos con los denominados HardEdges, en 3DMax se sigue manipulando a través de de los smoothingGroups, pero para mi punto de vista resulta un método poco atractivo e inteligente para afrontarlo.

La objetivo de este apartado es entender como las normales de una malla determinan la iluminación de los modelo tridimensionales y como las normales vienen determinadas por los polígonos. La conclusión entonces es que para tener modelos con una alta definición lumínica y superficial necesitamos muchos polígonos para así tener más normales. Por ejemplo, el modelo en alta resolución de la fotografía necesita de 2,46 millones de quads para poder definir esa superficie con ese nivel de detalle.

Teniendo en cuenta que cada quad son dos tris, tenemos un modelo de casi 5 millones de triángulos. Los motores gráficos en realTime pueden mover entornos con muchos triángulos en pantalla, pero destinar 5 millones a un personaje es sencillamente inabarcable e innecesario. Precisamente para eso se inventaron los normalMaps.

No hay comentarios:

Publicar un comentario