Projects

From Meshlab

Jump to: navigation, search

This page reports the project ideas that can be implemented by willing developers. Many of the projects will be assigned to the students of the University of Pisa course FGT that will carry out them in the next months as part of their course job. If anyone has some suggestion of desired features can add them here.

I strongly suggest to all the willing developers to look at the Writing Code page, read the various practical advices and, eventually, follow them. Practical hints on how to compile MeshLab can be found here. The vast majority of the projects here presented should be implemented as standard meshlab plugins, and therefore they could be developed in a rather independent way.

The number of asterisks beside to each project is an approximate indication of the complexity of the project. A single star means a rather easy project, four stars hard/very complex.

All questions and discussions about the development to various projects should be sent (in English) to the meshlab-devel mailing list (yes it holds for the FGT students too).

Contents

Open Projects

Structured information reporting (***)

There is a large number of scalar,integer,boolean synthetic information that can be computed for a mesh, like for example its volume, barycenter, if it is orientable, number of connected components, etc. We already wrote a tools for computing some of these information (TriMeshInfo) and MeshLab lacks a coherent framework for computing and displaying this kind of information. A good extension should be to add a new kind of plugins for this kind of stuff and to begin to write meshlab plugins computing synthetic info about meshes.


Input/Output

While MeshLab support a wide set of 3D formats, there always be some missing formats...

Support of .m format (*)

the mathematica geometry file, useful for displaying very very small meshes with the LiveGraphics3D applet (an easy way to show 3d into web pages)

Support of .dxf format (*)

only input (eventually limiting to the management of polygonal meshes)

Support of .3DXML format (***)

input and output. Nice just because there exist a free 3D snapshot tool for windows that saves in this format and there are Office plugins for showing this kind of (verbose) format.

Support of .ASE format (**)

A rather verbose ascii format, supported for exchange of 3D data. Originated by 3DSmax as a 'readable' format.

Support of .SHP format (**)

ShapeFile, the standard format for gis. Used to describe boundary of buildings, profiles needs to be extruded. Quite useful format to create cities from cadastrial maps.

Flexible Support of RAW format (***)

For reverse engineering of unknown but trivial file formats. This one needs some more comments. It would be very useful to have a flexible way to parse any unknown format, allowing the user to set, in a easy and interactive way, how the mesh elements are placed in the file and in what format;

Offline renderer (*)

Invoke an offline open source renderer (yafray, povray or what you like more) for creating high quality images.

Animated GIF snapshot (***)

This one should not be very difficult if the overall framework would allow timed camera movements and actions, needed for multiple rendering. It can be implemented with various level of complexity, starting from the creation of simple rotating object saved as small gif anims to a complex tools that allow to set a simple camera keypoints and produce a small looping animation of the display object.

Filters

The following ideas should be implemented as unattended filters, with an auto-generated interface, whose functionalities are exposed also in the command line version of MeshLab.

Color Processing filters (**)

Many scanned meshes stores color into vertexes (just becouse computing nice parametrization of huge, topologically messed objects is quite difficult). There are non available tools for processing this color information. The filters should provide the basic color transformations to all the per-vertex stored colors (contrast, gamma, luminance saturation, histogram equalization etc.)

Simple Unwrapping (**)

For Texture coord generation cylindrical and box shaped
Typical application is the unwrapping of painting over ancient vases where enforcing a cylindrical projection is usually a good solution

Texture Transfer (**)

To transfer color information between different layers. Useful for resampling tasks.

  • texture to texture: between two different parameterizations of the same object.
  • texture to color: to cook textures into vertices. Eventually supporting remeshing actions that try to refine the mesh according to the details in the texture.
  • color to texture: also covered in a more general way in the Detail transfer, see below.


Detail Transfer (***)

The filter assumes that there are two aligned meshes on two layers represneting the same object at high and low resolution. The low resolution mesh has a good parametrization. The filter compute a detail texture (normal map/ displacement map/ color map)


Mesh fitting (***)

Similar to the above one but instead of working on textures, it fits the vertices of one of the two meshes onto the other. Useful piece for a flexible remeshing framework.

Interactive Editing Tools

The following tools should be implemented as 'edit plugins' e.g. plugins with require and manage user interaction over the mesh. Their functionalites may not be exposed in the command line version of meshlab.

Photo Texturing (****)

