By Team SimRacingWorld
26 February 2006
Hi All, it has been a while since last time I wrote down something about netKar PRO so I thought to share something. I will go through the main parts of the software, so we can all recap "what's new" for people coming from v0.9.9 Namie. I'll also go through some details about the release of the software with demos, licences and so on. So plenty to talk about, let's get started from.. the beef!
099 had 2 main flaws on the chassis physic: one was in the anti-roll bars code, and it is easy to exploit hitting a curb hard; this will throw the car into a roll on itself. The second flaw was in the reaction torques at the differential generating a couple on the body moving too much weight back and forward as function of engine torque.
The entire software structure was changed and what was a modular software solution in netKar 099 is now a monolithic structure driven by scripts and databases. In nK099 there was a main simulation program (nks.exe) that connected to a client module for multiplayer (nkClient.dll) and cars' modules (f3000.dll, mini.dll ecc..). In netKar PRO everything is easier and held into the nks.exe file.
The change was made to support what we call the nK|dK (netKar Development Kit), which will allow the community to create additional cars for the simulator and it was the main element that got me busy during this year.
One important element with the creation of nK|dK is the possibility to deeply analyze the car's behaviour in an engineering-like environment and compare it with theorical and experimental data from books and other sources. In netKar PRO nothing is "cheated" and you can check the formulas from your car dynamics book with the simulator and find the same results, the manual for the future nK|dK will be most enlighting about this matter.
The drivetrain was also rewritten at the beginning of the netKar PRO adventure. The main aim for the new code was to support 4WD cars with 3 differential connected.
The main element of any simulation was also the subject of a total rewrite. The model is now a Pacejka 96 full model with integrations for temperature and pressure changes plus some integration for dynamic behaviour for the quick spinning on the Y axis of the tire. (quick steer).
What I really love about this Pacejika's model is the incredible control it gives on the relationship between longitudinal and lateral forces plus the ability to reproduce a tire with 3 different "zones": a linear zone, a sliding zone, and a frictional zone once the tire lost the grip. I find the linear zone often missing generating a tire that is in "sliding" mode all the time.. giving a sort of "floating" feel to it. In netKar PRO, you get a clear linear zone that gives the tires an incredible amount of "bite".. you really need to push the car to get into the "sliding" mode of the tire and makes driving fast with netKar PRO a very different experience where you literally throw the car into a corner at speeds that most of the time you won't believe and then you'll handle her on the edge of the limit. Driving is more "physical", after 20 laps with the powerful stiff cars you really feel your head shaking.
I turned off the automatic surface smoothing featured in nK099, and this makes the ride really scary on the stiff lower cars and you'll often find yourself bottoming around shaking like crazy. The fact of driving directly on the triangles of the track also gives meaning to the idea of "fast bump and rebound" settings.. mostly unusued before, you'll need these badly to set up the attitude of the car on bumps. I was able to turn off the smoothing because the new tire model is so good to handle the contact/no contact situations, much better than the old one. As you can tell, I am quite happy and excited by the results.
On the graphics side the most relevant change was the support for the pixel and vertex shaders technology available through DX9.
The biggest point is in the specular component calculations for the lights that, with shaders, is moved from the vertex level to the pixel level. This element alone gives a great change to the visual of the scene and the feeling of "curved" objects.
Shadows has been one of my biggest time wasters this year. I've experimented with 3 models (lightmaps, shadowmaps, stencil shadows), only to finish up with a 4th model at the end. The "real" solution is the shadowmap solution, but it won't be in v1.0. Being programmer and designer for netKar I am always facing difficult decisions; shadowmaps gave me these advantages:
- They are dynamic. I can set the lat/long of a track, set a date and a time and there you go, the shadows are there in real time. The code was written using documents found by Alessandro Piemontesi, former 3D artist that departed the project before the end.
- They don't require any action other than selecting the shadows' casters and receivers in a 3D editor.
And some disadvantages:
- They look like big pixels and they can flicker badly. There are ways to minimize this, but they still do.
- They are slow.
So I had to add these elements to other elements in nKPRO v1.0 such as:
- The cars in nKPRO v1.0 are small single seaters and they are supposed to run short (20-30 laps) races mostly at 12 o'clock.
- Higher frame rate deeply improves driving feeling and multiplayer performances.
- Precomputed shadows look so much better than shadowmaps.
I finally decided to cut the shadowmap code branch off nKPRO v1.0 and reuse it once the devKit will be released and the need for realistic time changes will become more evident. Also in the following months the videocards level will go up a bit and I should be able to add a blurring pass to those pixelated shadowmaps to make them look better without going into the 30' FPS ballpark that I believe it's too low for netKar PRO.
Also in the future is quite possible a switch to the Ageia/Novodex physic engine for the main parts of the car and support for PPU (Physic Processing Units) for Hardware accelerated physics, that will free up some processing power for the graphics department.
We have a new staff for the 3D graphics and in 2 months we were able to come such a long way I still can't believe my eyes when Marco sends me some new screen. He (Marco) also was incredibily useful taking responsability to look after the graphic's side of the simulator keeping constant contact with the graphic artist and asking for my attention only when really and strictly necessary so I was able to look after physics and multiplayer more.
The basic sound engine for netKar PRO is now native in DirectSound, this means I got rid of the QMDX.dll I was using in 099. I like it more this way because I really know what the engine is doing up to the DirectSound level and I don't find myself wondering "why?" that often.
I wrote the basic code and editor for the multisampled engine when I was still in Tokyo, so it's over 1 year old now. The problem with this approach is that software alone can't help or prove anything, the result is as good as the samples are. We keep experimenting with different samples we recorded at the track, but I wouldn't say we've got a winner here yet.
Some weeks ago, during a boring sunday I finally sat down and tried to write a synth engine sound solution. The result were immediatly promising although it was clear a lot of work was needed for it. I tend to like this approach more for the simple reason that the code has more responsability compared to source samples, if the code is good it can make anything sound decent. In the last 2 weeks I'd been building the software with the synth version in, but I'm still using samples for the multiplayer cars. I am quite sure by now that we'll ship with both engines and with a switch to select which one to use.
Multiplayer had a bad start during my tests in July, and I knew I wasn't going anywhere with that approach. So I put the multi code on hold waiting for a good idea to come. I finally worked out a complex system of client simulators so I can test new prediction code on my pc and make it better without the need for a real tester connected, that was a real breakthrough and pretty much changed the all way I work on multiplayer code.
I also had to solve the collisions issues found in 099 Namie, specifically the "hit somebody from the back, he'll go away no problem and you'll spin out.".. although pretty much "fair" if you think about it, that's not really realistic so it requested some fix. In July I went for a 100% new solution that fixed the collision problem giving us great collision response but made the normal movement of the cars really bad.
So last month I had to come up with a mixed solution that incorporated Namie 099's movements and new collision style.. the results are pretty good and I am quite happy about it. >From the server bandwith battlefront there is now a new system to change the frequency of packets based on the client's distances and it really cut down the bandwith a lot. I've also experienced a lot of problems making the server "mono-port" in July, so I went back using one port for each client, so routing and buffering is done in hardware and it seems to work much better.
The netKar PRO's Demo will be available the day netKar PRO will be available. This means we'll have 1 download that will include all the features. But, in the demo, the only feature available will be driving the smallest car on one track with displays and lap times turned off. To drive all the cars with lap times, on board display on, telemetry on, and, of course, multiplayer capability will require a licence.
The licence is personal and will follow the driver and it will be generated against the driver/PC combination. So yes, if you are 2 brothers sharing one PC you'll need 2 licences, and yes if you have 3 PCs u'll need 3 licences. That's a shame and quite an hassle I know, but I didn't invent software piracy and I need to deal with it somehow, it's funny how honest people have to pay the price everytime for that too, but that's another story.
I dont have a release date set at this stage. We've been working overtime for a while now trying to hit the market anytime this year. It's difficult for me because good ideas take 1 second to generate and 3 days to code, and when you add many "3 days" you'll soon find another month is gone and the software isn't out yet although it has N more "little cool things", it's a difficult balance, in my mind it'll never be "done", I am sure 5 hours after I'll close v1.0 I'll have "something new" on my HD ready to go, from this point of view, I still code netKar as I did when this project started, in a cold november, in a cold Newbury 4 years ago..