13.07.2015 Views

Capítulo X: Introducción

Capítulo X: Introducción

Capítulo X: Introducción

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ResumenLas técnicas multi-resolución son requeridas comúnmente para el despliegue devolúmenes que exceden las capacidades de la tarjeta gráfica, e incluso de la memoriaprincipal. En cada cuadro de imagen, se selecciona la resolución adecuada para lasdistintas áreas del volumen en función de la cantidad de memoria disponible, y unconjunto de parámetros que pueden estar definidos en el espacio objeto o en el espacioimagen. Debido al ancho de banda limitado entre la memoria principal y la tarjetagráfica, es posible que la resolución requerida en todas las áreas del volumen no seasatisfecha durante la interacción con el volumen. Así, la representación del volumendeber ser actualizada constantemente entre cuadros de imágenes durante estainteracción, que puede incluir el cambio del punto de vista, de la región de interés y dela función de transferencia. Se presenta un algoritmo voraz que mejora la aproximacióncuadro a cuadro, utilizando un conjunto de operaciones de refinamiento y reducción –Split-and-Collapse – sobre las distintas áreas del volumen. Este algoritmo es guiado poruna medida de error, que sugiere la selección de la siguiente operación de refinamientoo colapso, basada en la mejora de la aproximación multi-resolución, considerando lasrestricciones de hardware establecidas. Adicionalmente, se ha implementado unalgoritmo óptimo polinomial, que obtiene la representación multi-resolución conmínimo error, con el objetivo de verificar que los resultados con el algoritmo voraz estáncercanos al óptimo. Se han considerado técnicas out-of-core compatibles con losrequerimientos de páginas de memoria demandados por el algoritmo de Split-and-Collapse. El análisis de complejidad de los algoritmos muestra que no dependen deltamaño del volumen, demostrando que son adecuados para desplegar volúmenes degran tamaño. El despliegue puede ser realizado tanto con ray casting basado en GPU,como con planos alineados al viewport, con clasificación pre-integrada. En ambos casosse implementa el salto de espacios vacíos, terminación temprana del rayo y muestreoadaptativo, explotando las bondades del hardware gráfico actual, y ajustandoadecuadamente los segmentos de rayo en las fronteras de los subvolúmenes o bricks.Particularmente en el caso de ray casting basado en GPU se ha introducido una técnicapara la reducción de artefactos entre bricks con distintos niveles de detalle, basada enla mezcla ponderada de niveles de detalle contiguos. Finalmente, se generaliza al caso3D un algoritmo eficiente que construye la tabla de pre-integración 2D.Palabras Claves: despliegue de volúmenes, técnicas multi-resolución, visualización outof-core,clasificación pre-integrada, GPU.-i-


AgradecimientosAgradezco a Dios por estar allí, en cada uno de los pasos que doy, ydarme la perseverancia y paciencia para culminar este trabajo.Agradezco a mi tutor, Bernd, por guiarme durante mucho años en estetrabajo, por las cientas de horas invertidas en mí formación,incluyendo cientos de emails, chating, visitas, etc., por supaciencia y su amistad.Agradezco a Omaira, por siempre estar pendiente de los avances de estetrabajo de manera incondicional, desde el momento de hacer elprimer contacto con mi tutor; igualmente por conseguirfinanciamiento, tanto para las pasantías en Alemania en el marcode este trabajo, así como para la adquisición de varios de loscomputadores utilizados en las pruebas y desarrollo.Agradezco al profesor Alejandro Crema, por ser mi tutor guía, y estarpendiente de los avances del trabajo.Agradezco a los coordinadores de postgrado, Prof. Alejandro Crema, Prof.Hilda López y Alfredo Mateo, por la flexibilidad en el postgrado enCiencias de la Computación. Igualmente a Rosiris, por suamabilidad, y darme toda la información pertinente a prórrogas einscripciones.Agradezco a mi esposa, quien ha vivido conmigo todo el desarrollo de esteproyecto, me ha dado su apoyo, compartiendo las angustias de un“submit” y de cada actualización del código y documento. Graciaspor la paciencia.Agradezco a mis bebés, esposa, madre, padre, hermanas, toda migrandota familia, y a mis amigos por soportar mi lejanía enmuchos momentos. A ninguno le he dedicado el tiempo que hequerido en estos años, pero en todo momento han estadopresentes, segundo a segundo, pues son parte de mi vida, y de loque soy.Agradezco el apoyo incondicional de mis colegas de laboratorio y amigos,Walter, Ernesto, Héctor, y Esmitt con quienes en muchasoportunidades he conversado sobre los avances y misterios delproyecto. En particular, gracias Walter por tus infinitos consejos, y-ii-


por no jugar QUAKE III conmigo para no dispersarme… graciasErnesto por tus correcciones, y tempranas sugerencias. Igualmentegracias a Bricelis Urbina, por ayudar a la limpieza de las imágenesdel humano visible, que aunque no fue utilizado en las pruebasfinales, era el único volumen disponible en las primeras etapas dedesarrollo del trabajo. Igualmente, a todos los profesores yprofesoras que han estado pendientes de la culminación de estelargo trabajo, en especial Eugenio, Marta R., Nora, Claudia, etc.Agradezco a los estudiantes e investigadores, de quienes he recibido unfeedback en ciertas etapas de la realización de este trabajo.Empezando por la lista de discusión de OpenGL®, en dondemuchas dudas de programación en OpenGL y lenguaje de shadershan sido aclaradas por investigadores de todos el mundo, y donderecuerdo principalmente la guiatura “out-of-forum” de Poddar Bimalen el caso de volume rendering con multi-texturas vía registercombiners… siguiendo con el Dr. Eric Lum, quien me dio variostips para entender su rápido algoritmo de pre-integración,publicado en el 2004; Soeren Grimm por sus prontas sugerenciassobre el paper … a Adriana Paluszny por sus correcciones, GabrielRodríguez por plasmar la idea del blending sobre una versiónprevia del prototipo… y terminando con Jorge Bernadas, quien memostró una solución óptima del algoritmo de selección basado enla técnica “divide y conquista” con memorización. A todos ustedesgracias.Agradezco a las profesoras Hilda López y Brígida Molina, quienes endeterminados momentos me hablaron sobre la importancia deculminar la tesis, tanto para mi formación como para la Escuela.Mmm… bien, tengo que agradecer además (o quizás no…) a la gente quecreó Quake III, como herramienta anti-x3, y adicionalmente, comofactor de DISPERSION…lol. By the way, estos párrafos quedaronidentados de esta manera, y no fue a drede. Viva WORD 4guindous!. Se le agradece también a la gente de Urban Terror, poragregar más dispersión y entretenimiento en el último año.-iii-


ContenidoResumen .............................................................................................. iAgradecimientos ................................................................................... iiTabla de Contenido .............................................................................. ivCapítulo 1. Introducción...................................................................... 11.1 Visualizador Interactivo ................................................................ 41.2 Visualizador Experimental ............................................................ 61.3 Publicaciones ............................................................................... 71.4 Organización del Documento ........................................................ 7Capítulo 2. Despliegue Directo de Volúmenes ...................................... 82.1 Visualización 3D .......................................................................... 82.1.1 Aplicación de Textura ........................................................... 112.1.2 Niveles de Detalle ................................................................. 132.2 Despliegue de Volúmenes ........................................................... 142.2.1 Pipeline de Visualización de Volúmenes ................................ 162.2.2 Clasificación ......................................................................... 172.2.3 Solución Numérica de la Ecuación de Visualización deVolúmenes .................................................................................... 202.3 Algoritmos para Visualizar Volúmenes ........................................ 252.3.1 Ray Casting .......................................................................... 252.3.2 Splatting ............................................................................... 272.3.3 Shear-warp .......................................................................... 292.3.4 Texturas 2D ......................................................................... 302.3.5 Texturas 3D ......................................................................... 322.4 Despliegue de Volúmenes de Gran Tamaño ................................ 342.4.1 Bricking ................................................................................ 342.4.2 Despliegue de un Área de Interés .......................................... 362.4.3 Despliegue de Volúmenes Multi-resolución ........................... 372.5 Sumario ..................................................................................... 47Capítulo 3. Criterio de Selección ........................................................ 493.1 Medidas de Error ........................................................................ 503.1.1 Distorsión ............................................................................ 503.1.2 Nivel de Importancia............................................................. 523.2 Algoritmo Voraz de Selección ...................................................... 553.3 Algoritmo Óptimo de Selección ................................................... 573.4 Algoritmo Incremental de Selección: Split-and-Collapse ............... 603.5 Análisis de Complejidad del algoritmo de Split-and-Collapse........ 623.6 Edición de la Función de Transferencia ...................................... 643.7 Algoritmos de Selección Óptimos con dos Restricciones .............. 663.8 Sumario ..................................................................................... 66Capítulo 4. Visualización Out-of-Core ................................................ 684.1 Prioridad Sobre los Bricks ........................................................... 69-iv-


4.2 Paginación Basada en Split-and-Collapse .................................... 704.3 Grupo de Bricks ......................................................................... 714.4 Algoritmo Multi-hilos .................................................................. 724.5 Consideraciones Adicionales para Texturas 2D ........................... 744.6 Sumario ..................................................................................... 75Capítulo 5. Despliegue Multi-resolución ............................................ 765.1 Ordenamiento de los Bricks ........................................................ 765.2 Ray Casting Basado en GPU ....................................................... 775.3 Planos Alineados al Viewport ...................................................... 815.4 Clasificación Pre-integrada ......................................................... 865.5 Plano de Corte ............................................................................ 965.6 Sumario ..................................................................................... 99Capítulo 6. Reducción de Artefactos .................................................1016.1 Blending: Mezcla de Bricks ........................................................1026.2 Octree Restringido .....................................................................1066.3 Nivel de Detalle Promedio por Vóxel ...........................................1076.4 Sumario ....................................................................................108Capítulo 7. Implementación y Pruebas .............................................1097.1 Implementación .........................................................................1097.2 Volúmenes y Plataforma de Prueba ............................................1107.3 Pruebas de Desempeño Sobre el Sistema VI ...............................1127.3.1 Ancho de Banda y Particionamiento del Volumen ................1127.3.2 Transferencia de Bricks por Frame.......................................1137.3.3 Construcción de la Tabla de Pre-integración ........................1147.3.4 Medidas de Error .................................................................1187.3.5 Rendering y Técnicas de Aceleración ...................................1207.3.6 Algoritmos de Selección .......................................................1247.3.7 Tiempo Consumido por cada Subprograma .........................1267.4 Pruebas Sobre el Sistema VE .....................................................1287.5 Sumario ....................................................................................130Capítulo 8. Conclusiones y Trabajos a Futuro ..................................131Referencias.........................................................................................135Apéndice I: Modelo Óptico ..................................................................148-v-


OctreeCapítulo 1: Introducciónigual tamaño en bytes, en donde cada grupo de 8 bricks adyacentes sonaproximados por un único brick con resolución inferior. Aplicandorecursivamente el mismo principio entre niveles de detalles, se construyela jerarquía multi-resolución (ver Fig. 1.1), en donde el brick de la raíz deloctree representa al volumen entero con la menor resolución, y las hojasrepresentan al volumen original particionado en bricks. Cada nodo deloctree representa un brick, y corresponde a una determinada área delvolumen, con una determinada resolución. Al representar el volumen enuna estructura de octree, el criterio de selección determina el conjunto debricks que representa al volumen bajo diversos criterios. Al conjunto debricks seleccionados para visualización lo denominamos “la selección”, osimplemente el conjunto S. Es importante señalar que cada área avisualizar del volumen tiene una única representación en S. Así, laintersección de dos bricks en S es vacía.Nivel de detallemás bajo(1 brick)S = BricksseleccionadosSelección36 bricks7%Nivel de detallemás alto(512 bricks)Figura 1.1: jerarquía multitresolución de octree y la selección. Observe que elconjunto S demanda aprox. 7% de la memoria que se requeriría para almacenar losbricks del nivel de detalle más alto.El interés de este trabajo está basado en el despliegue multi-resoluciónde volúmenes de gran tamaño con soporte de hardware gráfico en tiemporeal. Los volúmenes de interés son aquellos cuyo tamaño sobrepasan la-2-


Tarjeta GráficaCapítulo 1: Introduccióncapacidad de memoria de textura, y potencialmente la capacidad de lamemoria principal. Para lograr la interactividad con estos volúmenes esnecesario considerar la eficiencia de los algoritmos, tanto aquellos queintervienen en la selección y paginación, así como en aquellos queintervienen en el rendering 1 . Particularmente en el rendering, esnecesario incluir técnicas de aceleración para mejorar el tiemporespuesta, y adicionalmente considerar la mejora en la calidad de lasimágenes generadas.Proceso PrincipalFunción detransferenciaParámetros deVisualizaciónPre-integraciónSelecciónTabla de IntegralesSRenderingInstruccionesGPUProcesoSecundarioNodosPaginaciónMemoriaPrincipalBricksPaginaciónMemoria deTexturaBricksMemoriaTexturaBricksImagenMemoriaPrincipalBricksDatasetPre-procesamientoFigura 1.1: prototipo de sistema de visualización de volúmenes multi-resolución.En la Fig. 1.2 se muestra el modelo de prototipo de sistema devisualización multi-resolución, que incluye los módulos de selección, pre-1 Rendering: es el proceso de generar una imagen digital a partir de un modelo. Para elcaso de visualizar escenas u objetos 3D, el rendering consiste en la generación de unaimagen digital bidimensional desde un punto de vista.-3-


Capítulo 1: Introducciónoperaciones de split y collapse en dirección a la resolución deseada. Elalgoritmo de Split-and-Collapse es voraz, por lo que no siempre resulta enla selección de mínimo error. El problema de encontrar la selección demínimo error requiere de una búsqueda exhaustiva, y en esta direcciónse introduce un algoritmo óptimo que opera en tiempo polinomial,utilizando la técnica de programación dinámica [COR01]. Este algoritmoes utilizado para comprobar que el algoritmo voraz incremental de Splitand-Collapseproduce resultados muy cercanos al óptimo.b) Paginación: cuando el volumen multi-resolución supera lascapacidades de memoria principal, es necesario paginar bricks dememoria auxiliar a memoria principal. Se introduce una técnica parapaginar bricks similar al algoritmo de Split-and-Collapse, de manera queun hilo secundario se encargue de la carga y reemplazo de bricks acordea las demandas actuales y futuras del algoritmo. Tanto la paginacióncomo el reemplazo de páginas considera la prioridad asignada en cadanodo por el algoritmo de Split-and-Collapse, e incorpora la pre-paginaciónde una manera natural, difiriendo así de la técnica de paginación bajodemanda con política de reemplazo LRU 1 utilizada comúnmente en lavisualización out-of-core 2 [GUT02], [CAS05].c) Rendering: para realizar el despliegue o rendering, se adapta elalgoritmo de ray casting acelerado por GPU (Graphics Processor Unit)introducido en [KRU03] al caso multi-resolución, con clasificación preintegrada3 . Para mejorar el tiempo de respuesta en el despliegue, seadaptan las técnicas de salto de espacios vacíos [LAC95], terminacióntemprana del rayo [KRU03], y muestreo adaptativo [LAM99], [GUT02],[LJU06C] al caso multi-resolución. En particular, en el caso de muestreoadaptativo se introduce una técnica que se basa en la opacidadacumulada en cada rayo, el cual mejora el tiempo de respuesta delmuestreo constante, sin detrimento de la calidad de la imagen que seobtiene cuando la adaptabilidad se basa en el nivel de detalle de cadabrick [LAM99], [GUT02], [LJU06C].d) Pre-integración: La construcción de la tabla de pre-integración estábasada en el algoritmo propuesto por Eric Lum et al. [LUM04], la cual1 LRU (least-recently-used): es un algoritmo de reemplazo de página que se basa enescoger como víctima aquella página de memoria menos recientemente utilizada, puesestadísticamente es la que tiene menos posibilidad de ser referenciada nuevamenteentre las páginas alojadas en memoria.2 En ciencias de la computación, el término out-of-core se refiere a los algoritmos queprocesan datos que sobrepasan las capacidades de memoria principal.3 La clasificación es el proceso de asignar propiedades ópticas a las muestras delvolumen. La clasificación pre-integrada es un caso particular en donde se precomputala integral entre cada par de muestras potenciales del volumen.-5-


Capítulo 1: Introducciónestá planteada originalmente para tablas 2D, y en este prototipo segeneraliza para el caso 3D para soportar el muestreo adaptativo.1.2 Visualizador ExperimentalEl despliegue de volúmenes multi-resolución suele generar artefactosvisuales debido a la diferencia de nivel de detalle entre los bricks. Elorigen de estos artefactos visuales se debe a que las muestrasinterpoladas del volumen de niveles más burdos difieren de las muestrasoriginales, por lo que suelen generar colores distintos al ser clasificados.Estos colores distintos son percibidos por nuestra vista cuando sedespliegan bricks adyacentes con distintos nivel de detalle, pues generancambios abruptos de color en la imagen. La remoción de estos artefactosse logra mediante la mezcla o blending de bricks de niveles de detalleconsecutivos, con soporte de GPU.El objetivo Visualizador Experimental es mostrar la efectividad de latécnica de blending en la remoción de artefactos visuales entre bricksadyacentes. En este sentido, los módulos de selección y paginación sonrelativamente básicos al compararlo con el visualizador interactivo.a) Selección: el algoritmo de selección considera los mismosparámetros del Visualizador Experimental, salvo el ancho de bandahacia la memoria de textura, el cual es ignorado. En cambio, seadiciona una nueva restricción: la diferencia de nivel de detalleentre bricks adyacentes debe ser a los sumo un nivel.b) Paginación: se utiliza un simple mecanismo de paginación bajodemanda, con reemplazo de página basado en la hora del últimoacceso (LRU), similar a los trabajos [GUT02] y [CAS05].c) Rendering: se introduce el algoritmo basado en la mezcla de nivelesde detalle para reducir artefactos entre bricks adyacentes condistinto nivel de detalle. En las pruebas se muestra la efectividadde la técnica, y el bajo impacto en el tiempo de respuesta yrequerimientos extras de memoria. Se implementa la técnica deaceleración basada en salto de espacios vacíos.d) Pre-integración: utiliza el rápido algoritmo de Eric Lum et al. paraconstruir la tabla de pre-integración 2D.Ambos prototipos pueden ser ejecutado en modo pantalla completa, parasu futura migración a sistemas inmersivos como la mesa de trabajovirtual o workbench [KRU95] y caves 1 [CRU93].1 CAVE: acrónimo recursivo de CAVE Automatic Virtual Environment. Es un ambiente derealidad virtual inmersivo multi-usuario, que consiste en un cubo, en donde se realiza una-6-


Capítulo 1: Introducción1.3 PublicacionesComo publicaciones realizadas en el contexto de este trabajo se tienenlas siguientes:a) Artículo publicado en los proceedings del congreso ISVC (5thInternational Symposium on Visual Computing), año 2009 [CAR09].Los trabajos presentados en este congreso son publicados como uncapítulo de libro en “Lecture Notes in Computer Science”.b) Capítulo de un libro de circulación internacional [ORO04], endonde se presenta un resumen del estado del arte en lavisualización multi-resolución de volúmenes de gran tamaño,extraída del capítulo 2 de este trabajo.1.4 Organización del DocumentoEste documento es presentado en 8 capítulos. El capítulo 1 introduce alproblema a resolver y sus contribuciones. El capítulo 2 estudia el temade visualización de volúmenes, la ecuación de integración, y losalgoritmos clásicos para el despliegue, incluyendo el caso multiresolución.El capítulo 3 trata sobre el criterio de selección introducidoen este trabajo, destacándose el algoritmo Split-and-Collapse y elalgoritmo óptimo. El capítulo 4 describe la técnica out-of-core utilizada,compatible con el algoritmo de Split-and-Collapse, para manejarvolúmenes que sobrepasan las capacidades de la memoria principal. Elcapítulo 5 discute los detalles del rendering, incluyendo las técnicas deaceleración y la construcción de la tabla 3D de pre-integración. Elcapítulo 6 introduce la técnica de remoción de artefactos entre bricksadyacentes. La implementación y resultados experimentales sondiscutidos en el capítulo 7. Finalmente, en el capítulo 8 se presentan lasconclusiones y trabajos a futuro.proyección trasera en estéreo en 3 o más de sus caras. En conjunción con un sonido 3D, da a losusuarios la ilusión de ser parte del mundo virtual.-7-


Capítulo 2: Despliegue Directo de VolúmenesCapítulo 2. Despliegue Directo deVolúmenesPor lo general, el volumen viene dado como un conjunto de muestras deuna función escalar continua, representado por una malla regular, yalmacenado en un arreglo tridimensional de escalares [MOR04]. Existendiversas técnicas para visualizar la información presente en un volumen.En una etapa previa, se pueden extraer los contornos de interés de cadacorte del volumen [MAX95], [CAR01], o reconstruir una aproximaciónpoligonal de las superficies de interés [CLI87], [CAR99]. Sin embargo,mediante el despliegue directo del volumen, podemos evitar etapasprevias de reconstrucción, y observar información adicional que no estápresente en contornos y superficies.El despliegue directo de volúmenes consiste en generar una imagentridimensional a partir de la proyección de las muestras discretas de unvolumen. Por comodidad, en este trabajo nos referimos al despliegue devolúmenes como despliegue directo de volúmenes indistintamente. Desdefinales del siglo pasado, este despliegue puede ser acelerado mediante lautilización del hardware gráfico [AKE93]. Este hardware está optimizadopara el despliegue de triángulos, los cuales son transformados,discretizados y desplegados con el pipeline gráfico [WOO99].Comúnmente el despliegue acelerado por hardware gráfico es realizadomezclando polígonos texturizados con cortes del volumen. Sin embargo,en la actualidad, el hardware gráfico cuenta adicionalmente conunidades programables, tanto para vértices como para fragmentos, loque permite realizar algoritmos que operen directamente con el volumenpara obtener el color de cada píxel de la imagen [OPE07], [NVI07].Este capítulo estudia conceptos relacionados con el despliegue devolúmenes, y diversas implementaciones, incluyendo el despliegue devolúmenes de gran tamaño, haciendo énfasis en aquellas que utilizan laaceleración por hardware gráfico.2.1 Visualización 3DEl proceso de visualización 3D consiste en todas las operaciones queconlleva el despliegue de un objeto tridimensional en un dispositivográfico de salida. Por lo general, el objeto es concebido como una serie detriángulos, que serán procesados por un motor gráfico 3D. En la Fig. 2.1-8-


Capítulo 2: Despliegue Directo de Volúmenesse muestra un típico pipeline gráfico, el cual es utilizado por el API 1OpenGL® con soporte del hardware [WOO99], pero que puedeimplementarse 100% por software.En un primer nivel de abstracción, el pipeline gráfico puede ser divididoen 4 módulos: procesamiento geométrico, rasterización, procesamientode fragmentos y operadores por fragmento (ver Fig. 2.1). Por lo general, latarjeta gráfica despliega objetos gráficos representados por primitivasgeométricas, como triángulos y líneas, los cuales están definidos porvértices. Estos vértices son transformados para ser aplicados aldispositivo de salida, mediante proyección. Las primitivas sondiscretizadas mediante la rasterización, en donde las propiedades de losvértices son interpoladas, incluyendo color, posición y coordenadas detextura para generar los fragmentos. Los fragmentos que resultan de estainterpolación son procesados para generar un color, que luego puedesufrir otra serie de operaciones antes de ser copiados en la imagen. Al sercopiados, los fragmentos pasan a llamarse píxeles, en donde susprincipales atributos son el color y transparencia.Proc.GeométricoRasterizaciónProc. deFragmentosOperadoresFragmentosvértices primitivas fragmentos fragmentos píxelesFigura 2.1: pipeline gráfico.Luego de los operadores por fragmentos, hay operaciones que sonaplicadas a la imagen entera. Estas operaciones incluyen la inicializacióno borrado de la imagen, así como la selección del búfer de imagen autilizar. Se suele utilizar dos búferes; uno de ellos es el búfer frontal elcual se muestra en pantalla, mientras se realiza el despliegue sobre otro(el búfer trasero). Para el caso de visualización estereoscópica, se puedenutilizar dos de estos búferes por cada centro de proyección.En la actualidad, los módulos de procesamiento geométrico yprocesamiento de fragmentos son programables, preferiblemente a altonivel, siendo muy populares los compiladores de Cg (C for graphics)[NVI07] y GLSL (OpenGL Shading Language) [OPE07]. Estos transforman1 API: siglas de Application Programming Interface (interfaz de aplicación deaplicaciones). Es un conjunto de métodos, funciones o procedimientos que ofrece unalibrería para ser utilizado por otro programa como una capa de abstracción.-9-


Capítulo 2: Despliegue Directo de Volúmenesel código fuente escrito en lenguaje C a código ensamblador entendiblepor las unidades programables. Las tarjetas gráficas suelen poseermúltiples procesadores de vértices y procesadores de fragmentos,necesarios para reducir cuellos de botella en el pipeline.A continuación se describen brevemente cada uno de los módulos delpipeline gráfico.a) Procesamiento GeométricoEste módulo realiza operaciones geométricas sobre los vértices yatributos del objeto, incluyendo transformaciones afines, proyección,transformación del color, transformaciones de las coordenadas detextura y aplicación de un modelo de iluminación. Adicionalmente, seensambla la primitiva gráfica a ser rasterizada. Esta primitiva puede serremovida por cull 1 , o por estar fuera de la pirámide de visualización.También podría ser cortada parcialmente por dicha pirámide. En estecaso, puede ser dividida en una o varias primitivas, en donde puedencrearse nuevos vértices, interpolando atributos de otros vértices. Estasprimitivas son transformadas a coordenadas de dispositivo o viewport 2 ,para ser discretizadas en fragmentos por el módulo de rasterización. Elhardware gráfico actual provee varios procesadores de vértices, lo cualpermite procesar varios vértices en paralelo.b) RasterizaciónEs la conversión de las primitivas geométricas en fragmentos. Cadafragmento es una unidad discreta dentro de la primitiva gráfica, y secorresponde con a un píxel del búfer de la imagen (framebuffer). Duranteesta etapa se interpolan los colores resultantes en los vértices, paraobtener el color inicial del fragmento. Similarmente, se interpolan losvalores de profundidad para el búfer de profundidad (z-buffer),coordenadas de textura, y demás atributos que serán utilizadosposteriormente en el procesamiento de los fragmentos. Debido a que elfragmento puede ser modificado e incluso eliminado en los módulossiguientes, aún no se le denomina píxel. La salida de este módulo son losdatos asociados al fragmento, como color, coordenadas de textura, valorde profundidad, normal, etc., por lo general obtenidos por interpolación.c) Procesamiento de Fragmentos1 Cull o eliminar: proceso que consiste en remover primitivas gráficas no visibles de unaescena.2 Viewport: área de despliegue en pantalla; por lo general, es un área rectangular queforma parte de la ventana asociada a la aplicación.-10-


Capítulo 2: Despliegue Directo de VolúmenesEste módulo combina el color proveniente de la rasterización con latextura y demás propiedades del fragmento, para determinar su color. Elhardware gráfico actual permite procesar varios fragmentos en paralelo,al proveer múltiples procesadores de fragmentos. La salida principal decada procesador de fragmento es una tupla de color RGBA (R=red o rojo,G=green o verde, B=blue o azul, A=alpha o alfa que indica el nivel detransparencia) y una profundidad.d) Operadores por fragmentoAntes de almacenar el fragmento en el búfer de la imagen, se le puedenaplicar una serie de operaciones, e incluso su eliminación. El fragmentopuede ser eliminado si es muy transparente, no es visible, o no formaparte de la máscara del esténcil. Si el fragmento pasa estas pruebas, laoperación de mezcla o blending puede ser utilizada para fusionar el colordel fragmento con el que se encuentra almacenado en el búfer de laimagen (búfer de color), y además, podría aplicarse alguna operaciónlógica o de máscara de bits sobre su color.2.1.1 Aplicación de TexturaEs una técnica que consiste en aplicar los colores de una imagen(textura) a objetos gráficos, comúnmente definidos por triángulos. Latextura se encuentra en un espacio paramétrico denominado espacio detextura, con dominio normalizado en [0,1]. Cada píxel de la textura esdenominado téxel 1 . La textura, es comúnmente una imagen digitalbidimensional; sin embargo, esta puede ser unidimensional, e inclusotridimensional.aplicación de texturatéxelinterpoladoaplicación de texturatéxelinterpoladofragmentopolígonottextura 2Dspolígonofragmentotrtextura 3DsFigura 2.2: correspondencia entre fragmentos del polígono y téxeles de la texturamediante coordenadas de textura. Las coordenadas de textura pueden serunidimensionales (s), bidimensionales (s,t) o tridimensionales (s,t,r).1 Téxel (acrónimo de texture pixel): es la unidad mínima de textura. Así como unaimagen digital se compone de píxeles, una textura se compone de téxeles.-11-


Capítulo 2: Despliegue Directo de VolúmenesLa aplicación de textura es realizada generalmente sobre los vértices delos polígonos de un mallado. Asignándole a cada vértice las coordenadasde textura correspondientes, se pueden generar las coordenadas detextura de cada fragmento por interpolación, bien sea durante larasterización o en los programas de fragmentos (ver Fig. 2.2). Estainterpolación puede utilizar los mismos pesos requeridos para interpolarcolores, normales, o cualquier propiedad de los vértices.En general, cada muestra de textura o téxel asociada al fragmento delpolígono no coincide con las muestras originales de la textura. Por ello,es necesario realizar un remuestreo sobre la textura. El filtro deremuestreo suele ser lineal, bi-lineal o tri-lineal, según la dimensión de latextura. También puede tomarse la muestra más cercana (ver Fig. 2.3).filtro bilinealmuestra máscercanatextura 4x4Figura 2.3: aplicación de texturas 2D a un polígono cuadrado. En el ejemplo, loscuadrados son de 100x100 píxeles, y la textura de 4x4 téxeles. Se puede observar elefecto de aplicar un filtro bi-lineal al realizar el muestreo (imagen izquierda), o tomarla muestra más cercana (imagen derecha).Consideremos una imagen 1D de n píxeles. Los índices de la imagenvarían entre 0 y n1, pero el dominio de textura es [0,1]. Cualquiermuestreo que se realice dentro de las coordenadas [ 1 1,12n 2n]cuenta coninformación suficiente para determinar el color resultante víainterpolación lineal de colores, mientras que en las áreas grises secuenta con un único píxel (ver Fig. 2.4).Al muestrear sobre las áreas grises, se pueden tomar varias opciones:interpolar la muestra de la frontera con color negro o con un colorespecificado por el usuario, obtener la muestra por extrapolación lineal, osimplemente tomar la muestra del píxel de la frontera. En el área devisualización científica, estas soluciones generan artefactos [LAM99] quepueden generar confusión y errores en la percepción de un fenómeno.Por ello, suele restringirse el dominio de textura a [ 1 1,12n 2n]. Estesubdominio lo denominaremos dominio de interpolación, el cual sí esdependiente de las dimensiones de la imagen. Esto puede generalizarse-12-


Capítulo 2: Despliegue Directo de Volúmenespara texturas 2D y 3D al restringir similarmente el dominio en cadacoordenada de textura (ver cuadrados azules con líneas punteadas enFig. 2.3).centro depíxelíndices del arreglo0 1 2 3 4 5 … n10 dominio de textura1Figura 2.4: dominio de textura.Dada una coordenada de textura x [ 1 1,12n 2n], se suele utilizarinterpolación lineal entre par de muestras consecutivas para obtener elcolor. Comúnmente, si la coordenada está fuera del intervalo, esta esajustada a los bordes del intervalo, proceso que se conoce como clamp[WOO99]. Las muestras se almacenan comúnmente en una estructurade arreglo. En el caso unidimensional (ver Fig. 2.4) denotemos el arreglocomo A[0..n1]; mediante interpolación lineal, el valor del téxel en elpunto x puede ser obtenido comoTexel ( x) (1 t)*A[left] t * A[right ], [Ec. 2.1]donde,left x, xright y t x left , con x x* n 1 2 .2.1.2 Niveles de DetalleUna textura puede ser representada en distintas resoluciones (niveles dedetalle), por lo general en potencias de dos. Durante el texturizado, elsistema gráfico elige para una primitiva gráfica la textura cuya resoluciónsea más similar a la resolución de la primitiva rasterizada. Esto seconoce como mipmapping [WOO99]. Para generar los niveles de detalle,consideremos una textura unidimensional de n = 2 k píxeles, para algúnk0. La resolución más fina es la textura original. El próximo nivel dedetalle tiene n/2 píxeles, la siguiente n/4 píxeles, y así sucesivamentehasta representar la textura por un único píxel, el cual es el nivel dedetalle más burdo. En total, esto suma k+1 niveles de detalle. Esteproceso puede aplicarse similarmente para texturas 2D y 3D. Sinembargo, en la práctica el mipmapping es muy raramente soportado paratexturas 3D.-13-


Capítulo 2: Despliegue Directo de Volúmenes2.2 Despliegue de VolúmenesEl despliegue de volúmenes, también llamado volume rendering, es unasimulación aproximada de la propagación de la luz a través de un medioparticipante representado por el volumen [LAC95]. Con esta técnica, seproduce una imagen mediante el cómputo de la cantidad de luzalcanzada en cada píxel. Físicamente, cuando la luz fluye a través delvolumen, ésta puede ser absorbida, esparcida (scattering 1 ) y emitida;adicionalmente, se pueden producir otros tipos de interacción tales comofosforescencia (absorción y reemisión de energía luego de un pequeñoretardo), y fluorescencia (absorción y reemisión de la energía en unafrecuencia distinta). Sin embargo, el despliegue de volúmenes no tienecomo objetivo simular todos estos fenómenos. Sólo interesa el resultadoóptico del proceso de propagación y avance de la luz a través delvolumen, quedando así un modelo óptico basado únicamente en emisióny absorción [SAB88], [WIL92], [LAC95].En el apéndice 1, se presenta la derivación del modelo óptico, el cual hasido ampliamente utilizado en el despliegue de volúmenes desde quefueron introducidos en los trabajos de [SAB88] y [WIL92]. En este modeloel vector de visualización que atraviesa al volumen es parametrizado con en [0,D], y el color resultante C se obtiene mediante la siguienteecuación:CD ( ')d' c( )()e0d, [Ec.2.2]0en donde c(), corresponde a la emisión, y t() a la absorción del volumena una distancia . El factor exp (') d 'correspondiente a la 0 extinción 2 de la luz se puede interpretar como la transparencia T() delvolumen a una profundidad o distancia . Basada en la transparencia, se1 Scattering: efecto de dispersar o esparcir la luz. Esto se produce cuando la luzinteractúa con un material a nivel molecular o atómico, y esta cambia de dirección. Lareflexión difusa (reflexión en todas las direcciones) genera el efecto de scattering. En elmodelo de partícula, el scattering simple se basa en que un rayo de luz proveniente deuna fuente externa, sólo puede ser esparcido o reflejado por una partícula. El scatteringmúltiple considera que al una partícula esparcir un rayo de luz, este puede ser reflejadoa su vez por otras partículas, lo cual requiere de un modelo óptico más complejo. En elModelo de Partícula, el scattering simple o múltiple ocurre al incluir al modelo unafuente de luz externa (ver Apéndice 1).2 Extinción: atenuación de la luz debido a la absorción y el scattering [VAN81].Propiedad óptica que se refiere a la probabilidad por unidad de distancia de que unfotón sea absorbido o dispersado por el vóxel.-14-


Capítulo 2: Despliegue Directo de Volúmenespuede calcular la opacidad acumulada en la travesía del rayo acualquier distancia , como:( ) 1 T()(0 t(')d') 1e . [Ec. 2.3]Los volúmenes utilizados para visualización suelen provenir dedispositivos especiales, tales como resonadores magnéticos, tomógrafos,microscopios electrónicos, sonógrafos, etc. También se obtienen de lasimulación de dinámica de fluidos, información geológica 3D de suelos,datos climatológicos, entre otros. Cada muestra de un volumen sedenomina vóxel (acrónimo de volume pixel). Aunque el vóxel puede serconcebido como un cubo o celda [CLI87], en nuestro caso representa unamuestra proveniente de una función escalar continua s=s(x, y, z); con x,y, z R (ver Fig.2.5).Figura 2.5: un volumen es representado por lo general como una malla regular, yalmacenado en un arreglo tridimensional de vóxeles. Puede ser pensado como unconjunto de imágenes bidimensionales, las cuales constituyen sus cortes, separadas auna distancia fija h. Los puntos blancos representan las muestras conocidas de un cortedel volumen.Con el avance de la tecnología, los aparatos de captura tienden cada vezmás a mejorar la resolución, pudiéndose obtener conjuntos de datos enel orden de los gigabytes. En algunos casos, el volumen no está dadocomo una malla regular. Por ejemplo, aquellos provenientes de muestreometeorológico, o las mallas tetraédricas muy utilizadas en elementosfinitos [LAC95], [MOR04]. Sin embargo, estos mallados pueden sertransformados en mallas regulares por interpolación. Este trabajo seenfoca en la visualización de mallas regulares, por ser más generales yampliamente utilizados.-15-


Capítulo 2: Despliegue Directo de Volúmenes2.2.1 Pipeline de Visualización de VolúmenesAcorde a diversos trabajos presentados en la literatura, el volumen puedeser desplegado siguiendo un pipeline [LEV88], [WES97], [KNI02],[VEN04], [LJU06B]. A continuación, se muestra un resumen de lasetapas del pipeline, presentado en [KNI02]:a) Pre-procesamiento: el volumen a visualizar, también llamado dataset,podría no estar en un formato manejable para visualización. Por ejemplo,en una serie de imágenes independientes con formato Windows Bitmap(.bmp), o formato DICOM (Digital Imaging and Communications inMedicine) [DIC08]. En esta etapa se puede convertir el formato deldataset en uno adecuado para despliegue, y puede adicionalmenteincluir el particionamiento del volumen, extraer un subvolumen,cuantizar colores, aplicar un filtro para reducir el ruido, pre-calcular elgradiente por vóxel, etc.b) Reconstrucción: se refiere a la interpolación de muestras, para estimarel valor de un vóxel no conocido dentro del volumen. La reconstrucciónpuede expresarse matemáticamente como la convolución de una funcióncon un kérnel [FOL90]. Comúnmente el hardware está optimizado paraestimar las muestras inexistentes con filtros lineales para texturas 1D,bi-lineales para texturas 2D y tri-lineales para texturas 3D [WOO99].c) Clasificación: consiste en la asignación de propiedades ópticas(emisión y absorción) a los vóxeles del volumen. La reconstrucción y laclasificación pueden efectuarse en orden inverso, pero la calidad en eldespliegue puede verse afectada drásticamente en el caso de realizarprimero la clasificación (pre-clasificación). Esto será abordado másadelante en este capítulo.d) Shading: el shading consiste en modular el color y el brillo del vóxel alconsiderar su interacción con una luz externa. El modelo de iluminaciónde Blinn-Phong [FOL90] es uno de los más utilizados para visualizaciónde volúmenes. Este incluye tres términos, el ambiental que representa laluz proveniente en todas las direcciones, el difuso que representa la luzreflejada (scattered) isotrópicamente en todas las direcciones, y elespecular que representa la luz reflejada en dirección al visor parasimular superficies pulidas. El gradiente normalizado calculado en laetapa de pre-procesamiento suele ser utilizado en esta etapa. El shadingpuede ser precalculado para las muestras existentes, e interpolado paralas inexistentes, o bien, se puede interpolar el gradiente normalizado delas muestras existentes para realizar el shading en las muestrasinterpoladas. En este trabajo no se consideran luces externas,resumiendo el modelo a luz ambiental.-16-


