jump to navigation

Level of Detail dinámico! March 1, 2005

Posted by winden in coding, demoscene.
add a comment

Después de un día entero con el sistema desmontado a trozos, ayer terminé de escribir el sistema de LOD dinámico. ¿Os acordais de la malla que tenía de prueba? Bien, pues imaginaos una malla de 512×512 vértices. Empezamos con el nivel más bajo de detalle, un “trozo” de 512 vértices de ancho. Le calculamos su bounding-box en pantalla y a esta el área. Si vemos que ocupa más de N pixels, entonces subdividimos este trozo en cuatro más pequeños, y repetimos la operación. Conforme los trozos llegan a bajar de N pixels de área, en vez de generar más trozos pequeñitos generamos una malla de 16×16 vértices en la zona de ese trozo y la mandamos a pintar.Esto no estaría tan bien si no fuese pq. no hacemos de golpe este proceso: usamos una tabla de scanlines y para cada scanline una tabla de trozos pendientes. Antes de ir a pintar una scanline, miramos los trozos asignados a ella y los procesamos con el algoritmo anterior. Entonces una vez el algoritmo ha terminado sabemos que tenemos en otra tabla todos los triángulitos que hay que pintar ahora y otros más que pintaremos un poco después conforme lleguemos a su scanline. Con esto ahorramos memoria y por tanto ganamos velocidad, porque nunca llegamos a tener que manejar tantos datos que nos lleguemos a salir mucho del tamaño de las cachés internas del procesador.

Aún con todo esto me quedan muchas mejoras: pasar el render con subpixel a vectorial, meter rutinas de matrices, meter rutinas de cámaras… pero con esta última prueba ya empieza a tener forma el asunto… creo que lo próximo que voy a hacer es una rutina de matrices y de cámaras, para poder moverme en 3d y ver que tal cambia el LOD de la malla de prueba.

ps. Con esa prueba ya podré poner un screenshot interesante… ;)