I've tried a number of force feedback wheels with GPL, and I've found that the best FF wheels can provide a tremendous enhancement in the driving experience. However, FF wheels vary considerably in quality and functionality.
On these pages I'll tell you about the wheels I've tried, and why I like or dislike each one. I'll also explain FF terminology, how it works, and how I set up the various wheels to get the best effects in GPL.
BTW, my favorite wheel is still the Logitech Old Red!
See also Wheel and Pedals in my Survival Guide and the Controllers section of my GPL Hardware FAQ for more information on controllers.
The latency exhibited by the first generation of FF wheels is the factor which initially discouraged Papyrus from attempting a FF implementation in GPL. This latency refers to the time it takes between the moment when GPL or any other racing software transmits a force instruction, and the moment when the force is actually applied to the wheel by the FF mechanism. Although the human eye cannot register changes in visual information at any greater rate than about 36 times per second (thus GPL's max frame rate of 36 fps), the human tactile senses can detect very small latencies in force, on the order of a few milliseconds. The current generation of FF wheels has latency that is considerably higher than this.
Papyrus believed that this latency would interfere with and detract from the value of of the information provided to the driver. However, at the urging of a couple of dedicated GPL enthusiasts, they decided to build a FF implementation as an experiment to see how well it worked. I'm really glad they did!
I believe that using the USB port rather than the serial port (the Logitech Wingman FF lets you use either) may reduce some of the latency. Certainly, even though I'm making GPL do only 20 milliseconds of prediction, I don't feel much latency at all. Even when I make a rather sharp impact with a guardrail, which is when latency would be the most noticeable, I feel only a barely perceptible delay.
Reducing GPL's prediction eliminates the bizarre things that happened across center during transitions which I found so confusing with the MS FF wheel. With higher prediction, when you suddenly go from turning in to opposite lock, the wheel goes limp and then suddenly snaps to very high force. The settings I'm using get rid of that except in very extreme situations. I've only experienced it once or twice in several hours of driving.
A reader wrote:
If latency is such an issue,why doesn't 0.00 work?
Actually, it does, and that's what I use now, especially with modern, fast computers. With anything above about 1 GHz, FF latency is almost indetectable.
Anyway...on to the explanation. the latency number in core.ini doesn't affect the latency inherent in the FF wheel, which is induced somewhere between GPL's interface to the joystick controller in DirectX and what we feel at the wheel.
This latency number affects GPL's compensation for this latency. The higher the number, the farther in advance GPL tries to predict the forces that the wheel should be producing in the near future.
Conceptually this is similar to the prediction done by GPL regarding the position of opponents' cars to compensate for latency in multiplayer play. If the Internet-induced latency is, say, 200 ms, GPL tries to predict where your opponents' cars will be in 2/10ths of a second based on their current velocity, direction of travel, and acceleration.
That's why lateral warping can get much worse in a turn; it's a lot harder to predict where the other car will be when its velocity, direction of travel, and acceleration are changing.
Similarly, with FF GPL tries to predict what will be happening with regard to forces at the wheel at some time in the near future, to compensate for the latency between it and the wheel. Otherwise, when you hit a wall, say, the force at the wheel will come a fraction of a second after you see the collision and hear the sound.
More importantly, the forces you feel at the wheel when the tires lose grip or load up on a banked turn will lag the events on the track.
GPL allows you to tell it how much predicting you want it to do. It's a tradeoff; the higher the latency number, the more closely the forces at the wheel will approximate what you should be feeling in a steady state, but the worse things will be in transitory states.
Essentially, I found I'd rather have truer forces, slightly delayed, than the more artificial forces that occurred when I tried to make GPL compensate more for the latency. In practice, even on slower (200-400 MHz) computers, I found the latency in the Logitech wheel to be so small as to be almost negligable, so using a very small amount of prediction worked fine. On anything faster than 700 MHz, I use 0 prediction.
Torque is the maximum amount of force that GPL will tell the wheel to produce. This is in relation to the maximum force set in the wheel's driver in Windows Game Controllers. I believe the way it works is this:
The wheel has the potential for X foot-pounds of torque. Its driver, in Game Controllers, allows you to set the maximum amount of force that the wheel will produce when directed by a game, up to this physical maximum.
Once you've set this maximum in Game Controllers, GPL will tell the wheel to deliver forces in proportion to this maximum. If you set GPL's max_steering_torque parameter to a high value, then GPL will deliver relatively low forces, because it's computing them in proportion to a relatively high maximum force. If you set max_steering_torque to a lower value, GPL will deliver higher forces, but if it runs up against the wheel's physical maximum, you won't get any more force out of the wheel. That's what the readme means when it says the forces will be clamped; they'll run up against a ceiling.
Here's what I did: in the MS-FF wheel's driver in Game Controllers, I set the force to Max and set the self-centering force to zero. Then in GPL, I tuned GPL's max_steering_torque parameter in core.ini until the forces got to where I liked them. Essentially, I got the wheel's driver out of the way and used GPL's adjustment, which has much finer gradations, to get exactly what I wanted.
I've listed my Logitech settings here.
If I were working up settings for a new wheel and its drivers, I'd probably start at 100% force in Windows Game Controllers and tweak GPL from there. If I couldn't get enough force out of the wheel at that setting (something I now feel is highly unlikely), I'd increase the value in Game Controllers.
Update February 2003: The exception is the original Logitech Wingman Formula Force. There was a bug in the drivers for this which prevented it from generating its full force at the100% setting in Game Controllers, so Logitech modified their driver to allow up to 150% force. That's what I use, and then I tune the forces in GPL to suit my taste.
There are really two completely different damping settings available, if you are using the Logitech wheel. The first is the damping number in GPL's core.ini; the second is the Damping Force setting in the LogitechWingman driver in Windows Game Controllers.
core.ini The damping number in core.ini controls how hard GPL will try to dampen the "spikes" in force that occur with transitions and other abrupt changes when due to latency. The higher the number, the more damping; i.e., GPL will tend to more vigorously surpress the spikes in force.
I found that more damping did help surpress these confusing spikes, but in steady state, it made the wheel feel dead, and added an artificial-feeling extra force that I didn't like. That's why I wound up with a relatively low number for damping. I cut the latency adjustment as well, which helped reduce the spiking, at the cost of course of slightly delayed forces.
Wingman Driver. The Damping Force slider in the Wingman Driver controls how much damping force the Wingman software will apply to attempt to dampen the forces transmitted to the wheel, and movement initiated by the user. In effect, this is an electronic steering damper. The higher the value, the harder it will be for you to make abrupt movements, and the less the wheel will react to inputs from the car, such as touching a curb, or going too high on the slip angle at the front and having the grip go away.
I am fairly sure that real race cars of that era did not have steering dampers. In addition, the Logitech wheel already has a fair amount of friction damping in the mechanism, particularly when the forces get high. Finally, GPL calculates and supplies all the appropriate forces. Therefore, any additional forces imposed by the driver are undesireable.
That's why I set this slider to zero in the Logitech Wingman driver. I found that when I eliminated this force, in return I got much more feel through the wheel about what the car was doing. In addition, it allowed me to make much more rapid corrections when necessary. It also had less "stiction", allowing small steering inputs to be much more precise.
Real race cars have very quick, precise steering, with lots of feel. With the artificial damping turned off, I felt that the Logitech wheel came closest to reproducing this feel.
Read additional information about damping here.
By default, DirectX seems to build in a fairly wide dead zone. This refers to an area in the center of travel of the wheel where nothing happens when you move the wheel within this region. A small dead zone is desireable in a passive wheel to help the user avoid weaving from side to side as you try to find the exact center of the wheel's range.
However, the dead zone in DirectX is too large, in my opinion, and is also incorrectly implemented, having sharp edges at its end rather than a gradual transition. Furthermore, with a well-designed Force Feedback wheel and a properly implemented vehicle dynamics simulation, little or no dead zone should be necessary, since castering forces from the front wheels should cause the wheel to seek center whenever the car is rolling, thus eliminating the weaving which can occur when trying to find center with a passive wheel.
DXTweak allows you to reduce the dead zone to a very small value, which I found to be preferable with GPL and the Logitech wheel. See the settings section on my Logitech page.
The DirectX API for Force Feedback controllers contains a number of canned routines for effects such as engine idling, hitting potholes, driving over a rough road, etc. The Microsoft wheel's Game Controller driver uses some of these effects to help the user adjust the wheel's overall force levels.
These effects are useful for games such as the Madness series, where a big part of the fun is rumbliing around and crashing and bashing. However, they are not much good for a serious sim like GPL, where the point of the whole thing revolves around keeping the tires on the edge of their limit of adhesion, and where you'd like the forces from the wheel to telegraph information useful to you, such as information about where the tires are on the slip angle curve. The DirectX API doesn't contain much to help with this sort of task, aside from the basic instructions which allow the programmer to set the center point and amount of torque.
Papyrus started from the fundamentals with GPL's Force Feedback implementation, eschewing canned effects in favor of calculating the forces at the steering wheel from what the car is doing at any given moment. When you touch a curb, GPL figures out how that would affect the steering wheel based on the forces applied to the tire by the impact, and transmits those forces to the steering wheel. When the car gets going really fast, and gyroscopic forces cause the front wheels to want to keep going in the same direction, GPL makes the centering force on at the steering wheel go up. When the car "goes light" over a rise, the forces at the wheel lighten up accordingly.
When you push the front tires beyond the peak of their slip angle curve, the forces at the steering wheel also lighten up, in this case because the self-aligning torque from the tires is reduced, resulting in less castering force. When the car's tail starts to go out as you enter an oversteer condition, GPL produces castering forces at the steering wheel which tend to turn the wheel in the direction of the slide, giving you a little assist in correcting for the slide - just as in a real race car. When the car starts to fishtail, castering forces drag the wheel from side to side as the car's tail whips back and forth, just like in a real car.
This approach takes a lot more work than just throwing in some canned effects, but the result speaks for itself. GPL's force effects provide useful information to the driver about what the car is doing at any given moment. In so doing, they also immerse the driver into the simulated world in a way that is far more effective than any canned effects.