Capítulo 2: Despliegue Directo de Volúmenese) Composición: es la última etapa del pipeline, y consiste en la mezcla delos colores modulados resultantes de la etapa de shading, a lo largo de latravesía de cada rayo que atraviesa el volumen.A continuación se estudia la clasificación, y seguidamente la soluciónnumérica a la ecuación de visualización de volúmenes, para definir losoperadores de composición over [LAC95] y under [POR84], [RUI06].2.2.2 ClasificaciónAl desplegar un volumen, el usuario decide qué materiales o estructurasvisualizar. Para ello, se le asignan las propiedades ópticas de emisión c yabsorción a cada vóxel del volumen, proceso que se denominaclasificación.Figura 2.6: efecto de aplicar distintas funciones de transferencia.La clasificación puede realizarse mediante segmentación. En este caso, elvolumen puede ser particionado en sus estructuras específicas que loconforman; así, se le asigna distintas absorciones y colores a lasdistintas partes del volumen. Otra alternativa para la clasificación es lamanipulación de funciones, que en el contexto de visualización devolúmenes se denominan funciones de transferencia, que pueden serunidimensionales o multidimensionales [KNI02B].Las funciones de transferencia unidimensionales, asignan laspropiedades ópticas a cada vóxel basándose en el valor escalar s delvóxel; por ejemplo, las muestras con valores altos en una tomografía deun cuerpo humano, por lo general representan la estructura ósea, y se leasocia el color blanco. En la Fig. 2.6 se muestran un mismo volumendesplegado con diferentes funciones de transferencias. Adicionalmente,se puede incluir más información para asignarle las propiedades ópticas-17-


Capítulo 2: Despliegue Directo de Volúmenesa un vóxel (funciones de transferencias multidimensionales), como elhistograma de frecuencias, las derivadas de primer y segundo orden, lanormal, la longitud del gradiente, la posición de la muestra, productopunto entre la dirección de la luz y la normal, etc. En este trabajo nosbasaremos únicamente en el valor puntual del vóxel para asignarle suspropiedades ópticas (ver Fig. 2.7).vóxel s=s(x,y,z)función detransferenciac(s) = color(s) = absorciónFigura 2.7: clasificación con funciones de transferencia unidimensionales. Al aplicarla función de transferencia a una muestra s del volumen, obtenemos su emisión c ysu absorción .r,g,b,asr,g,b,as(a)Figura 2.8: edición de la función de transferencia unidimensional. (a) Por canal; eleje x representa los valores posibles de s, comúnmente normalizados en [0,1], y el ejey es cada componente de la tupla RGBA, también normalizadas en [0,1]. (b) Funciónde transferencia equivalente asignando colores RGB en los nodos de la funciónabsorción.(b)Las funciones de transferencia unidimensionales suelen ser funcioneslineales definidas a trozos (linear piece-wise), en donde cada muestra s esaplicada a un color c(s)=RGB y una absorción (s)=A, para conformar unatupla RGBA [ENG01]. Para definir esta aplicación, se pueden editar loscuatro canales de manera individual (ver Fig. 2.8a). Partiendo de laidentidad, se pueden agregar y modificar puntos de control, para definircada función a trozos. Sin embargo, es tedioso editar los cuatro canalespor separados, así como asignar un determinado color a un determinado-18-


