fnPeltMapper: Softimage|XSI implementation of the pelt mapping algorithm

Fernando Navarro f.navarro@bren.es (Oct, 2005)

How to install

File > Addon > Install...

Select file fnPeltMapper_XXXXXX.xsiaddon, choose destination (user, workgroup, factory) and click Install.
Note: XXXXXX is version date (yymmdd)

How to use

Pelt mapping is pretty easy to use. You will be able to complete the pelting process in a few minutes, just some simple steps.

Follow on with that simple tutorial:


Step 0: Think about the proper way of mapping your model

Our goal: obtaining a UV layout with minimum distorsion and a few seams. We will have to determine where and how to cut our object, and how many pieces of geometry we are going to map.

Look at our example dog. You can find a lot of different ways of achieving your task:

  • unwrap the whole model
  • map the head and the body separatelly
  • cut hands, feet and head appart from the body and map each independently
  • ...

We will use the last one in order do show a simple but complete example, but you can use a different option.


Step 1: Get your model & cut out the geometry don't  need.

In our example, select all the polygons in the head and delete them (of course, there are less destructive ways). Repeat the process with feet and hands.

Now we will have something similar to the geometry of the image.




Step 2: Create a cluster with the edges that will open your model.

Now we need to 'open' our geometry. We need to cut the geometry in some places, in order to produce something that can be converted to flat geometry with no overlapping. Just think about dragging away all contour edges (blue ones) from the center of the model, the same way we could do with a animal leather, in order to get a carpet.

In our example we have cut out model from the throat to the tip of the tail, along the chest and abdomen. Add one more cut per leg, connecting boundary edges with the central cut.

Include all the boundary edges and cutting edges in one cluster. One important issue is that all this edges should be connected together.




Step 3: Save your work


Step 4: Create frame, pulling springs and simulation geometry.

Open toolbar fnPeltMapper_XXXXX (Application > Toolbar > fnPeltMapper_XXXXX). Click fnPeltMapper button and select cutting cluster.

Just press "setup frame" button, and you will get a yellow frame arround a duplicate of the original model. Every point on the frame will be connected with a point in the opened model (green lines).

The frame will be parallel to the XY plane, but you can transform it (rotate, translate, scale, move points, ...) to a more suitable position.



Step 5: Simulate

Press the button and you will get a window with three groups of parameters.



To understand every parameter, think about dog geometry, frame and green lines as a dinamic system composed of small spheres connected by springs. Every geometry point is equivalent to a sphere with a small mass. Every edge on the geometry is equivalent to a spring (mesh springs). Lines connecting a point in the frame with a boundary point are equivalent to another spring (frame springs).

When we simulate our model, frame springs will pull the geometry to the frame, with the reaction of mesh springs. As we want to conserve mesh proportions we will use soft frame springs, and stronger mesh springs (Ks parameter). All the springs will be over damped in order to avoid bouncing (Kd parameter). A complete description on mass and spring physical model, constant Ks and Kd meaning and units can be found in (4)

Default spring values will usually fit, but you can play with them and just view the results.

Parameter "# iterations" represents how many steps will completed by the simulation engine (1). The more steps, the more the simulation will go ahead.

Another important parameter is "time step" Dt. It represents how long our system will go ahead in each simulation step.

Trivially, simulation time (seconds elapsed from original position) is #iterations * Dt.

In order to start your simulation, adjust your parameters and press Ok. Simulation time depends basically on geometry complexity and number of iterations. Anyway, most of the simulations are really fast



Some tips on simulation parameters:

  • Convergence time and spring parameters are different for every model. The more complex the model is, the more iterations will need. Usually spring parameters are fine
  • Simulation won't give you a completelly flat geometry. The more you simulate, the more flat the geometry will become. Sometimes, after a short simulation, your geometry is flat enough to stop trying.
  • Don't use too high and too low Ks values on the simulation. That will generate instabilities.
  • If you have stability problems or your mesh explodes, just reduce Dt and increase #iterations.
  • If frameKs >> meshKs, you will get a very deformed pelting geometry nearer to frame structure. Can't that be usefull? Don't forget that, after the simulation, you get 3D geometry, so you can use it!
  • I have used ODE (1) which uses a modified explicit integrator. Forces are calculated using a mass and damped spring physical model and acumulated on every body. No joints are used. Stability issues are the ones will get with such a system. If you need more info, just ask me!
  • And don't forget: No real animals are harmed during the simulation! Play with them, change the parameters, see what works and what kind of changes blows your system. Trying, trying and trying is the best training.


Step 6: Generate uvs and copy to original model.

When your model gets extended properly, just generate the Uvs. Choose the type of flat UV projection and that's all! You will get a flat version of your 3D object and a mapped version of your original geometry.

Don't forget that after running your simulation, your resulting UVs can be further manipulated (scaling, rotation, translation, relaxing, ...)



Future ideas / things that needs to be improved

  • Improve system stability. Include some stability checking.
  • Extend simulation to multiple objects with multiple cutting clusters.
  • Do not modify original geometry (FreezeObj, ResetTRansformation, Disconnect components, ...)
  • Do not start simulation from scrach. Continue simulating.
  • Use simulation along time to obtain a 3D (renderable, modifiable) morph.
  • Some more ideas? Tell me!

More information

(1) fnPeltMapper contains a linked copy of ODE (Open Dinamycs Engine) (http://www.ode.org) by Russell L. Smith. License terms are listed here (license_ode.html)

(2) Dinamic model is based on the information explained in Seamless Texture Mapping of Subdivision Surfaces by Model Pelting and Texture Blending,  (http://portal.acm.org/citation.cfm?id=344990) Dan Piponi and George Borshukov, SIGGRAPH 2000 Conference Proceedings, New Orleans, LA: ACM SIGGRAPH, pp. 471-478; August (2000).

(3) Physically Based Modeling,  (http://www.pixar.com/companyinfo/research/pbm2001/index.html) (David Baraff and Andrew Witkin's Siggraph 2001 Course notes) will help you understand why your dinamic system usually works and sometimes explodes.

(4) A nice way of remembering things you forgot: Physics for Scientists and Engineers  (http://www.amazon.com/gp/product/0534408427/002-6943045-7646406?v=glance&n=283155&n=507846&s=books&v=glance) by Raymond A. Serway, John W. Jewett, Brooks Cole; 6th edition, ISBN 0534408427

(5) CCS styles has been taken and modified from Softimage Wiki (http://softimage.wiki.avid.com/)


About the author

Fernando Navarro is currently working at Bren Entertainment as R&D supervisor. His activities include Softimage|XSI, Mental Ray and inhouse pipeline development.

He obtained a bachelor and master degree in Computer Science Engineering. Now, he is studing a PhD focused on Computer graphics rendering and animation.

Feel free to contact him at f.navarro@bren.es