Allocated to Sebastian Herholz
A tool to align and project one photo onto a mesh. This would include the an (eventually) automated calibration of implicit camera parameters and the recovering of explicit ones by means of user chosen photo-geometry correspondences (using for example the Tsai's Camera Model. Some functionalities of the tool:

  • EXIF data recovering through the use of the jead source code http://www.sentex.net/~mwandel/jhead/
  • TSAI Calibration
  • The tool should allow to load a jpg, read the exif data, show the image in the edit plugin window in a opengl context. The photo shoud be draggablea nd zoomable (same interface of the drag/zoom of the mesh, using the same trackball helper)
  • the tool should allow to add/edit/remove (twelve?) labeled correspondences between the photo and the image
  • the tool should allow to start a calibration process (try do not integrate it too tightly so that we could add different calibration codes later)
  • Allow intrinsic calibration (just in case of missing exif)
  • Show the calibration result/error in a friendly way
    • back projection of the mesh in the image window
    • per-correspondence error indication (just find wrongly placed correspondences)
    • camera position in mesh space
  • texture coords generation on the mesh.
  • optional saving of extrinsic data in some usable (?) format.

Re-Topology tool (****)

A tool to allow to draw a very simple new base topology over an existing mesh. The user select vertices over the mesh and connect them building a very very simple base mesh. The edges of the new mesh are computed by using smoothed geodesic paths over the existing mesh (stuff that we already have in our lib).

Framework Stuff

The projects here require substantial changes to the meshlab framework, and therefore are more complicated and with the possibility of affecting also other existing stuff...

MeshLab Command Line (meshlabserver)

Currently it does not work, but many users have requested it as a very important feature.

It should be able to load a mesh in a format, export it in a different format and, in the between, it should be able to apply any of the possible filters, allowing to the user to specify the parameters. It should also have an automatic mechanism for displaying the list of possible filters, with parameters and explanation of the filter parameters.

Approximate Faster Rendering (****)

When multiple meshes are loaded, using layers, only a small subset of them have to be completely in memory for being processed. Some approximated rendering techniques for having a low resolution simple model should be attempted. Techniques should be fast and require no preprocessing. Requires serious changes to the rendering cycle and to the management of the mesh document itself. Not an harmless modification. Only for the bravest.

RenderMonkey Shaders Support (***)

Meshlab just supports shaders developed with Typhoon Lab. We want to extend the visualization richness of Meshlab by adding the support for the shaders developed with RenderMonkey. RenderMonkey shaders are stored in XML proprietary format. Requires minor changes to the rendering cycle. This is not a very difficult task but a long one; a lot of test cases and supporting code (e.g. handling of DDS texture) has to be envisaged.

New Selection sets (****)

Currently meshlab select only faces, but also vertex and edge (boundaryies) selection could be a nice option for some filters.

Partial Layers (****)

The objective should be to allow the sharing of common data between layers. E.g. imagine to have the same mesh onto two layers but with different colors, or quality, or etc. Or to have the same topology with different vertex coords. Many possibilities here, but difficult to be implemented.

UNDO (***)

Oh well the most requested feature. A good implementation would require that each filter declare exactly what it is changing and what has to be saved.


Already under development projects

Texture Compacting (**)

A filter that take a mesh with multiple textures (e.g. where the faces can refers different textures) and compact it into a single texture mesh by building a bigger texture atlas containing all the submeshes and updating tex coords accordingly. There could be some problems with texture wrapping modes, but they could be detected by looking at the tex coords of the mesh. Eventually these issues could be solved by expanding some textures at the expenses of wasted texture space, or solved by splitting the involved triangles.


Generative mesh instancing filter

Allocated to Raglianti Marco (due by 06/2008)
This set of filter tools create a mesh out of nothing.

Dirty maker filter

Allocated to Luca Bartoletti (due by 02/2008)
The filter should try to simulate the dust accumulation, aging and weathering of a 3D model. This process can be simulated with a varying degree of accuracy. A short list of papers describing the problem can be find here or here or in the following papers

  • Hsu et al., "Simulating dust accumulation", IEEE CG&A 1995
  • J. Dorsey et al., "Flow and changes in appearance", SIGGRAPH 1996
  • J. Dorsey et al., "Modeling and rendering of weathered stone", SIGGRAPH 1999
  • S Merillou et al., "Corrosion: simulating and rendering", Graphics Interface 2001

Geometric Aging

Allocated to Marco Fais (due by 04/2008)
The filter should try to make small geometric modifications to the mesh in order to simulate aging due to small collisions or various chipping events. An inspiration can be found here, but it should be kept just as an basic idea.

Geometric Processing filters

Allocated to Davide Spano (due by 06/2008)
This is a small set of purely geometric filters.

  • edge smoothing. Smooth borders vertices in order to create smoother hole loops.
  • border simplification. Collapse edges along the borders only. Again for creating 'simpler hole loops that are easier to be filled.
  • crease cutting; cut a mesh along crease edges (edges where two faces meets with an angle greater than a specified threshold) duplicating vertices. This allow a more correct smoothing when using per vertex normals.

Function Filter

Allocated to G. Alemanno (due by 07/2008)
A filter for computing generic functions over the mesh surface. The filter should allow to the user to define a function that can access to the mesh elements (coords, normal, quality, attribute) the result of the function can be stored either in a new attribute or in one of the mesh elements. The filter should rely on the muParser, a fast math parser library, for the management of user defined expression.
Example

  • select function: the user can specify a boolean function that says if a given vertex is selected or not. Example select all the vertex whose distance from a given point is exactly XXX.
  • color: color the mesh according to three functions (one for each R,G and B channel)


Other unallocated stuff

  • Border Management
    • selection management
    • wrt quality, size, aspect ratio
  • refinement and meshing
    • sqrt3
  • Smart Non manifold management

Editing Plugins

Improved Slicing Tool

Allocated to Edoardo Pocci (due by 06/2008)
The tool allow a better and finer control on the slicing cross section creation process. A good ispiration could be the cross section tool that is present inside Acrobat Reader. Load this pdf into a recent version of Acrobat Reader and play with the cross section interface (rightmost button in the 3d toolbar).

Required features include:

  • preset planes (x y z)
  • plane specified by three point selections
  • numerical control; the user should be able to numerically set the position and orientation of the planes.
  • cut and cap; the slicing tool should be able to actually cut the original mesh into pieces and try fill the created holes (if it does sense e.g. if the boundary of the slice is one or more closed loops).
  • opengl preview; a small window with all the slices. Eventually with some interaction (zoom and pan over the slices)

Improved Painting tools

Allocated to Daniele Bernabei (due by 02/2008)

  • editing geometric push and push and pull
  • brushes
  • color cloning (copying the color from another portion of the mesh)
  • better icons
  • selection masking (paint only over selected areas)

Optionals

  • local refine and simplify
  • local edge swap to improve triangle quality
  • texture support? color onto the texture instead of using vertex color?

Texture Visualization and editing tools

Allocated to Riccardo Dini' (due by 07/2008) A tool that allows to see and edit the texture coords of a given mesh.

Once the tool is started started the mesh is viusalized in the uv space and uv dragging and rotation of selected pieces is allowed.

  • move/rotate/scale connected components
  • smooth/optimize texture coords.

Interactive Hole Filler Tool

Allocated to Michele Vannoni' (due by 06/2008)

The tool should allow the user to guide the hole filling process in a interactive way. The tool allow to select one or more borders, create bridges among different hole boundaries (or among edges of the same border) and allow to tweak the optimization parameters that drives the hole filling procedure (like the balancing between shape of triangles and angles that the new triangles forms with the original mesh, or the number of new inserted points).

Completed projects

Straightener (aka raddrizzator)

Implemented by Luca Benedetti (due by April 2008)
a tool to put an object in a nice reference frame. Typical usage, scanned meshes have arather random reference system this tool should provide a nice way to set interactively a good reference system.

  • Based on the current selection a fitting plane is created and used as base plane
  • user can choose if the selection become xy or zx plane
  • user can rotate according to the remaining axe
  • nice reference systems (a grid for the plane) are drawn to help the user

Completed project, see Straightener. Scheduled for inclusion in the 1.2 release.

Mesh segmentation

Implemented by Giorgio Gangemi A tool that allow interactive segmentation/selection of mesh portions by mean of simple interactive brush tagging. Completed project, see Mesh Segmentation. Scheduled for inclusion in the 1.2 release.

Quality mapper

A small snapshot of a possible gui
Enlarge
A small snapshot of a possible gui

Implemented by Alessandro Maione & Federico Bellucci (due by 02/2008)
The tool should allow an interactive editing of how the quality is mapped into color over a mesh. The user should have the possibility of editing a transfer function:

  • choosing between some predefined types of color scale (hue, red-blue, white-black)
  • define the range of intervals that have to be mapped in automatic or manual way
  • apply a gamma correction to the displayed interval
  • Show the histogram of the distribution of the quality values over the mesh (the histograms should be done wrt to vertex number or per vertices/areas)
  • user should be able to export Histogram values to a file as a csv text file
  • interactive preview of the mapping using 1D texture mapping trick
  • possibility of baking the computed color over the vertices.

Completed project, see Quality Mapping Tool. Scheduled for inclusion in the 1.2 release.

X3D (input and output)

Allocated to Palma Gianpaolo (due by 02/2008)
The filter should be able to preserve texture and per-vertex and per-face color information. It also include VRML (input).

Completed project, see X3D. Scheduled for inclusion in the 1.2 release.


Shape optimization filter

Allocated to Michele Onnis (due by 05/2008)

This filter should try optimize the mesh by acting on the triangles and vertices using various local modification approaches:

  • to use edge flip on flat faces to create better triangles (improving aspect ratio or quality of the involved faces)
  • to apply laplacian smoothing and use the new position only for the vertices whose new position still lies on the original surface
  • to apply curvature optimization flipping strategies that flip triangles aiming to minimize the overall curvature (and therefore hopefully obtaining a better triangulation of the same vertices).

Completed project, see Mesh optimization filters. Scheduled for inclusion in the 1.2 release.


Parameters for IO filters (**)

Some IO filters has parametrs that require user input. This should be managed and exposed in a way similar to the one used in the mesh filters. (e.g. ascii options in saving of ply and stl, vertex unification in stl...)

Personal tools