Geometría e información

Buenas,

Hoy voy a hablar un poco de unas cosas rematadamente interesantes sobre geometría y esas cosas. Como sabéis, soy un vicioso de las matemáticas, el diseño y, además, aunque no lo he mencionado mucho por aquí (porque no es la finalidad de este blog), una de mis pasiones es la escultura, normalmente en forma de miniaturas de fantasía (incluso he trabajado de eso en alguna ocasión).

Como en general soy un frikazo también me interesa el mundo de los videojuegos y en general de la fantasía, por lo que esta entrada es una fusión de todo lo anterior. Todo esto viene a que últimamente he estado aprendiendo un poco sobre Blender con el objetivo de esculpir alguna figura en él. Como también me encanta el diseño asistido por ordenador (recomiendo FreeCad), voy a hablar de las dos cosas y de su funcionamiento en ambos casos, comparando un poco ambos programas a nivel conceptual, sin concretar, porque pueden aportaros recursos a la hora de programar o enfocar problemas geométricos.

Bueno, al lío.

Existen unas diferencias clave entre programas como Blender y FreeCAD, que lo mismo pueden ser ZBrush y SolidEdge. La primera de ellas es la aplicación, de la cual podremos entender el resto. Tanto FreeCAD como SolidEdge son programas que manejan figuras en 3D con el objetivo de hacer diseños industriales, donde los objetos diseñados pueden resolverse con formas geométricas elementales combinadas que además deben ser definidas con gran precisión. Sin embargo, los programas de modelado 3D como Zbrush y Blender (o una de las partes del mismo), tienen como objetivo modelar formas que no tienen por qué estar basadas en ningún tipo de geometría y cuya necesidad de precisión es más laxa, como una cara humana por ejemplo, o los personajes de un videojuego.

Visto así, tenemos dos tipos de programas: los de modelado y los de CAD (computer aided design).

Esto es interesante porque por dentro funcionan de una forma completamente diferente. Todo lo que he dicho hasta ahora es una excusa para explicar la diferencia en el tratamiento de ambos casos, entender la diferencia de las filosofías puede hacer que enfoquemos nuestros desarrollos de forma distinta y nos ayudará a tener recursos.

Vamos a por ello entonces. ¿Por qué se diferencian tanto, si lo que hacen es similar?

Por mucho que ambos programas tengan diferencias en el objetivo sí que es cierto que a rasgos generales su aplicación es similar: Hacer objetos en 3 dimensiones. Sin embargo, unos de ellos se basan en mallas para hacer los modelos y otros se basan en modelos paramétricos.

Para profundizar un poco en el tema tenemos que imaginar unas cosas un poco.

Vamos a ver:

Si queremos dibujar una circunferencia tenemos varias formas. La primera es poner puntos y unirlos a mano y la otra es usar un compás. Por supuesto, la forma del compás será la mejor por el momento, pero dependiendo de la resolución que queramos la otra puede ser igual de válida si el número de puntos que dibujamos es suficiente.

Desde nuestro punto de vista informático, si quiero guardar una circunferencia en la memoria puedo hacerlo de dos maneras, la primera puede ser guardar un conjunto de puntos en la memoria y considerar que están unidos por líneas (que pueden ser rectas o splines o lo que se nos ocurra). Otra forma es guardar un punto, el centro, y un valor, que podría representar el radio, que es lo que hace un compás.

La segunda forma es un concepto matemático, es una definición universal y perfecta pero tiene problemas a la hora de ser representada, puesto que necesita de un tratamiento. Es como cuando dibujamos, necesitamos un compás para hacer el trabajo de convertir las circunferencias definidas como un centro y un radio a un conjunto de puntos infinito en el papel (que sería la línea que define el círculo). En un programa esto puede ser una conversión a píxeles de la pantalla en el momento de la visualización, por ejemplo. Este tratamiento tiene cosas buenas, tendríamos una circunferencia que siempre se vería redondeado y perfecto al hacer zoom puesto que se recalcularía la visualización todas las veces.

También da problemas a la hora de ser deformada porque, si quisiéramos solamente un arco tendríamos que añadir más valores correspondientes al ángulo inicial y el final, o si quisiéramos aplastarla por un lado ya no podríamos definirla matemáticamente con tanta facilidad o sería incluso imposible.

La forma de los puntos es interesante en este segundo aspecto. Podemos deformarla con sencillez, simplemente cambiando la posición de los puntos uno a uno. Si tenemos muchos puede ser una labor pesada, pero será una labor posible. El problema es que no tendremos la misma precisión, pero ¿realmente la necesitamos?

En el caso de los puntos, la visualización o el tratamiento es mucho más simple y directo pero el peso en la memoria (en modelos simples) es mucho mayor. Recordemos que la circunferencia sólo es un punto y un valor en matemáticas mientras que cuando la definimos por puntos necesitaremos unos cuantos, con 5 puntos sólo tendríamos un pentágono y ya es mucha más memoria que en el caso paramétrico.

Antes menciono la visualización de la circunferencia, en el modelo por puntos tendríamos un problema: Un pentágono visto desde lejos es casi una circunferencia, pero ¿de cerca?

Esta dualidad se encuentra en la diferencia entre un gráfico vectorial y un mapa de bits (bitmap). El gráfico vectorial es una definición matemática de un dibujo, por mucho que lo amplíes siempre lo verás perfecto. El bitmap es una cuadrícula con colores en sus cuadros, si lo amplias mucho agrandarás los cuadros de la cuadrícula (se pixela).

Volviendo a lo que decíamos, los programas de modelado unen sus puntos con lo que se denomina “malla” (“mesh” in inglis). Varios puntos conectados entre ellos forman polígonos (“polygons”) y polígonos unidos forman la malla completa, que sólo es una superficie (que puede ser cerrada o abierta) y tiene esta pinta (es una malla creada por mí, no es muy correcta):

retopo3En este tipo de programas podemos intervenir en la malla punto a punto editándolos de forma concreta o con algunas herramientas que afectan a todos los puntos de una zona concreta. En los programas de CAD tenemos que editar los parámetros de cada uno de los elementos, radios, alturas, anchuras, grosores, hacer operaciones booleanas como uniones, diferencias, etc.

Una malla como esta puede aumentar su resolución bastante hasta llegar a niveles de detalle increíbles. Por supuesto, esto tiene una carga bestial en la memoria, pero es el precio del detalle. Hacer esto a nivel paramétrico es imposible [1], sin embargo, no tengo control total sobre cada uno de los puntos como tendría en un programa de diseño paramétrico.

Viendo lo que he comentado, no creo que os sorprenda que os diga que los programas de CAD requieren un buen procesador y menos memoria, ya que tienen que hacer cálculos complicados y, en cambio, los de modelado requieran mucha memoria para cargar los datos y cierta cantidad de procesador para poder evaluarlos todos.

Como otras muchas cosas es hacer balance. ¿Qué te interesa? ¿Qué no te importa perder? ¿Qué tienes delante?

Espero que os haya parecido interesante.

Igual un día me motivo y os hablo de cómo se hacen personajes para videojuegos. O no.

Un abrazo.


[1] Los matemáticos lo pueden todo, pero seguro que es complicadete.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s