Texturas mediante fórmulas matemáticas

Texto: Miquel Barceló


Texturas procedurales

Otro tema interesante es la posibilidad de generar texturas mediante fórmulas matemáticas. Nos volvemos a encontrar con multitud de fórmulas a utilizar, tan sólo hay que tomar las mismas precauciones que en el caso anterior. También conviene señalar que el ordenador nos permite otras posibilidades más allá de las matemáticas convencionales. En el siguiente pseudocódigo, por ejemplo, se genera un patrón de cuadros, semejante a un tablero de ajedrez, a partir de las coordenadas U y V.

U’=frac(U*factor_u)

V’=frac(V*factor_u)

If (U’>0.5) XOR (V’>0.5)

Color_objeto=color1

Else

Color_objeto=color2

También podemos generar texturas en tres dimensiones y, según la fórmula de la textura procedural, ahorrarnos algunos pasos. El siguiente algoritmo crearía una textura similar a la anterior, pero extendida a las tres dimensiones.

U’=frac(P.x*factor_u)

V’=frac(P.y*factor_v)

W’=frac(P.z*factor_w)

If (U’>0.5) XOR (V’>0.5) XOR (W’>0.5)

Color_objeto=color1

Else

Color_objeto=color2

Nótese que se utiliza el mismo sistema de coordenadas que en el mapeado plano (coordenadas cartesianas) sin tener en cuenta la forma, la orientación ni la posición del objeto. De ahí que se puedan obtener algunos resultados bastante insólitos.

En el CD-ROM, los ejemplos de esto se llaman VAR2.EXE y VAR3.EXE y las correspondientes escenas VAR_1.RAY y VAR_2.RAY.

Máscaras de objeto

Aquí, la táctica es utilizar las texturas de una forma bastante diferente a la vista hasta ahora. Se crea una textura un tanto especial (que llamaremos "máscara"), normalmente con sólo dos colores, uno indicando la "presencia" del objeto y otro su "ausencia". La idea consiste en, cuando se calcula la intersección del rayo con él, comprobar qué color de la textura le corresponde al punto de intersección, y según el color de este punto, considerar la intersección como "válida" (con lo que procederemos como es habitual) o "no válida", por lo que no la tendremos en cuenta, como si no existiese. El resultado es que en la superficie del objeto aparecerán agujeros y se podrá ver a través de él.

"Algunas de las escenas de ejemplo sólo funcionan con versiones concretas del programa. Se pueden distinguir fácilmente por el nombre"

También se tiene que tener en cuenta que hay objetos (como las esferas) con más de un punto de intersección. En estos casos, si se produce la intersección por la cara interior del objeto habrá que invertir el vector normal a la superficie del objeto, o de lo contrario la iluminación no se calculará correctamente.

El inconveniente de esto es que se tienen que calcular las coordenadas de mapeado siempre que queramos comprobar si existe intersección con un rayo de luz, aunque sea posible que al final el objeto sea "tapado" por otro que se encuentre más cerca del origen del rayo.

Como en los anteriores casos, también hallaréis un programa de ejemplo para este efecto, llamado VAR4.EXE, y dos escenas, VAR_4.RAY y VAR_4B.RAY. Esta técnica solo se ha implementado en el caso de las esferas, y de una forma un tanto irregular, tan solo para probar su funcionalidad.

No se vayan todavía…

Esto que hemos explicado es sólo una pequeña muestra de lo que se puede hacer con texturas. Aún se pueden hacer muchas más cosas con texturas. Quizás, más adelante, volvamos a sacar el tema de las texturas y de lo que se puede hacer con ellas.

 

Textura procedural 3D extensión del "tablero de ajedrez" bidimensional. Como puede verse en la esfera, el hecho de no utilizar coordenadas de mapeado esféricas en la esfera produce efectos curiosos en la textura.
Esfera con una máscara en forma de estrella.
La fuente de luz se encuentra en el interior de la esfera. Los dibujos en el plano no son una textura aplicada utilizando coordenadas polares, sino que se deben a la luz que sale de los agujeros estrellados.