Page 1 of 2

Question about deformable solid paper

Posted: Thu Feb 22, 2007 9:05 pm
by coderchris
Im attempting to implement the deformable object alg. outlined in this paper:
http://graphics.ethz.ch/~brunoh/downloa ... _CGI04.pdf

I understand and can calculate the deformation energy for the three different cases (line, triangle, tetrahedron). What I dont understand is how these energys are converted to forces that I can apply to my verticies. They have two equations in the paper that calculate some forces, but I dont understand how they would be written in code. Also, the equations they have dont seem to give a directional force, just a magnitude. How do I calculate the direction of the forces to apply to each vertex?

Thanks,
Chris

Re: Question about deformable solid paper

Posted: Thu Feb 22, 2007 9:32 pm
by Antonio Martini
the Lagrangian approach is a popular way of deriving the equations of motion from the potential and kinetic energy:

http://scienceworld.wolfram.com/physics/Lagrangian.html
http://www.nyu.edu/classes/tuckerman/st ... node3.html

however i would leave that paper alone and would go for the much more robust position based dynamics approach:

http://www.continuousphysics.com/Bullet ... 77&start=0

cheers,
Antonio

Posted: Thu Feb 22, 2007 9:38 pm
by Dirk Gregorius
The force is the gradient of Energies (Eq. 2 and Eq. 3). I think they don't give this formulas, but it should be not to difficult to derive them yourself. For the distance constraint you basically need to compute dE/dp1 and dE/dp2 and plug this into the equations 2 and 3 (depending whether you want damping or not). This way you get the forces. This is basically the same as the constraint gradients in the "Position Based Dynamics" paper.

Posted: Thu Feb 22, 2007 10:35 pm
by coderchris
Thanks guys
however i would leave that paper alone and would go for the much more robust position based dynamics approach:
Iv looked into that paper aswell; looks like a very robust method, but will it also handle tetrahedral meshes and give convincing deformation without much fuss?

I already have a very robust collision solver, and I am currently using it to simulate springs in a spring mass type system, but the problem is that the triangle/tetrahedron's areas are not being conserved, which causes the mesh's to cave in on themselves.
The force is the gradient of Energies (Eq. 2 and Eq. 3). I think they don't give this formulas, but it should be not to difficult to derive them yourself. For the distance constraint you basically need to compute dE/dp1 and dE/dp2 and plug this into the equations 2 and 3 (depending whether you want damping or not). This way you get the forces. This is basically the same as the constraint gradients in the "Position Based Dynamics" paper.
Im still kindof confused.. It says that to get the direction, you take the negative gradient of E. What exactly does that mean? I havent had much experience with any math grater than calculus 1 :?

Posted: Thu Feb 22, 2007 10:44 pm
by Antonio Martini
coderchris wrote:Thanks guys
however i would leave that paper alone and would go for the much more robust position based dynamics approach:
Iv looked into that paper aswell; looks like a very robust method, but will it also handle tetrahedral meshes and give convincing deformation without much fuss?
yes you will need to add volume conservation constraints for tetrahedra.

cheers,
Antonio

Posted: Thu Feb 22, 2007 11:02 pm
by Dirk Gregorius
You can use the following constraint functions for area and volume preserving constraints.

Triangle area preserving constraint:
C(p1, p2, p3) = |(p2-p1) x (p3-p1)| / 2 - A0

Volume preserving constraint:
C(p1, p2, p3, p4) = |(p2-p1) * (p3-p1) x (p4-p1)| / 6 - V0

Note that they are quite similiar to the formulas in your original paper. Though I would not normalize (divide by the original area/volume) since your Lagrange multipliers will have the wrong dimension then. There is an answer by E. Catto on this topic somewhere on the forum...

PM me you mail adress and I send you my (incredible short) math reference where I derived some of the gradients for these constraints so you can use them.

Posted: Fri Feb 23, 2007 1:57 am
by coderchris
Thanks for the derived gradients dirk, they seem to be working for me :)

Posted: Fri Feb 23, 2007 2:37 am
by Dirk Gregorius
Nice to hear! So do you use the volume constraint? I never tested it, but only derived it since I was just doing this kind of math and thought that it might become useful some day and I awfully quick forget how I did this kind of derivations :-)

Posted: Fri Feb 23, 2007 7:57 pm
by coderchris
Actually, i implemented a 2d version for now to test the contraints, and the distance and area preserving ones are working. Ill let you know if the volume works as soon as I get it implemented :)

Posted: Sat Feb 24, 2007 11:32 am
by stbuzer
I tryed to derive volume constraint gradients by myself and got following:

constraint C(p1,p2,p3,p4) = 1/6 * dot(p2 - p1, (p3 - p1) x (p4 - p1)) - V0

gradients:
p1: 1/6 * ((p4 - p3) x (p2 - p1) - (p3 - p1) x (p4 - p1))
p2: 1/6 * (p3 - p1) x (p4 - p1)
p3: -1/6 * (p4 - p1) x (p2 - p1)
p4 1/6 * (p3 - p1) x (p2 - p1)
but it seems that they are wrong :(
(I've already implemented it)

Posted: Sat Feb 24, 2007 2:11 pm
by raigan2
Again, I must recommend LiveMath Maker: you just write your constraint function in scalar form and it calculates the partial derivatives wrt each scalar: http://www.livemath.com/download/

Posted: Thu Mar 01, 2007 8:10 pm
by coderchris
I took a look at the livemath maker; i cant seem to get it to derive anything, but I probably just havent spent enough time with it :?

Anyway I have a math related question concerning the formulas in the paper; Does anyone think they could show me the steps for deriving the distance constraint outlined in the paper?

I took a look at partial derivatives and I understand them now, but im unsure where to go with them...

Posted: Thu Mar 01, 2007 8:21 pm
by Dirk Gregorius
The constraint is C(x1, x2) = |x1 - x2| - L0

Since both x1 and x2 are functions of the time I recommend building the time derivative and then find the Jacobian by inspection. You use

dC/dt = dC/dx * dx/dt = J * v

This is the same as the chain rule (e.g. f'( h(x) ) = f' ( h(x) ) * h'(x) )

We use the this identity |x|' = x/|x| (Try to prove this yourself for practise. Hint |x| = Sqrt( x^2 + y^2 + z^2 )

dC/dt = (x1 - x2) / |x1 - x2| * ( v1 - v2 )

Now we sort this and define for readability n = (x1 - x2) / |x1 - x2|

dC/dt = n * v1 - n * v2

We can bring this in matrix form

dC/dt = ( n -n ) * Transpose( v1 v2 )

dC/dt = J * v


Does this make any sense to you?

Posted: Thu Mar 01, 2007 8:59 pm
by coderchris
It almost makes sense now;

Why do we find derive it with respect to time?
Shouldnt dC/dx be enough to solve the constraints?

I also noticed that L0 gets lost in the derivation. If L0 has no effect on the end result, how is the constraint able to get back to rest length?

Also, does dC/dt represent the force?
or do I have to multiply dC/dt by -kC

Thanks for the help

Posted: Thu Mar 01, 2007 9:20 pm
by raigan2
coderchris wrote:I took a look at the livemath maker; i cant seem to get it to derive anything, but I probably just havent spent enough time with it :?
I wouldn't have figured it out, except that there are help files/videos:

video: http://support.livemath.com/lmhelp/main ... =954790820

you can download a livemath workbook from the bottom of this page that has working partial derivative calculation:
http://support.livemath.com/lmhelp/main ... =953485362