Academia.eduAcademia.edu

Postproceso de rectificación de metapolígonos

1999

Uno de los métodos de representación de objetos orgánicos en 3D son los llamados blobs. Un blob es una isosuperficie definida por una expresión de potencial de campo finito. Contando con dicha expresión hemos de obtener la representación del cuerpo de la forma más adecuada. Para la representación de cuerpos en 3D suelen usarse técnicas de poligonalización, que consisten en una obtención del modelo de fronteras de la forma. Existen numerosos algoritmos que resuelven dicho problema para el caso de los blobs, casi todos basados en el padre de todos ellos: Marching Cubes. Nuestro objetivo es el estudio de dicho algoritmo para la obtención de un postproceso que nos proporcione unos resultados más correctos, sin un excesivo incremento de su complejidad computacional. Finalmente generalizaremos el postproceso para que pueda aplicarse a una malla poligonal obtenida a partir de cualquier algoritmo de poligonalización de blobs.

Postproceso de rectificación de metapolígonos Juan A. Puchol García, Juan M. Sáez Martínez, Rafael Molina Carmona Grupo de Visión, Gráficos e Inteligencia Artificial (VGIA) Depto. Ciencia de la Computación e Inteligencia Artificial Escuela Politécnica Superior de Alicante. Universidad de Alicante e-mail: [email protected] Resumen Uno de los métodos de representación de objetos orgánicos en 3D son los llamados blobs. Un blob es una isosuperficie definida por una expresión de potencial de campo finito. Contando con dicha expresión hemos de obtener la representación del cuerpo de la forma más adecuada. Para la representación de cuerpos en 3D suelen usarse técnicas de poligonalización, que consisten en una obtención del modelo de fronteras de la forma. Existen numerosos algoritmos que resuelven dicho problema para el caso de los blobs, casi todos basados en el padre de todos ellos: Marching Cubes. Nuestro objetivo es el estudio de dicho algoritmo para la obtención de un postproceso que nos proporcione unos resultados más correctos, sin un excesivo incremento de su complejidad computacional. Finalmente generalizaremos el postproceso para que pueda aplicarse a una malla poligonal obtenida a partir de cualquier algoritmo de poligonalización de blobs. Palabras clave: Blob, Metaballs, Metapolígono, Triangulación, Vóxel, Marching Cubes, Raytracing. 1 Introducción J.F. Blinn creó un método algebraico general de modelado llamado “Modelo Blobby” en el cual podemos expresar un objeto 3D en términos de isosuperficie (superficie de densidad constante) en base a un conjunto de primitivas generadoras de campo [1]. La expresión general para calcular el potencial de campo de un blob en un punto (x,y,z) cualquiera del espacio es la que se observa en la ecuación 1. ⎞ ⎛ N V ( x, y , z ) = ⎜ ∑ bi e −ai fi ( x , y , z ) ⎟ − T ⎠ ⎝ i =1 (1) En la expresión del potencial de campo (1), ai es la caída de campo de la primitiva i, bi es la fuerza de campo de la primitiva i, T es el umbral del campo y N es el número de primitivas. Como podemos observar dicha ecuación es muy difícil de parametrizar puesto que no es lineal. Por tanto convertirla a una ecuación paramétrica que nos determinase un conjunto de puntos donde el valor del campo fuese nulo (condición de pertenencia a la superficie) sería muy complicado. Por tanto únicamente contamos con una expresión matemática que, dado un punto del espacio y un conjunto de primitivas nos dice si el punto queda dentro del campo (valor de V>0), fuera del campo (valor de V<0) o en su superficie (valor de V=0). Como puede observarse, el exponente de dicha fórmula es una función f(x,y,z). Dicha función viene definida por el modelo que estemos utilizando. Pueden ser: campos de supercuádricas [2], Metaballs [3] y Soft Objects [4]. Nuestro objetivo es la representación de la frontera del blob para su posterior utilización como herramienta 3D. Podríamos representarlo directamente con una técnica de trazado de rayos rastreando todo el volumen del paralelepípedo que encierra al blob (que puede calcularse con la posición geométrica de las primitivas que lo componen) y buscando los puntos que forman su frontera mediante la función de densidad. Dichos puntos se iluminarían calculando la normal en los mismos mediante la expresión del gradiente (pues es la normal del plano tangente a la superficie en el punto). Pese a ser una técnica sencilla y precisa presenta un alto coste computacional. Para solucionar este problema se suele poligonalizar la frontera del sólido obteniendo un metapolígono que encierre convenientemente el volumen del mismo. Un metapolígono se puede tratar de forma más rápida puesto que existen numerosas técnicas avanzadas de representación de los mismos que incluso se implementan de forma estándar en el propio hardware. Nuestro objetivo es desarrollar una técnica general para la obtención de un modelo de fronteras lo suficientemente preciso de un blob. Para poligonalizar un blob existen numerosos algoritmos, la mayoría basados en Marching Cubes, el cual fue diseñado por Lorensen y Cline [5]. Dicho algoritmo consiste en cortar el volumen del paralelepípedo que encierra al blob en un número de cubos de igual tamaño. Posteriormente se hacen intersectar los cubos con la superficie del blob. Dependiendo de la posición de los vértices exteriores / interiores y de los cortes, se poligonaliza de una u otra forma. Existen 14 posibilidades de corte de un cubo con la superficie eliminando rotaciones, traslaciones y simetrías. Marching Cubes y la mayoría de los algoritmos derivados del mismo tienen el problema común de que en todo momento se analizan cubos de igual tamaño sea cual sea la región que se esté estudiando. Esto produce que el algoritmo no obtenga un conjunto de triángulos que determine de manera óptima la forma. Existe una variante interesante del algoritmo basada en descomponer los cubos que cortan a la superficie en cinco tetraedros [8], que a su vez vuelven a cortar a la superficie, con lo que se obtiene un metapolígono más suavizado que con la técnica original. El problema de dicha técnica es que es equivalente a disminuir el tamaño de cubo, aumentando de forma global el conjunto de triángulos y por tanto generando concentraciones excesivas en zonas donde no es necesario. Lo que perseguimos es una técnica con una medida de precisión local que estudie cada región del blob con diferente nivel de detalle, determinando el modelo de fronteras más aproximado a dicha forma. Existen diferentes formas de medir la adaptación de una malla poligonal a un sólido basadas en distintos criterios, como por ejemplo el que plantean H.L. de Gougny y M. S. Shephard [10] basado en diferencias de volúmenes con el sólido original. Dichas técnicas de similitud sirven precisamente para medir la adaptabilidad de los distintos algoritmos que estamos mencionando. Existen otras propuestas de algoritmos no derivadas de Marching Cubes basadas en recorrer directamente la frontera del blob graduando la exploración de dicha frontera dependiendo de medidas de precisión locales [6]. Pese a que los resultados son excelentes en cuanto al estudio local de precisión, se producen otros problemas derivados que no han sido resueltos como el de la detección de huecos en el sólido o el de detección de formas separadas. Igualmente existen propuestas de algoritmos genéricos de generación de mallas para distintos tipos de superficies [9] basadas en triangulaciones como la de Delaunay. El problema de dichas técnicas es que no se basan en información específica de la propia superficie de estudio por lo que en la mayoría de ocasiones incurren en costes bastante altos. Otras técnicas específicas de generación adaptativa de mallas para blobs como la “Poligonalización de blobs con rectificación de precisión” [11] pese a obtener buenos resultados presenta el inconveniente de la excesiva complejidad que supone su implementación, lo que reduce su aplicación práctica y su generalización. El algoritmo que proponemos se plantea como un postproceso de ajuste, con lo que será aplicable a cualquier poligonalización de blobs de forma sencilla. En los siguientes apartados explicaremos el procedimiento seguido en Marching Cubes y plantearemos el postproceso de ajuste sobre dicho algoritmo. 2 Algoritmo de Marching Cubes Se trata de un algoritmo para la poligonalización de cualquier tipo de isosuperficies que consiste en lo siguiente: En primer lugar se determina el paralelepípedo que encierra al blob haciendo uso de la información de la posición y tamaño de las primitivas que lo componen. Seguidamente dividimos dicho paralelepípedo en cubos de tamaño constante. Dicho tamaño será definido por el usuario dependiendo de la precisión que desee para la figura resultante. A continuación se analiza cada cubo por separado. Inicialmente hemos de formar un cluster de 8 bits que nos defina la colocación de cada cubo con respecto al blob. Dicho cluster se formará con la información de la pertenencia de los distintos vértices del cubo al blob de forma que los vértices interiores caracterizados por tener un potencial >=0 los marcaremos con un 1 y los exteriores que están caracterizados por tener un potencial <0 serán marcados con un 0. Una vez tenemos la información sobre la colocación del cubo con respecto al blob procederemos a estudiar qué forma tendrá la porción de superficie asociada a dicho cubo. Para ello Lorensen y Clyne [5] estudiaron de cuántas maneras puede un cubo intersectar con una superficie. De las 256 posibles combinaciones (por la definición del cluster tenemos 28=256 combinaciones de los valores binarios), eliminaron los casos de colocación físicamente imposibles. Si además tenemos en cuenta simetrías y rotaciones entre los distintos casos el número disminuye a 14. Por último, para cada una de las 14 combinaciones citadas se estudió la mejor forma de poligonalizarlas. La forma de dichas poligonalizaciones así como los posibles casos de intersección de un cubo con la superficie se pueden observar en la figura 1. Figura 1: Casos de intersección de un cubo con un blob 2.1 Ventajas e inconvenientes del algoritmo El algoritmo presenta grandes ventajas como puede ser su sencillez de implementación con respecto a otros. Por otro lado resulta computacionalmente sencillo (bajo coste) y la malla resultante es igualmente sencilla. Los inconvenientes del algoritmo son muchos. El principal es que por propia naturaleza del mismo el rastreo del volumen se realiza al mismo nivel de detalle en todas las zonas, por lo que no se asegura la calidad final de la forma. Este problema es derivado de la escasa información que se toma de la superficie y la localidad de la misma. Por otro lado no se asegura un ángulo mínimo entre las normales de polígonos contiguos, con lo que la iluminación del metapolígono deja mucho que desear en la mayoría de los casos (efecto vóxel). Tampoco se asegura la coherencia entre el volumen real y el poligonalizado por lo que en algunos casos la conectividad del metapolígono no es la misma que la del sólido original. Finalmente no se especifica ninguna forma de determinar el tamaño de cubo óptimo para una determinada forma. Estos problemas surgieron en la versión inicial del algoritmo, la cual ha sido modificada por muchos autores que persiguen su mejora desde distintas perspectivas. Por ejemplo en la versión inicial se encontraban huecos en la malla poligonal en distintos casos. Dicho error ha sido solucionado por varios autores añadiendo varios casos más de posibles intersecciones del cubo con el blob. Por otro lado el problema de la coherencia de los volúmenes, ha sido solucionado por varios autores, como es el caso del algoritmo “Volume preserving MC”. Igualmente el problema del tamaño de cubo puede ser solucionado de forma sencilla calculándolo en base a la información geométrica de las primitivas, tomando dicho tamaño en función de la primitiva más pequeña que tenga la escena. De esta forma se asegura que ninguna primitiva se queda totalmente incluida por un cubo con lo que no obtendríamos intersección y perderíamos la porción de volumen. El problema de la precisión y el de asegurar las normales entre polígonos contiguos es un problema más complicado. Podríamos introducir cualquier técnica de suavizado de aristas para solucionarlo pero el problema de estas técnicas es que son muy generales y normalmente al no contar con información del sólido original tienden a hacer el metapolígono aún más distinto a la forma real. Perseguimos una técnica específica que se ajuste a las características de los objetos orgánicos. 3 Postproceso de rectificación de metapolígonos En este apartado realizaremos una descripción detallada del algoritmo que proponemos. Tenemos como objetivo particular la obtención de un postproceso de Marching Cubes lo suficientemente rápido como para no incrementar considerablemente el coste de éste y que resuelva algunos de los problemas del mismo. La idea es obtener una malla poligonal más precisa a partir de la malla poligonal que nos proporciona Marching Cubes. Dicho postproceso tendrá como objetivo asegurar la normal entre triángulos contiguos, aplicando criterios basados en información local. Por tanto, también resolveremos problemas relacionados con la pérdida de exactitud en zonas que requieran alto nivel de detalle. Nos centraremos por tanto en la rectificación de la malla poligonal de forma que en cada volumen parcial aumentaremos la concentración de polígonos en las zonas en las que necesitemos alto grado de detalle, respetando la malla original en aquellas zonas donde la calidad de la misma sea suficiente. Para introducir el algoritmo veremos inicialmente como puede ayudarnos la expresión del gradiente del blob. 3.1 El gradiente y su aplicación como medida de precisión Como veremos en apartados posteriores el vector gradiente de la fórmula de densidad nos proporcionará gran cantidad de información aprovechable. El gradiente de una fórmula de densidad en un punto se puede definir como el vector normal del plano tangente a la superficie en dicho punto. En todos los procesos de ocultación e iluminación se utiliza la normal de los polígonos. Dicha normal se puede obtener del polígono directamente si todos los polígonos de la figura vienen expresados en un mismo orden dextrógiro o levógiro. Teniendo la normal en cada vértice mediante el gradiente, podemos hacer la media aritmética de las normales en los vértices para obtener la normal del triángulo directamente. Dicho vector nos servirá igualmente como medida de precisión de un triángulo pues nos marca lo bien o mal colocado que está éste. La expresión del gradiente puede observarse en la siguiente figura. ⎛ δV ( x , y , z ) δV ( x , y , z ) δV ( x , y , z ) ⎞ (2) ⎟ , , V ′( x, y , z ) = ⎜ ⎜ ⎝ δx δy δz ⎟ ⎠ Para cada triángulo perteneciente a la malla poligonal que nos calcula Marching Cubes podemos obtener el vector gradiente en todos sus vértices (v1, v2, v3). Seguidamente obtenemos el ángulo que forman dos a dos los tres vectores gradiente. Con ello obtenemos tres ángulos α1(ángulo entre v1 y v2), α2 (ángulo entre v2 y v3) y α3 (ángulo entre v3 y v1). Definimos también un ángulo umbral U el cual simbolizará el valor máximo que pueden tomar dichos ángulos. Por tanto, la tripleta [α1, α2, α3], nos marcará una medida de precisión de cada triángulo. El umbral nos servirá para marcar el grado de detalle que queremos para todos los triángulos que forman la malla poligonal. Como medida adicional podemos igualmente marcar la longitud máxima L que puede tomar una arista perteneciente a un triángulo. De esta forma aseguramos que no habrá polígonos con aristas excesivamente alargadas. Esto nos servirá para que la malla resultante sea más homogénea y no se generen triángulos degenerados. Para ello tendremos igualmente un vector de longitudes [l1, l2, l3] obtenido mediante el cálculo de las distancias euclídeas entre los pares (v1, v2), (v2, v3) y (v3, v1) respectivamente. 3.2 División poligonal de la malla Una vez contamos con la medida de precisión de un triángulo podemos realizar un algoritmo que adapte la malla que nos calcula Marching Cubes hasta que todos los triángulos de dicha malla cumplan que el ángulo máximo entre cualesquiera dos vectores gradiente medidos en los vértices del mismo sea menor que U así como que las longitudes de las distintas aristas que lo componen no excedan L. El procedimiento será el siguiente: Función DivisionPoligonal(MallaTriangular M, Umbral U, Dmáxima L):MallaTriangular MallaTriangular::Mfinal; Var Triángulo::T; Angulo::α1, α2, α3; Distancia:: l1 l2 l3; Finvar Para cada triángulo T perteneciente M hacer Obtener los tres vectores gradiente de T en sus vértices Calcular los tres ángulos posibles [α1, α2, α3] entre los vectores gradiente. Calcular las longitudes de las aristas del triángulo [l1, l2, l3] Si α1>U o α2>U o α3>U o l1>L o l2>L o l3>L entonces Eliminar T de M Añadir particiones de T a M según [α1, α2, α3] y [l1, l2, l3] y adaptarlas a la superficie Sino Eliminar T de M Añadir T a Mfinal Fsi Fpara Devolver Mfinal Como puede observarse esta es una función recursiva puesto que sobre la misma malla insertamos las particiones de los triángulos, los cuales vuelven a ser procesados hasta que todos son aceptados por el criterio. Es conveniente determinar una altura suficiente del árbol de recursión, esto es, permitir un número de particiones máximo en un triángulo para no caer en un nivel de detalle excesivo. El problema ahora consiste en dividir de forma eficiente los triángulos cuando no superan el criterio. Las particiones se realizarán de forma que se respeten aquellas aristas que superen el criterio dejando el resto de aristas del triángulo sin modificaciones. De esta forma, los cambios en aristas compartidas por polígonos vecinos se harán de la misma forma en ambos. Por otro lado, los nuevos vértices generados se toman en los puntos medios de las aristas implicadas. Los tres casos de partición posibles se pueden observar en la figura 2. Pm T1 T Pm T T2 Pm T2 T3 T1 T2 T 3 T Pm T1 Pm T4 Pm (a) (b) (c) Figura 2: Casos de partición de triángulo, a) en dos, b) en tres y c) en cuatro triángulos. En la figura anterior puede observarse que las posibles subdivisiones de un triángulo se reducen a tres eliminando simetrías. En el primer caso el triángulo únicamente se divide en dos pues solo falla una de las aristas. En el segundo caso fallan dos aristas con lo que se generan tres triángulos. El tercer caso es el más desfavorable puesto que fallan todas las aristas y el triángulo ha de dividirse en cuatro partes. Obsérvese que la subdivisión siempre se realiza tomando los puntos medios de las aristas que fallan como nuevos vértices de los triángulos que se generan, combinados con los vértices que habían en el triángulo original. Utilizando estos criterios de partición y adaptando los nuevos vértices a la superficie como veremos a continuación, se consigue que los ángulos entre vectores normales de los nuevos triángulos decrezcan hasta cumplir el criterio. Una vez dividido el triángulo el problema es adaptarlo convenientemente a la superficie del blob. Los vértices originales del triángulo dividido pertenecen a la frontera del blob pero los nuevos vértices obtenidos no tienen por qué cumplir esa propiedad. Por ello tenemos que hacer coincidir los nuevos vértices con la frontera. En la figura 3 podemos observar un ejemplo de dicho ajuste. P1 r N PPm N P3 Pn P2 Figura 3: Ajuste del nuevo vértice producido por la división de un triángulo. En esta figura el triángulo original está formado por los vértices P1, P2 y P3 y los vectores gradiente en los puntos P1 y P2 forman un ángulo mayor al umbral (hay un valle bajo éstas) mientras que los ángulos entre los vectores gradiente de P1 y P3 así como P2 y P3 son correctos. Dividimos el triángulo en dos (primer caso): [P1, Pm, P3] y [P3, P2, Pm] siendo Pm el punto medio entre P1 y P2. Para ajustar el nuevo vértice (Pm) calculamos la normal en él (N) como la media de los vectores gradiente de P1 y P2. Como el valor del campo en Pm es negativo (exterior) nos movemos en dirección opuesta a la normal en la línea definida por el punto Pm y dicha normal hasta encontrar la nueva posición de Pm sobre la superficie del blob. La razón por la que se toma la media de los vectores normales de la arista en vez de el propio gradiente de V en el punto medio de ésta es que es posible que intentemos calcular el gradiente dentro de una región de campo constante (puesto que el punto medio no tiene por qué estar contenido en la superficie) por lo que el gradiente se anularía y no sabríamos hacia dónde buscar el nuevo punto. Tomando la media de las normales en los vértices de la arista nos aseguramos de encontrar una dirección de búsqueda puesto que los tres vértices del triángulo original sí pertenecían a la superficie del blob y por tanto su gradiente no podía ser nulo. Una vez encontrado el punto en la superficie sí podemos asignar como normal del mismo el propio gradiente del campo en dicho punto. 4 Costes y ejemplos En el siguiente apartado realizaremos una comparativa entre el algoritmo Marching Cubes y la rectificación propuesta sobre dicho algoritmo con respecto al coste. Inicialmente calcularemos el coste de forma teórica para después contrastarlo con las pruebas prácticas que se han realizado. Concluiremos con ejemplos sobre distintas escenas obtenidas con ambos algoritmos. 4.1 Coste teórico del método Inicialmente calcularemos el coste de Marching Cubes: Siendo V el volumen del paralelepípedo inicial que encierra al conjunto de primitivas y T el volumen constante de los cubos en los que se divide el mismo, se producen V/T iteraciones del algoritmo. Puesto que cada iteración se produce en un tiempo constante (calcular los cortes del cubo con el blob y producir la triangulación de los mismos) y T es constante, el procedimiento M.C. es lineal con respecto al volumen. En cuanto al postproceso, se aplica a cada uno de los triángulos que genera Marching Cubes. Para cada cubo, el número de triángulos que pueden generarse mediante el algoritmo M.C. está entre 0 y 4 (figura 1). Por tanto, en el mejor de los casos en que ningún cubo genere triángulo alguno el postproceso no se aplicará y el coste seguirá siendo lineal con respecto al volumen. En el peor de los casos se producirán 4 triángulos por cubo, lo que suponen 4*V/T triángulos a los que se les aplicará el postproceso. El postproceso realiza un número de iteraciones adicionales por triángulo que dependen de la propia colocación del mismo. Puesto que a partir de cierta altura en el árbol de división de los triángulos la segmentación resulta excesiva, introducimos una altura máxima del mismo a la que llamaremos H. Por tanto, en el peor de los casos se producirán 4H iteraciones para cada triángulo puesto que como máximo se producen 4 particiones por triángulo (figura 2) y en el mejor de los casos ninguna. En el caso en el que no se produzca ninguna división para ningún triángulo, el número de iteraciones del algoritmo con la rectificación será igual que en el algoritmo M.C. En el caso de que se produzcan todas las particiones posibles de todos los triángulos, el número de iteraciones será 4*(V/T)*4H. Dado que H y T son constantes, el coste sigue siendo lineal con respecto al volúmen. Finalmente podemos afirmar que si tanto para el mejor como para el peor de los casos el coste permanece siendo lineal, el algoritmo con el postproceso es lineal con respecto al volumen del paralelepípedo que encierra al blob. 4.2 Coste empírico del método En la figura 4 se ha representado el tiempo de cálculo de ambos algoritmos para el mismo conjunto de muestras frente al volumen del paralelepípedo que encierra al blob. Sobre la misma gráfica hemos representado la recta de regresión lineal de cada serie para observar como afecta el postproceso en el tiempo de procesamiento de forma general. Cada muestra se ha formado con un número de primitivas aleatorio entre 1 y 10. La posición de cada primitiva ha sido tomada también de forma aleatoria dentro de un volumen de tamaño 5x5x5. Para el tamaño de cada primitiva se ha tomado igualmente un valor aleatorio entre 0 y 4. Dichas medidas están referidas a un espacio tridimensional estándar de Open-GL. El umbral de ángulo tomado para la rectificación ha sido 25º. En todos los casos se han tomado primitivas esféricas. Tiempo de proceso (en tics de reloj de procesador) 25000 20000 15000 10000 5000 0 0 200 400 600 800 1000 1200 1400 1600 1800 Volumen del paralelepípedo Marching Cubes Marching Cubes rectificado Figura 4: Representación del coste empírico de ambos algoritmos con sus rectas de regresión lineales. Como vemos en la figura 4, las rectas de regresión de ambos algoritmos resultan similares, a excepción del incremento de pendiente del algoritmo rectificado con respecto al original. La magnitud del incremento de pendiente es inversamente proporcional al umbral que marquemos como ángulo máximo entre normales en la rectificación de la malla. 4.3 Ejemplos En las figura 6 incluimos dos ejemplos representativos de ambos algoritmos. Nótese que se respeta la forma de la malla poligonal obtenida con Marching Cubes excepto en zonas donde tenemos que aumentar el número de polígonos para incrementar la calidad de la figura. Igualmente puede observarse como se elimina el efecto vóxel al aplicar el postproceso, y como consecuencia se obtiene una forma mucho más definida. Esto es debido a que el postproceso aumenta la densidad de polígonos en las zonas donde los cambios de gradiente se acentúan subdividiendo los polígonos que se encuentran en las mismas. (a) (b) Figura 6: Ejemplos de funcionamiento de ambos algoritmos. 5. Generalización del método y conclusiones El método propuesto es totalmente aplicable a cualquier algoritmo de poligonalización de blobs, puesto que se trata de un postproceso totalmente independiente del algoritmo original. Lo único que necesita el algoritmo es la malla poligonal resultante y la información de la superficie original. Por esta razón el algoritmo no sería aplicable directamente a un objeto poligonal cualquiera sin la información de la superficie que lo generó, pues sería necesaria la información del campo y del gradiente del mismo. Igualmente, el algoritmo se puede generalizar como postproceso de algoritmos de poligonalización de otros objetos orgánicos además de los blobs, que sigan la misma filosofía de construcción, esto es: que estén basados en superficies de campo finito y que dichas superficies sean derivables. La razón por la que se han elegido los blobs para el desarrollo de la técnica es porque son altamente representativos de los objetos orgánicos. Por otro lado, la razón por la cual se ha elegido Marching Cubes es que se trata de uno de los algoritmos de menor coste computacional de generación de mallas para isosuperficies. Esto nos ha permitido establecer comparativas sencillas entre el algoritmo simple y el algoritmo rectificado, sin entrar en otros problemas de coste que plantean otros algoritmos similares y que entorpecerían la labor de la estimación del coste del postproceso. Referencias bibliográficas 1. Blinn, J.F.: “A Generalization of Algebraic Surface Drawing”, ACM Trans. On Graphics Vol 1, No. 3, pp.235-256, 1982. 2. Barr, A.H.; “Supercuadrics and Angle-Preserving Transformations”, IEEE Computer Graphics and Applications. Vol. 1, No 1, pp. 11-23, 1981. 3. Nishimura, H., Hirai, M., Kawai, T., Kawata, T., Shirakawa, I. and Omura, K.;”Object Modeling by distribution Function and a Method of Image Generation”, Trans.IEICE Japan, Vol J68-D, No. 4, pp. 718-725. 4. Wyvill, G., McPheeters, C. and Wyvill, B.; “Data structure for Soft Objects”, The Visual Computer., Vol. 2, pp. 227-234, 1986. 5. Lorensen, W.E. and Cline, H.E. “Marching Cubes: A High Resolution 3D Surface Construction Algorithm”, ACM Computer Graphics, Vol 21, No. 24, pp. 163-169, Julio 1987. 6. Puchol García, J.A.; Molina Carmona, R.; García Quintana, C. "Conversión Paramétrica de Blobs a Modelo de Fronteras en Tiempo Real”. IX Congreso Internacional de Ingeniería Gráfica. Bilbao - San Sebastián, Junio 1997. 7. Requicha, A.A.G, and Rossignac, J.R.; “Solid Modeling and Beyond”, IEEE Computer Graphics and Applications, pp 31-44 1992. 8. B.A. Payne and A.W. Toga, “Surface mapping brain function on 3D models”, IEEE Computer Graphics and Applications, pp 33-41 1990. 9. H.Borouchaki, F. Hecht, E. Saltel and P.L. George “Reasonably efficent Delaunay based mesh generator in 3 dimensions” INRIA Report 1995. 10. H.L. de Cougny and M.S. Shephard “Surface meshing using vertex insertion”. Scientific Computation Research Center 1996. 11. Sáez Martínez J.M.; Puchol García J.A.; Molina Carmona, R. “Poligonalización de Blobs con Rectificación de Precisión” Departamento de Ciencias de la Computación e Inteligencia Artificial. Universidad de Alicante. Report DCCIA-98-04. Octubre de 1998.