domingo, 15 de agosto de 2010

¿Qué es un Clipmap?

Un clipmap puede ser definido como una representación parcial de una piramide de mipmaps, que contiene toda la información de textura necesaria en cada frame. El problema es que al tener sólo una porción de la piramide de mipmaps, es necesario tener una buena estrategia de selección de mipmap.


El Clipmap Stack se centra alrededor de lo que se denomina Stack Center. Como cada capa del stack contiene una porción de la imagen original de mayor área, al aplicarlas en una superficie se generan anillos concentricos de resolución decreciente.


Durante el proceso de texturizado, el mejor de los casos ocurre cuando se puede hacer un mapeo 1 a 1 entre los texels y los píxeles.  Basandonos en esto podemos hacer una selección del clip size en función de la resolución de pantalla.

Los niveles más bajos de la piramide de mipmap va a poder estar todo el tiempo en memoria, mientras que los niveles del clipmap stack deben ser dinámicamente actualizados para tener la información necesaria a la hora de renderizar cada frame.

En la primer imagen, los mips azules representan el área mapeada a todo el mundo (toda la superficie), mientras que las verdes son las sub areas que se cargan dinámicamente.

La piramide del clipmap es una pirámide mipmap tradicional, que cubre toda la imagen original.

A continuación se muestra una captura de pantalla del demo de Clipmaps de nVidia, a izquierda se pueden ver los 4 niveles superiores del clipmap. Hay que recordar que cada nivel del clipmap tiene el mismo tamaño. El 1er nivel (la imagen de arriba) es la que menos área de la textura abarca, pero que mayor resolución tiene. A medida que el nivel del stack disminuye, el área que se abarca es mayor, pero a su vez el detalle de la imagen disminuye.


Se puede ver en la imagen de cada uno de los niveles del clipmap que su acceso se realiza toroidalmente.

sábado, 14 de agosto de 2010

Toroidal Addressing

El acceso toroidal a una textura permite aprovechar la coherencia entre frame y frame para utilizar la información que se mantiene al actualizarla. 

Supongamos que, dada una textura grande, queremos copiar una porción a una textura más pequeña y aplicarla a un polígono, para luego hacer un paneo de la textura más grande. Tenemos dos opciones: la primera es, en cada frame, actualizar la textura del polígono por completo (mapeo normal), la segunda opción es aprovechar que al hacer movimientos suaves, entre frame y frame se mantiene una porción común de la textura. 

Escribiendo sólo la información nueva que aparece, y desplazando las coordenadas de textura del polígono, podemos evitar reescribir toda la textura completa.


Esto será particularmente útil para una implementación eficiente de clipmaps.

viernes, 6 de agosto de 2010

ok, pero, ¿y para qué?

Este blog será ahora mi bitácora de desarrollo. Junto con vertexar estamos escribiendo un motor de escenarios externos. La idea es tener escenarios gigantes y texturas enormes. Investigamos, leemos papers y discutimos mucho. Aquí volcaré lo que pueda. Usamos OpenGL y cg.