GoConqr hat ein neues Design! Sag uns, wie es dir gefällt.

Notizen

Texturas

mariangelesp14 Computacion grafica Muestreo, Computacion Gráfica, Metodos numericos Spanisch 1 Seite

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

Feedback

Worum geht es?

Wie gefällt dir das neue Design?

Dein Eindruck