Game Development Reference

In-Depth Information

(
v
i
+2
−
v
i
)
·
d
i
=0
,

which expands to

P
i
+1
1

v
i
+1
)
d
i
+1
+P
i
+2
d
i
+2
·

d
i
+1

m
i
+2

1

m
i
+1

(
v
i
+2
−

−

m
i
+2
+

+P
i
d
i−
2
·

d
i−
1

m
i

=0
.

This makes the equation system tridiagonal, and such systems happen to have

a linear time-exact solution [Wiki 10a]. Collisions can be handled in this method

by just projecting contact vertices' velocities to the contact plane whenever they

occur in equations.

Of course, this again requires cheating one's way around the inherent comple-

mentarity of the problem (since separating velocities don't need to be projected

back to the plane). It gets worse when friction, especially static, is introduced (dy-

namic friction can just be applied independently before the solver). One standard

solution is to make an assessment of how a vertex will behave after the solver pass

based on its initial condition and then solve a respective linear problem (namely—

no constraints for would-be separating vertices, plane projection for sliding, and

full lock for those held by static friction). Naturally, it's possible to make sev-

eral iterations of this step. In general though, for shorter (10-20 segment) ropes

it might be advisable to use a simple iterative linear complementarity problem

(LCP) solver instead (which can have correct friction and separation), and switch

to the direct method for longer ones, where artifacts in individual vertex motion

are less visible and vertex behavior can be better predicted based on the current

state of it and its neighbors.

Another interesting point about free-hanging ropes is that it's possible to cal-

culate the final resting pose if the endpoints and the total length are known. This

can be very useful when placing things like power cables on a game level, since

knowing the exact resting pose means the rope will not suddenly start swaying

when the player comes close. Despite a moderately common misconception that

this slack curve is a parabola, in actuality, it's a special curve type, called “the

catenary” [Wiki 10b]. It does look similar to a parabola, but if we want a per-

fectly still resting pose, we'd better use the real thing. An interesting side note

about the catenary is that it is also (unsurprisingly) shaped as an arch that can sup-

port its weight with no sliding forces between the stones (which means no cement

is needed). Once we know the shape's parameters, we can place the vertices at

equal distances with this formula: