Notizen
Texturas
Inhalt der Notizen (1)
Seite 1
Texturas
Si pretendemos
modelar materiales variables, como la madera o superficies complejas, como un
suelo de césped o una pared de ladrillos; no habrá potencia de cálculo, ni
horas de modelado que resulten suficientes. En CG se recurre a un truco simple:
se “pega” una imagen sobre la superficie, de modo que se asemeje a lo que queremos
representar. El caso más sencillo es una calcomanía, pero también se puede
pegar la textura de una piel sobre el modelo de una cara.
Hoy se utilizan
texturas para asignar muchos tipos de información sobre la superficie o el
interior de los objetos.
Entre las
características básicas de cada punto de la superficie están, su posición, un
vector normal a la superficie, que define como refleja la luz y el color y alfa
asignados. La textura trasmite datos vectoriales a ese punto y puede usarse para
alterar cualquier característica del punto, color, normal, desplazamiento, etc.
Las texturas son
imágenes que permiten representar objetos de textura compleja sobre una
geometría sencilla.
Una textura 2D es
una imagen de WxH píxeles de ancho y alto. Los píxeles de la textura se llaman
téxeles.
Para pegar o
mapear la textura sobre c/primitiva hay que definir un método o función que
asigne, a cada fragmento, una posición en la textura, desde la cual leer o
calcular el color(interpolando téxeles cercanos) y un método para asignarlo al
fragmento, que puede ser directo o mezclándolo con el color calculado en la
etapa de iluminación.
Normalmente el
mapeo se hace según las coordenadas espaciales (x,y,z) del objeto. El
programador define coordenadas de textura (s,t) para cada vértice, normalizadas
entre cero y uno. Luego, en determinada etapa del pipline gráfico se procede a
rasterizar cada primitiva, generando fragmentos. Para cada fragmento generado,
se interpolanl los valores asignados en los vértices de la primitiva, entre
ellos pueden estar la posición espacial, el color, la normal y las coordenadas
de textura.
Cada téxel
contiene un vector (RGBA) de cuatro componentes, que normalmente se asumen como
color y alpha; pero también puede interpretarse como al programador le convenga.
Tratamiento de las coordenadas fuera
del rango(envoltorio, wrapping)
Las coordenadas
de los téxeles varían entre 0 y 1. Si se definen con cualquier otro valor,
internamente se reasignan al intervalo [0,1] por uno de varios métodos
alternativos de wrapping, los 2 clásicos son: clamp y repeat, el método se
define para cada coordenada de textura y puede ser distinto para c/u.
Clamping: cualquier valor
menor que cero se toma cero y cualquier valor mayor que uno se toma uno.
Se usa clamping
si se garantiza que la textura cubre bien al objeto; en caso contrario, la
primera o la última línea de la imagen se verá repetida del lado que exceda los
límites. Cuando se quiere mapear una imagen se verá repetida del lado que
exceda los límites. Cuando se quiere mapear una imagen simple, una sola vez en
un objeto grande, tbm se usa clamping, pero el borde de la imagen debe tener
alfa nulo(invisible) y de ese modo la repetición del borde no influye sobre el
resto del objeto.
Repeat: s=s-floor(s), se
conserva solo la parte fraccionaria del valor. Se utiliza para texturas
repetitivas como césped, ladrillos o diseños de telas y en las líneas de nivel.
Métodos de mapeo:
Mapear una
textura en un objeto consiste en asignar coordenadas de textura a cada punto
del objeto. La asignación se realiza mediante un algoritmo, que debe responder
cuales son las coordenadas de textura para cualquier fragmento.
Normalmente las
coordenadas de textura se definen manual o automáticamente, pero sólo en los
vértices de las primitivas y luego es el software en el hardware gráfico al
rasterizar la primitiva, quien interpola las coordenadas de los vértices y
calcula las coordenadas que corresponden a cada fragmento interior. Para
realizar trucos avanzados, la asignación puede hacerse en un programa especial
(fragment shader) que se interpone en el pipeline gráfico y se ejecuta en la
GPU.
Mapeo manual: se asigna
manualmente las coordenadas de textura a cada vértice de cada primitiva. En 3D,
ejemplo de vetas, las coordenadas(x,y,z) del modelo(madera) van entre Pmin y
Pmax, las coordenadas de texturas(s,t,r)(vetas) van entre 0 y 1, por lo tanto a
cada vértice P le corresponde P-Pmin/Pmax-Pmin
UVMapping: consiste en
mapear la superficie del objeto sobre una superficie plana de coordenadas (U,V)
(esto es “parametrizar” la superficie) y luego identificar algunos ptos del
mapa con algunos ptos de la imagen. Normalmente se debe disponer de una
geometría de base sencilla(NURBS o subdivisión surfaces) o de algoritmos que
permitan estirar y deformar(unwrap) la “piel” del objeto(triangulación) sobre
un plano, con pocos recortes y sin solapamientos, para realizar luego unas
pocas asignaciones manuales pto a pto y el resto por software. Para evitar los
solapamientos se recortan las partes complicadas y se ubican sueltas en un mapa
general que se conoce como “atlas de textura”.
Mapeo plano consiste en
definir un plano por cada coordenada de textura y asignar la misma en función
de la distancia del plano al punto. Esto es a un punto de coordenadas (x,y,z)
se asignan automáticamente (s,t)=(x,y) que luego se clampean o repiten cuando
esos valores salen del rango [0,1]. La coordenada x se puede ver como la
distancia a un plano s vertical por el origen; la coordenada y es la distancia
a un plano t horizontal. Asignamos coordenads de textura a un pto p, haciendo
s=x=dist(s,p), t=y=dist(t,p)
Opengl permite
definir 4 planos en cualquier posición y orientación, para hacer los mismo con
cualquiera de las 4 coordenadas de textura.
ax+by+cz+d (d=
función lineal de la distancia del plano al origen, ab y c definen vector
normal al plano)
Cada coordenada
de textura se obtiene del producto escalar entre las coordenadas 4D del punto (wx,wy,wz,w)wdistinto
de cero, lo mismo de lo anterior pero multiplicado por w.
Mapeo en dos partes y mapeo ambiental:
Otros métodos de
mapeo automático consisten en mapear manual o algorítmicamente(UV) la textura
sobre una superficie intermediaria muy simple: un plano, una esfera , un cubo o
un cilindro, para luego identificar de forma sencilla cada punto del objeto con
algún punto la superficie intermedia. Esta técnica se conoce como mapeo en dos
partes, la primera operación es el s-mapping,
sobre la superficie intermediaria y la segunda el o-mapping, sobre el objeto.
Hay variantes,
pero normalmente el objeto a texturizar se considera encerrado por el
intermediario y se puede usar, por ejemplo, la línea que une un centro del
objeto(object centroid) y cada punto de su superficie para asignar las
coordenadas de textura del punto donde esa línea corta al objeto intermediario.
Otras técnicas de proyección son object
normal, donde la línea se define mediante el punto y su normal. O intermediate surface normal donde cada
punto de la superficie intermedia proyecta sobre el objecto de acuerdo a la
normal del intermediario.
Por último en el
método de mapeo por reflected ray, el rayo que va del ojo al
punto del modelo rebota hasta chocar con la superficie intermediaria. Este
método se utiliza para realizar mapeos de entorno o ambiente asignando la
textura a una esfera(cielo) o cubo (seis fotos del entorno) que es visible en
el fondo o bien a un plano virtual detrás del ojo que no se renderiza en la
imagen final pero que genera reflejos en el objeto.
La técnica del
mapeo cúbico del ambiente tiene la gran ventaja de que el objeto intermediario
se realiza con seis imágenes muy fáciles de obtener, pero no está exento de
algunos problemas técnicos, pues las coordenadas de texturas se deben asignar
de acuerdo al rayo reflejado “en cada fragmento”, no se pueden interpolan las
coordenadas calculando el reflejo solo de los de los vértices de una primitiva
pues puede suceder que cada vértice caiga en una cara distinta del cubo,
generando problemas con la asignación de 2 coordenadas en el cubo desarrollado
sobre un plano, aun si se resuelve eso, se pierde la suavidad al pasar de una
cara a otra.
La técnica de
mapeo esférico utiliza una textura que consiste en un imagen del entorno como
si fuese una foto de una esfera espejada.
Filtrado(interpolación)
Si acercamos el
ojo llega un momento que vemos la textura pixelada(ampliación o Magnificación)
Si lo
alejamos(Reducción o minificación) cada fragmento ocupará varios téxeles, pero
hay que decidir un único color.
Cuando se hace
una ampliación, cada téxel cubre más de un píxel, se pueden usar 2 filtros
prefabricados: Nearest y lineal tbm se podrían utilizar otros filtros que den
mejores resultados, interpolando entre más vecinos para definir mejor los
bordes y suavizar el pixelado.
Cuando se aleja
mucho el objeto, los téxeles pueden hacerse mucho más pequeños que los píxeles.
Si un fragmento ocupa varios téxeles y solo usa uno o cuatro centrales la
imagen saldrá muy mal. Una solución sencilla consiste en reducir varias veces a
la mitad promediando vecinos y finalmente promediar promedios al llegar al
tamaño adecuado; esa solución está implementada en el sistema clásico de
funcionalidad fija.
Se predefinen
varias copias de la misma textura en resoluciones decrecientes; cada imagen con
la mitad de ancho y alto, hasta llegar a 1x1, aún cuando la imagen sea
rectangular. El espacio ocupado x esta serie de imágenes llamadas mipmaps no es
mayor que una vez y medio el espacio ocupado por la mayor de ellas. OpenGL trae
una función que permite cargar la imagen mayor y construye automáticamente los
mipmaps; al hacer divisiones sucesivas los defectos no son tan visibles como si
se hiciera de golpe una reducción.
Cuando tenemos
los mipmaps, se puede elegir el tamaño más adecuado (mipmap nearest) o bien
realizar una interpolación lineal entre 2 niveles de tamaños más próximo al necesario( en OpenGL es
mipmap linear) Tbm se puede interpolar.
La selección del
nivel de mipmap a utilizar depende del grado de minificación, esto es la
relación entre el tamaño del píxel y el del téxel. Se calculan los gradientes
en el espacio de la imagen(unidades píxel) que luego se multiplican por W y H,
se elige el de mayor módulo y se toma el logaritmo en base 2, para obtener el
nivel de mipmap o los 2 más cercanos.
Mezcla: una vez fijado
el color de la textura para el fragmento, resta definir como se mezcla con el
color interpolado o el calculado del modelo de iluminación. OpenGL permite
definir 4 métodos:
Replace: (sustitución)
reemplaza color preexistente del fragmento, calcomanías por calor
Decal: (mezcla con
transparencia) alfa
Modulate: (Modulación 0-1)
multiplica color y el alfa del fragmento por el color y el alfa de la textura,
componente a componente. Siendo números entre cero y uno, al multiplicarlos se
acercan a cero, disminuyendo el valor original.ej:manchas oscuras en superficies
o definir diferente iluminación en cada zona.
Blend:utiliza un tercer
color fijo(cuyo alfa no importa) y los valores de la textura se usa como
parámetro para interpolar en cada R,G,B entre el color fijo y el que traía el
fragmenti. Este método permite hacer un marmolado de dos colores, o vetear u
oxidar una superficie. El alfa del fragmento se multiplica por el de la textura
sin intervención del color fijo.
Nueva Página
Informationen
- Beschreibung
- Que son, para que se usan, mapeo en objetos.
- Erstellt von
- mariangelesp14 · Okt 2014
- Aktualisiert
- 26 Mai 2016
- Aufrufe
- 17
- Bewertung