En mi día a día trabajo con información tridimensional y hago tratamiento de la misma mediante una herramienta que se ha convertido para mí en un imprescindible. Se trata de Meshlab.
Meshlab es una herramienta Open Source muy potente que permite el manejo y procesamiento de información 3D. Lo que hace realmente potente a Meshlab, son la cantidad de filtros para procesar esa información, y que más de uno ha pensado en usar como herramienta para hacer cierto procesamiento de un Dataset de información.
Cuando se descargan los binarios de Meshlab, se incluyen dos ejecutables: meshlab y meshlabserver. El primero es obvio para qué sirve, porque se trata del ejecutable que lanza Meshlab para ser utilizado por medio de la interfaz gráfica. El segundo es una ejecutable que nos permite procesar un Dataset completo, usando los filtros de Meshlab, mediante la configuración de un script MLX y prescindiendo de la interfaz gráfica.
Generar el script es tan sencillo como abrir Meshlab y aplicar todos los filtros que deseemos en el Dataset. Veamos un ejemplo.
Tenemos la malla de un modelo 3D de Yoshi como Dataset, pero dicho modelo tiene un agujero en la parte inferior.
Meshlab dispone entre sus filtros de uno que se llama "Close Holes", que nos vendrá de perlas para este caso. Vamos a la sección "Filters" y los buscamos.
Parametrizamos el filtro como mejor consideremos y le damos a aplicar. Como podemos ver el agujero de la parte inferior queda cerrado.
Para generar el script del filtro que acabamos de aplicar y que vemos que da buenos resultados, volvemos a ir a "Filters", y seleccionamos "Show current filter script". Se nos abrirá una ventana como la siguiente:
Aquí están todas las acciones que van a constituir nuestro script, en nuestro caso sólo vamos a usar "Close Holes". En esta ventana podemos editar el orden de los filtros que vamos a aplicar, los parámetros de cada script, borrar un filtro del script... Cuando todo está en orden guardamos el script, el cual será guardado en formato MLX.
Para aplicar las acciones en lote sólo tenemos que usar el ejecutable meshlabserver indicándole los parámetros necesarios para su funcionamiento (input, output y script de filtros XML). Para ver la parametrización de meshlabserver podemos acudir a su comando de ayuda de la siguiente forma:
meshlabserver -help
Usage: meshlabserver arg1 arg2 ... where args can be: -i [filename...] mesh(s) that has to be loaded -o [filename...] mesh(s) where to write the result(s) -s filename script to be applied -d filename dump on a text file a list of all the filtering fucntion -l filename the log of the filters is ouput on a file -om options data to save in the output files: vc -> vertex colors, vf -> vertex flags, vq -> vertex quality, vn-> vertex normals, vt -> vertex texture coords, fc -> face colors, ff -> face flags, fq -> face quality, fn-> face normals, wc -> wedge colors, wn-> wedge normals, wt -> wedge texture coords Example: 'meshlabserver -i input.obj -o output.ply -s meshclean.mlx -om vc fq wn' Notes: There can be multiple meshes loaded and the order they are listed matters because filters that use meshes as parameters choose the mesh based on the order. The number of output meshes must be either one or equal to the number of input meshes. If the number of output meshes is one then only the first mesh in the input list is saved. The format of the output mesh is guessed by the used extension. Script is optional and must be in the format saved by MeshLab.
De esta forma podemos aplicar una sucesión de operaciones de Meshlab en el Dataset que queramos con muy poco esfuerzo.