Rally Cross physics:An Analysis 10 Years Later
Jim BuckTwitchy Thumbs Entertainment, Inc.
[email protected] 31, 2007
Who is this dude??
• 1996 – 2000 : 989 Studios, programmer• 2000 – 2003 : DepthQ, founder• 2003 – 2005 : SCEA, programmer• 2005 – present : Twitchy Thumbs, founder
Why?
• Learn what worked (big picture)• Tricks of the past (small picture)• Spare cycles (hah!) on next gen
“Doing a lot with a little is something we can't forget how to do.”
– Mike Acton, Insomniac Studios
What is Rally Cross?
What is Rally Cross?
• PS1 off-road racing game• Feb ‘97 in North America• Sony-developed/published• 200,000 sell-through N.A.
• Japanese/PAL releases• Considered “cult” classic• One of first for PS1-on-PSP
What is Rally Cross?
Pre-demo
Rally Cross physics history
• Chris Hecker physics articles too late (Oct 96 - Jun 97)
• SGI 4dgifts buttonfly visualizer demo• Robert Sheehan’s bouncer simulation
Physics Primer
• F = m*a• v += a*t = (F/m)*t• p += v*t
All math is 1.19.12 fixed-point!
What is Rally Cross physics?
Springs!(well, actually, damped springs)
Damped spring physics
t = 0
t = 1x
F = – k*x – c*v1
v0
v1
Spring at rest
Hooke’s law
Rally Cross physics components
• Vehicle box• Box interaction with ground• Box interaction with track boundaries• Box interaction with another box (vehicle)• Vehicle-specific physics
Vehicle Box
• 8 points, or point masses, representing box corners
• Each point accumulates forces (F) and gets time-stepped at bottom of loop
• 28 damped springs from each point to every other point
Vehicle Box
Vehicle Box
For each spring:• x = length(p1 – p0) - at_rest_length
• v = dot(v1 – v0, unit(p1 – p0))
• F = (– k*x – c*v) * unit(p1 – p0)
• F1 += F, F0 += –F
p0
p1
v1
v0
Vehicle Box
• “Shock” springs are special• Separated into Y and ortho-Y vectors• “Softer” in Y than in ortho-Y• Ortho-Y treated same as other springs
Box Interaction with Ground
• Ground is a height-mapped grid• Gravity constantly affects point masses:
F = m*G
vn
Box Interaction with Ground
• For each point mass, if under height-map:– xn = (height_map(p.x, p.z) – p.y) *
normal_map(p.x, p.z).y– vn = dot(v, normal_map(p.x, p.z)
– F = (– k*xn – c*vn) * normal_map(p.x, p.z)
• Formula is for a damped spring!
p
xxn
v
n
height_map
Sidebar: Friction
• Static: Fmax = fs*N
• Kinetic: F = fk*N
v = 0
m*G
NF fs*N
v
m*G
N fk*N
Box Interaction with Ground
Friction• Viscous: F = –fv*vo
• Static/kinetic– If vo == 0
• If Fo <= fs*xn, Fo = 0
• Else Fo –= fk*xn
– Else if length(vo + (Fo/m)*t) <= (fk*xn)*t, vo = 0
– Else F = –unit(vo) * fk*xn
Box Interaction with Boundaries
• 2d (infinite height) line segments surrounding the track
• Physics is same as for hitting the ground– Damped spring pushing back along normal– Friction applied ortho to the normal
vn
pxn
v
n
Out of boundsIn bounds
Box Interaction with Another Box
• Sphere test for each car pair• If succeeds, ray-through-box test
x
F = (– k*x – c*vn) * normal
(Formula look familiar?)
Box Interaction with Another Box
• If ray-through-box fails, test each car’s points against other’s box
x
Again, F = (– k*x – c*vn) * normal
n
Vehicle-specific Physics
• For steering, F = –kv*vx (viscous friction!)• For acceleration in Z, that’s a whole
‘nother presentation
X X ZZ
But briefly…
engine axle
gear ratio
wheel axle
fs*N or fk*N
Physics Rendering
• Points time-stepped: v += (F/m)*t, p += v*t• Display matrix:
• Car position = top_center – box_height• Wheel position = based on shock length
X
ZTop face
Physics Demo
Problems
• Box freaking out• Stuck on track boundaries
• Check “crossbars” dot product is in safe range
• Check upper points are “above” lower points
Box Freaking Out
Lower points
Upper points
+
= bad!
Stuck on Track Boundaries
• Stuck if 2 adjacent points such that: dot(n0b, n1b) < 0
• Find boundary intersected by center of box to center of the 2 points
• Push out with spring equation
Optimizations
• Constants mostly power-of-2• Pre-calcs (ex. 1/mass * time)• Cached and local pointers• 64-bit MIPS mults• Assembly language for key math functions
and height-map lookup
Evolution of Physics
• CART World Series– correct friction model on wheels
• Twisted Metal 3– height-map gone– collision with 3d geometry with no penetration
• Twisted Metal 4– car-to-car collision using CSG– better graphics
Q&A
Top Related