Capítulo 2: Despliegue Directo de VolúmenesPara calcular el color de salida C de un píxel particular, se integra laemisión de la luz representada por c(s) auto-atenuada por su respectivaabsorción (s), en el intervalo de intersección del rayo con el volumen[0,D] (Ver Fig. 2.10). En cada punto x() del rayo, la emisión esadicionalmente atenuada por la transparencia en el segmento definido en[0,).volumenrayo x()planoimagen0 DFigura 2.10: determinación de un píxel de la imagen. Se calcula la acumulación decolor y opacidad a lo largo del rayo, desde que este entra al volumen, hasta que sale.El rayo es parametrizado mediante x(). Así, barriendo desde 0 hasta D, seconsidera todo el segmento de intersección con el volumen.Para facilitar la evaluación de la ecuación, el rayo es dividido en n= D / hsegmentos, con un paso fijo de longitud h. Dada que la división D/h nonecesariamente es exacta, la ecuación puede escribirse de maneraaproximada como:C nih i 1 ( i 1)h( s(x(')))d'0c( s(x()))(s(x()))e d. [Ec. 2.6]La integral del término de transparencia puede separarse en dos: latransparencia acumulada hasta el segmento anterior, y la transparenciahasta el punto x() del segmento i-ésimo:Cnih i 1 ( i 1)h( i 1)h ( s(x(')))d' ( s(x(')))d'0( i 1)hc( s(x()))(s(x()))ed. [Ec. 2.7]Dado queexp( i h1) ( s(x(')))d'no depende de , nos queda:0-21-


Capítulo 2: Despliegue Directo de VolúmenesCne( i 1)h( s(x(')))d'ih( s(x(')))d'0 ( i 1)hc( s(x()))(s(x()))ed. [Ec. 2.8]i 1 ( i 1)hLa integral presente en el término de transparencia del intervalo [0,(i-1)h]puede a su vez ser expresado como una suma de integrales:Cnejhi 1 ( s(x(')))d'j 1( j 1)hihi 1 ( i 1)h ( s(x(')))d'( i 1)hc( s(x()))(s(x()))edn i 1( j 1)h C ejh ( s(x(')))d'ihi 1 j 1( i 1)hn i 2( j 1)h ( s(x(')))d'jh C eihi 1 j 0( i 1)hn 1i 1jh C ei 0j 0( j 1)h ( s(x(')))d'( i 1)hc( s(x()))(s(x()))ed ( s(x(')))d'( i 1)hc( s(x()))(s(x()))ed ( s(x(')))d'( i 1)h ( s(x(')))d'ihc(s(x()))(s(x()))eihd. [Ec 2.9]Note que las integrales resultantes en la Ec. 2.9 barren una pequeñaárea de longitud h o inferior, y generalmente son aproximadas alconsiderar que h es pequeño. Se utiliza una aproximación numéricadenominada Aproximación de la Composición Volumétrica [LAC95] (verFig. 2.11).volumenplanoimagen0hrayo x()Figura 2.11: determinación de un píxel de la imagen a partir de las contribucionesde color y opacidad de las muestras equidistantes que se encuentran la lo largo delrayo que atraviesa el volumen. En cada segmento de longitud h, se asumeconstantes la emisión y la absorción. La distancia h entre muestras comúnmente esconstante.-22-


Capítulo 2: Despliegue Directo de VolúmenesPara evaluar la ecuación numéricamente, típicamente la emisión y laabsorción se asumen constantes dentro de cada intervalo. Así, podemosrenombrar s(x()) como si, en el segmento delimitado por [ih, (i+1)h].Cn 1i 1 i 0j 0e( j 1)h ( sjhj) d'( i 1)h ( s ) d'ihc(s ) (s ) eiiihid[Ec. 2.10]En este contexto, (si) y c(si) no dependen de la variable de integración encada integral. Así, podemos escribir la ecuación como:Cn 1i 1i 0j 0eh( s )jc(s ) (s )ii( i 1)h ( s ) d'iheiihd, [Ec. 2.11]en donde la integral remanente puede escribirse como:( i 1)h ( si)d'iheihh ( si) ' hdh( si)( ) 10s eid= e d ed . [Ec. 2.12](s )0Sustituyendo Ec. 2.12 en la Ec. 2.11 se obtiene0iCn 1 i 1i 0j 0eh( s )jc(s )(1 eih( s )i). [Ec. 2.13]Sea el color ci = c(si), y la opacidad i = 1een su forma más simple como:n 1 i 1i 0j 0C (1 ) cjii h ( s i ). La ecuación es escritaC 0c0 ( 10)1c1 (1 0)(11)2c2...( 10)...( 1n2)n1cn1 .[Ec. 2.14]Para evaluar la Ec. 2.14 se puede utilizar el operador digital underiterativamente, mezclando las muestras en el orden front to back, esdecir, desde la muestra más cercana hasta la más lejana al ojo [RUI06].Este operador se define como:c := (1)ici + c,-23-


Capítulo 2: Despliegue Directo de Volúmenes := (1)i + , [Ec. 2.15]en donde c y son inicializados en 0. Similarmente, si componemos lasmuestras en sentido back to front (desde la más lejana hasta la máscercana al ojo), se puede utilizar el operador digital over [LAC95] que sedefine como:c := ici + (1i)c, := i + (1i), [Ec. 2.16]e igualmente c y son inicializados en 0, aunque en este caso el valoracumulado en no es utilizado en la composición del color. La técnicamás común para explotar el hardware gráfico es texturizar polígonos concortes del volumen y desplegarlos desde el corte más lejano hasta el máscercano, utilizando el operador over para obtener en cada píxel laevaluación de la Ec. 2.14. El operador over es especificado con la libreríagráfica OpenGL® de la siguiente manera:glEnable(GL_BLEND);glBlend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);El blending o mezcla hace que el color c acumulado en el búfer de colorse combine el con color arrojado por el procesador de fragmentos dealguna manera. La constante GL_SRC_ALPHA en el primer parámetro delprocedimiento glBlend indica que el color ci arrojado por el procesadorde fragmento es multiplicado por su respectiva opacidad i, y laconstante GL_ONE_MINUS_SRC_ALPHA indica que el color c acumulado enel búfer de color es multiplicado por (1i). En caso que el color de salidadel procesador de fragmento ya esté multiplicado por su respectivaopacidad, se puede configurar la mezcla como:glBlend(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);También es posible configurar la mezcla para el operador under si elcolor ci y la opacidad i están pre-multiplicados, mediante la siguienteinvocación:glBlend(GL_ONE_MINUS_DST_ALPHA, GL_ONE);en donde la constante GL_ONE_MINUS_DST_ALPHA especificada en elprimer parámetro indica que el valor ici es multiplicado por (1)durante la mezcla.-24-


Capítulo 2: Despliegue Directo de VolúmenesA continuación se estudian los algoritmos clásicos de visualización devolúmenes, tanto aquellos basados en software, como los acelerados porhardware.2.3 Algoritmos para Visualizar VolúmenesLas técnicas de visualización de volúmenes basadas en software máspopulares son el ray casting, splatting, y shear-warp, mientras que lasaceleradas por hardware se basan generalmente en el texturizado depolígonos. En este último caso, hay 3 técnicas básicas: planos alineadosal objeto, que utiliza texturas 2D; planos alineados al viewport, queutiliza texturas 3D; y spherical shells (conchas esféricas), que utilizatambién texturas 3D [LAM99]. En todas las técnicas puede utilizarseclasificación pre-integrada, pre-clasificación o post-clasificación. Diversasinvestigaciones demuestran que las técnicas basadas en softwaretambién pueden ser aceleradas por hardware gráfico para mejorar eltiempo de respuesta [KRU03], [CRA93], [CAR00], [SCH01].A continuación se estudia brevemente cada una de estas técnicas, paraluego introducir las estrategias para desplegar volúmenes de grantamaño.2.3.1 Ray CastingEl ray casting se basa en el lanzamiento de un rayo por cada píxel de laimagen desde el centro de proyección, para evaluar la ecuación decomposición volumétrica [HEG93] (Ver Fig. 2.12). En general, el rayoatraviesa el volumen en una dirección arbitraria, y las muestrasrequeridas durante la travesía del rayo no coinciden con las muestrasoriginales del volumen. Por lo tanto, se suele utilizar un filtro para elremuestreo. Comúnmente se emplea un filtro tri-lineal entre las 8muestras más cercanas a la muestra a reconstruir. Sin embargo puedenaplicarse filtros más sofisticados que involucren más cantidad demuestras, como filtros gaussianos y bi-cúbicos [DRE88].Por lo general, la implementación del ray casting es realizada porsoftware. Dado que el algoritmo requiere de mucho cómputo, y aunado aproblemas de localidad espacial, se dificulta la respuesta en tiempo real.El despliegue se puede acelerar mediante la utilización de las técnicas determinación temprana del rayo y salto de espacios vacíos [LEV90],[DAN92]. La terminación temprana del rayo consiste en truncar latravesía del rayo cuando se acumule un umbral de opacidad definidopor el usuario (comúnmente de 0.95 a 0.99). El resto del rayo puede-25-


Capítulo 2: Despliegue Directo de Volúmenesignorarse, puesto que el aporte de las muestras remanentes esinsignificante en el color final del píxel.La estrategia de saltar espacios vacíos puede implementarse dividiendo elvolumen en bloques. Por cada bloque se puede precalcular el valor demuestra mínimo y el valor máximo (smin,smax), y si la función detransferencia indica que todas esas muestras son transparentes, elbloque se considera vacío. Cuando un rayo entra a un bloque vacío, sedetermina el punto de salida del bloque para continuar la travesía delrayo [KRU03].píxelOjoimagenFigura 2.12: el ray casting. Por cada centro de píxel de la imagen se lanza un rayo.Aquellos rayos que atraviesan el volumen acumulan un color y opacidad. El pasoentre muestras es constante. Un filtro suele ser aplicado para obtener las muestrasrequeridas. Los puntos rojos son los puntos de entrada de cada rayo en el volumen.Este tipo de algoritmos recorre la imagen en el mismo orden en que lospíxeles están almacenados en memoria principal (algoritmo image orderu orden imagen) [LAC95]. Sin embargo, el problema principal es que nose accede al volumen en el orden en que está almacenado, ya que losrayos de visualización lo atraviesan en cualquier dirección. Comoresultado, los algoritmos de ray casting ocupan mucho tiempo encálculos de posición de las muestras, y no explota la localidad espacialde datos volumétricos, limitando el rendimiento en computadoresconvencionales.Hoy en día, con la flexibilidad de hacer programas que se ejecutan en losprocesadores de fragmentos, el ray casting puede ser implementado conaceleración en hardware en tiempo real [KRU03]. Es este caso, en cadaprograma de fragmento se evalúa la ecuación de composiciónvolumétrica para un píxel de la imagen. Para disparar los programas defragmentos, se considera el volumen como un cubo (6 cuadriláteros).Rasterizando las caras visibles del cubo, e interpolando las coordenadas-26-


Capítulo 2: Despliegue Directo de Volúmenesde los vértices de dichas caras, se disparan los programas de fragmentoscon el punto de entrada respectivo. El punto de salida del rayo puedehallarse de manera análoga al punto de entrada, pero esta vezrasterizando las caras no visibles del cubo (ver Fig. 2.13). El punto desalida también puede determinarse durante la travesía del rayo, cuandoel punto del rayo a considerar se encuentre fuera del volumen. Porsimplicidad, este chequeo puede realizarse en coordenadas objeto ocoordenadas de textura, en donde el volumen está alineado a los ejes.píxelOjoimagenFigura 2.13: obtención del punto de entrada y punto de salida de cada rayo porinterpolación lineal. Las líneas verdes corresponden a las caras frontales delvolumen, y las líneas rojas a las traseras. Al rellenar las caras frontales y traserasinterpolando las posiciones de los vértices, obtenemos por cada píxel de la imagen elpunto de entrada y salida de cada rayo en el volumen.2.3.2 SplattingEn contraste con los algoritmos de ray casting, los algoritmos basados ensplatting iteran sobre los vóxeles, sin requerir interpolación de lasmuestras del volumen. Estos algoritmos calculan la contribución de cadavóxel pre-clasificado sobre la imagen mediante un filtro sobre unavecindad de píxeles (ver Fig. 2.14). Este filtro es denominado el footprintdel vóxel, y define los pesos de la contribución del vóxel sobre píxeles dela imagen.Los algoritmos de splatting son de orden objeto (object order), dado que laiteración principal es sobre los vóxeles y no los píxeles, explotando lalocalidad espacial en el acceso al volumen. La dificultad principal delsplatting consiste en el cálculo del filtro sobre la imagen, puesto que lospesos sobre cada píxel varían vóxel a vóxel, y el tamaño y ubicación delfiltro es dependiente de las transformaciones sobre la vista [LAC95].-27-


proyecciónCapítulo 2: Despliegue Directo de VolúmenesplanoimagenfootprintkernelojofootprintproyecciónvóxelesFigura 2.14: splatting. Cada vóxel es proyectado sobre el plano imagen, en donde seaplica un filtro para obtener la contribución de dicho vóxel sobre los píxeles.El splatting puede ser implementado con ayuda del hardware gráfico. Eneste caso, el footprint es representado en una textura 2D, donde cadatéxel de la textura representa un peso sobre un píxel destino [CRA93].Cada vóxel puede ser proyectado como un pequeño polígono, cuyo colorasociado es el color del vóxel. Este polígono es texturizado con elfootprint, configurando el hardware gráfico de manera tal que el color decada fragmento a generar sea la atenuación el color del polígono con elcorrespondiente téxel del footprint. Cada fragmento generado es a su vezcombinado con el píxel correspondiente en el búfer de color para irevaluando la ecuación de composición volumétrica.espacio objetoespacio objetoshearedshearzyxselección a x a y a zimagen deformadawarpingimagen finalFigura 2.15: proceso de shear-warp con proyección paralela. De las tres copias delvolumen se selecciona la más perpendicular en coordenadas objeto a los rayos devisualización. Según la inclinación de los rayos respecto a los cortes, los cortes sedesplazan (shear), llevándolos a un espacio en donde los rayos son perpendicularesa los cortes. Los cortes desplazados se proyectan sobre el plano imagen, en donde seexplota la localidad espacial en la imagen y objeto. Luego es necesaria unatransformación denominada warping para corregir la deformación en la imagen.-28-


Capítulo 2: Despliegue Directo de Volúmenes2.3.3 Shear-warpLa factorización shear-warp consiste en transformar el volumen a unsistema de coordenadas intermedio denominado espacio objetodeformado o desplazado (sheared object space) en el que todos los rayosde visualización son paralelos al tercer eje de coordenadas. En eseespacio, los cortes del volumen están tanto alineados al objeto comoalineados al viewport [LAC95]. Esto permite la generación de una imagenintermedia, proyectando los cortes desplazados sobre un plano,accediendo al volumen corte por corte. Luego, se aplica unatransformación 2D llamada warping a la imagen desplazada para generarla imagen final (ver Fig. 2.15). Para explotar la localidad espacial, sealmacenan 3 copias del volumen: una por cada eje, y se elije la copia másperpendicular a la dirección de visualización.Matemáticamente, la factorización shear-warp consiste en expresar lamatriz de visualización Mvis como un producto de dos matrices:Mvis =Mwarp*Mshear. [Ec. 2.17]La matriz Mshear es utilizada para desplazar los cortes, y Mwarp es lamatriz de warping, que corrige la deformación 2D en la imagenintermedia.La versión con proyección paralela de este algoritmo tiene sus orígenesen dos trabajos [KLE85], [CAM92]. Posteriormente, la versión perspectivafue propuesta por Lacroute [LAC95]. Todas estas implementacionesiniciales se basaban en software, tanto para la generación de la imagenintermedia como para el warping. La versión estéreo fue presentada en[TAO96], y posteriormente, el tiempo de respuesta fue mejorado alrealizar el warping vía aplicación de texturas 2D [PFI99], [CAR00],[SCH01]. La calidad de la cuantización de vectores normales fuemejorada para el cálculo del modelo de iluminación [CAR00], utilizandola subdivisión uniforme de un icosaedro. En los últimos años hancontinuado las investigaciones sobre visualización de volúmenes basadoen shear-warp, tanto en software [SWE02] como en hardware [CAM04],incluyendo la versión pre-integrada [SCH03].Es importante señalar que los algoritmos basados en shear-warp son deorden imagen y orden objeto a la vez, por lo tanto explotan mejor lalocalidad espacial que los algoritmos de ray casting y splatting, teniendoasí un rendimiento superior. El cambio de copia puede generar unnotable fallo de página, que puede afectar momentáneamente lainteractividad con el volumen.-29-


Capítulo 2: Despliegue Directo de Volúmenes2.3.4 Texturas 2DLa visualización de volúmenes basado en aplicación de texturas requieregeometrías intermedias que se mezclan y texturizan con cortes planos delvolumen. Cuando se utilizan planos alineados a los ejes del objeto, elvolumen puede ser pensado como una pila de cortes que se almacenanen texturas 2D. De manera similar a shear-warp, se almacenan 3 copiasdel volumen, y se elige la más perpendicular a la dirección devisualización (ver Fig. 2.16). Para realizar el despliegue, se texturiza unapila de polígonos alineados al objeto [LAM99], y se mezclan típicamentecon el operador over, para generar la imagen final (ver Fig. 2.17).Cambio de copiaFigura 2.16: visualización de volúmenes utilizando texturas 2D. Se almacenan 3copias del volumen, y se selecciona la pila de cortes más perpendicular a la direcciónde visualización.(a) (b) (c)(d)Figura 2.17: despliegue de polígonos texturizados alineados al objeto. Los polígonosalineados (a) son texturizados uno por uno, asignándole coordenadas de textura acada vértice (b). Cada polígono texturizado (c) es mezclado mediante el operador over,para obtener la imagen resultante (d). Note que se pueden distinguir los cortes delvolumen por insuficiencia en el número de cortes, y ausencia de interpolaciónespacial.El número de polígonos a texturizar está limitado en principio a lasdimensiones del volumen. Sin embargo, utilizando multi-texturas, sepuede interpolar cortes durante el despliegue vía register combiners-30-


polígonosCapítulo 2: Despliegue Directo de Volúmenes(combinadores de registros) para aproximar la interpolación tri-lineal[ENG01], [GAR03]. Adicionalmente, en la actualidad se puede realizar lainterpolación tri-lineal entre dos cortes del volumen programando losprocesadores de fragmentos.Entre las bondades de este método, se considera su fácil implementacióny excelente tiempo de respuesta. La portabilidad de esta técnica es otropunto a favor, ya que la aplicación de texturas 2D es soportada por lamayoría de las tarjetas gráficas. Para volúmenes relativamente grandes,en donde una copia del volumen excede la capacidad de la tarjeta gráfica(pero no los cortes individuales), el despliegue puede efectuarsepaginando los cortes del volumen. Esta paginación es típicamenterealizada en forma automática por el manejador o driver gráfico.proyección paralelarayosproyección perspectivamuestrasinterpoladasFigura 2.18: distancia entre muestras. Al texturizar polígonos alineados al objeto, ladistancia entre muestras cambia por rotación (proyección paralela) o por rayo(proyección perspectiva).Figura 2.19: despliegue alrededor de los 45 grados. Note que las muestras utilizadasentre una copia y otra difieren, por lo que el brillo en la imagen final puede cambiarligeramente.Cabe destacar que al rotar los polígonos, cambia la distancia entre lasmuestras. Para obtener consistencia entre frames (cuadros de imagen o-31-


Capítulo 2: Despliegue Directo de Volúmenesfotogramas 1 ) hay que corregir las opacidades de la muestras, ya que amayor distancia recorrida por el rayo entre dos muestras, mayor es laabsorción o atenuación (ver Fig. 2.18). Las desventajas de este métodoson similares a las de shear-warp, debido a la necesidad de mantener 3copias del volumen y la ausencia de interpolación espacial. En ánguloscercanos a 45 grados, justo en el momento de cambiar la copia activa,puede notarse un pequeño cambio en el brillo de la imagen, debido a quelas muestras utilizadas en la composición volumétrica suelen diferir (verFig. 2.19).2.3.5 Texturas 3DEl volumen puede ser almacenado en una textura 3D, en cuyo caso serequiere una sola copia en almacenamiento. Para visualizar el volumen,comúnmente se texturizan y despliegan una serie de polígonos, paralelosal viewport, en sentido back to front (desde el más lejano hasta el máscercano) y se mezclan con el operador over (ver Fig. 2.20). Akeley [AKE93]en 1993 fue el primero en mencionar la posibilidad de utilizar unatextura 3D para acelerar la visualización. Seguidamente, esta idea fueutilizada y mejorada en otros trabajos del año siguiente [CAB94],[GUA94], [WIL94].(a)(c)(b)(d)Figura 2.20: visualización de volúmenes utilizando texturas 3D y planos alineados alviewport. (a) Planos alineados al viewport ajustados al volumen. (b) Se muestran losplanos alineados para 3 ángulos distintos de rotación. (c) Proyección paralela; ladistancia entre muestras no varía. (d) Proyección perspectiva; la distancia entremuestras varía rayo a rayo.1 Fotograma: también llamado cuadro de imagen, o frame en inglés, es una imagenparticular dentro de un conjunto de imágenes que componen una animación.-32-


Capítulo 2: Despliegue Directo de VolúmenesEste método utiliza comúnmente interpolación tri-lineal para reconstruirlas muestras requeridas. Para el caso de proyección paralela, la distanciaentre muestras interpoladas es siempre la misma, independientementedel ángulo de rotación. Para la proyección perspectiva, la distancia entremuestras varía rayo por rayo.Las técnicas de planos alineados al objeto (basados en texturas 2D) y alviewport (basados en texturas 3D) generan ligeros artefactos bajoproyección perspectiva, si la variación de la distancia entre muestras porrayo no es considerada. LaMar et al. proponen una solución utilizandoconchas esféricas (spherical shells) texturizadas con una textura 3D[LAM99], tal y como se muestra en la Fig. 2.21. Debido a que las conchasson concéntricas respecto al ojo, la distancia entre muestras entre par deconchas es constante, para todos los rayos que parten desde el centro.Cada concha o semiesfera es aproximada por un conjunto de triángulos,para poder explotar el hardware gráfico. Si la triangulación es muyburda (pocos triángulos), también lo será la aproximación del mallado ala esfera, agudizando la variación de la distancia entre cada par demuestras. Una triangulación muy fina, requiere de muchos vértices a serenviados al sistema gráfico, en detrimento del tiempo de respuesta. Unbalance entre calidad y velocidad de despliegue debe ser considerado alconstruir la triangulación. Al igual que con planos alineados al viewport,un cómputo adicional debe ser efectuado para descartar geometría fueradel volumen, el cual puede efectuarse por software en coordenadasobjeto [PLA02], [BEN05], o por hardware configurando los planos decorte [BOA01].(a)(b)Figura 2.21: visualización de volúmenes utilizando texturas 3D y spherical shells.(a) Se muestran las conchas esféricas para 3 ángulos distintos de rotación. (b)Proyección perspectiva. Observe que la distancia entre muestras es siempre lamisma, salvo en las fronteras de volumen.Madero et al. [MAD02] muestran en la práctica que la calidad dedespliegue utilizando planos alineados al viewport es superior queconchas esféricas al visualizar al volumen perpendicularmente respecto a-33-


Capítulo 2: Despliegue Directo de Volúmenesalguna de sus caras. Las conchas esféricas en cambio generan mejoresresultados en ángulos cercanos a los 45 y 135 grados. Debido a lainterpolación tri-lineal en la reconstrucción de las muestras, se reducenlos artefactos que generan algoritmos basados en texturas 2D y shearwarp.Sin embargo, la interpolación tri-lineal suele ser más lenta que lainterpolación bi-lineal, puesto que requiere de más operacionesaritméticas y accesos al volumen. Si el volumen es muy grande, y latextura no puede almacenarse completamente en memoria de textura, eldespliegue del volumen no puede efectuarse, a menos que se utilice unatécnica más sofisticada conocida como bricking [LAM99].2.4 Despliegue de Volúmenes de Gran TamañoDebido al crecimiento tecnológico de los dispositivos de captura deimágenes, como resonadores magnéticos y tomógrafos, la resolución delos volúmenes que se obtienen de ellos ha aumentado considerablementeen los últimos años. Estos volúmenes suelen superar las capacidades dememoria de sistemas convencionales. Adicionalmente, proyectoscientíficos como el Visible Human [VHP94] y simulaciones [MIR99] hangenerado volúmenes que exceden las capacidades de memoria, inclusoen estaciones de trabajo. Es por ello que diversos investigadores se hantomado la tarea de proponer soluciones para lograr visualizarlos, ya seaparticionando y desplegando el volumen por partes, visualizar un área deinterés o con esquemas multi-resolución. A continuación se discutencada una de estas técnicas.2.4.1 BrickingLa técnica de bricking consiste en particionar el volumen en pequeñossubvolúmenes o ladrillos denominados bricks, por lo general de igualtamaño, que pueden ser desplegados individualmente [GRZ98], [LAM99].Al momento de realizar el despliegue, estos bricks deben ser ordenados ydesplegados, comúnmente desde el más lejano al más cercano (ver Fig.2.22).Esta técnica se utiliza para el caso de volúmenes muy grandes que nopueden ser almacenadas completamente en la memoria de textura.También puede utilizarse para explotar la localidad espacial en el accesoa los datos y mejorar el rendimiento de la aplicación.Para una interpolación consistente entre los bricks, los píxeles de lafrontera se comparten entre bricks adyacentes (ver Fig. 2.23). Debido aque los píxeles entre bricks son almacenados dos veces, en el caso 3D setiene un overhead en el almacenamiento de O((n/b) 3 ), para un volumen de-34-


Capítulo 2: Despliegue Directo de Volúmenestamaño n 3 , particionado en bricks de tamaño b 3 . Adicionalmente, seagregan a los sumo b2 píxeles de holgura por dimensión en los bricks dela frontera, para completar el tamaño del brick.Figura 2.22: despliegue de un volumen utilizando bricking.(a)Textura 1D(b)Textura 1D[0,1] [⅛,1-⅛]xx xartefactosFigura 2.23: bricking unidimensional. La textura original contiene 11 píxeles. Eltamaño del brick (b) ha sido fijado a 4 píxeles, y por lo general debe ser potencia de2. Los píxeles con “x” son de holgura para completar el tamaño del último brick. (a)La textura 1D es particionada en bricks. El dominio de textura de cada brick es [0,1]salvo el brick frontera, que es [0,¾]. Al rasterizar una primitiva gráfica con estospequeños mosaicos de texturas, se obtiene una incorrecta interpolación en lasfronteras de los bricks, pues en el píxel frontera no se tiene información del píxelvecino para interpolar. Como resultado se obtienen artefactos visuales entre bricks.(b) Compartiendo medio píxel frontera entre bricks, y redefiniendo adecuadamentelas coordenadas de textura (dominio de interpolación), se obtiene una consistenteinterpolación entre bricks durante la rasterización.-35-


Capítulo 2: Despliegue Directo de VolúmenesPese a que la técnica de bricking resuelve el problema de las limitacionesde memoria textura, resulta impráctico para aplicaciones en tiempo real,puesto que el ancho de banda entre la memoria principal y la memoriade textura es limitado. El problema de ancho de banda se agudizacuando adicionalmente el volumen no puede ser almacenadocompletamente en la memoria principal. Para reducir el problema delancho de banda, se puede evitar la carga de bricks vacíos. En estecontexto, algunos trabajos han utilizado la representación jerárquica delvolumen basada en octree. Así, el volumen es particionado a distintostamaños por cada nivel del octree [SRI97]. El nivel 0 constituye elvolumen entero, de O(n 3 ). Recursivamente, el volumen es dividido enbricks de particionamiento más fino, hasta alcanzar un criterio hojadeterminado. Utilizando el octree, un nodo que representa muchos bricksde particionamiento más fino puede ser tempranamente descartado pararendering, al recorrer el octree en pre-orden. Posteriormente, la idea fueutilizada para no almacenar regiones vacías en memoria de textura[TON99]. Sin embargo, esto no garantiza que las áreas no vacías puedanajustarse a los requerimientos de memoria de textura o de la memoriaprincipal.2.4.2 Despliegue de un Área de InterésUna alternativa para visualizar volúmenes de gran tamaño consiste endesplegar únicamente un área de interés, cuyas dimensiones nosobrepasen las capacidades de memoria de textura. En la literatura, esteproceso es conocido como volume roaming [BHA02]. Interactivamente, elárea de interés puede seleccionarse, cargarse en memoria y desplegarse.Por lo general, el área de interés se define como un cubo o lens alineadoa los ejes del volumen, o un corte oblicuo del volumen o clipping plane[LAM00]. Hay dos aspectos importantes a considerar en esta técnica:- La latencia generada por cargar en memoria de textura otrosubvolumen, al mover interactivamente el área de interés dentro del granvolumen. Esta latencia puede reducirse utilizando bricking y lacoherencia frame a frame, puesto que al cambiar ligeramente el área deinterés, sólo un subconjunto de nuevos bricks son requeridos pararendering. Sin embargo, no hay garantía de que la cantidad de memoriatransferida por frame no represente un cuello de botella, a menos que selimite el tamaño del lens y la velocidad con que se desplaza el lens o elclipping plane dentro del volumen.- Según el fenómeno que se desea estudiar mediante el despliegue delvolumen, puede ser importante conocer el contexto en el que seencuentra el área de interés. Por ejemplo, si deseamos estudiar un-36-


Capítulo 2: Despliegue Directo de Volúmenesproblema óseo en un dedo (área de interés), nos puede interesar sabercuál dedo es, y a cuál mano le pertenece el mismo.En ambos casos es necesario utilizar una técnica más general, quepermita ajustar el detalle de las distintas áreas que conforman elvolumen, de manera de no limitar el tamaño del área de interés, ni lavelocidad con la cual se navega el volumen.2.4.3 Despliegue de Volúmenes Multi-resoluciónLa solución más común para desplegar volúmenes de gran tamaño entiempo real consiste en utilizar técnicas multi-resolución [LAM99],[LIX02] o un área de interés [LAM00], [GUT02], [PLA02], la técnicaconsiste en desplegar las distintas áreas del volumen o subvolumen condistintos niveles de detalle, acorde a una prioridad, con la garantía de noexceder los requerimientos de memoria.A continuación se estudian los diversos aspectos que acompañan latécnica multi-resolución, como la representación del volumen, el criteriopara seleccionar el nivel de detalle, artefactos entre niveles de detalle,entre otros.(a) (b) (c)bxbybxNivel 0Nivel 0byNivel 1…Nivel 2Figura 2.24: jerarquía multiresolución. (a) Caso bidimensional (quad-tree para unaimagen). Cada nodo representa un brick. Todos los bricks tienen la misma cantidadde píxeles, pero representan un área distinta en la imagen. El nivel 0 consta de unúnico brick de bx*by píxeles que representa la imagen entera en el nivel de detallemás burdo. El nivel 1 consta en este caso de 4 bricks (8 para el caso 3D), cada unorepresentando un cuadrante de la imagen, con bx*by píxeles. El proceso continuarecursivamente para cada nodo hasta llegar a la representación original con elmáximo detalle. (b) El octree y (c) su representación. Se muestra una sola rama delárbol. La raíz del árbol representa el volumen con el nivel de detalle más burdo.a) Representación Multi-resoluciónEn diversos trabajos el volumen es representado jerárquicamente en unaestructura de octree, en donde cada nivel del árbol representa un nivel de-37-


Capítulo 2: Despliegue Directo de Volúmenesdetalle particionado en bricks [LAM99], [BOA01], [GUT02], [PLA02]. Cadaconjunto de 8 bricks adyacentes en un nivel de detalle son representadospor un único brick en el siguiente nivel de detalle inferior, definiendo asíla estructura de datos jerárquica de octree (ver Fig. 2.24). Sea nLod elnúmero de niveles de detalle. Observe que el nivel de detalle más fino(nivel de detalle 0) se representa en el nivel nLod1 de árbol, mientrasque el nivel de detalle más burdo (nivel de detalle nLod-1) se representaen el nivel 0 del árbol.Pese a que los bricks representan subvolúmenes de distintos tamañosdentro del gran volumen, la cantidad de vóxeles en cada brick esconstante, facilitando así la paginación de bricks. Para aquellos bricksubicados en las fronteras del volumen, puede ser necesario agregarvóxeles de holgura para completar el tamaño deseado, pero lascoordenadas de textura deben ajustarse adecuadamente. Generalmente,el árbol resultante no es un árbol completo.Otra vertiente para la representación consiste en particionar el volumenoriginal en bloques (blocks), y representar cada bloque con diferentesniveles de detalle [LIX02], [LJU06A]. De esta manera, por cada bloque setiene una jerarquía local multi-resolución, y se debe elegir la resoluciónde cada bloque en base a los criterios de selección. En esta versión, lacantidad de vóxeles de los bloques varía por nivel de detalle, creando unadificultad adicional en la paginación, pero simplifica los recorridos de laestructura de datos, y logra un particionamiento más fino del volumen.b) Criterio de SelecciónPara decidir qué resolución asignar a cada área del volumen, se hanpropuesto diversas técnicas. Algunas de ellas consideran los parámetrosde visualización, como la posición del ojo, un punto o una región deinterés dentro del volumen, etc. Otras consideran parámetros basados enlos datos, como la distorsión de representar un área del volumen condeterminado nivel de detalle, la homogeneidad del brick, etc. Medidasmás recientes consideran parámetros en el espacio de la imagen, como elaporte de un brick o block a la imagen final. A continuación se describenestos criterios.Chamberlain et al. proponen un método de selección procedural basadoen la resolución proyectada, para escenas estáticas complejas,representadas en una jerarquía de octree [CHA96]. El criterio es evaluadorecorriendo el árbol en profundidad. Las celdas del octree que estén fueradel frustum [WOO99] (pirámide truncada de visualización) son excluidasdel rendering. Para las celdas que estén parcial o totalmente dentro delfrustum, se proyecta el bounding box de la celda. Si el tamaño de la-38-


Capítulo 2: Despliegue Directo de Volúmenesproyección es menor a cierto épsilon (generalmente 1 píxel) se despliegael bounding box de la celda con un color y transparencia determinado,acorde a las primitivas encontradas dentro de la celda. De lo contrario, lacelda se subdivide y se aplica el criterio recursivamente. La desventaja deeste método es que la relación celda/píxel puede ser relativamentesimilar en un mismo nivel de detalle para toda la escena, generandoselecciones con pocos niveles de detalle.LaMar et al. utilizan un criterio mixto, basado en la distancia a un puntode interés, y la relación entre el ángulo proyectado del brick, y el ángulodel campo de visión [LAM99]. El algoritmo recorre en octree en pre-orden.Si el brick está fuera del frustum, se descarta. Si está dentro, el brick esseleccionado si se cumplen las siguientes dos condiciones:a) La distancia del centro de brick al punto de interés es mayor que ladiagonal del brick, o bien, si el nodo no puede ser refinado, por ejemplo,cuando es una hoja (ver Fig. 2.25a, 2.25b).b) El ángulo proyectado del brick es menor que la mitad del ánguloasociado al campo de visión (ver Fig. 2.25c).(a)(b)(c)brickFigura 2.25: criterios de selección utilizado por LaMar et al. (a) Obtención del árboldeseado (wish tree) a partir de un punto de interés p. El nivel de detalle más finoconsta de 256 bricks; sin embargo, en la representación multiresolución han sidoseleccionados 49 bricks. (b) Caso 3D. El volumen consta de 4096 bricks en su nivelde detalle más fino, y sólo son seleccionados 94 para visualización. El punto negrocorresponde al punto de interés, tanto en (a) como en (b). (c) Criterio dependiente dela vista, basado en la relación entre en ángulo del brick proyectado, y el ángulo del campo de visión (Field-of-view).Si al menos uno de los dos criterios no es satisfecho en el nodo visitado,se evalúa el criterio recursivamente con cada uno de sus hijos. Como sepuede notar, la prioridad para refinar se evalúa localmente en cada nodorecorriendo el árbol en profundidad, por lo que no considera laslimitaciones de la memoria de textura.-39-


Capítulo 2: Despliegue Directo de VolúmenesImma Boada et al. [BOA01] consideran el nivel de importancia (definidopor el usuario mediante un ROI – region of interest – o región de interés),la homogeneidad del brick, y la capacidad de memoria de textura. Li etal. [LIX02] realizan una subdivisión inicial del volumen en búsqueda demaximizar la obtención de bloques homogéneos de mayor tamaño. Lamotivación es que las áreas homogéneas no deben ser divididas, puestoque al dividirse, requieren más polígonos para el despliegue. Los bloquesno homogéneos se representan con distintos niveles de detalle. Paradesplegar el volumen, se selecciona el nivel de detalle apropiado paracada bloque basado en la predicción de la velocidad de despliegue, laopacidad máxima del bloque, la distancia al punto de vista, y el tamañodel bloque proyectado. El resultado es una variación mínima en el tiempode despliegue.Similarmente a [BOA01], Guthe et al. [GUT02] limitan la cantidad devóxeles de la representación multi-resolución a la capacidad de memoriade textura. La prioridad P(b)=E(b)/z(b) de un brick b para ser refinado sebasa en el error cuadrático medio normalizado E(b) entre el valor de susmuestras y las correspondientes muestras originales, y la distancia delvóxel más cercano del brick al ojo, z(b). Así, los bricks que difieran másde su representación original, y más cercanas al ojo tienen másprioridad. Una estructura de cola de prioridad es utilizada para llevar acabo este proceso eficientemente. Se inserta el nodo raíz en la cola deprioridad, e iterativamente se reemplaza el nodo de mayor prioridad porsus hijos, que se reinsertan en la cola. Este proceso se repite hastaalcanzar la capacidad de memoria de textura, o no sea posible otrorefinamiento. Note que para definir E(b) en cada brick b es necesariorealizar un pre-procesamiento del volumen, pero este se hace sólo unavez.Posteriormente Patric Ljung et al. [LJU04] consideran la función detransferencia en el criterio de selección. A diferencia del trabajo de[GUT02], el error cuadrático medio es calculado entre los vóxelesclasificados, en el espacio de color CIELUV. Debido a que el error deberecalcularse en todos los blocks cada vez que cambie la función detransferencia, los autores introducen una medida de aproximación delerror, mediante el uso del histograma de frecuencias reducido a sólo 10segmentos. Así, para cada vóxel, se multiplica su distorsión por sufrecuencia en la correspondiente entrada del histograma, de manera dereducir cálculo redundante para hallar el error cuadrático medio.Wang et al. [WAN07] calculan una aproximación más precisaconsiderando un histograma de 256 entradas. Adicionalmente,consideran la covarianza entre ambos blocks, el valor medio y varianzaen cada block, en el espacio de color CIELUV. Diversas tablas son-40-


Punto de interésCapítulo 2: Despliegue Directo de Volúmenesutilizadas para actualizar el error en cada nodo, incluyendo unhistograma 2D por bloque llamado “summary table” o tabla desumarización, y una tabla global correspondiente a la distancia entrecada par de muestras cuantizadas en el espacio de color. Pese a estasoptimizaciones, los autores reportan que la actualización de error en losnodos toma varios segundos al modificar la función de transferencia.Ljung et al. [LJU04], Wang et al. [WAN07], Guthe et al. [GUT02], andGobbetti et al. [GOB08] estiman la visibilidad de un brick durante elproceso de selección. En este sentido, los bricks o blocks que no sonvisibles o aportan menos información a la imagen tienen menor prioridadde ser refinados.Los trabajos basados en el despliegue de un corte oblicuo del volumen oclipping plane, utilizan criterios ligeramente diferentes para la selección[LAM00], [PLA02]. Lamar et al. [LAM00] utilizan el criterio del punto deinterés presentado en [LAM99], pero adicionan la condición de que elbrick se intersecte con el plano (ver Fig. 2.26a). Empezando desde el nodoraíz, si el brick no es intersectado por el plano, el brick es descartado y larecursión termina. En caso contrario, se verifica el criterio de punto deinterés. El brick es seleccionado si la distancia del punto de interés alcentro del brick es mayor a la longitud de la diagonal del brick. Si elcriterio de la distancia no se satisface, se chequea recursivamente lacondición para los hijos.(a)plano(b)Figura 2.26: (a) selección de bricks dado un plano de corte y un punto de interés. Elpunto negro es el punto de interés, y el árbol tiene 6 niveles de detalle. Los cuadrosverdes son seleccionados para despliegue. (b) Inserción jerárquica de un cortearbitrario en la estructura de octree. Los bricks en verde son requeridos paradesplegar el corte. El proceso termina al alcanzar el límite de memoria de textura, ono sea posible otro refinamiento. En este ejemplo, se asume que el visor está ubicadohacia la parte inferior izquierda del volumen, y el tamaño de la memoria de textura esde 9 bricks. Los bricks cercanos al visor tienen prioridad en cada nivel derefinamiento.Una debilidad de este esquema es que no se considera la capacidad de lamemoria de textura, ni el número de bricks a cargar por frame. JohnPlate et al. [PLA02] consideran estas restricciones proponiendo un-41-


Capítulo 2: Despliegue Directo de Volúmenesesquema a dos etapas; la primera etapa selecciona los bricks basado enla posición del visor, y la limitación de memoria (ver Fig. 2.26b). Comoresultado, los bricks seleccionados difieren a lo sumo en 1 nivel dedetalle, dándole prioridad a los bricks más cercanos al visor. Utilizandocoherencia frame a frame, se compara la lista de bricks seleccionados,con la lista de bricks cargada previamente en memoria de textura. Ladiferencia es el número de bricks que hay que cargar en este frame. Siesta cantidad excede un umbral de downloads o descargas por frame,entonces se sustituyen los bricks seleccionados (con mayor nivel dedetalle y más lejano al ojo) por su siguiente representación de menordetalle. Esta sustitución se repite una y otra vez hasta obtener una listaque no exceda el umbral.La navegación interactiva del volumen (volume roaming) multi-resolucióntiene similaridades con visualización interactiva de terrenos multiresolución.El reto para visualización de terrenos multi-resolución esactualizar la resolución del mallado de triángulos que definen el terreno,así como la resolución de las texturas, dependiendo del punto de visión.El sistema de ROAM [DUC97] utiliza dos colas de prioridad para aplicarlas operaciones de refinamiento (aumento de resolución) y colapso(reducción de resolución) que mantienen triangulaciones continuasmientras se navega por el terreno. Nuestro trabajo está inspirado en esteenfoque, extendiendo la idea general al dominio de visualización devolúmenes multi-resolución.3[0,7][7,14] [14,21] [21,28] [28,35] [35,37]2[0,14] [14,28] [28,37]1[0,28][28,37]0[0,37]Figura 2.27: representación jerárquica de una textura 1D en un árbol binario. Lasáreas grises son los vóxeles adicionales que se agregan para completar los bricks enla frontera. La textura original tienen n=38 píxeles, y los bricks han sido definidos deb=8 píxeles. En un determinado nivel de detalle, se agregan a lo sumo b2 píxeles porcada dimensión. Esta idea se extrapola a texturas 3D con octrees.c) Artefactos en fronteras de bricksPara asegurar una correcta interpolación entre bricks con el mismo nivelde detalle, se puede compartir ½ píxel de manera similar que con latécnica de bricking (ver Fig. 2.27) [LAM99]. Para bricks adyacentes condistintos niveles de detalle, este ½ píxel difiere de tamaño y opacidad, e-42-


Capítulo 2: Despliegue Directo de Volúmenesincluso en color, lo cual puede generar discontinuidades notorias en laimagen generada, traducidas en artefactos visuales.Manfred Weiler et al. [WEI00] reducen estos artefactos, considerando unaconsistente interpolación entre niveles de detalle continuos. El volumenes inicialmente particionado en blocks de igual tamaño, y se construyeuna jerarquía multi-resolución local por cada block. La interpolaciónconsistente entre distintos niveles de detalle se obtiene haciendo que losvóxeles en las fronteras entre blocks interpolen el campo escalar delsiguiente nivel de detalle más burdo entre dichos blocks. Aunque estaidea es inicialmente planteada para transiciones de 2 nivelesconsecutivos, puede ser aplicada iterativamente para lograr transicionesde alto orden. La Fig. 2.28a muestra este proceso para texturas de unadimensión. Sin embargo, por copiar o interpolar muestras de niveles dedetalle inferior hacia niveles superiores, se pierden detalles existentes enlas fronteras de los blocks. Para el caso 3D hay que hacer este proceso enlas seis caras de los blocks. Seguidamente, Stefan Guthe et al. [GUT02]utilizan una idea similar para octrees, pero consideran la copia devóxeles sólo en 3 caras de cada brick: las caras correspondientes a losplanos x=xmax, y=ymax y z=zmax del brick en coordenadas objeto (ver Fig.2.28b). El objetivo es reducir la redundancia por replicar vóxeles en las 6caras de cada brick, obteniendo un overhead de b 3 (b1) 3 vóxeles paracada brick de b 3 vóxeles.(a) (b) (c)0123Finalmente, se destaca el reciente trabajo de Patric Ljung [LJU06A]. Eneste caso, el volumen es particionado en blocks con jerarquía local multiblockAblock BFigura 2.28: interpolación consistente entre bricks o blocks de distinto nivel dedetalle. (a) Los vóxeles izquierdo y derecho de la frontera que separa el block A delblock B, son utilizados para reemplazar vóxeles de dicha frontera en nivel de detalleinmediatamente superior. El vóxel derecho es copiado en el vóxel derecho, y elpromedio en el vóxel izquierdo, del nivel de detalle superior. Note que al juntar elblock A con el B con distintos niveles de detalle, se obtiene una interpolación demuestras consistente. (b) Se reemplazan muestras de un sólo lado en cada frontera.De las 6 caras de cada brick, se reemplazan vóxeles de la cara derecha (xmax), superior(ymax) y trasera (zmax), tomando la información de los bricks vecinos. (c) Interpolaciónentre blocks. En general, cada muestra a reconstruir en las fronteras entre bricks seobtiene ponderando adecuadamente a lo sumo 4 vóxeles (8 en el caso 3D).-43-


Capítulo 2: Despliegue Directo de Volúmenesresolución, pero sin compartir vóxeles entre bloques vecinos. Durante eldespliegue, se realiza interpolación entre blocks de resolucionesarbitrarias de manera directa (ver Fig. 2.28c), i.e. sin necesidad deduplicar vóxeles o pre-calcular muestras intermedias interpoladas. Paradesplegar un block, se requiere acceder información de muchos blocksvecinos para reconstruir las áreas entre blocks. El programa defragmentos por lo tanto se hace complejo, afectando necesariamente elrendimiento del sistema. Una alternativa es no utilizar interpolaciónentre blocks cuando se manipula interactivamente los parámetros devisualización (escalamientos, rotación y traslación). El tiempo derespuesta sin interpolación entre blocks resultó hasta 15 veces másrápido en sus pruebas. Basándose en esa observación, el despliegue coninterpolación entre blocks puede ser realizado en 2 etapas. En laprimera, se consideran los fragmentos generados en el interior del block(dentro del dominio de interpolación). En este caso, se utiliza unprograma de fragmentos simplificado y eficiente. En la segunda pasada,se consideran los fragmentos entre blocks, en donde se utiliza elprograma de fragmentos con interpolación directa entre blocks,acompañada con la aceleración basada en terminación temprana delrayo. En este caso, el tiempo de respuesta es sólo 4 veces más lento, alcompararlo con la versión sin interpolación entre blocks.Para el caso de despliegue de un plano arbitrario del volumen contexturas 3D, todas estas técnicas de corrección de artefactos en lasfronteras de bricks o blocks son igualmente aplicables. Adicionalmente seha propuesto una técnica para transiciones suaves entre niveles dedetalle consecutivos en un plano de corte. La solución se basa difuminarla resolución más alta hacia la más baja, de manera tal que lasresoluciones coincidan en la frontera entre bricks [LAM00]. Cabedestacar que esta técnica requiere del almacenamiento de cada área delvolumen con dos niveles de detalle contiguos, lo que incrementa losrequerimientos de memoria en un octavo. Sin embargo, la transición delos niveles de detalle es imperceptible con esta técnica. El prototipo“Visualizador Experimental” implementado en este trabajo se inspira enesta técnica [CAR09], extrapolándola al área de despliegue de volúmenesmulti-resolución (ver Capítulo 6).d) Corrección de OpacidadLa opacidad de la muestra i-ésima en un rayo (ver sección 2.2.3), querepresenta un segmento de longitud h se define como:h ( s )(i,h) 1e i. [Ec. 2.18]-44-


Capítulo 2: Despliegue Directo de VolúmenesEsta fórmula se deriva al aproximar por series de Riemann la ecuaciónde composición volumétrica continua, en donde se asume que laabsorción (s) es constante en segmentos de longitud h. Cuando ladistancia h entre muestras varía, ya sea debido a la utilización de planosalineados con proyección perspectiva, o por variar la rata de muestreo enfunción de la resolución del brick (muestreo adaptativo) [LAM99], laopacidad debe ser actualizada. La intuición indica que a mayor distanciaentre muestras, la absorción en el segmento es mayor. En vez derecalcular la opacidad para la nueva distancia hnew, se puede corregiruna opacidad calculada anteriormente para otra distancia hold mediantela siguiente ecuación [LAC95]:new h oldhnewhold( i , h ) 11(i,) . [Ec. 2.19]La demostración de la Ec. 2.19 se basa en propiedades de laexponenciación. Consideremos el término exponencial de la Ec. 2.18:ehnewh( )old ( i )newts ht sih old eh newhnewt( si) holdt( si) h e e old . [Ec. 2.20]Sustituyendo Ec. 2.18 a ambos lados de la Ec. 2.20, y despejando ( i,hnew)se obtiene la Ec. 2.19 correspondiente a la corrección deopacidad. Esta ecuación ha sido ampliamente utilizada para reducircálculos en la evaluación de la integral de visualización de volúmenes,tanto en el despliegue de mallas irregulares [ROE00] como regulares[LAC95], [ENG01], [SCH03], [LUM04], incluyendo el despliegue contécnicas multi-resolución [LAM99], [HAN00].e) RenderingComúnmente, para generar la imagen resultante utilizando texturizadode polígonos con aceleración en hardware, los bricks seleccionados sonordenados y desplegados en sentido back to front, es decir, desde el máslejano al más cercano, utilizando el operador de composición over. Lospolígonos utilizados pueden estar alineados al objeto, al viewport, opueden utilizarse conchas esféricas [LAM99] (ver Fig. 2.29). La distanciaentre polígonos suele variar con la resolución del brick, haciendo que elmuestreo sea adaptativo. Para el caso de post-clasificación, la opacidaddebe ser corregida [LAM99], [BOA01]. Si se utiliza pre-integración conauto-atenuación en cada segmento de rayo, se debe calcular una tabla-45-


Capítulo 2: Despliegue Directo de Volúmenesde integrales por cada nivel de detalle, pues el color entre un par demuestras varía a distintas longitudes de segmentos.(a) (b) (c)Figura 2.29: despliegue multi-resolución utilizando aceleración en hardware contexturizado de polígonos. (a) Utilizando texturas 2D con planos alineados al objeto.(b,c) Utilizando Texturas 3D con (b) planos alineados al viewport y (c) conchasesféricas.Otras implementaciones con aceleración en hardware se basan en laimplementación del ray casting en el GPU [LEE05, LJU06C]. En estecaso, los bricks pueden desplegarse en el sentido front to back (desde elbrick más cercano al más lejano), para evaluar la ecuación decomposición volumétrica de manera directa. Así, se pueden explotartécnicas tradicionales de aceleración basadas en software, como laterminación temprana del rayo y los saltos de espacios vacíos.Ljung [LJU06C] adicionalmente soporta niveles de detalle en el espacioimagen. Una imagen intermedia es dividida en mosaico o tiles, condistintos niveles de detalle. La resolución de cada mosaico determina lacantidad de rayos para dicho mosaico. En una segunda etapa, sereconstruye la imagen final, considerando interpolación entre mosaicos.Entre las implementaciones multi-resolución basadas en softwaremerecen citarse las que utilizan la factorización shear-warp [YAN99],[CHO00], o paralelizaciones del ray casting [WAN04], [GAO05].f) Compresión y PaginaciónDiversos trabajos han considerado el problema de almacenamiento en lavisualización de volúmenes a gran escala. Para evitar la paginación debricks de disco a memoria principal, Guthe et al. [GUT02] utilizan larepresentación jerárquica del volumen mediante ondículas o wavelets,para reducir los requerimientos de memoria. Cada nodo contiene lascomponentes de alta frecuencia que permite reconstruir los nodos hijos.Se asume que el volumen comprimido puede ser almacenadocompletamente en memoria principal. En sus pruebas, la rata decompresión con pérdida fue 30:1, para el dataset del humano visible. Un-46-


Capítulo 2: Despliegue Directo de Volúmenescaché adicional ha sido utilizado para los bricks descomprimidos en lamemoria principal, basándose simplemente en LRU. Para la paginaciónde memoria principal a memoria de textura, los autores dejan el controla OpenGL®, que utiliza LRU. Algunos trabajos recientes también utilizanrepresentación jerárquica basada en ondículas para reducirrequerimientos de memoria [LJU04], [WAN07]. Sin embargo, ningunos deestos trabajos considera que el volumen puede ser lo suficientementegrande, que pueda requerir paginación de disco a memoria principal,aún con la compresión aplicada. Tampoco consideran el ancho de bandalimitado entre la memoria principal y la memoria de textura, a la hora dedeterminar el conjunto de bricks a desplegar.Un esquema más elaborado para paginar bricks es introducido por Plateet al. [PLA02]. En dicho trabajo se le asigna una prioridad a cada brick,de manera que un thread secundario pueda realizar la carga de bricks dememoria secundaria a memoria principal de manera concurrente con elrendering. Primero se define el wish list tree (WLT), que contiene losnodos de la selección (WL o wish list) y todos los nodos que seencuentran en el camino entre cada nodo de WL y el nodo raíz. Así, WLTconstituye el mismo WL más todas sus representaciones de menordetalle. Los nodos de WLT tienen más prioridad que el resto de los nodos.Dentro de WLT la prioridad la tienen los nodos de menos detalle, puesdeben estar presentes antes de de ser refinados. Para el resto de losbricks, la prioridad de basa principalmente en su distancia a un nodo enWLT, teniendo más prioridad aquellos nodos más cercanos a WLT. Parareemplazar bricks, se utiliza una modificación a la política LRU. Sereemplaza el brick menos recientemente usado; pero al tener dos brickscon la misma edad, se prefiere descartar aquél más fino y más distante alWL.2.5 SumarioSe han presentado conceptos fundamentales y trabajos relevantes en elcontexto de despliegue de volúmenes, incluyendo la ecuación devisualización, los algoritmos clásicos de despliegue, y las técnicas másutilizadas para el despliegue de volúmenes de gran tamaño.En el caso de volúmenes de gran tamaño, la mayoría de los trabajosasignan una resolución a cada área del volumen en base a diversoscriterios, que pueden basarse en el espacio objeto o imagen. Sinembargo, en general no se considera el ancho de banda limitado entre lamemoria principal y memoria de textura. Esto puede acarrear la pérdidade la interactividad cuando el usuario modifica los parámetros devisualización o función de transferencia, de manera que cambie laresolución en muchas áreas del volumen a la vez.-47-


Capítulo 2: Despliegue Directo de VolúmenesLos trabajos de Duchaineau et al. [DUC97] y Plate et al. [PLA02] son lasprincipales fuentes de inspiración de esta investigación. En [PLA02] seconsidera el ancho de banda limitado de la memoria principal hacia lamemoria de textura durante el proceso de selección, para mantener lainteractividad con el volumen durante la navegación. Sin embargo, laselección está basada sólo en heurísticas, y no considera el error multiresoluciónni la función de transferencia en dicho proceso. El trabajo[DUC97] actualiza incrementalmente la representación multi-resoluciónde una malla de triángulos que representa un terreno, y nuestro trabajoextiende esta idea al área de visualización de volúmenes multiresolución.En el siguiente capítulo se detalla el proceso de selección de bricksintroducido en este trabajo, asumiendo inicialmente que el volumen estáalmacenado completamente en memoria principal. La técnica out-of-corees incluida seguidamente en el capítulo 4, y el despliegue en loscapítulos 5 y 6.-48-


Capítulo 4: Visualización Out-of-CoreCapítulo 3. Criterio de SelecciónLa selección consiste en asignarle una resolución a cada área delvolumen a desplegar, en base a determinados parámetros o medidas deerror. El conjunto de bricks seleccionados, que denominaremos S,corresponden a las hojas de un sub-árbol del octree de la jerarquíamulti-resolución. De esta manera, cada área no vacía del volumen tieneuna única representación en S, y por consiguiente, ningún ancestro odescendiente de un nodo seleccionado puede pertenecer también a S.En diversos trabajos previos se han utilizado algoritmos voraces paraobtener la selección [DUC97], [BOA01], [GUT02], [WAN07], los cualesconsideran medidas de error en cada nodo. Luego de estudiar estosalgoritmos, hemos encontrado que la heurística de refinar el nodo demayor error no es la más apropiada. En este trabajo se incluye unamejora a esta heurística, considerando la reducción del error y el númerode hijos en cada nodo, en vez del error en el nodo. Adicionalmente seintroduce un algoritmo óptimo polinomial que genera la selección demínimo error, el cual es utilizado para comprobar que el algoritmo vorazcon la mejora introducida genera resultados cercanos al óptimo.Estos algoritmos de selección son ejecutados una vez se hayan definidolos parámetros de visualización y función de transferencia. Paraaplicaciones de la vida real en donde los parámetros de visualización yfunción de transferencia cambian constantemente (debido a lainteracción del usuario con el volumen), estos algoritmos pueden limitarla interactividad, pues no consideran en ancho de banda limitado haciala tarjeta gráfica.Para mantener la interactividad mientras se navega en el volumen, y seedita la función de transferencia, se limita la cantidad de bricks quepueden ser transferidos a la memoria de textura por frame. Con estarestricción, se introduce un algoritmo voraz incremental en el campo devisualización de volúmenes multi-resolución, que utiliza la coherenciaframe a frame para actualizar representación multi-resolución. Estealgoritmo es guiado por función de prioridad, que sugiere la próximaoperación de refinamiento (split) y reducción (colapso o collapse) aefectuar en dirección a la representación deseada. El algoritmo, quedenominamos algoritmo de Split-and-Collapse, se basa también en unaheurística, por lo que no siempre resulta en la representación óptima, entérminos de la medida de error. Se introduce adicionalmente un-49-


Capítulo 4: Visualización Out-of-Corealgoritmo óptimo polinomial, que aunque no es adecuado paraaplicaciones en tiempo real, nos sirve para demostrar que el algoritmo deSplit-and-Collapse produce resultados muy cercanos al óptimo.En este trabajo se utilizan diversos parámetros durante la selección delos bricks: la distancia al punto o área de interés, la distancia al visor, ladistorsión multi-resolución de los vóxeles clasificados, y las limitacionesde hardware como ancho de banda y memoria de textura. Acontinuación se describe la medida de error utilizada, así como losalgoritmos de selección introducidos. Por simplicidad, en este capítulo sehace abstracción de la paginación de bricks de memoria auxiliar amemoria principal, que será estudiado en el capítulo 4.3.1 Medidas de ErrorSe define una medida de error local E(b) por cada brick b, el cual permitecomparar los distintos bricks seleccionados en términos del error, ytomar decisiones sobre las áreas más prioritarias de la representaciónactual para refinar y reducir. Igualmente se define una medida de errorglobal asociada a un conjunto de bricks seleccionados, que permitecomparar dos selecciones S1 y S2 en términos de su error.El error local E(b) combina dos medidas de error: la distorsión D(b) en eldominio de la función de transferencia, y el nivel de importancia I(b),basado en una región o punto de interés y el punto de vista. Acontinuación se describen cada una de estas medidas, y cómo soncombinadas para definir el error local E(b) y global E(S).3.1.1 DistorsiónSe define el error por distorsión D(b) para un brick b como la suma de loserrores D(bi,fi) entre cada valor de vóxel fi del dataset original y su valoraproximado bi en el brick b:n(b)i 1D ( b) D f i , b i , [Ec. 3.1]donde n(b) es el número de vóxeles originales aproximados por losvóxeles del brick b. Similar a dos trabajos recientes [LJU04] y [WAN07], elerror D(fi,bi) se define en el espacio de color CIELUV; así, los vóxeles yaclasificados en el espacio RGB y multiplicados por su respectivaopacidad son transformados en una tupla LUV en el espacio CIELUVmediante la función L [LJU04]. El error entre dos colores a, b en el-50-


Capítulo 4: Visualización Out-of-Coreespacio CIELUV se define sencillamente como la distancia euclídea d(a,b)entre ambos colores; así,D(fi,bi) = d( L(rgb(fi)(fi)), L(rgb(bi)(bi)) ), [Ec. 3.2]donde rgb(v) es el color asociado al vóxel v en el espacio de color RGB, y(v) es su opacidad. Note que La distorsión D(b) de un brick b dependedel error en la aproximación de los vóxeles clasificados del datasetoriginal, y los vóxeles clasificados de una representación de menosdetalle (brick b). Por consiguiente, la distorsión para cada brick tiene queser recalculada si la función de transferencia cambia. Se hace evidenteque esta actualización no puede ser realizada en tiempo real en uncomputador convencional, puesto que requiere del acceso del volumenoriginal, el cual por lo general sólo puede almacenarse parcialmente enmemoria principal. Sin embargo, este proceso puede ser aceleradomediante tablas precalculadas de sumarización [WAN07]. Por cada brickb, se precalcula un histograma bidimensional H(j,k) que almacena conqué frecuencia un vóxel con valor j del volumen original es aproximadopor un vóxel con valor k de una resolución inferior (brick b).Adicionalmente, se precalcula una segunda tabla, D(j, k), pero global, querepresenta la distorsión de representar un vóxel con valor de j por otrocon valor de k, en el espacio de color CIELUV. Mientras las tablas desumarización se calculan una sola vez, la tabla global debe seractualizada cada vez que se modifique la función de transferencia.Finalmente, la distorsión introducida por el brick b es aproximada por:n 1n 1 D ( b) H(j,k)D(j,k), [Ec. 3.3]j 0k 0y similarmente tiene que ser recalculada cuando se actualiza la funciónde transferencia. Los valores posibles de los vóxeles j y k tienen que sercuantizados, pues de lo contrario, el número de entradas en el Hexcedería incluso el tamaño del brick. En este trabajo se realiza unacuantización fina de los vóxeles (256 valores como en [WAN07]). Debidoal alto grado de correlación entre los vóxeles originales del volumen y losvóxeles de una representación menos fina (brick b), el histograma 2D esgeneralmente disperso, y las entradas no nulas se encuentran alrededorde la diagonal de la tabla. Al almacenar únicamente las entradas nonulas, el overhead de memoria sólo representa un pequeño porcentajedel dataset (alrededor del 4% en nuestras pruebas).La distorsión D(b) es por lo general monotónica, i.e. la prioridad de unnodo no es más grande que la prioridad de su padre [DUC97]. Esto esdebido a dos razones: (a) un nodo representa sólo 1/8 del espacio-51-


Capítulo 4: Visualización Out-of-Coreocupado por su padre, y (b) el nodo padre corresponde a unarepresentación de menos detalle a la de sus hijos. Más aún,generalmente la distorsión de un nodo es mayor a la suma de las de sushijos (monotonicidad por bloque). Sólo en casos excepcionales, estarelación entre padres e hijos no es satisfecha. En estos casos, ladistorsión del padre puede ser reemplazada por la suma de lasdistorsiones de sus hijos, o bien, podría escalarse la distorsión de loshijos adecuadamente.Para definir una medida global de la distorsión multi-resolución de unaselección de bricks S, intuitivamente se define la distorsión promedio porvóxel de aproximar el volumen original por una selección de bricks comosigue:D(S)1n(b)bSbSD(b), [Ec. 3.4]donde n(b) es el número de vóxeles del volumen original aproximadospor la selección S.3.1.2 Nivel de ImportanciaPara aplicaciones del mundo real, el usuario comúnmente tiene interésen explorar subvolúmenes específicos [LAM99], [PLA02], [LJU06].Usualmente se define un punto de interés (PI) para definir las prioridadessobre las distintas áreas del volumen [LAM99]. En este sentido, ladistancia desde el brick hacia el PI podría definir una prioridad. Sinembargo, este esquema siempre va a favorecer a las regiones muycercanas a PI, haciendo que el nivel de detalle sea muy alto alrededor delPI, pero muy bajo en otras áreas del volumen. Esta diferencia tanmarcada entre áreas adyacentes no es adecuada cuando se navegadentro del volumen, ni tampoco para la visualización. Para suavizar ladiferencia entre bricks adyacentes hemos incorporado heurísticamente ladiagonal del brick dentro del proceso de selección, pues la diagonal sehace más pequeña para bricks más finos. La prioridad por distancia alpunto de interés R(b,PI) se define como:diag(b)R(b,PI) , [Ec. 3.5]diag(b) d(b,PI)donde d(b,PI) es la distancia mínima del brick al punto de interés, ydiag(b) es la longitud de la diagonal del brick. Note que R(b,PI)(0,1],-52-


Capítulo 4: Visualización Out-of-Coredándole más prioridad a bricks con menos detalle y cercanos a PI. Ladistancia d(b,PI) es cero si PI está dentro de b.La función R(b,PI) es monotónica, es decir, R(padre(b),PI) R(b,PI). Parademostrarlo partimos de que el espacio ocupado por b está contenidodentro de espacio ocupado por padre(b), así:d(padre(b),PI) d(b, PI) diag(b)+d(padre(b),PI) diag(b) +d(b,PI)1≥ 1diag b +d padre b ,PIdiag (b)diag b +d padre b ,PI ≥diag b +d b,PIdiag (b)diag (b)+d(b,PI). [Ec. 3.6]Debido a que el brick padre(b) es de particionamiento más burdo,representa un área más grande del volumen. Así, diag(padre(b)) > diag(b),y por lo tantodiag (padre (b))diag padre (b) +d padre b ,PI ≥diag (b)diag b +d padre b ,PI[Ec. 3.7]Por transitividad entre Ec. 3.6 y 3.7 se concluye finalmente que R(b,PI) esmonotónica.d=1d= 5d=0Figura 3.1: distancia mínima entre un brick (cuadro azul) y el ROI (cuadro negro). Semuestra el caso 2D por simplicidad. En la figura, cada cuadrado de la rejilla mide 1x1vóxeles 2 .La prioridad también puede basarse en una región de interés o ROI. Eneste caso, de la ecuación 3.5 se reemplaza d(b,PI) por el promedio entre:la distancia mínima entre el ROI y el brick (ver Fig. 3.1), y la distanciamínima entre el brick y el centro del ROI.-53-


Capítulo 4: Visualización Out-of-Corediag(b)R(b,ROI) diag(b) 0.5 d(b,ROI) d(b,center(ROI). [Ec. 3.8]Similar a R(b,PI), se puede demostrar que R(b,ROI) también esmonotónica.La distancia al ojo también puede definir una prioridad, tal que prioriticelos bricks más cercanos al visor. Para ello, se reemplaza d(b,PI) por d(b,v)en la Ec. 3.5, en donde v es la posición del visor en coordenadas objeto.Finalmente, se pondera la prioridad basada en la distancia al ojo con laprioridad basada en la distancia al punto o área de interés para definir elnivel de importancia del brick b de la siguiente manera:I(b) = (1t)R(b,x) + tR(b,v), [Ec. 3.9]donde t[0,1], y x representa bien sea el punto de interés PI ó la regiónde interés ROI. En los experimentos hemos fijado el valor de t en 0.25,dándole más prioridad al punto o área de interés, y menos prioridad alojo en la selección de los bricks. Note que I(b)(0,1], en donde valoresmás altos de I(b) representan mayor nivel de importancia. Debido a queI(b) interpola dos funciones monotónicas positivas, entonces I(b) tambiénes monotónica.El nivel de importancia y la distorsión se combinan finalmente paradefinir el error E(b) del brick b como sigue:E(b)=D(b)I(b).[Ec. 3.10]Debido a que D(b) e I(b) son funciones monotónicas y no negativas, suproducto E(b) también es una función monotónica. Más aún, debido aque D(b) es monotónica por bloque, E(b) también lo es. La monotonicidadha sido utilizada en el área de visualización de terrenos multi-resolucióncon quad-trees [DUC97]. En ese caso el objetivo es actualizardinámicamente la triangulación multi-resolución de la malla, el cualdepende de la posición del visor. El sistema ROAM presentado en esetrabajo utiliza dos colas de prioridad para derivar las próximasoperaciones de refinamiento y reducción de la malla, manteniendo unacontinua triangulación mientras se navega por el terreno. Nuestrocriterio de selección se inspira en el sistema ROAM, y extiende la ideageneral al dominio de la visualización de volúmenes multi-resolución, elcual está basado en una estructura de octree con diversos criterios deselección.-54-


Capítulo 4: Visualización Out-of-CoreSimilarmente a la ecuación 3.4, se deriva el error promedio por vóxelglobal, con el objetivo de comparar la efectividad de distintos algoritmosde selección en la minimización del error.E(S)1n(b)bSbSE(b). [Ec. 3.11]La Fig. 3.2 muestra algunas selecciones generadas con diferentesfunciones de error, considerando la distorsión, el nivel de importancia, yla combinación de ambas medidas.\Figura 3.2: selecciones resultantes al aplicar distintos criterios de selección. Lassiguientes funciones de prioridad han sido utilizadas: (a) E(b)=D(b), (b,c) E(b)=I(b),(d,e) E(b)=I(b)D(b). El punto negro representa el punto de interés (PI). La caja negrarepresenta el área de interés (ROI). Se presenta la selección de los bricks de un cortecoronal 2D de la mujer visible.3.2 Algoritmo Voraz de SelecciónComúnmente se utiliza una cola de prioridad para determinar los bricksque representan al volumen, en base a una función de prioridad, y a larestricción de memoria de textura. Esta idea fue inicialmente propuestaen [GUT02] para visualización de volúmenes multi-resolución, y desdeentonces ha sido utilizada en diversos trabajos, incluyendo trabajosrecientes [YOU06], [WAN07]. El proceso comienza por insertar el nodoraíz de la jerarquía multi-resolución en la cola de prioridad.Iterativamente se toma el nodo cabeza de la cola, cuya prioridad es lamayor (o equivalentemente, su penalización es la menor) y se refina.Dicho nodo es eliminado de la cola, y sus hijos son insertadosordenadamente en la cola, según sus prioridades. El proceso se repitehasta alcanzar la restricción de N bricks (i.e. el próximo refinamientoexcede la capacidad de memoria de textura) o no sea posible otrorefinamiento. Los nodos que quedan en la cola representan la selecciónde bricks a visualizar, S. Este algoritmo es originalmente O(NlogN),-55-


Capítulo 4: Visualización Out-of-Coredebido a que en general se insertan O(N) nodos la cola ordenada, y cadainserción es O(logN).Durante el proceso de construcción de S, los bricks nulos sondescartados, pues no son insertados en la cola. Para determinar québricks son vacíos y cuáles no, se utiliza el octree min-max descrito en[LAC95]. Por cada brick se precomputa el vóxel de valor mínimo (min) ymáximo (max), y la información se almacena dentro de cada nodo deloctree. Si el subintervalo [min,max] es totalmente transparente, entoncesel brick es descartado junto a sus descendientes. De esta manera seimplementa la técnica de aceleración de empty space skipping o saltos deespacios vacíos, orientado a bricks.El algoritmo de selección basado en una cola de prioridad es unalgoritmo voraz, que no siempre resulta en la selección de mínimo error,por diversas razones:• No siempre el refinamiento del nodo de mayor error es el quedevuelve la máxima reducción del error.• La cantidad de hijos por nodo puede variar. Esto se debe a que eloctree por lo general no es un árbol completo (ver Fig. 2.27).Adicionalmente, se puede evitar cargar los nodos transparentes,pues no aportan información alguna a la imagen.En este trabajo se introducen dos diferentes esquemas que dan mejoresresultados. Una de ellas consiste en mejorar el algoritmo voraz,cambiando la función de prioridad, y la otra se basa en una búsquedaexhaustiva de la selección de mínimo error (solución óptima).La nueva función de prioridad del algoritmo voraz considera la reduccióndel error y el número de bricks por split. Debido a que el número debricks de la selección está limitado por N, considerar la reducción delerror por cada brick que entra a la selección es una estrategia másadecuada en términos de la reducción del error global. Así, se define lanueva prioridad ER(b) para el algoritmo voraz como sigue:E(b) E(bi)bihijos(b)ER(b) . [Ec. 3.12]hijos(b)-56-


Capítulo 4: Visualización Out-of-Core3.3 Algoritmo Óptimo de SelecciónCalcular la selección óptima Sopt que resulta en el mínimo global E(Sopt)bajo la restricción de la capacidad de memoria de textura (N bricks)requiere de una búsqueda exhaustiva. El algoritmo voraz sólo considerala reducción del error global para la próxima operación de split, siendoasí una heurística que podría no resultar la solución óptima. En laliteratura, el problema general de asignar el nivel de detalle a cada objetoen una escena, o a cada bloque de un volumen, para maximizar elbeneficio (o equivalentemente minimizar el error) es un problema NPcompleto[GAO05], [FUN93]. En esos casos, cada bloque u objeto tieneun costo y beneficio distinto en cada nivel de detalle, lo cual puedesugerir una solución basada en una versión del problema de la mochila[COR01]. En nuestro problema particular, el costo de un brick en cadanivel de detalle es el mismo (una unidad), lo cual simpleifica el problema.Sin embargo, hay que considerar que un brick de nivel de detalle inferiorrepresenta muchos bricks de nivel de detalle superior, y que no puedehaber 2 representaciones distintas para una misma área del volumenpara que pueda considerarse una selección.Una solución para encontrar la solución óptima puede ser implementadapor backtracking [WIR99]. En cada nivel recursivo, se agrega una de lasposibles operaciones de split a la secuencia actual de operacionescurrSeq, siempre y cuando no exceda la capacidad de memoria detextura. La nueva secuencia de operaciones es comparada con la mejorsecuencia encontrada hasta ese momento (bestSeq), en términos delerror E(S), actualizando la mejor secuencia de ser necesario. Entonces seprocede a una llamada recursiva con la nueva cola de prioridad. Alretornar de cada llamada recursiva, se restaura el estado de la cola,revirtiendo la última operación de split realizada (ver Alg. 3.1).Procedure BackTracking(Var Queue currentQueue, Var Queue bestQueue)For each node x in currentQueue DoIf (x.visitado = false and currentQueue.size()–1+children(x)


Capítulo 4: Visualización Out-of-CoreDebido a que en cada nivel se tiene a lo sumo N posibilidades para split,la solución del backtracking requiere tiempo exponencial, y no tieneaplicación práctica para este problema. Se sugiere un algoritmoalternativo, el cual calcula la solución óptima en tiempo polinomial. Estasolución no utiliza las operaciones de split, y tampoco empieza desde elnodo raíz. En cambio, crea la solución óptima incrementalmente desdelas hojas hasta la raíz, utilizando programación dinámica [COR01].El algoritmo está basado en la siguiente observación: para una cantidadde nb bricks, con 1nbN, la selección óptima en un subárbol cuyo nodoraíz es b puede ser construido combinando las soluciones óptimasencontradas en sus nodos hijos q1, q2, …, qmax (que contienen n1, n2, ...,nmax bricks respectivamente) con la condición de que nb=n1+....+nmax.Debido a que pueden existir distintas combinaciones de ni que sumen nbricks, se considera la selección de menor error. El error de una seleccióncuya raíz es b se obtiene de la adición del error en las selecciones de susramas; así, una selección subóptima en cualquiera de sus ramas qi nopuede ser parte de la solución óptima en b. Esto sugiere que sólo lassoluciones óptimas encontradas en las ramas de un nodo b deben serconsideradas para encontrar la solución óptima en b. Debido a que no seconoce qué tamaño de selección en el nodo interno b será parte de laselección óptima en el nodo raíz, se construye la selección óptima en bpara cada posible tamaño de selección entre 1 y N bricks. Estasselecciones son óptimas en un subárbol de la jerarquía multi-resolución,por lo cual se denominan soluciones óptimas intermedias (SOI). Sólo lasSOIs que no exceden N bricks son consideradas. Una vez que se alcanceal nodo raíz, se obtiene una SOI por cada tamaño posible de memoria detextura nb, con 1nbN. La selección óptima global es aquella SOI delnodo raíz con menor error.El algoritmo comienza desde los nodos hojas hasta la raíz. Sea S(nb,nv,b)una SOI del sub-árbol con raíz b, aproximando nv=nv(b) vóxeles delvolumen original con nb bricks. La SOI de un nodo hoja b es el nodomismo, y su error correspondiente es E(S(1,nv(b),b))=E(b)=0. Para cadanodo interno b, una o más SOIs podrían ser generadas. El conjunto deSOIs para cada nodo es calculada incrementalmente combinando lasSOIs de sus hijos. El proceso de combinación comienza con los dosprimeros hijos, combinando sus conjuntos de soluciones SOIs1 y SOIs2,cada uno con no más de N SOIs. Esto resulta en un nuevo conjuntoSOIs1..2, igualmente con no más de N SOIs (ver Fig. 3.3). Este conjuntode SOIs es combinado con el conjunto del tercer hijo, generando SOIs1..3con a los sumo N SOIs, y así sucesivamente hasta haber consideradotodos los hijos de b. Note que para un brick interno b, este proceso creaun nuevo conjunto de soluciones, conteniendo a los sumo N SOIs.-58-


Capítulo 4: Visualización Out-of-CoreAdicionalmente, el nodo b es considerado como una posible SOI,representado todo su subvolumen por su propio brick.nbnvE5 2320 12820 30…7 4448 25640 100…s1s2nbnvE12 9768 57631,6 37,7638476,6s…Figura 3.3: el proceso de combinación de dos conjuntos de soluciones. Cada solucióndel primer conjunto es combinado con una solución del segundo, realizándoses 1s 2N 2 combinaciones. La combinación de 2 soluciones incluye la combinación de loscampos nb, nv y E, y la generación de una nueva lista de bricks correspondiente a launión de las listas de bricks de ambas soluciones. En el ejemplo, hay doscombinaciones de soluciones que resultan en nb=9, pero sólo se almacena la demenor error (37,7). Como cota superior, s 1 y s 2 son cada uno O(N). Dado que el costode combinar dos soluciones implica la creación de la unión de dos listas de bricks(operación que es O(N)), el costo de combinar dos conjuntos de a lo sumo N SOIs esO(N 3 ), y se genera un conjunto de s=O(N) soluciones.La complejidad del algoritmo básicamente depende del número decombinaciones de pares de SOIs, multiplicada por el costo de cadacombinación. Una combinación de dos SOIs S(nbi,nvi,bi) y S(nbj,nvj,bj)calcula el tamaño de la solución nb=nbi+nbj, el número de vóxelesaproximados nv= nvi+nvj, la unión de dos listas de nodos, y la ponderaciónde los respectivos errores en función del número de vóxeles aproximados:nviE(S(nbi,nvi,bi)) nvjE(S(nbj,nvj, bj))E( S(nb,nv, b)). [Ec. 3.13]n nviEl costo de una combinación es dominada por el costo de generar launión de dos listas de nodos, que es O(N). Para un nodo b del árbol con 8hijos, se realizan 7 combinaciones de conjuntos de SOIs, en donde paraun par de conjuntos de SOIs se tienen O(N 2 ) combinaciones de pares deSOIs, resultando en un conjunto de no más de N SOIs. Así, lacomplejidad en tiempo del algoritmo en cada nodo interno es O(N 3 ). SeaK es el número total de nodos del octree, representando el tamaño delproblema (número de nodos candidatos que pueden pertenecer a laselección). La complejidad del algoritmo está acotada por O(KN 3 ). Debidovj-59-


Capítulo 4: Visualización Out-of-Coreque N


Capítulo 4: Visualización Out-of-Corecollapse para habilitar el split. La operación collapse consiste enreemplazar un conjunto de nodos de S que comparten el mismo padre,por su padre. En el mejor de los casos, una operación de collapse libera 7bricks (al reemplazar 8 bricks hermanos por el brick padre), lo cual essuficiente para habilitar el split. Los nodos hermanos de S cuyo padretenga la menor prioridad, son los más idóneos para colapsar.Para llevar a cabo estas operaciones eficientemente, y explotar lacoherencia frame a frame, se mantienen dos colas de prioridad: laselección actual (S) correspondiente a los nodos refinables, y la cola depadres colapsables (C). Un nodo x es un padre colapsable si todos sushijos están en S. La cola de prioridad S se mantiene ordenadadescendentemente por la función monotónica E(b), dándole así laprioridad a los nodos con mayor error. Contrariamente, la cola deprioridad C se mantiene ordenada ascendentemente por E(b), con el finde darle más prioridad a los nodos padre de menor prioridad paracolapsar.Adicionalmente, se crea otra cola de prioridad DL (download list, o listade bricks a cargar) con los nuevos bricks que deben ser cargados parapoder desplegar S. Los conjuntos S, C y DL son actualizados por cadaoperación de split o collapse de la siguiente manera:• Split: si un nodo bS es refinado, este es removido de S; tambiénes removido de DL en caso de pertenecer a DL. Como el nodo seestá refinando, ahora pasa a ser un padre colapsable, y esinsertado en C. Los nodos hijos de b son insertados a S. El nodopadre(b) es removido de C en caso de estar en C. Los hijos de bque no estén en memoria de textura son insertados en DL.• Collapse: si los hijos de un padre colapsable bC colapsan, estosse remueven de S; adicionalmente se remueven de DL sipertenecen a DL. El nodo b es insertado en S, pues pasa a ser unnodo refinable. Si b no está en el caché de memoria de textura,entonces b es insertado en DL. Finalmente, el padre de b esagregado a C si todos su hijos pertenecen a S.Los nodos de la selección que son los nodos más finos en la jerarquía deoctree no pueden ser refinados; sin embargo, por tener la mínimaprioridad, no serán candidatos a refinar antes de haber considerado elrefinamiento de todos los nodos de detalle inferior, lo cual no es usualpara grandes datasets.El algoritmo de Split-and-Collapse se ejecuta hasta que alguna de estascondiciones (evaluadas en el mismo orden) sea satisfecha:-61-


Capítulo 4: Visualización Out-of-Core• El error del próximo candidato para refinar es cero. En este caso, elerror no puede ser reducido, y el dataset se despliega a su más altaresolución posible para la función de transferencia y parámetros devisualización actuales.• El próximo candidato para refinar excede la restricción de carga debricks por frame. En este caso, el split no puede ser realizado en esteframe, aún cuando se colapsen nodos.• El próximo candidato a refinar excede la restricción de memoria, y sesatisface al menos una de las siguientes condiciones: la prioridad delpróximo nodo padre a colapsar es mayor o igual que la prioridad delpróximo nodo a refinar, o el próximo colapso excedería M.El algoritmo de Split-and-Collapse converge a la misma selección que segeneraría con el algoritmo de selección voraz, si la función de prioridades monotónica (ejemplo E(b)) [DUC97]. La convergencia podría requerirmás de un frame debido a la restricción de carga de bricks.Debido a que el refinamiento del nodo b de máximo error E(b) no siemprelogra la más alta reducción del error, se sugiere utilizar la función deprioridad ER(b) que está basado en la reducción del error por Split.Similarmente, para las operaciones de reducción, se considera elincremento del error por collapse. A pesar que ER(b) no cumple con lapropiedad de monotonicidad como E(b), en la práctica los resultadosutilizando ER(b) son superiores en términos de la reducción del errorglobal.3.5 Análisis de Complejidad del algoritmo de Split-and-CollapseEl algoritmo de Split-and-Collapse necesita ser ejecutado en tiempo real,incluso para volúmenes muy grandes (en el orden de los terabytes). Así,la complejidad del algoritmo es un aspecto importante a considerar por loque se deriva un límite superior para el número de operaciones quedeben realizarse.Como precondición del algoritmo, es necesario que el error en losconjuntos S y C estén actualizados. Estos errores deben actualizarsecada vez que se actualizan los parámetros de visualización. Dado que elnúmero de nodos en S y en C es a lo sumo N, la complejidad en estaactualización es O(N). Adicionalmente, para que el algoritmo puedaoperar, los conjuntos S y C deben estar ordenados. Ambos conjuntospueden venir ya ordenados del frame anterior, excepto que el punto oárea de interés haya cambiado de posición, o bien el punto de vista.Considerando que la cantidad de nodos en S y C son a los sumo N,ambos ordenamientos mediante quick-sort (ordenamiento rápido) sepueden efectuar en O(Nlog2N). Sin embargo, no es necesario realizar un-62-


Capítulo 4: Visualización Out-of-Coreordenamiento completo de ambos conjuntos, pues el número deoperaciones de split o collapse que pueden ser realizados por frame estáacotado superiormente por M. Esto sugiere el ordenamiento parcialmediante el algoritmo de partial quick-sort en O(N+Mlog2M) [MAR04].Debido a que M


Capítulo 4: Visualización Out-of-Coretantos splits y collapses hasta transferir en el peor caso M bricks, elnúmero de splits y collapses es O(M). Así, el algoritmo Split-and-Collapsees O(MLog2(M)), que es significativamente inferior a O(NlogN) delalgoritmo incremental introducido para despliegue de terrenos [DUC97].Finalmente, contabilizando el tiempo de actualización del error en Nnodos, el tiempo de ordenamiento parcial de S y C, y el algoritmo de Splitand-Collapsecomo tal, el algoritmo de selección tiene una complejidaden tiempo de:O( Max { N, N+MlogM, MLog2M } ) O(N+MlogM) [Ec. 3.14]Note que la cantidad de operaciones no depende del tamaño del dataset,sino de las restricciones de hardware, dadas por la cantidad de memoriade textura, y la cantidad de bricks transferidos por frame (N y Mrespectivamente).Al terminar con el algoritmo Split-and-Collapse, los bricks de DL soncargados en memoria de textura, y se despliegan a lo sumo N bricks. Lacomplejidad de la carga depende del tamaño de los bricks, y de N,mientras que la complejidad del rendering va a depender principalmentedel número de muestreos realizados sobre los bricks. El número demuestreos es variable, puesto que depende de las técnicas de aceleraciónutilizadas, como el muestreo adaptativo, saltos de espacios vacíos,terminación temprana del rayo, y frustum culling 1 . Sin embargo, se puedeacotar por la resolución de la ventana de despliegue, multiplicada por lalongitud máxima de un rayo (obviando las técnicas de aceleración), a suvez aproximada por el lado más largo del volumen. Las tarjetas gráficasmodernas permiten cierto paralelismo entre la carga de bricks y elrendering, lo cual mejora el rendimiento en las aplicaciones devisualización [REZ01], [KNI02C].3.6 Edición de la Función de TransferenciaEn los algoritmos de selección presentados, los nodos totalmentetransparentes nunca formarán parte de la selección, pues nocontribuyen a la imagen final. El ancho de banda y la memoria detextura que se ahorra por no considerar a estos bricks son invertidospara los bricks opacos o traslúcidos, mejorando así la aproximación1 El Frustum es la pirámide truncada de visualización. Para despliegues en áreasrectangulares, se define el área de visión como una pirámide de base cuadrada queparte desde el ojo, y está truncada por un plano cercano, y otro lejano. Los objetos quese encuentren dentro de la pirámide y ambos planos se consideran visibles, y los que seencuentran fuera pueden ser descartados (frustum culling).-64-


Capítulo 4: Visualización Out-of-Coremulti-resolución. Sin embargo, al editar la función de transferencia,estos nodos transparentes podrían convertirse opacos (o viceversa), locual invalida la selección actual. Así, es necesario un procesamientoadicional sobre la selección antes de ejecutar el algoritmo de Split-and-Collapse.Cuando se genera una nueva función de transferencia, los nodos que sehacen transparentes en la selección actual son removidos de S, mientrasse insertan nodos opacos para obtener una selección válida. Se utilizauna solución a dos etapas para determinar qué nodos opacos debeninsertarse en S. La primera etapa se realiza en forma bottom-up, es decirdesde la selección S hasta la raíz. En esta etapa se marcan los nodos deS y todos sus ancestros con una bandera. La segunda etapa se realiza enforma top-down, visitando todos los nodos opacos desde la raíz hastaencontrar un nodo de S o un nodo no marcado. Cada nodo no marcadoes insertado en S, para asegurar que toda área opaca del volumen tengauna representación en la selección. Ambos recorridos son O(N).La inserción de nuevos bricks en S podría eventualmente exceder lasrestricciones de N y M. Por lo tanto, es necesario realizar operaciones decollapse hasta que las restricciones sean satisfechas. Posteriormente elalgoritmo de Split-and-Collapse puede ejecutarse si la restricción de cargade M bricks no ha sido aún alcanzada.Tal y como se describió en la sección 3.2, en una etapa de preprocesamiento,se calcula el min-max octree [LAC95] para determinareficientemente qué bricks son transparentes, y qué bricks son opacos otraslúcidos, consultando la función de transferencia. La solución trivialconsiste en visitar el rango de valores [min,max] de la función detransferencia cuantizada en n valores, para determinar si un brick estransparente u opaco. En es peor de los casos, esta solución requierevisitar las n entradas de la FT por brick, lo cual resulta muy ineficiente.La solución que se propone es construir una tabla lineal T, que permitaluego saber si un intervalo [min,max] es transparente o no en O(1).Sea t(i) una función, tal que t(i)=1 si el intervalo (i1,i) de la FT es opaco,y t(i)=0 si es transparente. Entonces incrementalmente se construye unatabla global T[0..n1] de enteros, tal que T[i]=T[i1]+t[i], empezando coni1, hasta in1. Mediante esta construcción, un brick con intervalo[min,max], con min


Capítulo 4: Visualización Out-of-Coretransparente o no requiere simplemente de la comparación de dosentradas en T. Para el caso que min=max, se chequea directamente esaentrada en la función de transferencia para determinar si el brick estransparente u opaco, también en O(1).3.7 Algoritmos de Selección Óptimos con dos RestriccionesLos algoritmos de selección óptimos pueden ser extendidos para soportarla restricción del ancho de banda. La solución basada en backtrackingparte de la selección actual S, y en cada paso agrega una posibleoperación de Split o Collapse, manteniendo la mejor selecciónencontrada. El algoritmo debe llevar traza del número de bricks en laselección S, y adicionalmente el número de bricks transferidos paravalidar una operación.La solución basada en programación dinámica también debe llevar trazade ambas restricciones, descartando las soluciones que no cumplan concualquiera de ellas. El conjunto de SOIs en cada nodo es ahora másgrande, pues se almacena una solución óptima intermedia por cadacombinación posible de número de bricks, y descargas. La cantidadmáxima de SOIs en un nodo es NxM; así, la complejidad del algoritmo esO(KN 3 M 2 ), mostrando que sigue siendo polinomial.3.8 SumarioEn este capítulo se han introducido diversos algoritmos de selección, queincluyen algoritmos voraces, y algoritmos óptimos. Entre los algoritmosvoraces se ha adaptado un algoritmo incremental (introducidoinicialmente en el área de visualización de terrenos multi-resolución[DUC97]), al área de visualización de volúmenes multi-resolución. Estealgoritmo incremental, que llamamos algoritmo de Split-and-Collapse,utiliza la coherencia frame a frame para actualizar la representaciónmulti-resolución del volumen en dirección a la representación deseada,limitando la cantidad de bricks a transferir por frame. Igualmente se haintroducido un algoritmo óptimo polinomial, que determina la selecciónde mínimo error. Aunque el algoritmo óptimo puede requerir de variosminutos en ejecutarse por frame, nos demuestra que el algoritmo vorazincremental genera resultados cercanos al óptimo.Haciendo un estudio de complejidad en tiempo de los algoritmos voracesy óptimos, se determina que son polinomiales en tiempo der ejecución.Es importante señalar que estos algoritmos no dependen del tamaño delvolumen, sino de las restricciones de hardware dadas por la cantidad dememoria de textura (N bricks) y la cantidad de bricks que pueden ser-66-


Capítulo 4: Visualización Out-of-Coretransferidos hacia la tarjeta gráfica por frame (M bricks).Adicionalmente, se muestra como la función de prioridad (o error) de losbricks se puede actualizar en tiempo real, cuando se utiliza el algoritmode Split-and-Collapse, pues dicho algoritmo requiere de la actualizaciónen los nodos de la selección actual (N nodos), y no en los nodos de todala jerarquía multi-resolución. Esto permite la interacción con el volumen,incluyendo la navegación y la edición de la función de transferencia, sinperder la interactividad.Luego de haber estudiado el criterio de selección, es necesario considerarvolúmenes que no pueden almacenarse completamente en memoriaprincipal. Para ello, es necesario incluir técnicas out-of-core, para paginarbricks de discos locales o remotos a memoria principal, y que seacompatible con el criterio de selección. Este tema es abordado en elpróximo capítulo.-67-


Capítulo 4: Visualización Out-of-CoreCapítulo 4.Visualización Out-of-CoreCuando la cantidad de memoria principal disponible no es suficientepara almacenar el dataset completamente, es necesario utilizarvisualización out-of-core [COX97]. Se le asigna este nombre encontraposición a in-core, que se refiere a que los datos se ajustan a lacapacidad de la memoria principal.La visualización out-of-core requiere del uso de la memoria virtual.Memoria virtual es simplemente el mapping o aplicación de un espacio dedireccionamiento más grande en un espacio de direccionamiento máspequeño (memoria real). Generalmente, este espacio de direccionamientomás grande es particionado en piezas, cada uno de los cuales es movidoa la memoria real cuando es necesitada, al mismo tiempo que otra pieza,posiblemente no necesitada, es reemplazada. Cuando estas piezas sontodas de un tamaño predefinido, se les denomina páginas, y cuando sonde tamaño variable, se les llama segmentos. Haciendo analogía ennuestro contexto, las páginas vienen siendo los bricks. Cuando laspáginas son cargadas a medida que son necesitadas, se habla depaginación bajo demanda [STA06].La solución más trivial a la visualización out-of-core recae en el manejo dela memoria virtual por parte del sistema operativo. Para ello, laaplicación le pide al sistema operativo reservar un búfer del tamaño deldataset, y luego lee el dataset en dicho búfer. Como el dataset no puedeser almacenado completamente en la memoria principal, las páginas(bricks) son almacenadas nuevamente en disco para realizar elintercambio de páginas con la memoria real. Esto genera un retardoimportante al inicio de la aplicación. Adicionalmente, el sistema operativoutiliza el principio de localidad, que se refiere a precargar las páginascercanas físicamente a las que están siendo referenciadas. Como ennuestro caso la demanda de bricks entre frames abarca zonasgeneralmente no continuas en disco, el sistema operativo podría cargarbricks (o partes de ellos) que no son requeridos en futuros frames, y peoraún, reemplazar otros que no han sido accedidas últimamente, pero quesí podrían requerirse en el futuro inmediato. Adicionalmente, bajo elsoporte de memoria virtual por el sistema operativo, en principio laaplicación no tiene conocimiento de cuáles páginas se encuentran o noen la memoria real, y por lo tanto, debe esperar por el intercambio depáginas antes de cargar los bricks en memoria de textura, lo cual generaun cuello de botella indeseable en un sistema de visualización en tiempo-68-


Capítulo 4: Visualización Out-of-Corereal. Por razones como estas, diversos autores han sugerido que lamisma aplicación controle el intercambio de páginas, leyendo yreemplazando páginas acorde a las demandas y prioridades específicasdel problema [COX97], [FAR01], [COR02], [PLA02]. Para que la aplicacióncontrole la paginación, parte de la memoria principal necesita serreservada como un caché, la cual se utiliza para almacenar los bricksrequeridos en la visualización, así como para mantener otros bricksresidentes, que posiblemente serán requeridos en la generación deframes futuros.Diversos trabajos en el área de visualización de volúmenes multiresoluciónsimplifican la tarea del manejo out-of-core utilizandopaginación bajo demanda con política de reemplazo de página LRU[GUT02], [CAS05]. La política de reemplazo de página LRU [TAN97]selecciona como víctima a la página menos recientemente usada, paraser reemplazada por otra página demandada. Cuando se navega unvolumen, esta estrategia no siempre es la más adecuada. Los bricks queno se han accedido últimamente podrían tener una alta posibilidad deser requeridos, pues la prioridad de los bricks cambia constantemente.Adicionalmente, es ideal contar con un mecanismo que permita cargar ymantener de alguna manera los bricks que serán requeridos a futuro,aunque no sean demandados actualmente.En este trabajo se utiliza el algoritmo de Split-and-Collapse sobre un subárbolde la jerarquía multi-resolución. El sub-árbol contiene la selecciónactual S, así como bricks de menos detalle, y otros de más detalle. Lashojas de este sub-árbol representan una selección extendida quellamaremos S + , de donde se efectúan las operaciones de split y collapsepara alcanzar una configuración en donde las futuras operacionespotenciales sobre S no generen fallo de página. Antes de presentar elmecanismo out-of-core, se establece una prioridad entre los bricks, quedefine los bricks a cargar y descargar en memoria principal en sintoníacon las demandas presentes y futuras de rendering.4.1 Prioridad Sobre los BricksDebido a que los bricks que están alrededor de S serán requeridos enfuturas operaciones de split y collapse, el algoritmo de paginación debemantener, cargar y reemplazar estos bricks en función de algunaprioridad. En este sentido, los bricks de la selección S se mantienen enmemoria principal, pues un subconjunto de ellos (aquellos que no esténen memoria de textura) serán cargados para realizar el rendering delframe actual. Adicionalmente, se mantienen siempre sus ancestros enmemoria, que generalmente sólo representan una fracción del espaciorequerido para S (alrededor de 1/8+1/64+1/512+… +1 N/7 para-69-


Capítulo 4: Visualización Out-of-Coreoctrees completos). El resto de la memoria caché se utiliza paraalmacenar representaciones más finas que S en memoria principal. LaFig. 4.1 muestra gráficamente los bricks que se encuentran en memoriaprincipal, los cuales forman un sub-árbol de la jerarquía multiresolución.Las hojas de este árbol es una selección extendida quellamamos S + .Figura 4.1: conjunto de bricks almacenados en caché de memoria principal. Losnodos grises representan la selección S. Los nodos que tienen un círculo negrorepresentan la selección extendida S + , cuya resolución debe ser igual o superior a lacorrespondiente representación en S. El sub-árbol (bricks contenidos en la nube azul)formado desde la raíz hasta la selección S + se encuentra en memoria principal. Lasoperaciones de split y collapse se realizan sobre S + , actualizando el sub-árbolalmacenado en caché.4.2 Paginación Basada en Split-and-CollapseLa técnica out-of-core tiene la tarea de cargar bricks en el orden en queserán requeridos por el algoritmo en el próximo frame, y potencialmenteen futuros frames, a la vez de evitar el reemplazo de bricks que tienenmuchas posibilidades de ser utilizados próximamente, aún cuando nohayan sido accedidos recientemente. Para ello, el algoritmo opera demanera similar al algoritmo de Split-and-Collapse. Este usa una selecciónextendida que llamamos S + , la cual es generalmente más fina que laselección visualizada S. El subárbol almacenado en cache se actualizacon operaciones de split y collapse. Por consiguiente, se necesitaigualmente un subconjunto de padres colapsables extendido quellamaremos C + . El nodo en S + con mayor prioridad es seleccionado pararefinar. Sólo cuando la operación de split no puede ser completada (porlimitaciones del caché), se considera la operación de collapse.Para mantener la invariante de que siempre se cuenta con un sub-árbolalmacenado en caché, al hacer split de un brick b, este último debemantenerse en memoria principal. Para mantener la selección S siempre-70-


Capítulo 4: Visualización Out-of-Coredentro del caché, los nodos de C incluidos en C + nunca se seleccionanpara colapsar, puesto que los hijos de un padre colapsable pertenecen aS. Al mantener los bricks de un sub-árbol en memoria principal,cualquier operación de collapse jamás producirá un fallo de página.Adicionalmente, representaciones más finas que S son cargadas ymantenidas en memoria principal en el mismo orden de prioridad queserían requeridos por el algoritmo de Split-and-Collapse que opera sobreS. Así, los bricks son paginados, pre-paginados y reemplazados acorde ala prioridad E(b), o ER(b), lo cual es una estrategia más consistente conlas demandas de bricks que otras soluciones basadas en simplepaginación bajo demanda, con política de reemplazo de página LRU,como en [GUT02], [CAS05], [GOB08].Similar al algoritmo de Split-and-Collapse que opera sobre S, losconjuntos S + y C + no requieren ser ordenados completamente. Lacantidad de bricks de mayor prioridad que deben ordenarse, dependerádel ancho de banda y del tamaño del brick. Por lo general, el ancho debanda de memoria auxiliar a memoria principal es considerablementeinferior al ancho de banda de memoria principal a memoria de textura.Por consiguiente, el valor de M es por lo general una cota superior para elpartial quick-sort de los conjuntos S + y C + .4.3 Grupo de BricksTípicamente el ancho de banda por lectura de datos sobre memoriaauxiliar varía por diversas razones. Entre ellas merecen mencionarse lacarga que tenga el CPU y el dispositivo de E/S, la cantidad de datoscontiguos que se van a leer, y la posición física de cada brick en el disco.Ancho de bandaefectivo(MB/seg.)100806040200__ 1 __ 1 __ 1 __ 1 __ 1 __ 1 __ 11 2 4 8 16 321286432168 4 2Tamaño de brick (MB)Figura 4.2: ancho de banda efectivo de disco a memoria principal conforme varía eltamaño de los bricks. En esta prueba se utilizó un PC con procesador Quad-Core,disco SATA II de 7200 rpm y 2 GB de memoria principal. Los requerimientos debricks fueron generados del algoritmo de selección de Split-and-Collapse.-71-


Capítulo 4: Visualización Out-of-CoreLa Fig. 4.2 se muestra una gráfica logarítmica del ancho de bandaefectivo al incrementar el tamaño de los bricks. Note que el ancho debanda efectivo se incrementa con el tamaño del brick. Basado en estaobservación, Ljung et al. [27] introducen el concepto de grupo de blocks(group of blocks o simplemente GOB) para acceder eficientemente datosout-of-core. Puesto que el ancho de banda de memoria auxiliar a memoriaprincipal es mayor al leer datos contiguos en el archivo, el GOB completose lee cuando un simple block es requerido. En nuestro caso, por tratarcon bricks, utilizaremos la abreviación de GOB para referirnos a grupo debricks.Para el algoritmo de paginación basado en Split-and-Collapse, laoperación de collapse jamás genera un fallo de página, por lo cual nodemanda la lectura de ningún GOB. En cambio, la operación de splitdemanda la lectura de un GOB (8 bricks a lo sumo), que al estar contiguoen el archivo hace mejorar el rendimiento del sistema de paginación. Enlas pruebas, este método al menos duplica el ancho de banda efectivopara bricks más pequeños que 256KB. Por ejemplo, para bricks de 32 3vóxeles de of 16 bits por muestra (64KB = 1/16MB) el ancho de bandaefectivo está alrededor de 18 MB/seg., pero se incrementa hasta 50MB/seg. al leerlos en GOBs (512KB = ½MB).4.4 Algoritmo Multi-hilosEs importante que la carga de bricks actual no detenga el proceso derendering, para mantener la interacción con el usuario. Así, la carga debricks debe ser manejada en otro hilo llamado loader (cargador), que seejecuta concurrentemente con el hilo principal de rendering. Mientras elhilo principal despliega el i-ésimo frame, el hilo cargador está leyendo losbricks potencialmente requeridos en el frame i+1 y de futuros frames sihay ancho de banda remanente.En el alg. 4.1 se presenta a alto nivel, los algoritmos del hilo principal(main-thread) y el hilo cargador (loader-thread). Los objetos sincronizar,semáforo, ramList y C son compartidas por ambos procesos. Igualmente,el árbol jerárquico es compartido, pues cada vez que se carga un bricky/o se reemplaza otro, se actualizan banderas y apuntadores en cadabrick involucrado en la operación indicando si el brick está o no en losconjuntos S, C, S + , C + , ramList, texList. A continuación se estudia cadaproceso.El hilo principal realiza actualizaciones del error, si ha cambiado laregión o punto de interés, el punto de vista o función de transferencia.En este caso, le avisa al cargador que actualice las prioridades mediantela bandera “sincronizar”. Seguidamente ejecuta el algoritmo de Split-and--72-


Capítulo 4: Visualización Out-of-CoreCollapse. Es importante señalar que este algoritmo puede realizar lasoperaciones de collapse a que las hubiese lugar sin chequear sudisponibilidad en memoria principal, puesto que se mantiene lainvariante que las representaciones del volumen con menor detalle que Ssiempre estarán en la memoria principal. En cambio, al realizar unaoperación de split, se verifica que sus hijos se encuentran en memoriaprincipal, pues de lo contrario, la operación de split no puede efectuarse.Debido a que los hijos de un nodo se cargan mediante un GOB, y pormantener siempre el nodo que se refina en memoria principal, bastasaber que un hijo se encuentra en memoria principal para garantizar quetodos los hijos también lo están.El hilo cargador chequea si debe actualizar el error en los nodos, yreordenar sus conjuntos, si la bandera compartida “sincronizar” estáprendida. De lo contrario intenta realizar una operación de split, si haysuficientes páginas de memoria libres en ramFreeList. De lo contrario, esnecesario el collapse para habilitar un split. Las operaciones de split ycollapse no realizan ninguna operación de E/S. Únicamente actualizanlas estructuras de datos. Sólo la operación loadGOB carga los hijos delbrick más prioritario para refinar (S + [0]) en un búfer de a lo sumo 8bricks llamado gobBuffer. Debido al quick-sort parcial, en determinadoscasos los conjuntos S + .A y C + .A podrían quedar vacíos si la banderasincronizar no se activa durante varios frames. En estos casos, elproceso cargador debe ejecutar de nuevo el quick-sort parcial paracontinuar con su ejecución. Estos y otros detalles menores no sonmostrados en el algoritmo 4.1 para mantener su simplicidad y claridad.PRINCIPAL (Main)salir = false; sincronizar = false;Cargar(Raiz(octree), ramList);ramFreeList = todos(ramSize)-Raiz(octree);S = Raiz(octree); C = vacio();texList = Raiz(octree);texFreeList = todos(N)-Raiz(octree);CrearProceso(Loader);While (not salir)If (cambió ROI o IP o Ojo o F.T.)UpdateError(S,C);PartialSort(S, M);PartialSort(C, M);semasforo1.lock();sincronizar = true;semasforo1.unlock();semaforo2.lock();SplitCollapse(S,C,DL,ramList,texList,texFreeList);semaforo2.unlock();Render(S,DL,ramList);EndWhileCARGADOR (Loader)C + = vacio(); S + = Raiz(octree);While (not salir)If (sincronizar)Semaforo1.lock();sincronizar = false;semaforo1.unlock();UpdateError(S + , C + );PartialSort(S + , M + );PartialSort(C + , M + );else if (SplitOK(S + [0], ramFreeList))loadGOB(S + [0], gobBuffer);semaforo2.lock();Split(S + [0], S + , C + , gobBuffer, ramList,ramFreeList);semaforo2.unlock();elsesemaforo2.lock();if (C + [0] C and E(C + [0]) < E(S + [0])Collapse(C + [0], S + , C + ,ramList, ramFreeList);semaforo2.unlock();EndWhileAlgoritmo 4.1: algoritmo en alto nivel de los procesos principal y cargador.-73-


Capítulo 4: Visualización Out-of-CoreLas operaciones que requieren del acceso y estado de los recursoscríticos como ramList, C y sincronizar necesitan de un semáforo paragarantizar exclusión mutua en el acceso. Por ello se utilizan dossemáforos en el algoritmo.Como estado inicial para ambos procesos, se tiene que tanto la selecciónS como S + contienen únicamente al nodo raíz (representación más burdadel volumen), el cual ha sido cargado previamente en memoria principal(ramList) y memoria de textura (texList). El resto de las páginas enmemoria principal y memoria de textura están libres, es decir,disponibles para alojar bricks.4.5 Consideraciones Adicionales para Texturas 2DCuando se utilizan texturas 2D, típicamente se requieren 3 copias delvolumen, una por cada eje principal de visualización [LAM99]. Debido aque el rendering utiliza aceleración en hardware, empecemos poranalizar las posibilidades de almacenamiento en memoria de textura. Laprimera alternativa es almacenar las 3 copias de S en memoria detextura. Como consecuencia, sólo 1/3 de esta memoria es utilizada parael despliegue, y hay que cargar los bricks por triplicado, en detrimento dela eficiencia en el uso de la memoria y ancho de banda. La ventaja deesta técnica es que al cambiar de eje principal, no se notará ningúncambio en la fluidez de visualización.Otra alternativa consiste en almacenar en textura sólo la copia que estásiendo desplegada. Aunque temporalmente esto aumenta la eficiencia enel uso de la memoria y ancho de banda, el cambio de eje conlleva arecargar todos los bricks de S, lo cual redunda en una discontinuidad enla fluidez de la visualización. La opción intermedia consiste en generaruna representación de menor detalle Snew, con a lo sumo M bricks, en elmomento del cambio de eje. Acorde al esquema de paginación de disco amemoria principal utilizado, cualquier representación de menor detalle ala última selección (Sold) se encuentra en el caché de memoria principal, ypor consecuencia no genera requerimiento de lectura de memoriaauxiliar. Aunque la calidad en la visualización decae en el momento decambio de eje, la representación multi-resolución se irá refinandorápidamente, puesto que los bricks de resolución inferior a Soldpotencialmente se mantienen en memoria principal.Para mantener compatibilidad con el prototipo implementado en estetrabajo, se sugiere almacenar sólo una copia de los bricks en disco ymemoria principal, y justo antes de cargar un brick en textura, este estransformado en cortes 2D perpendiculares al eje principal actual.-74-


Capítulo 4: Visualización Out-of-Core4.6 SumarioEn este capítulo se ha realizado una adaptación a la solución parasoportar volúmenes multi-resolución que no pueden ser almacenadostotalmente en memoria principal. El algoritmo out-of-core para cargar yreemplazar bricks en memoria principal se basa en el algoritmo de Splitand-Collapse,sobre una representación multi-resolución S +generalmente de mayor detalle a la que se está desplegando (S). Pese aque las operaciones se realizan igualmente sobre los nodos de unaselección (en este caso sobre S + ), se mantienen en caché todos los nodosinternos del sub-árbol delimitado entre el nodo raíz del octree y los nodosde S + . El reto es actualizar este sub-árbol de manera tal que las próximasoperaciones de split y collapse realizadas sobre S no generen fallos depágina. En este sentido, se toma en cuenta el error en cada nodo paramantener y cargar los bricks, potencialmente requeridos en futurosframes, en memoria principal.En el próximo capítulo se detallan las diferentes técnicas utilizadas parael despliegue con aceleración en hardware gráfico, incluyendo el raycasting basado en GPU, la clasificación pre-integrada, y diversas técnicasde aceleración, todas adaptadas al caso multi-resolución.-75-


Capítulo 5: Despliegue Multi-resoluciónCapítulo 5. Despliegue Multi-resoluciónEl despliegue multi-resolución utiliza aceleración de hardware contexturas 3D y clasificación pre-integrada. El sistema soporta tanto raycasting basado en GPU como planos alineados al viewport. En amboscasos, los bricks son desplegados en sentido front to back, es decir, desdeel más cercano al más lejano, haciendo la composición con el operadorunder [RUI06]. Se utilizan técnicas de aceleración, como muestreoadaptativo [DAN92], [LJU06C], salto de espacios vacíos [LAC95], yterminación temprana de rayo [KRU03], adaptados al caso multiresolución.Entre las contribuciones más relevantes de este capítulo, merecencitarse:• Construcción eficiente de la tabla de pre-integración 3D, comouna generalización del rápido algoritmo propuesto para el caso2D [LUM04].• Muestreo adaptativo basado en opacidad, que para nuestroconocimiento es utilizado por primera vez en rendering multiresolucióncon aceleración de hardware gráfico.• Aplicación de la técnica de terminación temprana de rayo, lo cualrequiere llevar eficientemente la traza de la opacidad acumuladadurante el despliegue de los bricks.A continuación se describe cada una de las etapas referentes al procesode rendering, y las diversas técnicas implementadas.5.1 Ordenamiento de los BricksAntes de realizar el despliegue, los bricks son ordenados desde el máscercano al más lejano mediante un recorrido del octree en pre-orden,hasta alcanzar los nodos de la selección. Empezando desde el nodo raízdel octree, se ordenan sus hijos (a lo sumo 8) según la distancia al ojo, yse recorren recursivamente hasta llegar a un nodo en S o a un nodo novisible (nodo vacío, fuera del frustum, o fuera del lens). Por lo general, lacantidad de nodos internos en este sub-árbol es inferior a la cantidad denodos de la selección; así, la complejidad de este recorrido es O(N). Paraordenar los 8 nodos hijos de un nodo padre, se considera ordenarúnicamente las 8 esquinas del brick correspondiente al nodo padre encoordenadas objeto como se muestra en la Fig. 5.1. Debido a que los-76-


Capítulo 5: Despliegue Multi-resoluciónbricks se ordenan en el sentido front to back, se utiliza el operador underpara hacer la composición. A diferencia del operador over utilizadotípicamente para visualizar volúmenes con soporte de hardware gráfico,el operador de under permite utilizar técnicas de aceleración como laterminación temprana del rayo, siempre que se tenga acceso a laopacidad acumulada en cada píxel de la imagen.(a)2143(b)84 623 715Figura 5.1: ordenamiento de los bricks hermanos basados en los extremos del brickpadre. (a) Ejemplo bidimensional. Basado en la distancia del ojo a los cuatrosextremos, se ordenan los bricks respectivos. El brick 4 es el más lejano, y el 1 el máscercano. (b) La idea es extendida a nuestro caso de interés (tridimensional). Losbricks se despliegan en orden front to back.5.2 Ray Casting Basado en GPUEl ray casting basado en GPU fue introducido en el año 2003 por Krügery Westermann [KRU03], como una alternativa al despliegue devolúmenes basado en el texturizado de polígonos. Con el ray castingbasado en GPU se tiene la posibilidad de explotar técnicas de aceleraciónclásicas del ray casting, como la terminación temprana del rayo y saltosde espacios vacíos.Para desplegar un volumen no particionado en bricks, se determina laentrada de cada rayo en el volumen mediante la rasterización de lascaras frontales de su caja delimitadora o bounding box, en donde seinterpolan las coordenadas de textura de los vértices. Igualmente, sepuede determinar el punto de salida de cada rayo, mediante el desplieguede las caras traseras del bounding box. Este proceso requiere de laextensión frame buffer objects [OPE07], la cual permite realizar eldespliegue sobre texturas que luego pueden ser muestreadas en etapassiguientes de rendering.El ray casting basado en GPU puede extenderse para el caso multiresolución.Una reciente implementación, almacena todos los bricks adesplegar dentro de una única textura 3D. Al tener todos los bricks enuna única textura, se puede activar un programa de fragmentos por cadarayo que entra al volumen mediante el despliegue de las caras frontales-77-


Capítulo 5: Despliegue Multi-resoluciónde su bounding box [LJU06C]. El programa de fragmento debe tratar elrayo completamente desde que entra al volumen hasta que sale. Cadarayo, durante su travesía, pasa por distintos bricks a distintasresoluciones dentro de la gran textura, por lo que se requiereadicionalmente, una textura de índices que indique la posición de cadabrick, así como su tamaño. Esto facilita la implementación de técnicas deaceleración como terminación temprana de rayo. Sin embargo, hemosencontrado algunas desventajas de este enfoque:• Ausencia de localidad espacial. Cada rayo va a travesando unagran textura, y adicionalmente no en el mismo orden como estáalmacenada.• Debido a que todos los bricks están almacenados en una únicatextura, dificulta la carga de bricks en modo interleaving con elrendering, lo que pude reducir el rendimiento cuando se mueveel punto o área de interés.• La textura de índices requiere de un téxel de 4 flotantes (16bytes) por cada brick del volumen original, lo cual podríasobrepasar las capacidades de memoria de textura paravolúmenes muy grandes con particionamiento fino (ejemplo, undataset de 4096 3 vóxeles con bricks de 16 3 muestras requiereaprox. 512MB de textura de índices).Por las razones mencionadas, en este trabajo, se almacena y se despliegacada brick individualmente en el GPU. Rasterizando las caras frontalesde cada brick, se disparan los programas de fragmentos que representanlos rayos pasando a través del brick. Mediante un ciclo, el rayo esmuestreado a pasos de longitud constante, o puede utilizarse un enfoqueadaptativo. En cualquier caso, el último segmento del rayo dentro delbrick debe ser cortado en la frontera como se muestra en la Fig. 5.2.Algunas implementaciones pueden ser encontradas en trabajos previospara la terminación temprana del rayo con aceleración de hardwaregráfico. Estas se basan en el despliegue inicial de las caras frontales delbrick, con un programa de fragmento simple que en función de laopacidad acumulada en el píxel, coloque en el búfer de profundidad elvalor máximo [KRU03], [RUI06], o un 1 en el esténcil buffer [LEE04]. Deesta manera, en ambos trabajos se afirma que los fragmentos de losfuturos polígonos desplegados pueden ser descartados tempranamente,ya sea por profundidad, o por la prueba de esténcil. Sin embargo, alrevisar el pipeline de OpenGL®, la prueba del esténcil y la prueba deprofundidad se realizan luego que el fragmento es procesado (ver sección2.1). Por lo tanto, el muestreo del búfer de profundidad o del esténcilbúfer tendrán necesariamente que realizarse al comienzo del programade fragmentos, para decidir si éste es descartado o no.-78-


Capítulo 5: Despliegue Multi-resoluciónOtra aceleración posible es descarte temprano de bricks que estántotalmente ocluidos por otros. Se puede utilizar la extensión de OpenGL®de “oclussion query” [OPE07] para contar cuántos fragmento pasan laprueba de opacidad (llamada alpha test en el contexto de OpenGL®). Si elnúmero de fragmentos es cero, entonces el brick está totalmente ocluido,y no se despliega [LEE04]. Para la implementación de ray casting, estatécnica requeriría igualmente del despliegue por duplicado de las carasfrontales de los bricks, cuando estos no están ocluidos. Por lo tanto, eltiempo de respuesta podría comprometerse para volúmenes semitransparentes.Para utilizar la técnica de aceleración de terminación temprana del rayo,en este trabajo se utiliza la extensión de OpenGL® de “frame bufferobjects” (FBO) [OPE07]. Mediante esta extensión, el despliegue puede serrealizado sobre una textura, la cual a su vez puede ser consultada dentrodel mismo programa de fragmento, al ser considerada como textura deentrada. De acuerdo con la especificación de la extensión de frame bufferobjects, la lectura de la textura que es actualmente el búfer de renderingno está soportada; sin embargo, así como en diversos trabajospublicados recientemente [KAE06], [PAB06], este esquema funciona bienen nuestro escenario. Al procesar un fragmento, se consulta al comienzodel programa si se ha alcanzado el umbral de opacidad, por ejemplo de99%, para descartar el fragmento, evitando así la travesía del rayo dentrode brick. Al acceder la opacidad acumulada, es posible que esta no tengael valor más reciente, y el rayo no terminaría tan pronto como podría.Así, se podrían generar más pasos de muestreo de los necesarios, por loque este enfoque es conservativo. Si el fragmento no es descartado alcomienzo del programa, la opacidad es posteriormente actualizada yconsultada durante la travesía del rayo dentro del brick, sin requerirmás muestreos sobre el FBO. Cuando el rayo sale del brick, o el umbralde opacidad es alcanzado, el programa de fragmentos arroja el color yopacidad acumulada en el rayo sólo dentro del brick, y este resultado esmezclado con su correspondiente píxel en el búfer de la imagen,utilizando el operador under.Como ventajas tenemos que no se requiere del despliegue por duplicadode las caras frontales de los bricks; además, no se requiere del cambioentre programas de fragmentos por brick, reduciendo así el cuello debotella en el pipeline gráfico.El sistema soporta muestreo adaptativo para acelerar el proceso derendering. En el contexto de visualización de volúmenes multi-resolucióncon aceleración en hardware, la distancia entre muestras es adaptada alnivel de detalle del brick a desplegar [LAM99], [BOA01], [GUT02],-79-


Capítulo 5: Despliegue Multi-resolución[LJU06C], aumentando el potencias de dos. Sea h0 la distancia entremuestras en el nivel de detalle más fino del volumen. En el nivel dedetalle i-ésimo, la distancia entre muestras viene dada por hi=2 i h0.(a)(b)(c)Figura 5.2: despliegue de bricks utilizando ray casting basado en GPU. Por cadabrick se despliegan las caras frontales para activar los programas de fragmentosdurante la rasterización. (a) Muestreo a pasos constantes. (b) Muestreo adaptativopor nivel de detalle. (c) Muestreo adaptativo por acumulación de opacidad.El muestreo adaptativo basado en el nivel de detalle puede acentuar lasdiferencias de resolución que no eran perceptibles con muestreo a pasosconstantes (ver Fig. 5.2a,b). Como una alternativa, se adapta el paso demuestreo a la opacidad acumulada a lo largo del rayo (ver Fig. 5.2c).Mientras la opacidad aumenta, la influencia de las muestras remanentesen el rayo decrece, y por lo tanto, la longitud del paso puede aumentarsin generar un impacto visual en la imagen. Basados en estaobservación, Danskin et al. [DAN92] introdujeron la aceleración beta (acceleration),que considera la opacidad acumulada multiplicada por lamuestra del volumen, para determinar el tamaño del paso, y el nivel dedetalle de la próxima muestra. Así, el nivel de detalle y la longitud entremuestras puede aumentar y decrementar durante la travesía del rayo.Sin embargo, para volúmenes de gran tamaño, no es posible tener accesoa todos los niveles de detalle a la vez. Adicionalmente, el valor de lamuestra no puede ser indicativo de la distancia entre muestras, pues lafunción de transferencias es la que puede indicar la importancia el nivelde importancia de una muestra. En este trabajo, el nivel de detalle decada área del volumen está determinado por el algoritmo de selección, yla distancia entre muestras depende únicamente de la opacidadacumulada, y se incrementa exponencialmente entre hmin y hmax mediantela siguiente ecuación:-80-


Capítulo 5: Despliegue Multi-resoluciónh h ( h h ) * opacidad , [Ec. 5.1]minmaxminen donde hmin es la distancia entre muestras utilizada cuando el rayoentra en el volumen, hmax la distancia máxima permitida, y p es el factorde potencia que indica cuán rápido aumenta la distancia entre muestrasconforme aumenta la opacidad acumulada en el rayo. Para nuestroconocimiento, es la primera vez que se implementa el muestreoadaptativo basado en opacidad en el despliegue de volúmenes multiresoluciónparticionados en bricks con aceleración en hardware gráfico.Para llevar traza de la opacidad acumulada en el rayo entre bricks, semuestrea el FBO de manera similar a cuando se utiliza la técnica de laterminación temprana del rayo. Al muestrear la opacidad de un píxel delFBO, es posible que no tenga la información más reciente; así, se podríangenerar más pasos de muestreo de los necesarios, por lo que esteenfoque es conservativo.pplanos de corteo MC-Slicingrasterizaciónconstruyendoslabsr 2r 1hi(a) (b) (c) (d)slabFigura 5.3: despliegue de un brick utilizando pre-integración. (a) Polígonos alineadosal viewport, separados por una distancia hi. (b) Los polígonos son ajustados a latextura. (c) Fragmentos generados durante la rasterización. (d) Cada polígono esenvuelto por un slab. Así, por cada fragmento generado, se construye el segmento delslab correspondiente.5.3 Planos Alineados al ViewportPor cada brick, se construye una pila de polígonos alineados al viewport,los cuales deben ser ajustados a la textura (ver Fig. 5.3a y 5.3b). Laprincipal dificultad de esta técnica es ajustar los polígonos a lasfronteras del volumen, en donde el polígono resultante puede tener entre3 y 6 vértices (ver Fig. 5.4).-81-


Capítulo 5: Despliegue Multi-resoluciónFigura 5.4: intersección de un plano y un cubo. Se genera un polígono convexo entre3 y 6 vértices. Los casos degenerados (punto y línea) son omitidos por ser casosparticulares del triángulo, al generar uno o dos vértices repetidos.Una solución consiste en desplegar polígonos lo suficientemente grandes,de manera tal que cubran todo el brick para cualquier ángulo derotación, y configurar adecuadamente los 6 planos de corte (clippingplanes 1 ) soportados por el hardware gráfico para cortar la geometríasobrante del brick [BOA01]. Otra solución se basa en hallaralgorítmicamente la intersección entre cada plano y el cubo encoordenadas de mundo [PLA02]. Una implementación reciente utilizaprogramas de vértices para ajustar los polígonos al volumen [REZ05].Comúnmente los programas de vértices sólo pueden modificar vértices, yno tienen la posibilidad de agregar o eliminar vértices. Comoconsecuencia, se envían 6 vértices a la tarjeta gráfica por polígono, y elprograma de vértices puede generar vértices duplicados cuando laintersección tenga menos de 6 vértices. Otra solución consiste en utilizarel principio de Marching Cubes (Cubos Marchantes) [LOR87] para hallarla intersección entre el plano y el volumen. En este caso, se considera elvolumen como un gran vóxel de 8 vértices, y al plano como la ecuaciónimplícita cuya superficie se desea reconstruir [BEN05]. Esta técnica sedenomina MC-slicing, pues rebana el volumen (slicing) utilizandoMarching Cubes (MC). El algoritmo de Marching Cubes devuelve laintersección como una lista de polígonos; sin embargo, para esteproblema en particular, los polígonos son coplanares, y su unión formaun polígono convexo, que puede ser transmitido a OpenGL como unasecuencia ordenada de puntos denominada triangle fan [WOO99].En este trabajo, se implementan dos soluciones para ajustar los planosal brick; una de ellas mediante la configuración de los planos de corte[BOA01], y la otra con MC-Slicing [BEN05].1 El clipping significa la remoción de partes de una imagen u objeto dentro (o fuera) deuna región específica. En el caso de los planos de corte o clipping planes, se remueve lageometría presente en el lado positivo del plano.-82-


Capítulo 5: Despliegue Multi-resoluciónr(t)-Znbcfpslab actualde ancho hiFigura 5.5: segmento de rayo intersectado con un slab. Consideremos el fragmentoc. Mediante la ecuación del rayo r(t)=t(xc,yc,zc), y sabiendo que zf zc0.5hi, yzbzc0.5hi, se pueden obtener por simple despeje los extremos f y b del slab (verpuntos grises). Similarmente pueden obtenerse las coordenadas p y n pertenecientesa los fragmentos previo y próximo del mismo rayo.Durante el proceso de rasterización, se invoca a un programa defragmento por cada punto discretizado de un polígono. Los puntosnegros de la Fig. 5.3c constituyen los fragmentos a procesar. Para utilizarpre-integración, se considera una rebanada o slab alrededor de cadapolígono desplegado. Si zc es la coordenada z del polígono, el slab estádelimitado por los planos zzc0.5hi y zzc0.5hi, en donde hi es ladistancia entre polígonos para el nivel de detalle i-ésimo, al cualpertenece el brick (ver Fig. 5.5). El valor de hi puede ser 2 i h0 si se utilizamuestreo adaptativo basado en el nivel de detalle, o simplemente h0 si seutiliza muestreo constante.Como se puede notar en la Fig. 5.5, los slabs no se ajustanadecuadamente al brick. Esto acarrea errores de integración en lasfronteras de los bricks. Algunos segmentos consideran áreas fuera delbrick (ver primer y último slab intersectado con r1 en la Fig. 5.3d), encuyo caso la solución es remover la parte externa al brick de estossegmentos. En otros casos, puede quedar un área sin considerar (verárea blanca dentro del brick, después del último slab de r2 en la Fig.5.3d) en cuyo caso el segmento debe ser alargado hasta la frontera delbrick.La Fig. 5.6 muestra gráficamente cómo se ajustan los segmentos en lasfronteras de un brick. Consideremos los tres puntos inicialesinvolucrados en la construcción del segmento de slab: las coordenadas-83-


Capítulo 5: Despliegue Multi-resolucióndel fragmento generado c, las del punto frontal (f ) y trasero (b) del slab.Adicionalmente, consideremos las coordenadas del fragmento previo (p) ypróximo (n) de c, tal que 0.5(p+c)=f y 0.5(c+n)=b. Para ajustaradecuadamente los segmentos de rayo, se estudian 4 casos:pnc bfsegmentointermediopcf nbsegmentoinicialpcfnbsegmentofinalpcf nb'segmentoúnicoFigura 5.6: ajustando un segmento de rayo a la frontera de brick, en coordenadas detextura. Los puntos rellenos de gris constituyen las intersecciones entre la fronteradel brick y el segmento de rayo delimitado por p y n considerado para el fragmento c.a) Segmento intermedio: este es el caso más común para un brick, yocurre cuando p y n están dentro del brick. Por consecuencia, f y btambién lo están, y se procede a obtener la integral en el segmentodelimitado por f y b. Los segmentos de slabs asociados con p y n sonconsiderados durante la rasterización de los polígonos previo y siguienterespectivamente.b) Segmento inicial: p está fuera del brick, y n está dentro. En este caso,durante la rasterización del polígono previo, no se genera el fragmento deposición p, y posiblemente un pequeño slab entre la frontera del brick yel segmento f , b pudo no haber sido considerado. Como otra posibilidad,el segmentof , b puede intersectar la frontera del brick. En ambos casos,la solución consiste en redefinir el segmento a integrar comodonde f es la intersección del segmentof , bp, c con la frontera del brick., enc) Segmento final: n está fuera del brick, y p está dentro. Haciendoanalogía con el caso anterior, el segmento a integrar es f , b, en dondeb es la intersección del segmentoc, n con la frontera del brick.d) Segmento único: p y n están fuera del brick; por lo tanto, el fragmentoc es el único fragmento del rayo dentro del brick. En este caso, el ajustedebe ser realizado por ambos lados del segmento, obteniendo f , b.Para calcular p, se considera que el polígono previo al que se estárasterizando se encuentra a una distancia hi, para el nivel de detalle i--84-


Capítulo 5: Despliegue Multi-resoluciónésimo. Así, el polígono yace en el plano zp=zchi. Utilizando la ecuaciónparamétrica de la recta,r(t) = (x(t), y(t), z(t)) = t * (xc,yc,zc), [Ec. 5.2]se iguala z(t)=zp y despejando t obtenemos tzp/zc. Sustituyendo t en r(t)se obtiene(xp,yp,zp) = zp/zc *(xc,yc,zc) [Ec. 5.3]Similarmente, el punto n se obtiene como (xn,yn,zn) = zn/zc *(xc,yc,zc), conznzchi. Debido a que p, c y n deben ser transformados seguidamente alespacio de textura, resulta ineficiente realizar todo este cómputo porcada fragmento. Se propone entonces realizar el cálculo únicamente enlos vértices de los polígonos, y durante la rasterización, se obtienen loscorrespondientes puntos p, c y n por fragmento mediante interpolación.Es importante señalar que pese a que la distancia entre polígonos esconstante dentro de un mismo nivel de detalle, la longitud de lossegmentos varía debido a la proyección perspectiva. Para el caso deproyección paralela, la distancia entre muestras del rayo es constantepara un brick, salvo en las fronteras. Por simplicidad, las interseccionesde los segmentos de rayo con las fronteras de los bricks se realizan en elespacio de textura, en donde el brick está alineado a los tres ejes (ver Fig.5.6).La técnica de muestreo adaptativo puede implementarse basándose en elnivel de detalle para determinar la distancia entre polígonos, tal y comose muestra en la Fig. 2.29b del capítulo 2. Para niveles de detalle muyburdos, la distancia entre polígonos puede generar imágenes muy toscas.Para ello se puede limitar la distancia máxima entre polígonos a hmax (4en la práctica) al igual que con la técnica basada en GPU, para hacer unacomparación justa entre ambas técnicas en el tiempo de respuesta ycalidad de las imágenes.En este trabajo se implementa la técnica de terminación temprana derayo, utilizando el mismo programa de fragmentos de rendering (al igualque en el caso de ray casting basado en GPU). Al consultar la opacidadacumulada en el píxel correspondiente del FBO al comienzo del programade fragmentos, se puede descartar el fragmento antes de ejecutarcompletamente dicho programa, sin necesidad de utilizar un programade fragmentos diferente. Aunque esto no reduce el número de fragmentosprocesados, cuando la opacidad alcanza el umbral establecido, elcómputo en el procesador de fragmentos se reduce a sólo el muestreo delpíxel correspondiente en el FBO para consultar la opacidad.-85-


Capítulo 5: Despliegue Multi-resoluciónAdicionalmente, en esta implementación no se requiere del despliegueextra de las caras frontales del bounding box, ni del cuello de botellagenerado por utilizar diferentes programas de fragmentos por brick comoen las soluciones presentadas en trabajos previos [LEE04], [KAE06],[PAB06].5.4 Clasificación Pre-integradaAcorde al teorema de muestreo, una reconstrucción correcta de uncampo escalar se logra si esta es muestreada a una tasa superior o iguala la frecuencia de Nyquist. Sin embargo, utilizando post-clasificación, elcampo escalar es muestreado antes de aplicar la función detransferencia, función que puede requerir una frecuencia de muestreosuperior para capturar todos los detalles [LUM04].(a)Función deTransferencia(b)Función deTransferenciaFigura 5.7: despliegue de una superficie no poligonal. Se define una función detransferencia en forma de pulso delgado, para c(s) y (s) que define la superficie avisualizar. La imagen (a) ha sido generada utilizando post-clasificación, y la imagen(b) pre-integración.Considere una función de transferencia definida por un pulso delgadocomo se muestra en la Fig. 5.7. Si el espaciado entre las muestras delrayo es superior a la longitud de este pulso, algunas muestrasinterpoladas pueden capturar este detalle, mientras otras no, resultandoen una imagen compuesta de bandas y puntos, y no una superficiecontinua (ver Fig. 5.7a). Estos artefactos visuales pueden ser reducidossi se aumenta el muestreo a una tasa muy alta (i.e. reducir la distanciaentre muestras). Sin embargo, esto limita el rendimiento del sistema.-86-


Capítulo 5: Despliegue Multi-resoluciónLa pre-integración tiene sus orígenes en el despliegue volúmenes ysuperficies sin realizar reconstrucción poligonal, a partir de mallastetraédricas [ROE00]. Seguidamente fue utilizado para visualizarvolúmenes representados en mallas regulares o grid [ENG01]. Para elcaso que nos ocupa, mallas regulares, el objetivo de la pre-integración esofrecer la solución numérica de la integral de volume rendering en cadasegmento [ih,(i+1)h] del rayo de la Ec. 2.9, y específicamente el color yopacidad dados por:( i 1)h( s(x(')))d'ihci c s(x()))(s(x()))eih( d[Ec. 5.4]i 1 e( i 1) h( s(x( ))) dih.Para ello, se cuantizan los valores de s en n valores en [0,1], separadospor una distancia =1/n. El valor de n determina la resolución de latabla. Típicamente, se considera n=256 o n=4096, pero puede aumentaro disminuir según la calidad deseada, o la profundidad de las muestrasdel volumen. La tabla de integrales se utiliza para almacenar lasintegrales precalculadas entre cada par de muestras potenciales (sf,sb)que delimitan un segmento (ver Fig. 5.8).g(sf,sb,h)b(sf,sb,h)(sf,sb,h)r(s)r(sf,sb,h)sb………sfsbhx(ih) x((i+1)h)x()ssf………Figura 5.8: construcción de la tabla 2D de integrales. Se precalcula la integral entrepares de muestras (sf, sb), por cada canal de color r(s), g(s) y b(s), y opacidad (s). Enla gráfica se muestra el segmento considerado para el canal r(s), donde sfs(x(ih)) ysbs(x((i+1)h)).Sea sf s(ih), sb s((i+1)h). La opacidad entre las muestras sf y sb puedeescribirse como-87-


Capítulo 5: Despliegue Multi-resolucióni 1 hs b s f ( s f ) dhe 0. [Ec. 5.5]Haciendo el cambio de variable, =sf +(sb-sf)/h, obtenemossbhsb sf ( ) dsfi (sf,sb,h) 1 e . [Ec.5.6]Haciendo la sustitución para el color, se obtienehci 0csfsf ( ssf ) d' 0 ( sb sf) sf ( sb sf) ed. [Ec. 5.7]h h 'Por triángulos semejantes:1( s s f)1= ( s b s f)hh ci 0csfsf ( sbsf ) d' h 0 ( sb sf) sf ( sb sf) ed. [Ec. 5.8]h h 'Haciendo el cambio de variable sf ( sb sf) obtenemoshci sbh sfssbfce s fhs b s fsf ' sf ( s hbsf) d'd. [Ec. 5.9]'Haciendo un cambio de variable ' sf ( sb sf) en la integral interna,hobtenemos finalmente:ci c(sf,sb,h)=sbh sfssbfcehs sbfsf d'd. [Ec.5.10]La integral de color c(sf,sb,h) no puede ser resuelta analíticamente, dadoque la integral interna resulta en términos cuadráticos para una funciónde transferencia lineal a trozos, i.e. exp(- 2 ) no tiene antiderivada. Sinembargo, puede ser resuelta numéricamente en tiempo lineal, utilizando-88-


Capítulo 5: Despliegue Multi-resoluciónpor ejemplo el método de Simpson Composite [BUR00]. Suponiendo que sha sido cuantizada en n valores, y que h es constante, la complejidadpara calcular esta tabla es O(n 3 ). Esto es debido a que cada una de las n 2integrales requiere en el peor de los casos integrar sobre los nsubintervalos de longitud 1/n de la función de transferencia, limitando laedición de la función de transferencia en tiempo real.Diversos trabajos se han realizado para mejorar el tiempo de respuestaen la actualización de esta tabla. Engels et al. [ENG01] reducenefectivamente el número de integrales a calcular, al eliminar autoextincióndel color en cada segmento del rayo. Así, las integrales aprecalcular se reducen a:( i 1)hci cih( s(x( ))) (s(x()))d, [Ec. 5.11]i 1 e( i 1) h( s(x( ))) dih.Luego de hacer una simplificación de estas ecuaciones, se obtiene:ci = c(sf,sb,h)=sbh sfsbs f c d,s bhsb sf ( ) dsfi (sf,sb,h)= 1 e . [Ec. 5.12]Basándose en la observación quessbssfbfsb d cd cc d,sbd d 0sfsf0 d, [Ec. 5.13]00basta calcular únicamente las integrales en (0,s) para los valorescuantizados de s, haciendo que el número de integrales a computar seaO(n).s C( 0, s,h) C(s) c d, [Ec. 5.14]0-89-


Capítulo 5: Despliegue Multi-resoluciónT( 0, s,h) T(s) d.s0Calcular las n posibles integrales para C(s) y T(s) puede hacerseincrementalmente. Considerando los valores cuantizados de ss {0, 1/n, 2/n, …k/n, …, n/n},los colores C(s) pueden calcularse incrementalmente comoC(0,k/n,h)C(0,(k1)/n,h) + C((k1)/n, k/n,h). [Ec. 5.15]Asumiendo que el soporte de los trozos de la función de transferenciason al menos de longitud 1/n, C((k1)/n, k/n,h) puede calcularse en untiempo constante. El mismo análisis puede hacerse para el cálculo deT(s).Una vez pre-calculado todas las integrales C(s) y T(s) en tiempo lineal, elcálculo de color y opacidad para cada una de las n 2 entradas en la tablase obtienen mediante:hc(sf,sb,h) C s ) C(s ) (b f,sb sfh T( sb) T( s f ) s s(sf,sb,h) 1eb f. [Ec. 5.16]Por lo tanto, la actualización de la tabla es O(n 2 ). Trabajos siguientesmuestran que la eliminación de la auto-extinción en cada segmento derayo genera artefactos para funciones de transferencias que revelanmúltiples superficies a la vez [ROE02], [LUM04]. Por ejemplo, si variassuperficies intersectan el mismo segmento de rayo, al auto-extincióndentro del segmento juega un papel importante en la determinación delcolor. Así, la investigación se ha basado desde entonces en mejorar eltiempo de respuesta sin la eliminación de la auto-extinción.Roettger and Ertl [ROE02] proponen un método que explota el hardwaregráfico programable para reducir el tiempo de respuesta en laconstrucción de la tabla. El trabajo se basa en el despliegue de mallastetraédricas, por lo que requieren agregar otra variable a la tabla: ladistancia entre muestras. En este caso, la tabla es tridimensional, y elalgoritmo es O(n 4 ). En sus pruebas, la implementación que explota elhardware gráfico logra reducir considerablemente el tiempo de respuestade la versión software, para una tabla de dimensiones 256x256x128. Latabla 3D es codificada en una tabla 2D y accedida mediante coordenadas-90-


Capítulo 5: Despliegue Multi-resolucióncilíndricas para acelerar el acceso durante el rendering, puesto que elmuestreo sobre texturas 2D es notablemente más rápido que sobretexturas 3D.Eric Lum et al. [LUM04] proponen un algoritmo eficiente, considerandola auto-extinción por cada segmento de rayo y h constante. Se basan enla observación inicial que por cada diagonal de la tabla de integrales, serepite el cálculo de pequeñas integrales. Calculando estas pequeñasintegrales una sola vez por diagonal, y combinándolas adecuadamente,se logra reducir la complejidad a O(n 2 ). Para derivar su solución,llamemos a (f,b) los índices de la tabla de dimensión n*n, tal que fb.Estos índices corresponden a las muestras sf f, y sb b, con 1/n.Sustituyendo sf y sb en la Ec. 5.10 se obtienefh f dbhb f Cf, b,h Ced. [Ec. 5.17]b f Por comodidad, escribamos C(f,b,h)=C(f,b,h). Si tomamos un valorintermedio x, con fxb, obtenemosC f , b,h Cf, b,h ehb fhb fhbfhb fx fjxdxfCxfCCeehb fbhbfhbfexC f xfhb fdd d d fxdb f edh xddd. [Ec. 5.18]Note que el color C(f,b,h) de la tabla principal, en el cual se integra sobreel segmento [f,b], depende de integrales en intervalos más pequeños,hpero pesadas por el mismo factor . La clave es que este factor es el( b f ) mismo para todos los elementos de una diagonal de la tabla. Para ladiagonal lésima, los colores C(f,b,h) a calcular son:C(0,l,h), C(1,l+1,h), C(2,l+2,h), …, C(n2l,n2,h), C(n1l,n1,h)-91-


Capítulo 5: Despliegue Multi-resoluciónen donde bf l. Para calcular estos elementos, se construye una tablatemporal de integrales por subrango (subrage integral table) de maneraincremental. Definamos las integrales de esta tabla comoij,h ih ( ) dljh, . [Ec. 5.19]liC C( ) ( ) e dlSe utiliza la notación Cl para diferenciar los colores de esta tablatemporal, con los de la tabla principal. Sustituyendo Ec. 5.19 en Ec. 5.18se obtiene:Cf, b,h C f, x,h f, x,hCx,b h . [Ec. 5.20]l ll,Esta fórmula también aplica para la composición de las integrales de latabla temporal. Así,Cf, b,h C f, x,h f, x,hCx,b h . [Ec. 5.21]l lll,Note que C lf, b,hC fb,h , si l bf. La tabla temporal es construidaincrementalmente como se muestra en la Fig. 5.9. Mediante la Ec. 5.21,C lf b 1,hC lf , b,h yuna integral , puede obtenerse a partir de lf, b,h, al componerse con C lbb 1,hC lf 1, b,hpuede obtenerse a partir de C lf 1, f , hylf1, f , hcomponerse con C lfb,h, . Similarmente, una integral al, . Así, por cada sub-intervalo de longitud l de lafunción de transferencia, se calculan las 2l1 entradas en la tabla,incrementalmente. En el cálculo de estas entradas se computan lintegrales de la forma Cl(i, i+1,h) y 2l2 composiciones (Ec. 5.21). Luegose realizan l1 composiciones para obtener los elementos de la diagonal len la tabla principal (Ec. 5.20). En total, para un sub-intervalo delongitud l se calculan l integrales numéricamente, y 3l3 composiciones.Cada integral y cada composición se efectúan en un tiempo constante.Dado que esta tabla tiene no más de n/l subintervalos de longitud l, serequieren calcular (n/l)l=n integrales y (n/l)(3l3)3n composiciones.Considerando además que la tabla principal tiene 2n diagonales, lacomplejidad en tiempo para construir la tabla 2D de pre-integración esO(n 2 ).Nuestra solución se inspira en la construcción eficiente de la tabla depre-integración descrita con anterioridad, soportando tres modalidades:tabla simple, tabla exponencial, tabla uniforme. A continuación sedescribe cada una de ellas, sus ventajas y desventajas.-92-


Capítulo 5: Despliegue Multi-resoluciónbin 0 bin 1C l C l C l C ll 3,l 1l1,2l 32l 3,2l1C l 2l1,3l 33l 3,3l1bin 2C l l1,2l1 cl1,2l1C l 2l1,3l1 c2l1,3l1C l l 2,l 1C l l1,2l 2C l 2l 2,2l1C l 2l1,3l 2 C l 3l 2,3l1C l 2,l 1C l l1,l 2C l l 2,2l1C l 2l1,2l 2 C l 2l 2,3l1………C l 1 , l 1C l l1,l 1C l l1,2l1C l 2l1,2l1C l 2l1,3l1C l 0,l 1C l l 1,lC l l, 2l1C l 2l1, 2lC l 2l,3l1long.llong.n…Figura 5.9: construcción de la tabla de integrales por subrango. Las flechas indicanel orden en que se llena esta tabla. Para el primer subrango de longitud l se empiezacalculando Cl(l2,l1,h) mediante algún método de integración numérica. Paraobtener Cl(l3,l1,h), se calcula Cl(l3,l2,h) y l(l3,l2,h), y se aplica la Ec. 5.21 conCl(l2,l1,h). Incrementalmente se repite este proceso hasta obtener Cl(0,l1,h).Similarmente, se construyen las integrales incrementalmente, desde Cl(l1,l,h) hastaCl(l1,2l1,h). El proceso continua para los siguientes subrangos de longitud l, hastacompletar la tabla.a) Tabla simple: consiste en una única tabla de n 2 entradas, calculadapara un paso h constante. El valor de n es el número de niveles en que secuantizan las muestras para construir la tabla. La construcción de latabla se basa en el trabajo de Eric Lum et al. [LUM04]. Para lasintegrales de subrango de la forma Cl(i,i+1,h) se utiliza el métodonumérico de Simpson Adaptativo [BUR00].Utilizar una simple tabla es ideal para dar respuestas en tiempo realcuando se está editando la función de transferencia. Sin embargo, nopuede utilizarse el muestreo adaptativo, puesto que la tabla ha sidocalculada para un valor fijo de h.Tanto para ray casting acelerado por GPU (con proyección paralela operspectiva), como para polígonos alineados al viewport (con proyecciónparalela), la distancia h entre muestras es constante al no utilizarmuestreo adaptativo; sin embargo, los segmentos de rayos cortados en lafrontera de los bricks generan distancias entre muestras inferiores a hque sólo pueden aproximarse linealmente.b) Tabla Exponencial: si la distancia entre muestras varía por utilizarmuestreo adaptativo, se requiere del cálculo de una tabla 2D por cadavalor cuantizado de h. Frecuentemente se implementa el muestreoadaptativo variando h con el nivel de detalle [LAM99], [LJU06]. Así, en elnivel de detalle i-ésimo la distancia entre muestras vienen dada porhi=2 i h0, en donde h0 es el espaciado entre muestras para el nivel de-93-


Capítulo 5: Despliegue Multi-resolucióndetalle 0, correspondiente a la data original. Si el dataset es representadocon m niveles de detalle, se requiere generar una tabla de O(mn 2 )entradas, tal y como fue introducido inicialmente para mallastetraédricas [KRA04]. La solución trivial consiste en basarse en elalgoritmo presentado en [LUM04], en donde cada tabla 2D de n 2 entradases calculada en O(n 2 ). Sin embargo, hemos observado que las diagonalespares del nivel de detalle i-ésimo pueden ser calculadas mediantecomposición de integrales calculadas en niveles de detalles inferiores.Para la l-ésima diagonal de la tabla del nivel de detalle k-ésimo, con0l


Capítulo 5: Despliegue Multi-resolucióntabla 5.1. Para un valor no pre-calculado de h, inicialmente obtenemoslos múltiplos de h0 entre los cuales se encuentra h, que vienen dados porlog2hh0left 2 , right = 2left. [Ec. 5.24]En donde la función x corresponde a la función piso de un númeroreal x. Por ejemplo, para h/h0=5, hay que interpolar entre los múltiplos 4y 8. Luego se obtiene la proporción de h/h0 respecto a ambos múltiplosdada port = (h/h0left)/(rightleft) [Ec. 5.25]= (h/h0left)/left.= h/(h0*left) 1.Finalmente, la coordenada de textura r se obtiene como0.5 log 2r mhh0 t. [Ec. 5.26]Para los casos en que h/h0[1,2 m ], se muestrea la textura de integralesen el extremo correspondiente, y se escala la integral proporcionalmente.Cuando h/h02 m , la textura es muestreada en r(m0.5)/m, y las integrales seescalan por h/(h02 m ).Tanto para ray casting acelerado por GPU (con proyección paralela operspectiva), como para polígonos alineados al viewport (con proyecciónparalela), la distancia h entre muestras es constante por nivel de detalle.En cambio, al utilizar polígonos alineados al viewport con proyecciónperspectiva, la distancia entre muestras varía rayo a rayo. Unaalternativa en este último caso es utilizar conchas esféricas [LAM99], endonde por cada nivel de detalle la longitud de cada segmento de rayo essimilar. Sin embargo, en todos estos casos es necesario aproximar lasintegrales en las fronteras de los bricks mediante interpolación,ajustando adecuadamente la coordenada r de textura.c) Tabla uniforme: para la tabla exponencial, en niveles de detalles bajos,la interpolación en la coordenada r de textura genera aproximacionesburdas de las integrales, que pueden producir artefactos no deseados enlas fronteras entre bricks. Estos artefactos pueden reducirse utilizandouna tabla uniforme, en donde h varía linealmente entre 0 y 2 m (i.e. h=0,-95-


Capítulo 5: Despliegue Multi-resolución1, 2, 3, …, 2 m ). En este caso, si un divisor común x existe para l y h, laintegral de color puede ser obtenida de las tablas 2D ya calculadas:Cii l,h Ci, i l,hi, i l,hC il, i l,h h, . [Ec. 5.27]xxxEn nuestras pruebas, alrededor del 37% de las integrales se obtienen porcomposición de integrales ya conocidas.La ventaja de utilizar una tabla uniforme es que se puede utilizardirectamente la interpolación tri-lineal provista por el hardware gráfico,para aproximar la integral para valores no cuantizados de h.Adicionalmente, la calidad de interpolación para reconstruir lasintegrales en las fronteras de los bricks es similar en cualquier nivel dedetalle, puesto que h ha sido cuantizado uniformemente. La desventajaes que requiere mucho tiempo de cómputo y almacenamiento, y paracuantizaciones muy finas de h, su procesamiento es inmanejable. Comouna necesaria optimización, se restringe el dominio de h a [0,hmax], endonde hmax


Capítulo 5: Despliegue Multi-resolucióndirecto de volúmenes, el volumen no es un objeto geométrico, por lo quehay que tomar ciertas consideraciones adicionales para lograr unacorrecta visualización.(a) (b) (c) (d)Figura 5.10: clipping plane. Se muestra los casos en que el clipping plane no corta albrick (a), y casos donde lo corta en sólo las caras frontales (b), algunas frontales yotras traseras (c) y sólo las traseras (d). En los tres últimos casos, es necesariogenerar un polígono mediante MC-Slicing. El área gris corresponde al área visible delbrick luego del clipping. Las líneas oscuras corresponden a los polígonos desplegadossin clipping (imágenes superiores) y con clipping (imágenes inferiores).Para el caso de ray casting basado en GPU, el clipping plane sólo puedecortar los polígonos frontales que se despliegan de cada brick. Si estospolígonos son total o parcialmente removidos por el clipping plane, esnecesario desplegar adicionalmente un polígono, correspondiente a laintersección del clipping plane con el brick (ver Fig. 5.10). El polígono deintersección puede determinarse fácilmente mediante la técnica de MC-Slicing [BEN05]. Considerando al brick como una celda delimitada por 8vértices, y al plano como una ecuación implícita f(x,y,z)=0, un paso delalgoritmo de Marching Cubes nos permite obtener los vértices de laintersección del plano con el brick.-97-


Capítulo 5: Despliegue Multi-resolución(a) (b) (c)Figura 5.11: utilización del plano de corte. (a) El volumen es cortado por un planode corte, haciendo el despliegue con clasificación pre-integrada. (b) Artefactosocasionados por no ajustar los segmentos de slabs intersectados por el plano decorte. (c) Los segmentos de slabs son cortados adecuadamente en el programa defragmentos.Para el caso de utilizar polígonos alineados al viewport, el hardwaregráfico remueve efectivamente el área de los planos en el subespacionegativo del plano. Sin embargo, debido a que se está utilizando preintegración,los segmentos intersectados por el plano de corte debenajustarse adecuadamente; de lo contrario, se generan artefactos en lavisualización (ver fig. 5.11b). Para llevar a cabo esta tarea, se debe tomaren cuenta el funcionamiento del plano de corte. Este remueve el área dela geometría que se encuentre en el semi-espacio negativo del plano. Así,los fragmentos asociados a los slabs intersectados por el plano podríanno ser generados durante la rasterización. Adicionalmente, losfragmentos del lado positivo del plano, generan slabs que puedenatravesar el plano de corte (ver Fig. 5.12a). Esto genera artefactosvisuales, por cambios bruscos entre píxeles de la imagen (ver Fig. 5.11b).Una solución consiste en no utilizar el plano de corte con soporte dehardware gráfico, y realizar el descarte vía programa de fragmentoutilizando la ecuación del plano. En este caso, un segmento de slabpuede ser completamente descartado, si se encuentra del lado negativodel plano; puede ser cortado, si es intersectado por el plano; osencillamente está del lado positivo del plano y pasa la prueba. Aunqueesta solución resuelve el problema, el descarte de slabs ocupa un tiempode procesamiento redundante en los procesadores de fragmentos.La solución planteada en este trabajo es permitir que el hardware gráficorealice la remoción trivial de los slabs que no están cerca del plano decorte, mientras que el programa de fragmento realiza el ajuste necesariopara los slabs cercanos al plano. Así, por cada brick, se configura unplano de corte con soporte de hardware gráfico desplazando en plano endirección a su normal, de manera consistente con el nivel de detalle del-98-


Capítulo 5: Despliegue Multi-resoluciónbrick. Así, el desplazamiento coincide con la distancia entre polígonosutilizada para el despliegue del brick. El hardware gráfico cortará lageometría que contiene los slabs de descarte trivial, mientras que el restode los slabs serán procesados por el programa de fragmento. Comoresultado, todos los slabs cortados por el plano de corte sonconsiderados, y tratados correctamente (ver Fig. 5.11c y 5.12b).(a)(b)plano de corteplano de corteFigura 5.12: integración alrededor del clipping plane. (a) Debido al clipping, losfragmentos del lado negativo del plano son removidos (puntos blancos). Lossegmentos rojos y azules corresponden a los segmentos de slabs construidosalrededor de cada fragmento no removido (puntos negros). Algunos segmentos deslabs atraviesan el plano, mientras otros segmentos no han sido considerados, puessu fragmento asociado no fue generado durante la rasterización. (b) El problema essolucionado desplazando ligeramente el plano de corte, haciendo el ajuste de losslabs intersectados por el plano en el programa de fragmentos (fragmentos grises).En el caso de utilizar los 6 planos de cortes para ajustar la geometríaintermedia al brick, no hay planos de cortes disponibles para hacer lainspección interna. En este caso, se utiliza la técnica de frustum oblicuopresentado en [LEN06]. El plano de corte cercano de la pirámide devisualización o frustum puede ser trasladado y rotado, manipulandodirectamente las entradas la matriz de proyección. De esta manera, seobtiene la misma funcionalidad de un plano de corte soportado por elhardware gráfico, valiéndonos del frustum culling [WOO99].5.6 SumarioEn este capítulo se ha detallado el módulo de rendering del VisualizadorInteractivo, el cual soporta tanto planos alineados al viewport como raycasting basado en GPU. En ambos casos se describe cómo seimplementan las técnicas clásicas de aceleración, como saltos deespacios vacíos, la terminación temprana del rayo y el muestreoadaptativo basado en el nivel de detalle. Particularmente en el caso deray casting basado en GPU, se propone la implementación de muestreoadaptativo basado en la opacidad, que para nuestro conocimiento, no ha-99-


Capítulo 5: Despliegue Multi-resoluciónsido utilizado anteriormente en el despliegue multi-resolución devolúmenes con aceleración de hardware gráfico.Tanto la técnica de terminación temprana del rayo como la de muestreoadaptativo basado en opacidad, necesitan llevar la traza de la opacidadacumulada en cada píxel, durante el despliegue de los distintos bricks.Para ello se ha utilizado los frame buffer objects, que es una extensión dela librería gráfica de OpenGL® que permite seleccionar una textura comobúfer de despliegue, que a la vez puede ser consultada dentro de losprogramas de fragmentos. En una prueba temprana se determinó que elmuestreo adaptativo basado en opacidad reduce los artefactos visualesgenerados por el muestreo adaptativo basado en el nivel de detalle. Cabedestacar que este último ha sido el estándar en muestreo adaptativo parael caso multi-resolución en la última década.Finalmente, al utilizar muestreo adaptativo se requiere de la generaciónde una tabla de pre-integración 3D. En este capítulo se ha presentado unalgoritmo eficiente para calcular esta tabla, mediante la generalización deun algoritmo introducido originalmente para tablas 2D [LUM04].Adicionalmente, se aborda el problema de integración en las fronterasentre bricks, y en la frontera con el plano de corte. La solución se basa enel ajuste adecuado de los segmentos de rayo en dichas fronteras, y lainterpolación adecuada de las integrales pre-calculadas en la tabla 3D.En el próximo capítulo se presenta el módulo de rendering del sistemaexperimental, cuyo objetivo es la eliminación de los artefactos entrebricks adyacentes.-100-


Capítulo 6: Reducción de ArtefactosCapítulo 6. Reducción de ArtefactosComo se ha estudiado en capítulos previos, las técnicas de desplieguemulti-resolución permiten la visualización y la interacción con unvolumen que sobrepasa las capacidades gráficas de computadoresconvencionales, e incluso las capacidades de memoria principal. Sinembargo, al variar el nivel de detalle en las distintas áreas del volumen,se introducen artefactos visuales indeseables, que pueden incluir unaerrónea interpretación de los datos (ver Fig. 6.1). El origen de estosartefactos visuales es el proceso de interpolación de las muestras. Parauna misma coordenada (x,y,z) del volumen, la muestra interpolada suelediferir en cada nivel de detalle. Dependiendo de la función detransferencia, estas muestras pueden ser transformadas en colores yopacidades diferentes, que puede afectar la percepción del fenómeno.Más aún, los cambios de colores bruscos, de un mismo tejido o material,despierta el interés en el usuario, quien presta su atención en estasáreas inconscientemente.(a)(b)Figura 6.1: dataset de angiografía con presencia de aneurisma. Las imágenes hansido generadas utilizando (a) 30MB de memoria de textura y (b) 4 MB de memoria detextura. En ambos casos se notan los artefactos producto de la diferencia de nivel dedetalle entre bricks adyacentes.Se han realizado diversos trabajos para reducir estos artefactos. Elprimero de ellos, el bricking [GRZ98], [LAM99], asegura una correctainterpolación en la frontera entre bricks del mismo nivel de detalle.-101-


Capítulo 6: Reducción de ArtefactosSeguidamente, mediante la copia e interpolación de vóxeles de la fronteraentre bricks de distintos niveles de detalle, se logra similarmente unacontinuidad en la frontera entre bricks adyacentes [WEI00], [GUT02]. Enun trabajo más reciente [LJU06A] se busca realizar la interpolación en lafrontera entre blocks directamente en el GPU, sin necesidad de replicarvóxeles entre blocks. Pese a que estos trabajos suavizan la transiciónentre bricks o entre blocks, únicamente consideran los vóxeles defrontera, y la diferencia de calidad alrededor de la frontera sigue siendoevidente entre distintos niveles de detalle.En este capítulo se presenta una solución efectiva para reducir estoscambios evidentes de color y calidad, como consecuencia de la diferenciade resolución entre bricks adyacentes. Determinados bricks de laselección son interpolados con su propia representación en el siguientenivel de detalle más bajo, de manera tal que la resolución varíegradualmente dentro del brick. Mediante esta técnica, que se basa en elblending o mezcla de bricks, se logra que la resolución en las fronteras obordes del brick coincida con la de sus bricks adyacentes, logrando unatransición imperceptible entre niveles de detalle. Esta solución se inspiraen el trabajo de LaMar et al. [LAM00], quienes logran una transiciónimperceptible únicamente en el despliegue de un plano oblicuo delvolumen multi-resolución. Para nuestro conocimiento, es la primera vezque esta idea es generalizada para el despliegue directo de volúmenesmulti-resolución, y con soporte del GPU.El algoritmo es implementado en un sistema experimental, cuyo objetivono es garantizar la interactividad sino mostrar la efectividad en laremoción de artefactos. El sistema experimental incluye un algoritmovoraz de selección (no incremental), y un módulo de paginación bajodemanda, con política de reemplazo de página basada simplemente enLRU. El rendering se realiza mediante ray casting basado en GPU, conclasificación pre-integrada, y muestreo a pasos constantes.Este capítulo está organizado de la siguiente manera: primero seintroduce la técnica para remover artefactos basado en la mezcla deniveles de detalle; luego se describe la modificación del algoritmo vorazde selección para soportar las nuevas restricciones propias de la técnica;finalmente se discute sobre la posibilidad de utilizar el algoritmo de Splitand-Collapseen los módulos de selección y paginación.6.1 Blending: Mezcla de BricksLa Fig. 6.2 muestra un ejemplo uni-dimensional de la técnica deblending. Por simplicidad, en este capítulo se utiliza el nivel de un nodoen el octree indistintamente con el nivel de detalle. Así, el nivel de detalle-102-


Capítulo 6: Reducción de Artefactos0 corresponde con el nivel del árbol 0, es decir, la representación másburda del volumen (la raíz del octree). Considere el brick B ubicado en elnivel i, y su brick adyacente CD, de menos detalle, ubicado en el niveli1. El brick B es mezclado gradualmente con su representación en elpróximo nivel de detalle más burdo (brick AB), tal que el nivel de detallecoincida en la frontera con el brick CD. Un peso , que varía entre 0 y 1 alo largo de B, es utilizado para realizar la mezcla de B y AB.Para el caso 3D, cualquier brick b ubicado en el nivel i-ésimo esadyacente con otros bricks (26 bricks en el caso general), los cualespueden estar en el nivel i1, nivel i ó nivel i+1 por restricciones de latécnica. A cada vértice de b se le asigna un peso. El peso es cero si elvértice es adyacente únicamente a bricks con nivel i o nivel i+1, es decir,con igual o mayor detalle. Esto significa que al vértice se le asigna elnivel i. En caso contrario, el peso asignado es uno, puesto que el vérticees adyacente a bricks con nivel i1 o i, en cuyo caso el nivel asignado alvértice es el i1.(a) (b) Brick Padre p (nivel i1)ABCDNivel i1A B C DNivel iABCD(s,t,r)p(s,t,r)SelecciónRenderingRendering +BlendingA B CDA (1)B+AB CD=0 =1(nivel i) (nivel i1)1Brick b (nivel i)(s,t,r)Pesos0 01(s,t,r)0000b(s,t,r)(s,t,r)Figura 6.2: interpolación entre niveles de detalle de bricks adyacentes. (a) Los nivelesi1 e i son dos niveles de detalle consecutivos particionados en bricks. Los bricksadyacentes del mismo nivel comparten ½ vóxel en sus fronteras. El criterio deselección escoge los bricks A, B y CD para rendering. Durante el rendering, losvóxeles son interpolados para generar cada muestra requerida. La diferencia de nivelde detalle entre bricks adyacentes genera artefactos, y discontinuidades evidentes.Estos son removidos mediante la interpolación gradual del nivel de detalle más fino,hacia su siguiente representation, tal que el nivel de detalle coincide en la fronteraentre los bricks. (b) Mezcla de un brick de nivel i con su padre (nivel i1). El factor deblending en cualquier punto (s,t,r) dentro del brick es calculado por interpolacióntri-lineal de los pesos asignados a los vértices del brick.-103-


Capítulo 6: Reducción de ArtefactosLos bricks totalmente transparentes no son considerados, pues ellos sonexcluidos del rendering por el proceso de selección. Si el peso de todos losvértices de un brick es cero, entonces su brick padre (de nivel de detalleinmediatamente inferior) no es requerido en su despliegue. En cualquierotro caso, el blending es realizado en cada muestra requerida del brick x,con coordenadas de textura (s,t,r), y su correspondiente muestra en elbrick padre p, con coordenadas de textura (s,t,r). Así, la muestra x(s,t,r)es interpolada linealmente con p(s,t,r) utilizando la siguiente ecuación:blend( s,t,r ) (1 ( s,t,r )) x(s,t,r ) (s,t,r ) p(s,t,r ), [Ec 6.1]donde es calculada mediante interpolación tri-lineal de los pesos de losvértices (ver Fig. 6.2b). Note que la muestra del volumen mezcladablend(s,t,r) es obtenida mediante interpolación cuádrica, puesto quex(s,t,r) y p(s,t,r) son típicamente reconstruidas mediante interpolacióntri-lineal. Particularmente, blend(s,t,r)=x(s,t,r) si (s,t,r)=0, mientras queblend(s,t,r)=p(s,t,r) si (s,t,r)=1. Para cualquier otro valor de en (0,1), elnivel de la muestra resultante es i, es decir, un nivel intermedio entrelos niveles i1 e i. Esto muestra que el nivel de detalle varía vóxel a vóxel,lo cual permite una transición suave entre bricks adyacentes con distintonivel de detalle.0 1 2 3 16 17 254 255Figura 6.3: textura tri-dimensional con todas las combinaciones posibles de lospesos de los 8 vértices de un brick. El peso de los vóxeles blancos es 1, y 0 para losnegros. Mediante un simple índice entre 0 y 255 se le indica a los programas devértices y fragmentos cuál sub-textura utilizar.Para realizar la interpolación tri-lineal de los pesos de los vértices de unbrick, hay diversas posibilidades. Una de ellas es pasar los 8 pesos en 8variables al programa de fragmentos del GPU. Sin embargo, esto implicaque la interpolación tri-lineal hay que codificarla, lo cual requiere demuchas multiplicaciones y sumas en punto flotante por muestra, quepueden degradar el rendimiento. Otra alternativa es explotar lainterpolación tri-lineal provista por el hardware gráfico. Inicialmente sepropone utilizar una textura 3D de 2x2x2 vóxeles, que corresponde conlos 8 pesos. Sin embargo, cargar una textura 3D auxiliar por cada brick a-104-


Capítulo 6: Reducción de Artefactosdesplegar en memoria de textura no es apropiado. La solución a esteproblema es utilizar una única textura 3D de 2x2x512, que contienetodas las combinaciones posibles de los pesos de los vértices (ver Fig.6.3). Esta textura es cargada una única vez en memoria de textura, ymediante un simple índice (entre 0 y 255) se indica cual sub-textura de2x2x2 vóxeles corresponde al brick a desplegar. La Fig. 6.4 muestra unejemplo de cómo la técnica remueve efectivamente los clásicos artefactosdel despliegue multi-resolución.(a)(b)Figura 6.4: removiendo artefactos mediante blending. (a) Despliegue convencional dela selección utilizando 30MB de memoria de textura. Se observan los artefactos entrebricks adyacentes. (b) Los artefactos son efectivamente eliminados mediante latécnica de blending de niveles de detalle consecutivos.Los bricks seleccionados son desplegados en sentido front-to-back (desdeel más cercano al más lejano) utilizando ray casting basado en GPU conclasificación pre-integrada. Por cada brick se despliegan y rasterizan suscaras frontales de su caja delimitadora, interpolando las coordenadas detextura de los vértices, y el vector de visualización. Así, cada fragmentoobtenido de la rasterización contiene el rayo de visualización y el puntode entrada en el brick en el espacio de textura.El rayo es muestreado con pasos constantes. Para cada par de puntosconsecutivos front y back en el rayo, se obtienen las muestrascorrespondientes b(front) y b(back) en el brick b. Si el brick b no requierede blending, la tabla de pre-integración 2D es muestreada en(s,t)=(b(front),b(back)) para obtener la integral RGB(b(front),b(back)) yopacidad (b(front),b(back)) en el intervalo [b(front),b(back)]. Si el brick brequiere de blending, se deben considerar las muestras correspondientes-105-


Capítulo 6: Reducción de Artefactosp(front) y p(back) en el brick padre. En este caso, utilizando la ecuación6.1 en los puntos front y back, se obtienes (1(front))b(front) (front)p(front),t (1(back))b(back) (back)p(back). [Ec. 6.2]Así, la tabla de pre-integración es muestreada sólo una vez por segmentode rayo, en la coordenadas (s,t) de la Ec. 6.2. El último segmento de rayodentro del brick es ajustado a la frontera del brick. En este caso, lalongitud del segmento del rayo es utilizado para escalarproporcionalmente las integrales de color y opacidad.6.2 Octree RestringidoLa técnica para reducir los artefactos visuales producidos por laadyacencia de bricks con niveles de detalles consecutivos, requiere que laselección corresponda a las hojas de un octree restringido, en donde losbricks adyacentes de dicha selección difieran a lo sumo en un nivel dedetalle.Se utiliza un algoritmo voraz con cola de prioridad, que partiendo de lainserción del nodo raíz del árbol, refina iterativamente el nodo b demayor prioridad P(b), re-insertando sus hijos no transparentes en la cola,hasta alcanzar el límite de memoria de textura disponible (N bricks)[BOA01], [GUT02], [WAN07]. Durante este proceso, se requierenadicionalmente las siguientes restricciones:• El refinamiento de un brick no debe violar la condición deadyacencia. Esto significa que la diferencia de nivel de detalleentre bricks adyacentes no puede diferir en más de un nivel. Estosugiere la construcción de un octree restringido, que puede serconstruido mediante una adaptación del algoritmo deconstrucción del quad-tree restringido introducido para renderingde terrenos [PAJ98].• Un nodo bS requiere del blending con su padre durante elrendering si al menos uno de sus bricks adyacentes tiene menorresolución que b. Por consiguiente, se deben contabilizar elnúmero de bricks utilizados para rendering (incluyendo los nodospadres), lo cual está limitado por N bricks.La restricción de adyacencia se satisface evaluando el nivel de detalle delos bricks adyacentes antes de hacer el refinamiento de un nodo bS.Dos bricks son adyacentes si sus cajas contenedoras comparten unacara, arista o vértice. Cada nodo a adyacente a b, y con nivel de detalle-106-


Capítulo 6: Reducción de Artefactosinferior, debe ser refinado antes de refinar a b. Note que la restricción deadyacencia debe ser evaluada de nuevo antes de refinar a, y asísucesivamente. Esto sugiere utilizar un procedimiento recursivo o unapila auxiliar para realizar esta tarea. Para simplificar la búsqueda de losbricks adyacentes de cada brick, se mantiene la lista de los nodosadyacentes de cada brick bS, que llamaremos Ady(b). Cuando se realizael split del nodo b, se crea la lista de adyacencia Ady(h) de cada hijo h, lacual va a contener a todos los hermanos no transparentes de h, y elsubconjunto de nodos en Ady(b) que son adyacentes con h.Adicionalmente hay que actualizar la lista de adyacencia Ady(c) de cadanodo cAdy(b), reemplazando la entrada b en Ady(c) por los hijos de bque son adyacentes a c.Durante este proceso, el algoritmo debe llevar la cuenta del número debricks seleccionados para rendering, incluyendo los bricks padres (demenor detalle) demandados por la técnica. Cada nodo bS tiene unabandera, indicando si requiere a su padre para el rendering. Un brick brequiere a su padre para el rendering si alguno de los bricks adyacentestiene menor nivel de detalle. Al refinar un brick b, sólo es necesarioactualizar el valor de la bandera en sus hijos y la de sus bricksadyacentes Ady(b). El proceso de refinamiento termina cuando laoperación de split excede la restricción de número de bricks (N bricks) ono es posible hacer más refinamiento por alcanzar el nivel más fino dedetalle.Para utilizar el algoritmo incremental de Split-and-Collapse en laselección de bricks, hay que garantizar similarmente en forma recursivala condición de adyacencia en cada operación de split o collapse. Larestricción de adyacencia debe ser considerada igualmente en elalgoritmo out-of-core basado en Split-and-Collapse, de manera degarantizar que la selección S siempre esté contenida en el conjunto debricks paginados en memoria principal.6.3 Nivel de Detalle Promedio por VóxelPara estudiar el impacto de la técnica de blending sobre el nivel dedetalle, hay que estimar el nivel de detalle promedio por vóxel, tanto en laversión ordinaria (sin blending) como en la versión mejorada (conblending).El nivel de detalle promedio para la versión ordinaria es calculado comola suma del nivel de detalle de cada brick bS, ponderado por laproporción del volumen del brick sobre el volumen total del dataset.-107-


Capítulo 6: Reducción de ArtefactosVolume(b) LOD(b)bSLOD( S)[Ec. 6.3]Volume(b)bSPara la versión mejorada, se utiliza similarmente la ecuación 6.3. Sinembargo, el nivel de detalle del brick b, LOD(b), es estimado promediandoel nivel de detalle asignado en cada vértice de b. Debido a que laoperación de blending se realiza entre determinados bricks de la seleccióncon el próximo nivel de detalle bajo, se puede concluir que el nivel dedetalle promedio por vóxel es ligeramente más bajo al utilizar estatécnica. Sin embargo, en nuestras pruebas, la diferencia es de tan sólode una fracción de un nivel de detalle (0,18 niveles).6.4 SumarioSe ha introducido un algoritmo para remover artefactos típicos de latécnica de despliegue de volúmenes multi-resolución. Estos artefactossurgen en el despliegue de bricks adyacentes con distintos niveles dedetalle. La solución se basa en la mezcla o ponderada de bricks de nivelesde detalle consecutivos, que hace coincidir las resoluciones en lasfronteras entre bricks. Para nuestro conocimiento, es la primera vez quese utiliza esta técnica en el despliegue de volúmenes multi-resolución, ytiene gran potencialidad de convertirse en un estándar en el área.La técnica presentada ha sido implementada sobre un sistema prototipoexperimental, que utiliza paginación bajo demanda, y un algoritmo vorazen el criterio de selección. Sin embargo, los algoritmos de selección y outof-corevistos en los capítulos 4 y 5 pueden ser adaptados para soportarla restricción introducida por la técnica de mezcla de bricks. En estesentido, se debe garantizar en cada operación de split y collapse que ladiferencia de nivel de detalle entre bricks adyacentes no difiera en más deun nivel.En el próximo capítulo se presentan detalles de implementación ypruebas, tanto del Sistema Experimental como del Sistema Interactivo,tomando cuatro datasets de gran tamaño.-108-


Capítulo 7: Implementación y PruebasCapítulo 7. Implementación y PruebasEn este capítulo se presentan detalles de la implementación de losalgoritmos, en sus respectivos sistemas prototipo, así como las pruebasde rendimiento y de calidad de las imágenes generadas. Se especifica laplataforma, lenguaje y librerías utilizadas. Las pruebas están enfocadasa las bondades de cada sistema. En el sistema de VisualizaciónInteractivo – VI – interesa principalmente medir el desempeño de losalgoritmos y calidad de las imágenes, bajos distintos parámetros ytécnicas de aceleración. En el sistema de Visualización Experimental –VE – se desea verificar que efectivamente los artefactos son removidoscon la técnica de blending al mezclar niveles de detalle consecutivos;adicionalmente se desea estudiar el impacto que tiene dicha técnicasobre el nivel de detalle, costo en memoria y tiempo de respuesta.7.1 ImplementaciónAmbos sistemas tienen una arquitectura similar, y sólo cambia las clasesque implementan el criterio de selección, paginación y rendering. Seutiliza el entorno de desarrollo Visual Studio 2005. Pese que este entornoestá disponible únicamente para sistemas operativos de MicrosoftWindows (por ejemplo, Windows XP ®), el sistema ha sido implementadoutilizando las funcionalidades estándares de C++, de manera tal defacilitar la portabilidad del código. Como API gráfica para realizar eldespliegue se utilizó OpenGL® 1 , v2.1, el cual soporta la programación delos procesadores de vértices y fragmentos mediante el lenguaje GLSL 2 , yestá disponible en múltiples plataformas.Además de la portabilidad, es deseable poder ejecutar los sistemas enmodo pantalla completa con la posibilidad de incluir estereoscopía, demanera tal que puedan adaptarse fácilmente para su ejecución enambientes inmersivos como workbenches y caves. Para satisfacer esterequerimiento, así como para manejar los eventos de la ventana, el ratóny el teclado, se utiliza la librería de utilidades GLUT 3 v3.31a [OPE07], la1 OpenGL: acrónimo de Open Graphics Library (librería gráfica abierta). Es es APImultiplataforma para programar gráficos 2D y 3D.2 GLSL: acrónimo de OpenGL Shading Language (lenguaje de sombreado de OpenGL).Es parte del API OpenGL® que permite la compilación y ejecución de programas quecorren en el procesador gráfico o GPU.3 GLUT: acrónimo de OpenGL Utility Toolkit (juego de herramientas utilitarias paraOpenGL®). Es un API para programas que utilizan OpenGL®, para realizar interacción-109-


Capítulo 7: Implementación y Pruebascual está disponible en varias plataformas, como Windows®, Linux® yMacOS®. Para el manejo de las extensiones de OpenGL® se utilizó lalibrería GLEW 1 v1.3.3 [OPE07].Los sistemas contienen adicionalmente elementos de interfaz comodiálogos, botones, cajas de tilde o check-boxes, etc. Estos sonsuministrados por la librería EasyGLFramework, la cual ha sidodiseñada y desarrollada en este trabajo, para permitir el uso de unainterfaz convencional 2D dentro del ambiente gráfico 3D ofrecido porOpenGL®, y con el manejador de eventos de GLUT.Durante el desarrollo de los sistemas se utilizó el paradigma deprogramación orientada a objetos. Ciertas convenciones fueron utilizadasen la nominación de las clases, estructuras, atributos, métodos yconstantes, inspiradas en el estilo del framework de MFC (MicrosoftFundation Class) [MFC08]. Las clases empiezan con la letra C, losatributos contienen el prefijo “m_”, los métodos empiezan con letramayúscula, las estructuras y constantes se nominan en letrasmayúsculas. Ejemplos: CLens, CTreeCaching, m_textureSize, m_tree,IsEmpty(), PI, POINT.7.2 Volúmenes y Plataforma de PruebaPara las pruebas, se han seleccionado cuatro datasets (ver tabla 7.1 yFig. 7.1). Del proyecto del humano visible [VHP94] se tienen los cortesfotografiados en RGB de la mujer visible convertidos a escala de grises(VF8b), y adicionalmente su tomografía computarizada (VFCT). Se cuentacon un dataset proveniente de una angiografía, en donde el pacientepresenta una aneurisma (ANCT). Finalmente se ha generado un volumensintético (IE) proveniente de la evaluación de una ecuación implícita de laforma F(x,y,z)=0. Estos datasets han sido submuestreados en variosniveles de detalles, y divididos en bricks para construir el octree. Durantepre-procesamiento, los datasets de 12 bits por muestra (ANCT y VFCT)son escalados a 16 bits de precisión, para obtener una mejor precisióndurante la interpolación [LJU06D]. Cada conjunto de bricks hermanos seagrupan en un simple GOB, que son almacenados en un archivo binario,sin compresión.con el sistema operativo de manera independiente de la plataforma. Incluye manejo deventanas, raton y teclado.1 GLEW: acrónimo de OpenGL Extension Wrangler. Es una librería que ayuda a lainicialización y uso de las extensiones de OpenGL®. Provee un mecanismo eficientepara derterminar las extensiones de OpenGL® que soporta una plataforma.-110-


Capítulo 7: Implementación y PruebasVF8b VFCT ANCT IEAncho (v = vóxeles) 1024 512 512 992Alto (v) 1216 512 512 992Número de cortes (v) 5186 992 1559 1984Tamaño original (GB) 12,03 0,85 0,76 3,64Tamaño de brick. (v) 32 3 16 3 16 3 16 2 x32Tamaño de brick (KB) 32 8 8 16Tamaño Multi-resolución (GB) 15,74 1,25 1,12 4,57Bits por vóxel 8 12 12 16Niveles de detalle 0..8 0..7 0..8 0..6Ancho de banda (MB/seg.) 338,32 195,31 195,31 272,93Tabla 7.1: datasets de prueba. El ancho de banda efectivo hacia la tarjeta gráfica esmedido por cada dataset para su tamaño de brick.(a) (b) (c) (d)Figura 7.1: datasets de prueba. (a) VF8b, (b) VFCT, (c) ANCT, (d) IE. Las imágenesmostradas fueron generadas con ray casting basado en GPU, con un viewport de1024x768, sin reducción de artefactos entre bricks adyacentes.El sistema de prueba es un PC con procesador dual core de Intel, 4 GBde memoria principal, una tarjeta gráfica NVidia GeForce 8800 GTS con640MB de memoria, y un disco duro con tecnología SATA II. El sistemaoperativo del PC es Windows XP® SP3 32bits. En esta plataforma, unproceso no puede acceder más de 2GB de memoria principal. Debido queOpenGL® mantiene una copia adicional en memoria principal de cada-111-


Capítulo 7: Implementación y Pruebastextura almacenada en la memoria de la tarjeta gráfica, la cantidad dememoria principal disponible para paginación es inferior a 2GB-TS, endonde TS es la cantidad de memoria de textura en gigabytes asignadapara rendering.7.3 Pruebas de Desempeño Sobre el Sistema VIEstas pruebas tienen como objetivo estudiar el desempeño del sistema VIy sus algoritmos con distintas configuraciones. Entre las pruebas seincluyen el estudio del ancho de banda efectivo por tamaño del brick, eltiempo de cálculo para las tablas de pre-integración y los algoritmos derendering. Para estas pruebas se centra el interés en los dos volúmenesmás grandes (VF8b e IE); pero adicionalmente se ha incorporado eldataset ANCT para estudiar el funcionamiento del sistema paravolúmenes cuyo tamaño está en el orden del gigabyte.Para el caso de la función implícita se utiliza una función detransferencia con altas frecuencias. Este tipo de función de transferenciaes comúnmente utilizado en volúmenes sintéticos provenientes desimulación [ESP05] o ecuaciones implícitas [ENG01].7.3.1 Ancho de Banda y Particionamiento del VolumenLa primera prueba tiene el objetivo estudiar el ancho de banda efectivoentre la memoria auxiliar y la memoria principal para distintos tamañosde bricks, en la plataforma de pruebas. Se establecen distintos tamañosde brick n*m*k, seleccionando para cada dimensión los tamaños 8, 16,32, 64 y 128 vóxeles. Para medir el ancho de banda en cada caso, segrabaron los primeros 1000 requerimientos de bricks realizados por lamisma aplicación, por cada dataset. Los bricks son leídos por laaplicación en GOBs, en donde cada GOB contiene en general 8 bricks.En la tabla 7.2 se confirma que el ancho de banda aumenta a medidaque el tamaño del brick crece, pues los discos duros tienen mejorrendimiento leyendo bloques contiguos de datos. El ancho de banda esmuy bajo para el particionamiento más fino de 8 3 vóxeles por brick(alrededor de 1MB/seg.), mientras que alcanza un límite de hasta aprox.70 MB/seg para el particionamiento más pobre de 128 3 vóxeles por brick.En las pruebas, se han seleccionado tamaños intermedios para losbricks, balanceando calidad y ancho de banda. Se ha seleccionado untamaño de 16 3 vóxeles para los datasets menos grandes (ANCT y VFCT),cuyo ancho de banda efectivo es de 7,15 MB/seg. Para IE se seleccionóun tamaño de 16x16x32 vóxeles, con un ancho de banda efectivo de16,41 MB/seg. Finalmente, para VF8b se seleccionó 32 3 , con un anchode banda efectivo de 22,05 MB/seg. El ancho de banda efectivo para los-112-


Capítulo 7: Implementación y Pruebasdatasets ANCT y VFCT es muy similar, por lo que se reportan losresultados para ANCT.Tamaño de los VF8b ANCT IEBricks BPS MBPS BPS MBPS BPS MBPS8x8x8 1493,4 0,73 1162,6 1,14 1656,2 1,628x8x16 1202,6 1,17 1019,6 1,99 1503,2 2,948x16x16 1121,2 2,19 981,3 3,83 1305,5 5,1016x16x16 1131,2 4,42 915,5 7,15 1138,4 8,8916x16x32 1039,1 8,12 882,8 13,79 1050,0 16,4116x32x32 897,3 14,02 706,9 22,09 783,5 24,4832x32x32 705,7 22,05 541,5 33,84 552,0 34,5032x32x64 495,9 30,99 360,4 45,05 365,7 45,7132x64x64 365,7 45,71 217,6 54,39 223,7 55,9464x64x64 217,9 54,49 121,2 60,59 126,0 63,0064x64x128 123,9 61,95 64,6 64,61 67,0 66,9764x128x128 66,8 66,81 33,4 66,87 34,7 69,33128x128x128 35,0 69,94 17,0 67,93 17,6 70,57Tabla 7.2: ancho de banda efectivo de disco a memoria principal, variando eltamaño de los bricks. BPS=bricks por segundo; MBPS=megabytes por segundo.La carga de bricks de memoria principal a memoria de textura tambiénaumenta conforme aumenta el tamaño de los bricks. Sin embargo, elancho de banda es considerablemente superior si lo comparamos con elde disco a memoria principal. En la tabla 7.2 se muestra el ancho debanda efectivo de memoria principal para distintos tamaños de bricks.En este caso, los bricks son cargados hacia la memoria de texturaindividualmente, y no en GOBs.7.3.2 Transferencia de Bricks por FrameUna vez estudiado experimentalmente el ancho de banda efectivo entre lamemoria principal y la memoria de textura para los volúmenes deprueba, hay que definir un valor adecuado de M para las pruebas, esdecir, el máximo número de bricks que pueden cargarse por frame. Estevalor debe seleccionarse de manera tal que no impacte significativamentela rata de frames por segundo. Sin embargo, el tiempo de generación deuna imagen varía según el dataset, y los parámetros de visualización.Una alternativa es definir el valor de M acorde a la rata actual de framespor segundo. Sin embargo, esta velocidad va a variar según losparámetros de visualización, y la adaptabilidad del valor de M conformecambia el tiempo de respuesta dificulta la reproducción de las pruebas.Por consiguiente, el valor de M ha sido fijado por cada dataset tomandocomo base un rendimiento de 15 frames por segundo.-113-


Capítulo 7: Implementación y PruebasPermitiendo sacrificar hasta un 15% de la rata de frames por segundo, sedeterminó que se puede utilizar hasta el 10% del ancho de banda efectivopor segundo en la plataforma de pruebas. Para el caso de VF8b, el anchode banda es 398,4 MB/seg, que repartido en 15 frames nos da26,56MB/frame. Al utilizar el 10% de este ancho de banda, se puedetransferir hasta 2,66 MB/frame. Debido a que los bricks son de 32 3 bytes(32KB=1/32MB), el número de bricks que se permite transferir por framees a lo sumo 85. Para el resto de los datasets se puede hacer un análisissimilar, determinando así los siguientes parámetros: 136 bricks para IE y164 bricks para ANCT y VFCT.7.3.3 Construcción de la Tabla de Pre-integraciónPara la construcción de la tabla de pre-integración, en necesario definirvarios parámetros, como el nivel de cuantización de la muestras, ladistancia entre muestras h, la precisión en el cálculo de las integrales desubrango, y el formato de almacenamiento de la tabla final. En laspruebas, se consideran dos funciones de transferencia extremas: unafunción de transferencia suave, que corresponde a la mujer visible VF8b(ver Fig. 7.1a y Fig. 7.2a), y una función de transferencia caótica perocon muchas áreas transparentes que corresponde a la ecuación implícitaIE (ver Fig. 7.1d y Fig. 7.2b).(a)Figura 7.2: funciones de transferencias de prueba. (a) Función de transferencia paraVF8b, (b) Función de transferencia para IE.(b)Los formatos de almacenamiento soportados por la tarjeta gráfica deprueba varían desde 8 bits (un byte) hasta 32 bits (4 bytes) porcomponente. Hemos notado que al utilizar una función de transferencia-114-


Capítulo 7: Implementación y Pruebascon muy poca absorción (ejemplo Fig. 7.2b), las integrales obtenidas paravalores pequeños de h pueden llegar a ser a su vez muy pequeñas(alrededor de 0.5x10-6). Estos valores no podrían ser representados en 8bits ni en 16 bits. Por lo tanto se seleccionó la representación de puntoflotante en 32 bits, acorde al estándar IEEE 754 [STE81], que tiene 8 bitsde exponente, y 24 bits de mantisa con signo. En esta representación, setiene una precisión de 7 dígitos, y el exponente varía desde -126 hasta127. En al Fig. 7.3b se puede notar como la representación de la tabla de16 bits genera una imagen menos brillante para la ecuación implícita.Esto se debe a que las integrales inferiores a 0.5/2 16 (inferiores a0.76x10 -5 ) son representadas como cero, por lo que dejan de aportar a laimagen final, perdiendo detalles del volumen y luminosidad.El cálculo de las pequeñas integrales se realiza en el CPU a dobleprecisión, utilizando el método de Simpson Adaptativo [BUR00]. Debido aque la tabla de pre-integración almacena las integrales con precisión de 7dígitos, y considerando que las integrales están en el intervalo [0,1), elvalor de tolerancia del error fue fijado en 0.5x10 -7 . Este valor es utilizadoen las siguientes pruebas.(a)(b)Figura 7.3: imágenes generadas con ray casting basado en GPU, representando lasintegrales con (a) punto flotante con 32 bits por integral, (b) entero sin signo con 16bits por integral, utilizando muestreo a pasos de longitud constante h=1.0. En estaprueba se utilizó 100MB de memoria de textura para definir la selección S.Para la construcción de la tabla, el nivel de cuantización de las muestrases típicamente n=256 [ENG01], [LUM04]. Sin embargo, para estudiar eltiempo de respuesta del algoritmo de Eric Lum adaptado al casotridimensional (con la optimización presentada en este trabajo), el valorde n se ha variado en potencias de 2 desde 64 hasta 2048. Para laconstrucción de la tabla exponencial, en la tabla 7.3 se puede demostrar-115-


Capítulo 7: Implementación y Pruebasque la optimización propuesta reduce los tiempos de respuesta alrededorde 40%. Cabe destacar que aunque la función de transferencia de VF8bes más suave, el tiempo de cómputo de la tabla de pre-integración essuperior al de IE. Esto se debe a dos razones; primero, VF8b cuenta condos niveles de detalle adicionales, y segundo, la función de transferenciade IE es totalmente transparente en largos intervalos dentro de sudominio (ver canal alfa –líneas blancas– de la Fig. 7.2b).IE (nLod=7)VF8b (nLod=9)Tamaño deMétodo Tiempo % Tiempo %Tabla(seg.) Reducción (seg.) Reducción64*64*nLodOriginal 0,04840,437545,04Optimizado 0,0266 0,229647,52128*128*nLodOriginal 0,17191,051638,22Optimizado 0,1062 0,593843,53256*256*nLodOriginal 0,58122,609436,55Optimizado 0,3688 1,496942,63512*512*nLodOriginal 2,33757,448536,10Optimizado 1,4937 4,371941,301024*1024*nLodOriginal 9,429520,898535,96Optimizado 6,0390 12,500040,192048*2048*nLodOriginal 38,703070,203035,77Optimizado 24,8595 42,765539,08Tabla 7.3: tiempo de construcción de la tabla exponencial. Cada entrada en la tablaes una tupla RGBA, en donde cada canal almacena una integral en punto flotante de32 bits.Al utilizar la tabla exponencial para muestreo adaptativo basado en nivelde detalle, notamos que se generan artefactos visuales entre bricksrepresentados con un nivel de detalle muy burdo, al hacer unacercamiento muy pronunciado (ver Fig. 7.4). Esto se debe a que en lasfronteras entre bricks, se está aproximando linealmente la integral a unadistancia h arbitraria, entre integrales pre-calculadas muy distanciadas.Por ejemplo, al requerir una integral con h=5,5 se interpola linealmentelas integrales calculadas para h=4 y h=8, correspondientes a los nivelesde detalle 2 y 3 respectivamente.Para obtener una mejor aproximación en las fronteras entre bricks, esnecesaria la utilización de una tabla de pre-integración 3D uniforme.Adicionalmente, esta tabla es requerida en la implementación de latécnica basada en polígonos alineados al viewport con proyecciónperspectiva y muestreo adaptativo basado en el nivel de detalle, puestoque la distancia entre muestras es arbitraria tanto en las fronteras de losbricks, como dentro de los bricks. Para generar esta tabla 3D, se varía huniformemente en el intervalo [0,hmax], con un paso de discretización h,en donde hmax es la distancia máxima permitida entre pares de muestras.En nuestras pruebas, encontramos que el valor de h=1.0 es suficientepara eliminar los artefactos visuales presentes en la Fig. 7.4a y 7.4c.-116-


Capítulo 7: Implementación y Pruebas(a)(b)(c)(d)Figura 7.4: artefactos en fronteras de bricks (a,c) al utilizar tabla exponencial, ymuestreo adaptativo basado en nivel de detalle. Se muestra un acercamiento en lafrontera entre dos bricks de niveles de detalle 2 y 3. En las imágenes (b,d) se utilizóuna tabla uniforme con h=1.0.IE (nLod=7)VF (nLod=9)Tamaño deMétodo Tiempo % Tiempo %Tabla(seg.) Reducción (seg.) Reducción64*64*2 nLod Original 1,172088,828040,02Optimizado 0,7030 53,719039,52128*128*2 nLod Original 3,4690208,674033,35Optimizado 2,3120 136,875034,41256*256*2 nLod Original 11,0160497,388032,2Optimizado 7,4690 326,157034,43512*512*2 nLod Original 43,1530--32,4Optimizado 29,1720 ----Tabla 7.4: Tiempo de cómputo para la tabla de pre-integración 3D uniforme. Cadaentrada en la tabla almacena una tupla RGBA, a 32 bits por canal.En los resultados de la tabla 7.4 se aprecia que el método optimizadoreduce el tiempo de respuesta entre 32% y 40%, tomando hmax=2 nLod .Algunos resultados no se lograron completar, por limitaciones en laasignación de un bloque continuo de memoria superior o igual a 1GB, en-117-


Capítulo 7: Implementación y Pruebasla plataforma donde se realizaron las pruebas. Al utilizar un valor inferiora 2 nLod para hmax (por ejemplo 32), el tiempo de respuesta se reduceconsiderablemente, y los porcentajes de reducción oscilan entre aprox.30% y 36% (ver Tabla 7.5).Tamaño deTablaMétodo Tiempo(seg.)Original 0,1925IE (nLod=7)%ReducciónTiempo(seg.)VF (nLod=9)%Reducción64*64*320,541334,58Optimizado 0,1259 0,378130,14128*128*32Original 0,76561,522036,73Optimizado 0,4844 1,037631,83256*256*32Original 2,59304,312036,14Optimizado 1,6560 2,907032,58512*512*32Original 10,531014,625036,64Optimizado 6,6720 9,625034,191024*1024*32Original 42,391052,922036,46Optimizado 26,9370 34,453034,92048*2048*32Original 173,4690203,984036,07Optimizado 110,8910 132,469035,06Tabla 7.5: tiempo de construcción de la tabla uniforme, limitando la cantidad detablas a 32. En esta prueba se utilizó una precisión en el almacenamiento de 16 bitspor canal, para poder completar la prueba de 2048x2048x32.La construcción de una tabla simple de 256x256 entradas, tomaalrededor de 0.05 segundos, lo cual justifica su utilizaciónconjuntamente con el muestreo a intervalos constantes durante laedición de la función de transferencia.Para el resto de las pruebas en este capítulo se discretiza la función detransferencia en n=256 valores. En el caso de muestreo a intervalosconstantes se utiliza la misma separación entre muestras para todos losniveles de detalle (h=1 en las pruebas), por lo que requiere una tabla depre-integración 2D simple de 256x256 entradas RGBA en punto flotantea simple precisión (1MB). Para el muestreo adaptativo se utiliza unatabla de pre-integración 3D uniforme, restringiendo h entre 0 y hmax=4.Así, las dimensiones de esta tabla son de 256x256x4, requiriendo unespacio de 4MB de memoria para su almacenamiento.7.3.4 Medidas de ErrorEn esta prueba se realiza una comparación de las selecciones, así comode las imágenes generadas al utilizar distintas métricas de error. Estasson E(b)=I(b), E(b)=D(b), y la combinación de ambas E(b)=I(b)*D(b). Lacomparación entre dos imágenes se realiza píxel a píxel, y las diferenciasson cuantificadas en el espacio de color CIELUV como en [LJU04] y-118-


Capítulo 7: Implementación y Pruebas(a)(b) (c) (d)255(e) (f) (g) (h) (i)12 180 6Figura 7.5: calculando la distorsión por píxel en el espacio imagen, utilizandodistintas funciones de prioridad. (a,b,c,d) Bricks seleccionados para rendering. (a)Bricks en el nivel de detalle más fino, utilizando 400MB de memoria de textura.(b,c,d) Selección resultante al utilizar 40MB de memoria de textura, y diferentesfunciones de prioridad. (e) Imagen de referencia, generada con la selección (a). (f,g,h)Muestran la distorsión por píxel, después de aplicar el mapa de color de (i). (b,f)E(b)=I(b), (c,g) E(b)=D(b), (d,h) E(b)=D(b)I(b). El algoritmo voraz de selección fueutilizado en esta prueba, con P(b)=E(b).24 30-119-


Capítulo 7: Implementación y Pruebas[WAN07]. En este espacio, la distancia euclídea define la distorsión D(a,b)entre dos colores a y b. Una distorsión D(a,b)


Capítulo 7: Implementación y Pruebastécnica de rendering y aceleración, para generar las imágenes de la Fig.7.6.(c)(a)(b)(a)(e)(c)(d)Figura 7.6: imágenes de prueba para el sistema VI. (a) VF8b, (b) VFCT, (c) ANCT, (d)IE. Para generar estas imágenes se utilizó ray casting basado en GPU con unviewport de 1024x768 píxeles.El ray casting basado en GPU tiene en general un rendimiento superiorque el de planos alineados al viewport, en contradicción con trabajosprevios [KRU03], [STE05] y [LJU06]. Esto se debe a que al agregar preintegración,y ajustar adecuadamente los segmentos a la frontera de losbricks, (b) el programa de fragmentos para planos alineados al viewportnecesita de instrucciones adicionales, que degrada el rendimiento de latécnica. La mejora en tiempo de respuesta para el ray casting varía segúnla combinación de las técnicas de aceleración. En el mejor de los casos,la mejora es de 335%, con muestreo constante y terminación tempranadel rayo para la imagen 7.6d (ver tabla 7.7).Nuestra implementación de terminación temprana del rayo, que requiereel acceso del búfer de rendering, mejora significativamente el tiempo de-121-


Capítulo 7: Implementación y Pruebasrespuesta para volúmenes más opacos, como los mostrados en la Fig.7.6{c,d}, llegando a reducir el tiempo de respuesta hasta en un 639.42%(ver tabla 7.8). Note que para volúmenes muy transparentes (Fig. 7.6b) elchequeo de terminación temprana de rayo es por lo general redundante,y aumenta el tiempo de respuesta al utilizar ray casting, cuyo programade fragmentos es relativamente sencillo. Sin embargo, para este volumen,aún hay una ganancia al utilizar la técnica de planos alineados paragenerar 7.6b. Esto es debido al ahorro en tiempo que se consigue al noejecutar completamente el programa de fragmentos luego de alcanzar lasáreas óseas (opacas) del volumen.TerminaciónTemprana Muestreo 7.6a 7.6b 7.6c 7.6dde RayoSIConstante 113,08 52,18 174,85 335,36Adaptativo 55,89 50,67 101,10 91,25NOConstante 131,02 70,27 92,15 113,56Adaptativo 65,47 68,93 55,99 66,54Tabla 7.7: porcentaje de reducción en el tiempo de respuesta de la técnica de raycasting basada en GPU respecto a la técnica de planos alineados al viewport.Rendering Muestreo 7.6a 7.6b 7.6c 7.6dConstante 1,96% -0,60% 147,14% 639,42%Ray Casting Opacidad 6,11% -2,91% 64,84% 258,34%Adaptativo 7,26% -4,24% 105,03% 290,77%PlanosConstante 10,54% 63,69% 72,77% 262,71%Alineados Adaptativo 13,85% 7,36% 59,04% 240,27%Tabla 7.8: porcentaje de reducción del tiempo de respuesta al utilizar la técnica determinación temprana de rayo.El muestreo adaptativo en general mejora el tiempo de respuestarespecto al muestreo constante, alcanzando una reducción de hasta71.75% en el mejor de los casos. En el caso de utilizar ray casting, elmuestreo adaptativo basado en el nivel de detalle supera en la mayoríade los casos al muestreo adaptativo por opacidad, en términos de tiempode respuesta. Sin embargo, la primera puede incrementar los artefactosvisuales para funciones de transferencias que revelan superficies opacas.En la Fig. 7.7{a,b} se muestra un caso extremo, en donde se deseavisualizar el dataset ANCT, para observar la aneurisma, arterias yhuesos. Se observa, que además de los artefactos producidos por losdistintos niveles de detalle, el muestreo adaptativo basado en el nivel dedetalle introduce artefactos adicionales en la superficie del volumenopaco. Aunque menos pronunciado, se observó este mismo problemapara VF8b, debido a la alta absorción definida en la función detransferencia de la Fig. 7.2a.-122-


Capítulo 7: Implementación y PruebasEn un caso excepcional, el tiempo de respuesta empeora en un 2.16% alutilizar muestreo adaptativo por opacidad. Esto es debido a que elvolumen de la Fig. 7.6b es traslúcido, y la opacidad aumenta muylentamente en la mayoría de los rayos. De esta manera, el muestreotiende a ser constante, pero con un overhead adicional en la evaluaciónde la ecuación 5.1.MuestreoRenderingTerminaciónTempranade Rayo7.6a 7.6b 7.6c 7.6dAdaptativoSi 16,63% 2,13% 16,25% 14,94%porOpacidad RayNo 13,24% -2,16% 44,14% 58,78%CastingAdaptativoSi 61,38% 40,19% 38,22% 16,44%por LODNo 59,38% 38,43% 48,74% 55,84%AdaptativoSi 71,75% 40,78% 54,79% 63,29%Planos A.por LODNo 70,90% 38,91% 58,39% 65,56%Tabla 7.9: porcentaje de reducción del tiempo de respuesta al utilizar muestreoadaptativo respecto al muestreo constante.(a)(b)(c)(d)Figura 7.7: artefactos entre bricks adyacentes con diferente nivel de detalle. (a,c)Ray casting con muestreo constante, (b,d) Ray casting con muestreo adaptativobasado en el nivel de detalle. Con planos alineados también se muestra unincremento de los artefactos, al utilizar muestreo adaptativo.-123-


Error E(S)Editando TFError E(S)Moviendo PICapítulo 7: Implementación y Pruebas7.3.6 Algoritmos de SelecciónEn este conjunto de pruebas se pretende comparar el error de losdistintos algoritmos de selección, tanto los no incrementales, comoincrementales. Para ello, el punto de interés es movido aleatoriamentedentro del volumen durante 100 frames. Adicionalmente, se hace otraprueba modificando los puntos de control de la función de transferenciadurante otros 100 frames, modificando alguna de las componentes RGBAdel 30% de los puntos de control.El algoritmo óptimo basado en programación dinámica es aún costosocomputacionalmente para valores grandes de N, por lo que se tiene quereducir el uso de la memoria de textura para completar la prueba en untiempo razonable. El tamaño de la memoria de textura seleccionado varíapor cada dataset: 10MB para VFCT, 20MB para ANCT, 40MB para IE, y80MB para VF8b.Dataset(Memoria de textura)VFCT(10MB)ANCT(20MB)IE(40MB)VF8b(80MB)(a) Original 1,4428 1,3982 9,8849 0,0450(b) Mejorado 1,3988 1,3608 9,1839 0,0447(c) Optimo 1,3967 1,3598 9,1687 0,0447(b) vs. (a) 3,05% 2,67% 7,09% 0,69%(c) vs. (a) 3,20% 2,75% 7,25% 0,75%(c) vs. (b) 0,16% 0,08% 0,16% 0,05%(a) Original 5,5929 4,3251 25,8419 3,0308(b) Mejorado 5,4458 4,2660 22,4131 3,0038(c) optimo 5,4433 4,2636 21,9592 3,0033(b) vs. (a) 2,63% 1,37% 13,27% 0,89%(c) vs. (a) 2,68% 1,42% 15,02% 0,1%(c) vs. (b) 0,05% 0,06% 2,03% 0,02%Tabla 7.10: comparando el error E(S) para 3 algoritmos de selección no incrementales.Para los algoritmos voraces no incrementales se utilizan dos versiones: laversión original que selecciona el nodo de mayor error para refinar(utilizando E(b)=D(b)I(b)), y la versión mejorada que seleccionar el nodocon mayor reducción del error por hijo (utilizando ER(b) –ver Ec. 3.12–).En las pruebas (ver tabla 7.10), el error del algoritmo voraz original eshasta 3% mayor que los el de los algoritmos voraz mejorado y óptimo,para funciones de transferencias sencillas utilizadas comúnmente endata médica (VFCT, ANCT y VF8b). Sin embargo, para IE que utiliza unafunción de transferencia con altas frecuencias, el error global delalgoritmo voraz original es de hasta 15% mayor. La diferencia entre elerror del algoritmo óptimo y el algoritmo voraz mejorado es pequeña(generalmente inferior a 0.2%), demostrando que este último tieneresultados cercanos al óptimo. Sin embargo, los algoritmos voraces sólo-124-


IEVFCTIEVFCTCapítulo 7: Implementación y Pruebasconsumen entre 1 y 4 milisegundos por frame, mientras que el algoritmoóptimo toma hasta 3 horas por frame, por lo cual es sólo útil comoreferencia. El algoritmo de backtracking también fue implementado, perotoma varios días para generar el resultado óptimo para un simple frame,aún utilizando poca memoria de textura.Para los algoritmos de selección incrementales también se hace unacomparación en términos de la reducción del error por frame (ver tabla7.11). Para facilitar la comparación, la reducción máxima posible que esobtenida por el algoritmo óptimo la tomamos como el 100%. Con estamedida, la diferencia entre los algoritmos voraces incrementales (originaly mejorado) es significativa. El algoritmo voraz incremental mejoradotiene una reducción del error entre 20% y 70% superior que el original.Adicionalmente, el algoritmo óptimo supera entre 6% and 18% al vorazincremental mejorado, y entre 25% y 87% al voraz incremental original.Moviendo el Punto deInterés PI(a) OriginalError InicialError FinalErrorReducido%Reduc.Error1,4683 0,0872 74,7%(b) Mejorado 1,55551,4465 0,1090 93,4%(c) Optimo 1,4388 0,1167 100,0%(a) Original9,8958 0,1611 34,8%(b) Mejorado 10,05699,6462 0,4107 88,6%(c) Optimo 9,5934 0,4635 100,0%Editando la Función deError %Reduc.Error inicial Error FinalTransferenciaReducido Error(a) Original5,5913 0,0520 33,7%(b) Mejorado 5.64335,4981 0,1452 94,2%(c) Optimo 5,4892 0,1540 100,0%(a) Original26,0345 0,1923 13,1%(b) Mejorado 26.226825,0328 1,1940 81,6%(c) Optimo 24,7629 1,4639 100,0%Tabla 7.11: comparando algoritmos de selección incrementales con respecto al errorE(S).Finalmente, merece mencionarse que el tiempo de cómputo del algoritmode Split-and-Collapse es inferior a 1 milisegundo al mover el punto o áreade interés, pero el tiempo de cómputo requerido por el algoritmo óptimovaría entre 0,1 segundos a varias horas. Así, el algoritmo óptimo no tieneutilidad práctica en nuestro contexto, y sólo sirve de referencia para losalgoritmos voraces.-125-


Capítulo 7: Implementación y Pruebas7.3.7 Tiempo Consumido por cada SubprogramaEn esta prueba, se mide el tiempo de procesamiento de los algoritmosinvolucrados en la actualización de las estructuras de datos y rendering,variando el tamaño de la memoria de textura a utilizar entre 100MB y400MB con el dataset de mayor tamaño (VF8b). Para realizar lasmediciones de tiempo, se promedian los tiempos de procesamiento dedeterminados algoritmos a lo largo de 2000 frames. En estos 2000frames, el punto de interés se mueve de manera predefinida (ver Fig. 7.8)a una razón de 70 vóxeles por frame, con una resolución de imagen de1024x768 píxeles. Para el despliegue se utiliza ray casting basado enGPU, con muestreo adaptativo basado en la opacidad y terminacióntemprana de rayo. Los subprogramas involucrados en la generación decada frame son los siguientes:a) Actualización del error de los bricks en S al mover el puntode interés, O(N).b) Ordenamiento parcial de los bricks en S, O(N+Mlog2(M)).c) Algoritmo de Split-and-Collapse, O(Mlog2(M)).d) Ordenamiento de los bricks del conjunto S en profundidad,en sentido front to back, O(N).e) Carga de los bricks en memoria textura y rendering.Figura 7.8: movimiento predefinido del punto de interés.Los resultados mostrados en la tabla 7.12 demuestran que el tiempo derespuesta depende alrededor de 88% del rendering, y cerca de un 12% enla actualización de las estructuras de datos. Adicionalmente, notamosque los tiempos aumentan con el incremento del tamaño de la memoriade textura, pero salvo el tiempo de carga y rendering, ningúnsubprograma toma más de 3 centésimas de segundo. Mientras el tiempode carga y rendering varía entre 0,11 y 0,34 décimas de segundo, el restode los algoritmos en total toma hasta 4 centésimas de segundo,mostrando que son adecuados para procesar volúmenes de gran tamaño.-126-


Tiempo (segundos)Capítulo 7: Implementación y PruebasNote que los algoritmos a, b, y d aumentan linealmente conformeaumenta la cantidad de memoria de textura (N bricks) como se puedeobservar en la Fig. 7.9. Esto se debe a que la complejidad en tiempo deestos algoritmos es lineal respecto de N. Sin embargo, el algoritmo c(Split-and-Collapse) tiene un tiempo de respuesta similar para distintostamaños de la memoria de textura. Esto se debe a que este algoritmo esde O(MLog2(M)), por lo cual no depende de la cantidad de memoria detextura utilizada.MediciónVF8b100MB 200MB 300MB 400MB(a) 0,0117 0,0187 0,0246 0,0297(b) 0,0008 0,0018 0,0028 0,0037(c) 0,0018 0,0017 0,0014 0,00151(d) 0,0015 0,0031 0,0046 0,0066(e) 0,1149 0,1715 0,2316 0,3407a+b+c+d 0,0157 0,0252 0,0334 0,0416a+b+c+d+e 0,1307 0,1967 0,2650 0,3822%(a+…+d) 12,05% 12,81% 12,59% 10,87%%e 87,95% 87,19% 87,41% 89,13%F.P.S. (Hz) 7,65 5,08 3,77 2,62Tabla 7.12: tiempo en segundos requerido por cada subprograma.0,0350,030,0250,020,0150,01(a)(b)(c)(d)0,0050100MB 200MB 300MB 400MBFigura 7.9: tiempo requerido por cada subprograma. (a) Actualización del error, (b)Ordenamiento parcial, (c) Algoritmo de Split-and-Collapse, (d) Ordenamiento enprofundidad.-127-


Capítulo 7: Implementación y Pruebas7.4 Pruebas Sobre el Sistema VESobre el visualizador experimental, que se basa en la técnica de blending,se desea verificar que efectivamente remueve los artefactos visuales entrebricks adyacentes con distinto nivel de detalle. Adicionalmente, es deinterés medir el impacto de la técnica de blending (versión mejorada)sobre la versión ordinaria (sin blending), considerando el overhead queadiciona el blending tanto en cómputo como en requerimientos extras dememoria. Igualmente, se desea calcular el impacto de utilizar blending enel nivel de detalle promedio de la selección. En las pruebas se hanutilizado los datasets de origen médico (ver tabla 7.13). En la Fig. 7.10 sepuede observar como la técnica de blending remueve efectivamente losartefactos visuales entre bricks adyacentes con distinto nivel de detalle,haciendo que la transición entre 2 niveles de detalles consecutivos seaimperceptible.Descripción VFCT VF8b ANCTMemoria de Textura 35 100 30FPS versión ordinaria (Hz) 20,01 15,00 22,09FPS versión mejorada (Hz) 16,7 11,72 17,80% Blending overhead 16,54% 21,87% 19,42%(a) No. bricks seleccionados. 3865 2761 3255(b) No. bricks padres seleccionados 426 308 426Total bricks = (a)+(b) 4291 3069 3681% bricks padres 9,93% 10,04% 11,57%% bricks mezclados con sus padres 65,74% 54,04% 70,26%(c) Promedio de LOD (versión ordinaria) 5,39 5,67 5,48(d) Promedio de LOD (versión mejorada) 5,21 5,53 5,30Diferencia de nivel de detalle (c – d) 0,17 0,14 0,18Tabla 7.13: comparación cuantitativa entre la versión ordinaria (sin blending) y laversión mejorada (con blending).La versión basada en blending reduce la rata de frames por segundo(FPS) alrededor de un 20%, pese a que el número de bricks seleccionadosmezclados con sus padres varía entre 54% y 70%. Note además que estatécnica requiere alrededor de un 10% de memoria adicional paraalmacenar los bricks padres. En teoría, hasta un octavo (12,5%) de losbricks de la selección podrían ser requeridos para la técnica de blending;sin embargo, no todos los bricks seleccionados requieren de su padrepara rendering, y la jerarquía multi-resolución raramente resulta unoctree completo.El nivel de detalle promedio de la selección puede ser estimado tantopara la versión ordinaria, como para la versión mejorada (ver Ec. 6.3).Debido al blending de los bricks seleccionados con su próximarepresentación más burda, el nivel de detalle promedio de la selección es-128-


Capítulo 7: Implementación y Pruebasligeramente inferior al utilizar la técnica de blending (hasta 0,18 nivelesde detalle).(a.1)(a.2)(b.1)(b.2)(c.1)(c.2)Figura 7.10: remoción de artefactos con la técnica de blending. (a) VFCT, (b) VF8b,(c) ANCT. Las imágenes de la izquierda son desplegadas con la versión ordinaria, ylas imágenes de la derecha con la versión mejorada que utiliza blending. Las flechasmarrones indican los artefactos notorios de la versión ordinaria que son removidosmediante el blending.-129-


Capítulo 7: Implementación y Pruebas7.5 SumarioEn este capítulo se han presentado detalles de la implementación de losalgoritmos, en dos prototipos de sistemas, especificando la plataforma dedesarrollo y de pruebas. Se utilizaron cuatro datasets de prueba parahacer comparaciones de calidad y rendimiento de los sistemas, condiversos parámetros. A continuación se resumen los principalesresultados obtenidos en estas pruebas.En cuanto a la construcción de la tabla de pre-integración 3D, se haobtenido una reducción en el tiempo de respuesta de alrededor de un40% para la tabla exponencial, y entre 30% y 40% para la tablauniforme, al reutilizar integrales entre tablas 2D.Se muestra la efectividad de las técnicas de aceleración, comoterminación temprana de rayo y muestreo adaptativo, en la reducción deltiempo de respuesta. Adicionalmente se muestra que es convenienteutilizar el ray casting basado en GPU respecto a la técnica de planosalineados al viewport, por tener un mejor tiempo de respuesta.En cuanto a los algoritmos de selección, se muestra que los algoritmosvoraces mejorados generan resultados cercanos al óptimo, con la ventajade poder ejecutarse en tiempo real, requiriendo tan sólo entre 1 y 4milisegundos por cuadro de imagen en promedio. Más aún, el tiempototal requerido por los distintos algoritmos que se ejecutan frame a framepara actualizar el árbol a desplegar no supera los 5 milisegundos alconsiderar hasta 400MB de memoria de textura. Esto demuestra queestos algoritmos no tienen un impacto significativo en el tiempo derespuesta de la aplicación (10%), la cual depende mayoritariamente dela carga de bricks y rendering (90%).Finalmente se muestra como la técnica de de blending lograefectivamente remover los artefactos visuales producto de la diferencia denivel de detalle entre bricks adyacentes, con un bajo impacto en eltiempo de respuesta y requerimientos adicionales de memoria.-130-


Apédice I: Modelo ÓpticoCapítulo 8.FuturoConclusiones y Trabajos aEn este trabajo se han implementado dos sistemas prototipo paradesplegar volúmenes de gran tamaño. Uno de estos sistemas tiene comoobjetivo principal mantener la interactividad conforme se navega por elvolumen (Visualizador Interactivo), mientras el otro sistema introduceuna técnica para reducir artefactos visuales que se generan al desplegarun volumen con distintos niveles de detalle (Visualizador Experimental).A continuación se listan las conclusiones más importantes producto deesta investigación y de la implementación de los sistemas prototipo,empezando por el Visualizador Interactivo.En el algoritmo de selección voraz que se utiliza comúnmente paraobtener la selección a visualizar, se introduce una mejora efectiva entérminos de la reducción del error. Esta mejora consiste en refinariterativamente el nodo que genere la máxima reducción de errorpromedio por nodo hijo, en vez de refinar el nodo de máximo error. Enlas pruebas, el algoritmo voraz mejorado supera al algoritmo vorazoriginal hasta en un 13,27% en términos del error. Debido al interéscientífico de conocer cuán cerca están estos resultados de la selecciónóptima, se introduce un nuevo algoritmo, que mediante la técnica deprogramación dinámica, logra encontrar la selección óptima en tiempopolinomial. En las pruebas realizadas, el error promedio por framegenerado por el algoritmo óptimo es de tan sólo entre 0,05% y 2,03%inferior al algoritmo voraz mejorado, lo cual demuestra que losresultados del algoritmo voraz mejorado están muy cercanos al óptimo.Para considerar los bricks que ya están cargados en la memoria detextura durante el algoritmo de selección, y explotar la coherencia framea frame, se introduce un algoritmo voraz incremental (algoritmo de Splitand-Collapse)en el área de despliegue de volúmenes de gran tamaño.Este algoritmo actualiza continuamente la representación del volumenmulti-resolución, conforme se interactúa con el mismo. Debido al anchode banda limitado entre la tarjeta gráfica y la memoria principal, seagrega una restricción adicional para limitar la cantidad de bricks atransferir por cuadro de imagen, lo que puede generar representacionesintermedias para lograr un balance entre calidad y tiempo de respuesta.El algoritmo se basa en operaciones de split y collapse sobre la selecciónde bricks a visualizar. Para este algoritmo se proponen dos versiones;una de ellas refina el nodo de mayor error mientras colapsa el de menor-131-


Apédice I: Modelo Ópticoerror (algoritmo de Split-and-Collapse original). La otra refina el nodo quede mayor reducción del error por nodo hijo, mientras colapsa el nodo demenor incremento de error por nodo hijo (algoritmo de Split-and-Collapsemejorado). El algoritmo de Split-and-Collapse en sus dos versiones escomparado con el algoritmo óptimo de selección, el cual es adaptadopara soportar la nueva restricción de limitar la cantidad de bricks atransferir por frame. En las pruebas realizadas encontramos que elalgoritmo de Split-and-Collapse mejorado supera significativamente alalgoritmo original, hasta en un 68% en términos de la reducción del errorpor frame; mientras que el algoritmo óptimo sólo supera al algoritmo deSplit-and-Collapse mejorado entre un 6% y 18%. Sin embargo, elalgoritmo óptimo puede requerir de varios minutos, e incluso de horaspor frame; así, su utilidad está limitado a verificar que el algoritmo deSplit-and-Collapse mejorado produce resultados cercanos al óptimo.Considerando datasets que superan las capacidades de memoriaprincipal, se ha mostrado como utilizar el algoritmo de Split-and-Collapsepara manejar datos out-of-core, de manera consistente con la demandade bricks a desplegar. En base al error, los bricks son pre-paginados,paginados y reemplazados utilizando un hilo secundario, que se ejecutade manera concurrente con el rendering. Una importante propiedad delalgoritmo de Split-and-Collapse conjuntamente con las técnicas out-ofcorees que el tiempo de ejecución por frame sólo depende de lasrestricciones de hardware (memoria principal, memoria de textura yancho de banda), y no de las dimensiones de los volúmenes. Así, elalgoritmo es escalable y adecuado para el despliegue de volúmenes degran tamaño, y podría en un futuro manejar volúmenes en el orden delos terabytes en tiempo real.El despliegue del volumen multi-resolución ha sido realizado con elsoporte de texturas 3D provisto por el hardware gráfico, implementandotanto el ray casting basado en GPU, como la técnica basada en eldespliegue de polígonos alineados al viewport, con clasificación preintegrada.La solución que utiliza ray casting basado en GPU tiene unmejor rendimiento que la tradicional técnica de planos alineados alviewport, al considerar la clasificación pre-integrada. Este resultado sedebe principalmente a que la técnica de pre-integración introduce lanecesidad de chequear condiciones de fronteras en cada segmento derayo, lo cual genera cálculos e inicializaciones redundantes para elprograma de fragmentos asociado a la técnica de planos alineados alviewport.Diversas técnicas de aceleración conocidas han sido adaptadas alesquema multi-resolución, incluyendo la terminación temprana del rayo,el muestreo adaptativo por opacidad o nivel de detalle y el salto de-132-


Apédice I: Modelo Ópticoespacios vacíos. La técnica de terminación temprana de rayo ha sidoadaptada efectivamente al caso multi-resolución, al utilizar ray castingbasado en GPU. Para volúmenes opacos, la reducción del tiempo derespuesta de esta técnica es significativa, logrando reducir hasta 6 vecesel tiempo de respuesta. Para volúmenes muy transparentes, el chequeode terminación temprana de rayo suele ser redundante, lo cual puedegenerar un ligero detrimento en el tiempo de respuesta.Tanto la terminación temprana de rayo como el muestreo adaptativobasado en opacidad requieren del acceso a la opacidad acumulada encada píxel de la imagen. El acceso a dicha opacidad es posible medianteel uso la extensión de OpenGL® frame buffer objects (FBO). Con elmuestreo adaptativo basado en la opacidad acumulada, se logra unbalance entre calidad y tiempo de respuesta, puesto que mejora el tiempode respuesta del muestreo a pasos constantes, pero no reduce la calidaddel rendering como sí sucede en el caso del muestreo adaptativo basadoen el nivel de detalle.El muestreo adaptativo, aunado al ajuste de los segmento de rayo a lasfronteras de los bricks demanda el cálculo de una tabla de preintegración3D, es decir, una tabla 2D por cada valor cuantizado de h.Para construir cada tabla 2D, se utilizó un algoritmo incrementalencontrado en la bibliografía, que permite la reutilización de pequeñasintegrales entre diagonales de la tabla. Sin embargo, al considerar el caso3D, hemos encontrado que pueden reutilizarse además integrales entretablas 2D. En las pruebas realizadas, la optimización introducida reduceel tiempo de cálculo entre 30% y 40%. Sin embargo, aún el tiempo derespuesta no es lo suficiente rápido para actualizar la tabla 3D en tiemporeal. Durante la edición de la función de transferencia, se sugiere utilizarel muestreo a pasos constantes, para una valor determinado de h, lo cualrequiere de una única tabla 2D de 256x256, cuyo tiempo de cálculo estáalrededor de 0.05 segundos. Como otra alternativa se sugiere acelerar eltiempo de cálculo de la tabla 3D utilizando la generación actual deGPU’s.El tiempo total requerido por los distintos algoritmos que se ejecutanframe a frame para actualizar la selección no supera los 5 milisegundosal considerar hasta 400MB de memoria de textura. Esto demuestra queestos algoritmos no tienen un impacto significativo en el tiempo derespuesta de la aplicación, que depende mayormente (90% del tiempo)de la carga de bricks y rendering.Se ha introducido una técnica efectiva y eficiente para remover artefactosvisuales entre bricks adyacentes con distinto nivel de detalle. La técnicase basa en la mezcla ponderada de bricks de la selección con su siguiente-133-


Apédice I: Modelo Ópticorepresentación de menos detalle, de manera tal que las resolucionescoincidan en las fronteras entre bricks. Así, el nivel de detalle esgradualmente reducido dentro del brick, a diferencia de mezclar oreplicar vóxeles únicamente en las fronteras entre bricks como entrabajos previos. Para nuestro conocimiento, es la primera vez que seutiliza esta técnica en el despliegue de volúmenes multi-resolución, ytiene gran potencialidad de convertirse en un estándar en el área. Larestricción para aplicar la técnica es que los bricks adyacentes de laselección deben diferir a lo sumo en un nivel de detalle (restricción deadyacencia). Para evaluar esta técnica se implementó un sistemaprototipo menos sofisticado denominado Visualizador Experimental. Enlas pruebas se ha medido el impacto de la técnica sobre el rendering. Anivel de cómputo se requiere de alrededor de 20% adicional, y alrededorde un 10% extra de memoria de textura para almacenar los brickspadres. Debido al blending de los bricks de la selección con un nivel dedetalle inferior, el nivel de detalle promedio por vóxel es reducidoligeramente sólo hasta en 0,18 niveles respecto al caso de no utilizar latécnica de blending.El algoritmo de Split-and-Collapse puede ser adaptado a futuro parasoportar la restricción de adyacencia después de cada operación de splity de collapse; esto es, mantener una diferencia de a lo sumo un nivel dedetalle entre bricks adyacentes de la selección. Igualmente, estealgoritmo podría ser utilizado en otros contextos, donde se requiera uncambio continuo de la aproximación multi-resolución, como es el caso dela visualización de terrenos multi-resolución. También puedeconsiderarse su extensión a datasets 4D (variantes en el tiempo), dondees crucial el uso eficiente de la cantidad de memoria y el ancho de bandadisponible.Para mejorar la percepción visual de las superficies y contornospresentes en los volúmenes, es deseable incorporar un modelo deiluminación que incluya al menos la reflexión difusa. Finalmente, sepropone hacer una comparación en términos del número de fallos depágina del algoritmo out-of-core basado en Split-and-Collapse con otrosalgoritmos, como por ejemplo los basados en paginación bajo demandacon LRU.-134-


Apédice I: Modelo ÓpticoReferencias[AKE93][BEN05][BHA02][BLI82][BOA01][BRA00][BUR00][BUS02][CAM04]Akeley Kurt. “Reality Engine Graphics”. Computer Graphics,Vol. 27, pp. 109-116, 1993.Benassarou A., Bittar E., John N. W. y Lucas L. “MC Slicingfor Volume Rendering Applications”. Lecture Notes inComputer Science, Vol. 3515, pp. 314321. Enero 2005.Bhaniramka P. y Demange Y. “OpenGL Volumizer: A Toolkitfor High Quality Volume Rendering of Large Data sets”. EnProc. IEEE Symposium on Volume Visualization andGraphics, pp. 4554, Boston, Massachusetts, 2002.Blinn James. “Light reflection functions for simulation ofclouds and dusty surfaces”. Computer Graphics (ACMSIGGRAPH 82), Vol. 16, pp. 21–29, Julio 1982.Boada Imma; Navazo Isabel y Sopigno Roberto. “A 3Dtexture-based octree volume visualization algorithm”. TheVisual Computer, Vol. 17, pp. 185197, 2001.Brassard G. y Bratley P. “Fundamentos de Algoritmia”.Editorial Prentice Hall, 1ra. edición, ISBN-84-89660-00-X,1998.Burden Richard y Faires Douglas. “Numerical Analysis”.Brooks/Cole, 7ma. edición, ISBN 0-534-38216-9, 2000.Busatto Giorgio. “An Abstract Model of Hierarchical Graphsand Hierarchical Graph Transformation”. Dissertation, TesisDoctoral en Computación, Universidad Paderborn, Alemania,Enero 2002.Camacho Jonathan, Márquez Larry, Carmona Rhadamés yRivas Robinson. “Implementación de Shear-warp distribuidoutilizando hardware gráfico”. En Proc. VII CongresoInternacional de Métodos Numéricos en Ingeniería y CienciasAplicadas, Táchira-Venezuela, Abril 2004.-135-


Apédice I: Modelo Óptico[CAM92]Cameron G. G. y Undril P. E. “Rendering Volumetric MedicalImage Data on a SIMD-arquitecture Computer”. En Proc.Eurographics Workshop on Rendering, pp. 135-145, Briston-UK., 1992.[CAR99] Carmona Rhadamés y Rodríguez Omaira. “CubosMarchantes: Una Implementación Eficiente”. En Proc. Clei99:XXV Conferencia Latinoamericana de Informática, Paraguay-La Asunción, Septiembre 1999.[CAR00] Carmona Rhadamés. “Shear-Warp: Una implementaciónEficiente”. En Proc. Clei2000: XXVI ConferenciaLatinoamericana de Informática, México-México, Septiembre2000.[CAR01] Carmona Rhadamés y Paluszny Marco. “Corrección,Alineación y Reconstrucción 3D a partir de Cortes Seriados:Un Caso de Estudio”. En Proc. Clei2001: XXVII ConferenciaLatinoamericana de Informática, Mérida-Venezuela,Septiembre 2001.[CAR09] Carmona Rhadamés, Rodríguez Gabriel y Fröhlich Bernd.“Reducing Artifacts between Adjacent Bricks In MultiresolutionVolume Rendering”. ISVC 2009, Parte I, LectureNotes in Computer Science, Springer, Heidelberg, Vol. 5875,pp. 644655, 2009.[CAS05][CHA60][CHA96][CHO00]Castani L., Lvy B. y Bosquet F. “Volume Explorer: RoamingLarge Volumes to Couple Visualization and Data Processingfor Oil and Gas Exploration”. En Proc. IEEE Visualization ’05,pp. 247254, 2005.Chandrasekhar Subrahmanyan. “Radiative Transfer”. Dover,New York, 1960.Chamberlain B., DeRose T., Lischinski D., Salesing D. ySnyder J. “Fast rendering of complex environments using aspatial hierarchy”. Graphics Interface '96, pp.132141, 1996.Choi Jung Pill, Kwon Sung M. y Ra Jong B. “Efficient multiresolutionvolume rendering scheme”. En. Proc. SPIE Vol.3976, pp. 134141, Abril 2000.-136-


Apédice I: Modelo Óptico[CLI87][COR01][COR02][COX97][CRA93][CRU93]Cline Harvey y Lorensen Willian. “Marching Cubes: A highresolution 3D surface construction algorithm”. ComputerGraphics, Vol. 21 – No. 4, Julio 1987.Cormen Thomas, Leiserson Charles, Rivest Ronald y SteinClifford. “Introduction to Algorithms”. 2da. edición. MIT Pressand McGraw-Hill, ISBN 0-262-03293-7, 2001.Correa W., Klosowski J. y Silva C. “iwalk: Interactive Out-of-Core Rendering of Large Models”. Reporte Técnico TR-653-02,Universidad de Princeton, USA, 2002.Cox Michael y Ellsworth David. “Application-controlledDemand Paging for Out-of-core Visualization”. En Proc.Visualization '97, pp. 235-244, Phoenix-Arizona-USA,Octubre 1997.Crawfis R. y Max N. “Texture Splats for 3D Scalar and VectorField Visualization”. En Proc. Visualization '93, IEEE, pp.261-265, Octubre 1993.Cruz-Neira Carolina, Sandin Daniel y DeFanti Thomas.“Surround-Screen Projection-Based Virtual Reality: The Designand Implementation of the CAVE”. Proc. SIGGRAPH '93, pp.135–142, Agosto 1993.[DAN92] Danskin John y Narran Pat. “Fast Algorithms for Volume RayTracing”. En Proc. Workshop on Volume Visualization '02,pp. 91–98, Boston-Massachussets-USA, 1992.[DIC08][DRE88]Digital Imaging and Communications in Medicine. http://medical.nema.org.Drebin Robert, Carpenter Loren y Hanrahan Pat. “Volumerendering”. Computer Graphics (ACM SIGGRAPH 88), Vol.22, pp. 65–74, Agosto 1988.[DUC97] Duchaineau Mark, Wolinsky Murray, Sigeti David, MillerMark, Aldrich Charles y Mineev-Weinstein Mark. “ROAMingTerrain: Real-time Optimally Adapting Meshes”. En Proc.Visualization '97, pp 8188, Phoenix-USA, 1997.[ENG01]Engel Klaus, Kraus Martin y Ertl Thomas. “High Quality Pre-Integrated Volume Rendering Using Hardware-AcceleratedPixel Shading”. En Proc. Siggraph/Eurographics Workshop-137-


Apédice I: Modelo Ópticoon Graphics Hardware, pp. 916, California-USA, 2001.[ESP05][FAN96][FAR01][FOL90]Espinha Rodrigo y Celes Waldemar. “High-Quality Hardware-Based Ray-Casting Volume Rendering Using Partial Pre-Integration”. En Proc. XVIII Brazilian Symposium onComputer Graphics and Image Processing (SIBGRAPI’05),pp. 273280, Natal-Brasil, 2005.Fang Shiaofen, Huang Su, Srinivasan Rajagopalan yRaghavan Raghu. “Deformable Volume Rendering by 3DTexture Mapping and Octree Encoding”. En Proc.Visualization '96, Vol. 27, pp. 7380, 469; 1996.Farias Ricardo y Silva Claudio. “Out-Of-Core Rendering ofLarge, Unstructured Grids”. IEEE Computer Graphics andApplications, Vol. 31 – No. 4, pp. 4450, 2001.Foley James, van Dam Andries, Feiner Seteven y HughesJohn. “Computer Graphics: Principles and Practice”. Addison-Wesley, 2da. edición, 1990.[FUN93] Funkhouser T. A. y Sequin C. H. “Adaptive Display Algorithmfor Interactive Frame Rates During Visualization of ComplexVirtual Environments”. En Proc. ACM SIGGRAPH '93, pp.247-254, 1993.[GAO05] Gao Jinzhu, Wang Chaoli y Shen Han-Wei. “A ParallelMultiresolution Volume Rendering Algorithm for Large DataVisualization”. Parallel Computing, Vol. 31 – No. 2, pp.185204, 2005.[GOB08][GON92][GRZ98]Gobbetti E., Marton F. e Iglesias J. A. “A single-pass GPU raycasting framework for interactive out-of-core rendering ofmassive volumetric datasets”. The Visual Computer, Vol. 24,pp. 797806, 2008.González R. y Woods R. “Digital Image Processing”. Addison-Wesley, 2da. Edición, ISBN:0201508036, 1992.Grzeszczuk R., Henn C. y Yagel R. “Advanced GeometricTechniques for Ray Casting Volumes”. ACM Siggraph '98,notas de curso, Julio 1998.-138-


Apédice I: Modelo Óptico[GUA94] Guan Shen-Yih y Lipes Richard. “Innovative volumerendering using 3D texture mapping”. SPIE Medical Imaging –Image Capture, formatting and Display, Vol. 2164, pp.382392, 1994.[GUT02][GUT04][HAN74][HAN00]Guthe Stefan, Wand Michael, Gonser Julius y StraßerWolfgang. “Interactive Rendering of Large Volume Data Sets”.En Proc. Visualization '02, pp 5360, Boston-USA, 2002.Guthe Stefan y Strasser Wolfgang. “Advanced Techniques forHigh-Quality MultiResolution Volume Rendering”. Computers& Graphics, Vol. 28 – No. 1, pp. 5158, Febrero 2004.Hansen James y Travis Larry. “Light Scattering in PlanetaryAtmospheres”. Space Science Reviews 16, pp. 527610,1974.Hansen Chuck, Zimmerman Kurt y Ertl Thomas. “Level-Of-Detail Volume Rendering via 3D Textures”. En Proc. IEEEVolume Visualization and Graphics Symposium, pp. 713,USA, Octubre 2000.[HEG93] Hege Hans-Christian, Höllerer Tobias y Stalling Detlev.“Volume Rendering - Mathematical Models and AlgorithmicAspects”. Reporte Técnico, TR 93-7, Konrad-Zuse-ZentrumBerlin, 1993.[KAE06][KAJ84][KLE85][KNI02]Kaehler Ralf, Wise John, Abel Tom y Hege Hans-Christian.“GPU-Assisted Raycasting for Cosmological Adaptive MeshRefinement Simulations”. En Proc. Eurographics/IEEEWorkshop on Volume Graphics, pp. 103–110,144; 2006.Kajiya James y Von Herzen Brian. “Ray tracing volumedensities”. Computer Graphics (ACM SIGGRAPH '84), Vol. 18– No. 3, pp. 165–174, Julio 1984.Klein F. y Kübler O. “A Prebuffer Algorithm for Instant Displayof Volume Data”. En Proc. SPIE (Alchitectures andAlgorithms for Digital Image Processing), Vol. 596, pp.5458, 1985.Kniss Joe M. “Interactive Volume Rendering Techniques”.Tesis de Maestría, departamento de Ciencias de laComputación, Universidad de Utah, Mayo 2002.-139-


Apédice I: Modelo Óptico[KNI02B] Kniss Joe, Kindlmann Gordon y Hansen Charles. “MultidimensionalTransfer Functions for Interactive VolumeRendering”. IEEE Transactions on Visualization andComputer Graphics, Vol. 8 – No. 4, pp. 270285, Julio 2002.[KNI02C] Kniss Joe, Kindlmann Gordon, Hadwiger Markus, Rezk-Salama Christof y Westeremann Rüdiger. “High-QualityVolume Graphics on Consumer PC Hardware”. Notas de cursoen Visualization '02, Tutorial No. 2, Boston-USA, 2002.[KNI03] Kniss Joe. “Transfer Functions: Classification”. Parte delMódulo 3 del tutorial IEEE Visualization '03 “InteractiveVisualization of Voumetric Data on Consumer PC Hardware”,Washington-USA, Octubre 2003.[KNU97] Knuth D. E. “The Art of Computer Programming, Volume 1:Fundamental Algorithms”. Addison-Wesley, 3ra. edición,1997.[KRA04][KRU90][KRU95][KRU03][LAC95]Kraus Martin, Qiao Wei y Ebert David. “Projecting Tetrahedrawithout Rendering Artifacts”. En Proc. IEEE Visualization '04,pp. 2734, Texas-USA, Octubre 2004.Krueger Wolfang. “The application of Transport Theory toVisualization of 3D Scalar Data Fields”. En Proc. IEEEVisualization '90, pp. 272280, Octubre 1990.Krueger Wolfang, Bohn Christian-A, Fröhlich BerndmScheuth Heinrich, Strauss Wolfgang y Wesche Gerold. “TheResponsive Workbench”, IEEE Computer, Vol. 28 – No. 7,1995.Krüger J. y Westermann R. “Acceleration techniques for GPUbaseVoume Rendering”. En Proc. Visualization '03, pp.287292, Washington-USA, 2003.Lacroute Phillippe G. “Fast Volume Rendering Using Shear-Warp Factorization of the Viewing Transformation”. ReporteTécnico CSL-TR-95-678, 1995.[LAM99] LaMar Ericm Hamann Bernd y Joy Kenneth I.“Multiresolution Techniques for Interactive Texture-based-140-


Apédice I: Modelo ÓpticoVolume Visualization”. En Proc. Visualization '99, pp.355361, California-USA, 1999.[LAM00][LEE04][LEE05][LEN06][LEV88][LEV90][LIX02][LJU04]LaMar Eric, Duchaineau Mark, Hamann Bernd y JoyKenneth. “Multiresolution Techniques for Interactive TexturebasedRendering of Arbitrarily Oriented Cutting Planes”. EnProc. Data Visualization 2000--The Joint Eurographics andIEEE TVCG conference on Visualization, pp. 105114, 2000.Lee Taek-Hee, Kim Young J. y Chang Juno. “High QualityVolume Rendering for Large Medical Datasets Using GPUs”.En Proc. AsiaSim '04, pp. 663674, Korea, Octubre 2004.Lee Taek-Hee, Kim Young J. y Chang Juno. “SystemsModeling and Simulation: Theory and Applications”. Capítulo“High Quality Volume Rendering for Large Medical DatasetsUsing GPUs”. Springer Berlin / Heidelberg, Vol. 3398, ISSN0302-9743, 2005.Lengyel Eric. “Oblique View Frustum Depth Projection andClipping”. Journal of Game Development, Vol. 1 – No. 2,2006.Levoy Marc. “Display of Surfaces from Volume Data”. IEEEComputer Graphics and Applications, Vol. 8 – No. 3, pp.2937, Mayo 1988.Levoy M. “Efficient Ray Tracing of Volume Data”. ACMTransactions on Graphics, Vol. 9 – No. 3, pp. 245261,1990.Li Xinyue y Shen Han-Wei. “Time-Critical Multiresolution VolumeRendering Using 3D Texture Mapping Hardware”. EnProc. IEEE Volume Visualization and Graphics Symposium'02, pp. 2916, Boston-USA, Octubre 2002.Ljung P., Lundström C., Ynnerman A. y Museth K. “TransferFunction Based Adaptive Decompression for VolumeRendering of Large Medical Data Sets”. En Proc. IEEEVolume Visualization and Graphics Symposium, pp. 25–32,2004.[LJU06A] Ljung Patric, Lundström Claes y Ynnerman Anders.“Multiresolution Interblock Interpolation in Direct Volume-141-


Apédice I: Modelo ÓpticoRendering”. En Proc. EuroVis06 - Eurographics/IEEE-VGTCSymposium on Visualization, pp. 259266, Mayo 2006.[LJU06B] Ljung Patric. “Effcient Methods for Direct Volume Rendering ofLarge DataSets”. Tesis Doctoral, Universidad de Linköping,Suecia, 2006.[LJU06C] Ljung Patric. “Adaptive Sampling in Single Pass, GPU-basedRaycasting of Multiresolution Volumes”. En Proc.Eurographics/IEEE International Workshop on VolumeGraphics, pp. 3946, Boston-USA, Julio 2006.[LJU06D] Ljung P, Winskog C, Persson A., Lundström K. y YnnermanA. “Full Body Virtual Autopsies using a State-of-the-art VolumeRendering Pipeline”. IEEE Transactions on Visualization andComputer Graphics, Vol. 12, No. 5, pp. 869–876, 2006.[LOR87][LUM04]Lorensen William y Cline Harvey. “Marching Cubes: A highresolution 3D surface construction algorithm”. ComputerGraphics, Vol. 21 No. 4, Julio 1987.Lum Eric B., Wilson Brett y Ma Kwan-Liu. “High-QualityLighting and Ef_cient Pre-Integration for Volume Rendering”.En Proc. Joint EUROGRAPHICS - IEEE TCVG Symposiumon Visualization, pp. 2534, 2004.[MAR95] Mark Nelson y Jean-loup Gailly. “The Data CompressionBook”, 2da. edición, M&T Books, ISBN:1-55851-434-1, NewYork, 1995.[MAR04][MAX86][MAX95]Martínez C. “Partial Quicksort”. En Proc. 6mo. ACM-SIAMWorkshop on Algorithm Engineering and Experiments(ALENEX) y el 1 ACM-SIAM Workshop on AnalyticAlgorithmics and Combinatorics (ANALCO), pp. 224228,SIAM, 2004.Max Nelson. “Light diffusion through clouds and haze”.Computer Vision, Graphics, and Image Processing, Vol. 33,pp. 280–292, 1986.Max Nelson. “Optical Models for Direct Volume Rendering”.Visualization in Scientific Computing, Springer, pp. 3540,1995.-142-


Apédice I: Modelo Óptico[MFC08][MIR99]MFC (Microsoft Foundation Class). http://msdn.microsoft.com/en-us/library/d06h2x6e(vs.71).aspx.Mirin A. A., Cohen R. H., Curtis B. C., Dannevik W. P.,Dimits A. M., Duchaineau M. A., Eliason D. E., Schikore D.R., Anderson S. E., Porter D. H., Woodward P. R., Shieh L. J.y White S. W. “Very High Resolution Simulation ofCompressible Turbulence on the IBM-SP System”. En Proc.ACM/IEEE Supercomputing Conference '99, Vol. 13 No.18, Noviembre 1999.[MOR04] Moreland Kenneth. “Fast High Accuracy Volume Rendering”.Tesis Doctoral, Universidad de New Mexico, Julio 2004.[NVI07] NVIDIA. http://www.nvidia.com.[OPE07][ORO04][PAB06]OpenGL. http://www.opengl.org.Rodríguez O., Coto E., Carmona R. y Navarro H. Capítulo deLibro: “Tissue Modelling and Visualization using VirtualReality”, en el libro “Computational modelling of Hard TissueSurgery”. Editorial, WIT Press, Inglaterra, 2004.Pabst Hans-Friedrich, Springer Jan P., Schollmeyer André,Lenhardt Robert, Lessig Christian y Fröhlich Bernd. “RayCasting of Trimmed NURBS Surfaces on the GPU”. En Proc.IEEE Symposium on Interactive Ray Tracing, pp. 151160,2006.[PAJ98] Pajarola R., Zürich E. “Large Scale Terrain VisualizationUsing the Restricted Quadtree Triangulation”. En Proc.Visualization '98 , pp. 1926, 1998.[PFI99] Pfister H., Hardenbergh J., Knittel J., Lauer H. y Seiler L.“The Volume Pro Real-Time Ray-Casting System”. En Proc.SIGGRAPH '99, Computer Graphics, ACMPress, pp.251260, 1999.[PLA02] Plate John, Tirsana Michael, Carmona Rhadamés yFroehlich Bernd. “Octreemizer: A Hierarchical Approach forInteractive Roaming Through Very Large Volumes”. En Proc.Joint Eurographics - IEEE TCVG Symposium onVisualization '02, pp. 5360, 2002.-143-


Apédice I: Modelo Óptico[POR94] Porter, T. y Duff, T. “Compositing Digital Images”. En Proc.ACM Computer Graphics (SIGGRAPH '84), pp. 253259,1984.[REZ00] Rezk-Salama C., Engel K., Bauer M., Greiner G. y Ertl T.“Interactive Volume Rendering on Standard PC GraphicsHardware Using Multi-Textures and Multi-StagesRasterization”. En Proc. Eurographics / SIGGRAPHWorkshop on Graphics Hardware, pp. 109119, 2000.[REZ01][ROE00][ROE02]Rezk-Salama Christof. “Volume Rendering Techniques forGeneral Purpose Graphics Hardware”. Dissertation, TesisDoctoral, Universidad Erlangen-Nürnberg, Alemania, 2001.Roettger S., Kraus M. y Erlt T. “Hardware AcceleratedVolume and Isosurface Rendering Based on Cell Projection”.En Proc. IEEE Visualization '00, pp. 109116, 2000.Roettger Stefan y Ertl Thomas. “A Two-Step Approach forInteractive Pre-Integrated Volume Rendering of UnstructuredGrids”. En Proc. VolVis '02, ACM Press, pp. 2328, 2002.[RUI06] Ruijters D. y Vilanova A. “Optimizing GPU VolumeRendering”. Journal of WSCG - Winter School of ComputerGraphics, Vol. 14, pp. 916, 2006.[SAB88][SCH01][SCH03][SRI97]Sabella Paolo. “A rendering algorithm for visualizing 3D scalarfields”. En. Proc. ACM SIGGRAPH '88, Computer Graphics,Vol. 22, pp. 51–58, Agosto 1988.Schulze R.P., Niemeier R. y Lang U. “The perspective shearwarpalgorithm in a virtual environment”. En Proc.Visualization 2001, pp. 207213, 2001.Schulze J. P., Kraus M., Lang U. y Ertl T. “Integrating Pre-Integration into the Shear-Warp Algorithm”. En Proc.Eurographics/IEEE TVCG Workshop on Volume Graphics,pp. 109118, Tokio-Japón, 2003.Srinivasan R., Fang S. y Huang S. “Volume Rendering bytemplate-based octree projection”. En Proc. 8vo. Eurographics-144-


Apédice I: Modelo ÓpticoWorkshop on Visualization in Scientific Computing, pp.155163, Boulogne-sur-Mer Francia, 1997.[STA06][STE05][STE81][SWE02][TAN97][TAO96][TON99][VAN81][VEN04]Tanenbaum Andrew y Woodhull Albert. “Operating SystemsDesign and Implementation”. Editorial Prentice Hall, 3ra.edición, ISBN-10: 0131429388, ISBN-13: 9780131429383,2006.Stegmaier Simon, Strengert Magnus, Klein Thomas y ErtlThomas. “A Simple and Flexible Volume Rendering frameworkfor Graphics–Hardware–Based Ray Casting”. VolumeGraphics, pp. 187241, 2005.Stevenson David. “IEEE Task P754: A Proposed Standard forBinary Floating-point Arithmetic”. IEEE Computer, Vol. 14 –No. 3, pp. 51–62, 1981.Sweeney J. y Mueller K. “Shear-warp Deluxe: The Shear-warpAlgorithm Revisited”. En Proc. Joint Eurographics - IEEETCVG Symposium on Visualization (VisSym02), pp. 95104,Barcelona-España, Mayo 2002.Tanenbaum Andrew S. “Operating Systems: Design andImplementation”. New Jersey: Prentice-Hall, 2da. Edición,1997.He Taosong y Kaufman Arie. “Fast Stereo Volume Rendering”.En Proc. IEEE Visualization Conference '96, SanFranciscoUSA, Octubre 1996.Tong X., Wang W., Tsang W. y Tang Z. “Efficiently renderinglarge volume data using texture mapping hardware”. DataVisualization '99, Eurographics, Springer, Vienna, pp.121132, 1999.Van de Hulst H.C. “Light Scattering by Small Particles”.Courier Dover, Publications, ISBN 0486642283, 1981.Venkatamaran Shalini. “Volume Rendering of Large Data forScalable Displays Using Photonic Switching”. Tesis deMaestría en Ciencias de la Computación, Universidad deIllinois, ChicagoUSA, 2004.-145-


Apédice I: Modelo Óptico[VHP94][WAN04][WAN07][WEI00][WEI04][WES97][WIL92][WIR99][WOO99]Visible Human Project. http://www.nlm.nih.gov/research/visible/visible_human.htmlWang Chaoli, Gao Jinzhu y Shen Han-Wei. “ParallelMultiresolution Volume Rendering of Large Data Sets withError-Guided Load Balancing”. Eurographics Symposium onParallel Graphics and Visualization, pp.2340, 2004.Wang Chaoli, Garcia Antonio y WeiShen Han. “InteractiveLevel-of-Detail Selection Using Image-Based Quality Metric forLarge Volume Visualization”. IEEE Transactions onVisualization and Computer Graphics. Vol.13 – No.1, pp.122134, 2007.Weiler M., Westermann R., Hansen C., Zimmerman K. y ErtlT. “Level-Of-Detail Volume Rendering via 3D Textures“. EnProc. IEEE Volume Visualization and Graphics Sympsium,UtahUSA, pp. 713, 2000.Weiskopf Daniel. “High-Quality Volume Clipping”. Siggraph'04, notas de curso "Real-Time Volume Graphics", curso #28,Los AngelesUSA, 2004.Westermann Rüdiger y Erlt Thomas. “A Multiscale Approachto Integrate Volume Segmentation and Rendering”. ComputerGraphics Forum, Vol. 16 – No. 3, pp. 117129, Septiembre1997.Williams Peter y Max Nelson. “A volume density opticalmodel”. En Proc. Workshop on Volume Visualization '92,Computer Graphics, pp. 61–68, Octubre 1992.Wirth N. “Algoritmos + Estructuras de Datos = Programas”.2da. edición, ISBN: 8421901729, 1999.Woo Mason, Neider Jackie, Davis Tom y Shreiner Dave.“OpenGL® Programming Guide: The Official Guide to LearningOpenGL, Version 1.2”. Addison-Wesley Professional, 3ra.edición, 1999.[XPR08] Extreme Programming. http://www.extremeprogramming.org.-146-


Apédice I: Modelo Óptico[YAN99][YOU06]Yang Y.T., Seah H.S. y Lin F. “Multi-Resolution VolumeRendering Based on Shear-Warp Factorization”. En Proc.International Workshop on Volume Graphics, VG, pp. 49–64,SwanseaUK, Marzo 1999.Younesi H., Möller T. y Carr H. “Improving the quality ofMultiresolution Volume Rendering”. En Proc. Eurographics /IEEE VGTC Symposium on Visualization, pp. 251258,Lisboa-Portugal, 2006.[ZHO02] Zhou Hualin, Chen Min y Webster Mike. “ComparativeEvaluation of Visualization and Experimental Results UsingImage Comparison Metrics”. En Proc. IEEE Visualization '02,pp. 315322, Boston-Massachussets-USA, 2002.-147-


Apédice I: Modelo ÓpticoApéndice I: Modelo ÓpticoA continuación se presenta una breve historia acerca de los estudiosrealizados para modelar la interacción luz-volumen, así como losconceptos necesarios para derivar la ecuación de visualización devolúmenes.Para visualizar el volumen se requiere de un modelo óptico pararepresentar la interacción de la luz con el volumen, y determinar lacantidad de luz alcanzada en cada píxel de la imagen. La modelación deesta interacción es relativamente compleja, y requiere el uso de la Teoríadel Transporte Radioactiva 1 [CHA60, KRU90]. Sin embargo, en elcontexto de visualización científica se puede realizar una simulaciónmenos compleja, al no considerar algunos fenómenos que ocurren en lainteracción.Para derivar el modelo óptico más utilizado en el área de visualización devolúmenes, es necesario primero comprender y relacionar algunosconceptos asociados con el fenómeno del transporte de luz: scattering,absorción, emisión, reflexión, refracción y extinción.Gran parte de la luz que llega a nuestros ojos es luz indirecta,proveniente del reflejo de la luz. Si observamos la hoja de un árbol,vemos que esta es verde. Esto significa que la hoja absorbe más la luzque viaja en el espectro de la frecuencia del azul y el rojo, y menos la deverde. La energía absorbida es transformada en otra energía (por ejemploen calor); el resto de la energía es esparcida (scattered), y parte de estaenergía llega hasta nuestros ojos. El scattering consiste es el desvío de laluz causado por partículas encontradas en su trayectoria. La colisión dela luz con estas partículas puede ser estudiada a distintos niveles, segúnel tamaño de las partículas.1 Transferencia Radiactiva: el término de transferencia radiactiva se refiere al fenómenofísico de la transferencia de energía en la forma de radiación electromagnética. Lapropagación de la radiación a través de un medio es afectado por los procesos deabsorción, emisión y scattering. La ecuación de transferencia radiactiva describe estasinteracciones matemáticamente. Las ecuaciones de transferencia radiactiva tieneaplicaciones en una amplia variedad situaciones; entre ellos, la detección de satélites enmovimiento, astronomía, óptica, etc. Usualmente la solución analítica de la ecuación detransferencia radiactiva no existe en un medio 3D no homogéneo, y debe ser resueltapor métodos numéricos.-148-


Apédice I: Modelo ÓpticoConsideremos partículas más grandes que la longitud de onda de la luz.Así, se puede pensar en gotas de agua, polvo, burbujas, células, etc. Enestos casos, el estudio del scattering de la luz puede ser comprendido através de los conceptos de óptica geométrica [HAN74], y puede utilizarseRay Tracing o trazado de rayos para obtener resultados numéricosaceptables. El scattering puede ser estudiado mediante los fenómenos dereflexión y refracción. Cuando la luz colisiona con una partícula, parte dela luz se refleja, otra se refracta, y otra se absorbe. La reflexión cambia ladirección de la luz, pero la devuelve al medio de donde provenía; larefracción también cambia la dirección de la luz, pero en este caso la luzviaja dentro de la partícula. El ángulo de refracción depende de lasdensidades de ambos medios, y puede calcularse por la Ley de Snell[FOL90]. El rayo refractado viaja dentro de la partícula, hasta volver acolisionar con la superficie de la partícula, en donde en rayo puede volveral medio original por refracción, o puede reflejarse, en cuyo caso sigue sutrayectoria de vuelta al interior de partícula (reflexión interna). Esteproceso continúa, y si pensamos en la partícula como una caja negracolisionada por una rayo de luz, notamos que la luz se esparce(scattering) al incidir en la partícula (ver rayos a,b,c,d en la Fig. I.1).Como se ha podido estudiar, una partícula puede absorber, y esparcirluz, pero adicionalmente, la luz puede ser emanada desde ella, como sifuese a su vez una fuente de luz. Tal es el caso de las partículasincandescentes.NadluzbcFigura I.1: scattering, considerando que las partículas son más grandes que lalongitud de onda de la luz. Los rayos resultantes de la interacción de la luz con lapartícula son producto de: (a) reflexión externa, (b) dos refracciones, (c) una reflexióninterna, (d) dos refracciones internas.Tanto el scattering como la absorción reducen la energía del rayo de luz,que atraviesa un medio o volumen colmado de partículas. Estaatenuación de la luz se denomina extinción [VAN74]. Como se estudiará-149-


Apédice I: Modelo Ópticoposteriormente, la extinción quedará sólo en función de la absorción, alignorar el fenómeno de scattering del modelo.Para modelar la interacción de la luz con el volumen, se puedenconsiderar partículas infinitesimalmente pequeñas (i.e. inferiores a lalongitud de onda de la luz), estudiando la interacción de la luz con lanube a nivel atómico o molecular. En este caso, el scattering puede versecomo el esparcimiento de la luz en todas las direcciones, cuando estacolisiona con la partícula. Uno de los primeros modelos ópticos en estaárea describe un método para sintetizar imágenes de los anillos delplaneta saturno, los cuales consisten de nubes de partículas de hieloreflectivo [BLI82]. Este modelo considera el scattering simple, shadowing 1y propagación de la luz a través de la nube. El scattering múltiple esposteriormente considerado por, Kajira y Von Herzen [KAJ84]. Estasinteracciones de la luz con volumen pueden resumirse en la Fig. I.2.Otros trabajos basados en estas investigaciones fueron publicados en ladécada de los 80’s [MAX86, DRE88, SAB88]. En particular, el trabajopresentado por Paolo Sabella [SAB88] describe un modelo de partículasllamado “the density emitter model”. Se basa en el trabajo de Blinn, peroasume que las partículas emiten su propia luz, en vez de reflejarlas de lafuente de luz vía scattering, y no considera el shadowing. El resultado deeste modelo simplificado ha sido ampliamente aceptado y refinado entrabajos siguientes, pues permite visualizar volúmenes en tiempo real.Cabe señalar que los efectos de shadowing y scattering nonecesariamente revelan información importante de un volumen en elárea de visualización científica.Posteriormente, Peter Williams y Nelson Max [WIL92] refinaron estostrabajos, y especificaron dos modelos con resultados idénticos. Elprimero de ellos es llamado Modelo de Partículas, en el cual el volumenes modelado como una nube de partículas que absorben y emiten luz, yestá basado en el trabajo de Sabella [SAB88]. El segundo modelo lopresentan los autores por primera vez, y se denomina el ModeloContinuo, en donde el volumen es concebido como un medio continuoincandescente. La derivación de este modelo se basa en una ecuacióndiferencial, el cual será mostrado posteriormente. Ambos modelos1 Shadowing: opacamiento o sombra. En el contexto de modelos ópticos, significa laatenuación de la luz por parte de una partícula previa a la partícula en estudio. En elcampo de la visualización científica, el shadowing por lo general es ignorado, alconsiderar al volumen como una nube de partículas dispersas infinitesimalmentepequeñas, en donde la probabilidad de que un mismo rayo de luz alcance a dospartículas en su trayectoria es prácticamente cero.-150-


Apédice I: Modelo Ópticoresultan en la misma fórmula matemática para obtener la intensidadfinal en un píxel de la imagen.Fuentede luzexternaVisorr 1r 1r 2 r 2r 2baFuentede luztraseraFigura I.2: interacciones de la luz con el volumen. En el modelo se asume que hayuna fuente de luz trasera que emite energía en dirección al visor. Un rayo de luz queviaja hacia el visor puede ser atenuado (por absorción y scattering) o inclusoobstruido totalmente por partículas encontradas en la travesía del rayo, según elmodelo óptico utilizado. Dentro de la nube pueden existir fuentes de luz, que suelenser las mismas partículas emanando energía en todas las direcciones, yparticularmente en la dirección al visor. También pueden existir una o más fuentesde luz externas. Mediante scattering, la luz puede llegar al visor de manera indirecta,mediante la interacción de una rayo de luz con una única partícula (scatteringsimple, ver rayos r 1), o con más de una partícula (scattering múltiple, ver rayos r 2),ya sea considerando la fuente de luz trasera o la externa. Adicionalmente, unapartícula a puede producir shadowing a otra partícula b, al interponerse en latrayectoria de la luz.Muchos trabajos subsiguientes se han basado en el modelo continuo, yen particular el trabajo de Nelson Max [MAX95], el cual consiste en unarevisión de diferentes modelos de interacción de la luz con el volumen.Los diferentes modelos son presentados por Nelson Max por orden derealismo: sólo absorción, sólo emisión, emisión y absorción; luego a esteúltimo se le incluye scattering simple de iluminación externa sinshadowing, scattering simple de iluminación externa con shadowing, yfinalmente scattering múltiple.Basados en estos trabajos, y principalmente los trabajos de Williams yNelson Max, a continuación se presenta la derivación de la ecuación devisualización volumétrica, considerando únicamente la emisión yabsorción.-151-


Apédice I: Modelo ÓpticoEl volumen o medio participante 1 suele ser pensado como un materialsemitransparente, compuesto de partículas infinitesimalmente pequeñasque absorben y emiten la luz que viaja en dirección al visor. Paradeterminar la cantidad de luz alcanzada se puede considerar un simplecilindro centrado en el rayo de visualización que pasa a través devolumen, pues las partículas externas al cilindro no influyen en elresultado final debido a la eliminación del scattering del modelo. Seasume que el cilindro es lo suficientemente delgado para que laspropiedades del volumen no cambien a lo ancho, pero sí pueden cambiara lo largo.IDI 0(a)(b)(c)Figura I.3: Interacción de la luz con el volumen, considerando sólo absorción yemisión. Los rayos etiquetados con: (a) representan partículas emitiendo luz, (b)rayos de luz que atraviesan el slab (rebanada), (c) rayo de luz absorbido por unapartícula. La intensidad inicial de la luz al entra al volumen es I 0, y la intensidadresultante al atravesar todo el volumen con una distancia D, es ID.sLa intensidad de luz I0 incide en la parte trasera del cilindro, en direcciónal visor. La luz ID que sale del otro extremo del cilindro y llega al ojo,determina la intensidad de un píxel (ver Fig. I.3). Consideremos unarebanada o slab del cilindro, al igual que el cilindro con base de área E(área del disco), y longitud s. Como se muestra a la derecha de la Fig.I.3, algunos rayos son absorbidos por partículas, otros logran pasar alotro lado del slab, y otros son emitidos por partículas dentro del slab. Lacantidad de partículas por slab viene dada por NEs, donde es ladensidad de partículas por unidad de volumen, y Es el volumen delslab. El valor de puede variar en el volumen, pues hay zonas con mayordensidad que otras.Supongamos que todas las partículas son esferas de radio r. Entonces,un corte seccional de la partícula, y equivalentemente el área proyectadade la partícula es A=*r 2 . Conforme s se acerca a cero, la superposición1 Medio participante: es un término de la óptica que significa un material cuyapropiedad afecta el transporte de la luz a través de su volumen. Un medio participanteinfluye sobre la travesía de la luz por su coeficiente de extinción.-152-


Apédice I: Modelo Ópticode las partículas tiende a cero. Bajo esta premisa, el área proyectada delslab oscurecida por las partículas es el número de partículasmultiplicada por el área de de una partícula (i.e. AN=AEs). Si dividimosesta área por el área proyectada total de toda la rebanada (área deldisco), obtenemos la fracción de luz obstruida cuando esta pasa a travésde la rebanada de longitud s, equivalente a AN/E=As. Así se puededefinir el coeficiente de atenuación por unidad de longitud como =A. Aeste coeficiente también se le conoce como la absorción, o coeficiente deextinción 1 .Sea L la emisión de luz de las partículas por unidad de área proyectada.Debido que el área proyectada de una partícula es A, la emisión de unapartícula es LA. Conociendo que hay N partículas en un slab, su emisiónes LAN = LAEs. Al dividir este resultado por E, obtenemos la luzemitida por unidad de área, la cual puede ser expresada en función de como Ls.Con estos parámetros podemos expresar el cambio de intensidad de unrayo de luz I() en el disco s como la cantidad de luz emitida en dichodisco menos la cantidad de luz entrante que es atenuada. Esto puedeexpresarse fácilmente mediante la siguiente ecuación diferencial:dI ( ) L()() I()(). [Ec. I.1]dEsta ecuación diferencial puede ser instanciada una vez por cada una delas tres componentes de la luz: rojo, verde y azul. Así la ecuación setransforma en tres ecuaciones diferenciales lineales de primer orden, quepueden ser resueltas numéricamente por métodos como Runge-Kutta decuarto orden [WIL92]. Alternativamente, para obtener la intensidad deluz I(D) resultante de la interacción del rayo con el volumen, podemosmanipular la ecuación, empezando por multiplicar por convenienciaambos lados de la igualdad por el factor exp( 0 ')'( d ) y obtenemos:( ) ( ')d'( ')d'( ')d'dIed 000 L()()e I()()e1 Coeficiente de extinción: es un término utilizado en óptica que significa la fracción deluz que se pierde debido a la absorción y dispersión por unidad de distancia en unmedio participante. En el caso de visualización de volúmenes, el medio participante esel volumen en sí, considerándolo como un material semitransparente.-153-


Apédice I: Modelo Óptico( ) ( ')d'( ')d'( ')d'dIed 000 I()()e L()()e. [Ec. I.2]d Sabiendo que (') d' (), podemos rescribir la ecuación como:d 0 I()ed L()()e( ) ( ')d'd ( ')d'( ')d'dIed 000I()e dd( ')d'0 L()()e( ')d'0. [Ec. I.3]Luego integramos respecto de en [0,D] para obtener D ( ')d' D( ')d'0 0I )e L()()e ( d00D( ')d'D0 I(0) L()()( ')d'0I( D)ee d. [Ec. I.4]0Finalmente, renombrando I(0)=I0 y despejando I(D) obtenemosD ( ')d'D0e L()()0D ( ')d'0I( D) Ie d. [Ec. I.5]La Ec. I.5 modela la interacción de la luz con el volumen, considerandosólo absorción y emisión. El primer término de la ecuación, calcula lacantidad de luz I0 entrante al volumen, atenuada exponencialmentesegún la absorción de las partículas en la travesía del rayo. El segundotérmino agrega la cantidad de luz emitida de cada punto a lo largo delrayo, considerando la extinción desde el punto de emisión (a unadistancia del origen del rayo) hasta el final de rayo. Debido a que losfactores de extinción no tienen antiderivada, esta ecuación es evaluadanuméricamente, en donde suele utilizarse la aproximación más simplebasada en Series de Riemann.El rayo de luz puede ser reparametrizado, desde el ojo (=0) hasta elpunto de entrada de la luz (=D). Así, la ecuación puede ser escrita como:-154-


Apédice I: Modelo ÓpticoI0 IDD ( ')d'D( ')d'0 0e L( )()e d. [Ec. I.6]0Muchos trabajos siguientes presentan esta versión de la ecuación devolume rendering [MOR04]; adicionalmente, otros eliminan el primerfactor [LAC95, KLA01, SCH03], cuya aproximación es válidaconsiderando despreciable la intensidad de luz entrante a la nube, o bienporque es muy atenuada por la nube. Esta simplificación será adoptadaigualmente en este trabajo.D ( ')d'e0)()dI L ( . [Ec. I.7]00El término de atenuación exponencial (extinción) es también llamada latransparencia: cantidad de luz que no es bloqueada por partículas entreel ojo y [BLI82]. Finalmente, la Ec. I.7 halla la contribución de luzemitida L() a cada distancia , atenuada por su absorción () yadicionalmente por la transparencia acumulada hasta , a lo largo delrayo que atraviesa la nube.La Ec. I.7 genera una imagen monocromática, en donde la intensidadL() representa sólo la luminosidad. Para extenderla a imágenes de colorreal, se puede expresar esta ecuación para las longitudes de onda delrojo, verde y azul, correspondientes al espacio de color RGB [MOR94].Considerando que en el modelo de emisión-absorción, una partículaabsorbe totalmente la luz que colisiona con la misma, la absorción ()será igual para todas las longitudes de onda. De esta forma, la ecuaciónpuede re-escribirse como:D( ')d'0C c ( )()e d , [Ec.I.8]0 ( ')d'0en donde c() y C son tuplas RGB. La extinción e se puedeinterpretar como la transparencia T() de la nube hasta la distancia .Basada en la transparencia, se puede calcular la opacidad acumuladaen la travesía del rayo a cualquier distancia , como:( ) 1 T() t(s(x(')))d') 1e . [E.I.9]0 (-155-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!