Testing on GeForce FX, GeForce 8 and Radeon X1k

I guess it’s about time to release my game before it gets outdated :stuck_out_tongue:
I’ve been to this forum for more than a year now and I would like to thank everyone for lots of interesting discussions we had :slight_smile:

If anyone has an hour or two then feel free to download my game (demo):
Official site:
http://www.motorboatfury.com
Game profile at Great Games Experiment:
http://www.greatgamesexperiment.com/game/MotorboatFury/
(by clicking on second link you actually help to promote my game on G.G.E. I’ll leave it up to you :slight_smile: )

In case of trouble send me an email (from my profile here).
If you have comments please put it on Great Games Experiment profile.

The three GPU generations I mentioned in the title are these I’m most interested in. Others were tested many times or are way too old to bother (but the game can still be run on RIVA TNT2 and probably Rage 128 :cool: )

(I hope moderator will not delete this post as spam :smiley: )

Too bad, I have a gf6800LE - 128Mb.
Almost fluid at 640x480 all details on, minus reduced water splashes.
Fine, but sometimes when switching details / resolutions, the game screen becomes partily garbled, I guess some framebuffers are not reinitialized correctly.

Some personal thoughts follow …
Visually, the water with HDR bloom is almost perfect !

The trees are a bit dull, and the player boat really lacks some polygons when using inner camera. Water splashes are … hmmm a bit too white maybe.

Some minor glitches :

  • sometimes the boundary between reflected ground and real ground shows some cracks in the distance, that seem to be hard to make it perfect (all games I have seen are like this too)
  • at the same place but nearer, maybe the water should be gradually more transparent to blend better with the ground (the small water flakes on the ground are nice !)

… and the game is very hard to control, I don’t know if it realistic or what, but even at “easy”
difficulty level I could barely win once after tiring trials … not really fun :stuck_out_tongue:

Music is quite nice !

Hmm… With GeForce 6600GT it runs at 20FPS - max detail, 1024x768.

sometimes when switching details / resolutions, the game screen becomes partily garbled
Could you send me a screenshot?

Visually, the water with HDR bloom is almost perfect !
It’s really not the best that GeForce 6 can do.
I could implement water that would make this one look simple, but not for this game. Perhaps I could make a demo. If I only had the time :frowning:

The trees are a bit dull, and the player boat really lacks some polygons when using inner camera.
Hehe - I had one artist for this game, but he was too lazy. I did everything before he even got started.
Yeah - modelling and texturing is not a good side of this game. That’s what happens if you have a 0$ budget and you don’t want to risk spending too much time on the game that won’t pay you back.

Water splashes are … hmmm a bit too white maybe.
Well, foam should be white, but it should also be shaded and it isn’t. Would also look better if I used volume rendering for water thrown behind boats, but it’s a low-budget game.

  • sometimes the boundary between reflected ground and real ground shows some cracks in the distance, that seem to be hard to make it perfect (all games I have seen are like this too)
    True - it’s not easy to fix it and it gets a whole lot worse if you use displacement mapping on water surface.
  • at the same place but nearer, maybe the water should be gradually more transparent to blend better with the ground (the small water flakes on the ground are nice !)
    Transparency is controlled by fresnel term. Water depth controls amount of dark green color covering the bottom.
    Well, improving the water should actualy start with making new wave generation routines.

I don’t know if it realistic or what, but even at “easy” difficulty level I could barely win once after tiring trials
You gotta be kidding me :smiley: I play on hard and I’m usually in top 2. It’s a question of practice. It’s also good to have 15FPS to be able to control boat properly (I have 40-45FPS at 1280x1024 on GeForce 7800GT).
And no - it’s not realistic. Of course boats react to every wave but it’s not like this game has some real hydrodynamics or aerodynamics.

It was actually rather an experiment but the game grew larger than it’s supposed to be. Lesson learned - next time aim higher.

Thanks for your comments. I really appreciate it.

ran very smoothly on my gf7800gt with max details at 1280x1024 :slight_smile: (d’oh just read that you knew that already, sry) still looks a bit lifeless, though. some more vegetation, a better ground texture and a lense flair caused by the sun would help a lot i think.

some more vegetation, a better ground texture
Yes. That’s the one thing I wish I had for this game - rich environments. It would make engine programming a lot more satisfying. I could play with scene graph, shadows and extra light sources. I just don’t have the time to do so much 3D artwork myself and I definitely don’t have money to pay others to do that for me. Perhaps next time.

By the way - in config.txt you can enable FPS counter. Other options you see in this file are available in the menu.

Tested on:

Gefore 8800GTX
Intel Dual Core 1.86GHZ
1GB RAM
Windows XP
1280x1024

–> 68-75FPS

  • i like your installation program - the 3D Model is a really cool idea
  • i would rearrange the buttons in the menus - cancel beside accept but accept at the left border.
  • for me it seems that the mass of my boat is to little. this makes all kind of controlling really difficult
  • graphics is pretty cool, i love the lighting, bloom effects. like mentioned above there seems to be a lack of 3D content (environment and so on)…
  • i got some flickering problems on the buoies

and could you tell us how you have done the water rendering?
especially the waves seem interesting. did you use vertex textures to do some sort of displacement mapping or did you use dynamic geometry? do you use a smart lod system for water rendering?

questions questions…

GREAT WORK

i will test it on geforce5200 too.

bad news on geforce FX 5200

the game crashed the first 2 times i tried to launch.

last lined in log file were:

Loading texture character.miniature.chief
Loading image character.miniature.chief

the third time it ran really really slow. i guess it’s software fallback problem (maybe cause of vertex textures or floating point render targets).

after turning down all graphic settings it worket at 30fps.
with post processing only 10fps.
and with higher material quality it drops down to 3fps.

pretty odd.

Tested on: Gefore 8800GTX
Thanks - none of my testers had this GPU. I assumed there will be no problems since it works on other NVIDIA GPU’s but It’s good to have it confirmed.

FX 5200
Well - there’s a predefined profile for GeForce FX - start with that one. Getting at least reasonable FPS is next to impossible on FX if you use maximum details.
Medium water quality uses 1.x shaders - these work fast on FX. Medium material quality doesn’t use shaders. Keep in mind that game was designed for GeForce 6.
Ok, but that’s about low FPS. There are still these crashes you mentioned. I’ll have to check what’s going on. One guy tried it on FX 5500 and had no problems (except for performance). Thanks for info what’s in the log - this will narrow my search down a lot.

  • i like your installation program - the 3D Model is a really cool idea
    I did my own installer because I wanted to use 7z compression. Then I thought I’ll add a bit of twist to it…
  • i would rearrange the buttons in the menus - cancel beside accept but accept at the left border
    Yes - I’m aware of that. Perhaps I’ll rearrange it in full version.
  • for me it seems that the mass of my boat is to little. this makes all kind of controlling really difficult
    Game uses 20% time acceleration :slight_smile: And it’s not the boat that is too light - it’s the vawes that are too high - almost 1m. Thst’s intended. If boats wouldnt be jumping on waves it would be way too simple and boring.
    “Red witch” reacts very fast but have you tried the “Dragon”? Get some practice on open seas of tropical map :slight_smile:
  • i got some flickering problems on the buoies
    Hmm… black or white squares where sun reflection should be? Or is it something else?

Many thanks for feedback.

the flickering problem: i took a screenshot of it. colors of these quads seem to change randomly.

If boats wouldnt be jumping on waves it would be way too simple and boring.
“Red witch” reacts very fast but have you tried the “Dragon”? Get some practice on open seas of tropical map :slight_smile:
… have tried Dragon now in the tropcial level. seems much much better!

BTW the tropical levels underwater world looks pretty nice.

It’s really not the best that GeForce 6 can do.
I could implement water that would make this one look simple, but not for this game. Perhaps I could make a demo. If I only had the time :frowning:

… common

There are still these crashes you mentioned. I’ll have to check what’s going on.
i have tried to reproduce the problem by reinstalling the app (maybe default settings are the problem). it took longer to start (somehow sound initialization took quite long [i read it out of the log])

and could you tell us how you have done the water rendering?
Yes, but not just yet. This water is allready outdated. I have some free time now and I want to spend it on framework and new water effect. Should be fun.
When it’s done I’ll gladly describe it.

There are lots of tutorials on water rendering that can get similar effect. I’ve noted that there is a set of common errors in most water implementations (even in high end games like Elder Scrolls: Oblivion). Here is my list:

  1. Water transparency should not be based on distance funciton - it’s angular relation. Fresnel term should be calculated per pixel (from normalmaps).

  2. the blue water color should NOT be added in water shader - instead - all objects under water should be covered with water color when rendered:
    -Assume camera above water and object below: optical_depth = distance(pixel.xyz - camera.xyz) * (-pixel.y) / (camera.y - pixel.y)
    -fog_amount = 1.0 - pow( e, -optical_depth * density)
    Yes, a proper subsurface scattering responding to shadowmaps from outside wourld would be better.

  3. vertical distortion is much stronger than horizontal (I use vertical distortion only)

  4. Sun reflection should not be added where something else is reflected

  5. (Advanced) Normalmap in CG gets averaged:

    In real life - you don’t see “backfaces” so the average is different:

    Thas means water doesn’t look like mirror close to horison (fresnel term) and it reflects more sky.
    In motorboats I adjust fresnel term but I don’tadjust distortion - I’ll do that in my next water.

So sometimes - even if you get formulas right you get wrong results. Disabling mipmaps won’t help - you still get average of “front” and “back” faces - only true displacement would help but it would cause horrible aliasing artifacts.

Ok, seems I guessed right with these buoys - these look like floating point specials in HDR. If I’m right, you won’t see them in medium postprocessing which uses RGB10A2 instead of RGBA16F. I’ll modify the shader on buoy to leave a bit more margin.
Strange it didn’t occur on GeForce 6/7.
Thanks for the screenshot.

Vexator, a loud lensflare is so cliche, I do appreciate there is none here…

About my screen corruption problem :
geforce 6800 LE (means much less processing power than regular 6800) 128Mb, forceware 93.71, win2000.
Settings used :

Then, game was started with 1024768, played a track, changed to 640480, played a track, changed to 800*600, tried to play a track, but 2 FPS + screen corruption like this :

I got a bit more used to the controls, even managed to win twice in a row (still in easy mode :stuck_out_tongue: )

About your point 5. above, you are completely right.
Would it be possible to fake this different average, by turning the average normal toward the viewer progressively until the horizon, while using lower mipmaps of the reflected texture (integration of different directions) ?

Ok - I had the same bug on both GeForce 6 and 7:
http://ks-media.ehost.pl/images/bug/bug01.png
It’s a driver bug which my game unfortunately exposes. RGBA16F render targets gets corrupt this way sometimes.
As you can see the sky gets rendered properly - that’s beause it’s rendered with depth test disabled. Then ther’es the landscape - some pixels are not rendered and FPS is low (I guess it’s some kind of deadlock during depth test).
This happens only with RGBA16F render targets. More likely on 128MB GPU’s. That’s why I don’t re-create render target every time - first time it always works. It never happened with medium postprocessing since it uses RGB10A2 or RGBA8 format.
This error is more likely to occur if you change options several times.
I think I’ll do what I was supposed to do with this - automatically switch to medium postprocessing in case of trouble.

Would it be possible to fake this different average, by turning the average normal toward the viewer progressively until the horizon, while using lower mipmaps of the reflected texture (integration of different directions) ?
Yes. That’s the most sane approach. The same normal offset would change fresnel term results and vertical distortion.
Note that this way you can actually visualize places where wind hits water and makes many small waves like on this picture:
<a href=“http://danny.oz.au/travel/new-zealand/p/1769-lake-marian.jpg” target=“_blank”>
</a>
You just offset the normal vector and there you go - you reflect sky instead of mountain.
Of course when rendering reflection you must use larger FOV (at least vertically).

On default settings except resolution 1280 x 1024, FPS was 25 on my athlon 2800, radeon 9700 128MB

I lowered some settings, including resolution and was at 45FPS

The physics : the boat slides too much on the dirt
It’s difficult to control over the water. I press left and it turns left but when I let go of the key, it suddenly bounces right.
When the boat is jumping on the water, the water gets in the boat (you might want to hide it by remodelling the boats)

Have you coded your own physics?

Also, the music was a bit garbled.

On default settings except resolution 1280 x 1024, FPS was 25 on my athlon 2800, radeon 9700 128MB
Default? You mean with Radeon 9500 profile?
The game is supposed to run at about 20FPS - that’s what you need to precisely control the boat. More FPS means you can enable some more effects, unless you like 30+ FPS.

The physics : the boat slides too much on the dirt
Intended. Allows to cut corners (a little) if you do it right. Not meant for realism but for gameplay. It also forgives small errors.

I press left and it turns left but when I let go of the key, it suddenly bounces right.
This is proper behavior. Rear side of the boat is deeper in the water and it has vertical walls.
Note that when you want to turn right, engines start pushing rear of boat to the left - against the water. Thanks to that a force is produced that pushes the boat back and makes it change direction. When engines stop pushing rear of the boat to the left the boat will align itself back to current movement direction.
Rear of the boat must always be more resistant to sideways movement - otherwise you couldn’t go forward. Water pressing against front of the boat would make it spin around. So the rear of the boat is like airplane’s tail.
Still, it’s not simulation - you can make aggressive turns at high speed without the risk of rolling over and you can go fast withouth the risk of backflip.

the water gets in the boat
True but since all games have this I didn’t bother. Could be solved with pushing water down where boat is but it’s not that simple. Imagine boat slowly going deeper into water - if I keep lowering the water to prevent it from appearing in the cockpit - what should I do when boat will move entirely underwater? Suddenly make the lowered part of water pop-up? Or should I simulate water flowing over edges of boat and filling the cockpit? ( <- just kidding of course :slight_smile: )

Have you coded your own physics?
Yes. Not something to be proud of, but enough to simulate a few boats.
Next time I’ll probably use ODE with custom collision detection (for better performance).

Also, the music was a bit garbled.
Only music? That’s weird because I put all sounds and music into one buffer and I use BASSMOD to get buffer data for music. BASSMOD is so widely used in the demoscene that I doubt it has such problems. If the problem is on my side then it should also affect all sounds (I have my own sound engine).

Sorry I wasn’t very clear. I should have taken a screenshot. It was mostly on high settings by default, resolution was 800x600 originally I think so I just set that to 1280x1024
Getting rid of HDR helps the framerate.

Still, controlling the boat is difficult. You might want to make easy mode work more like a car.

True but since all games have this I didn’t bother. Could be solved with pushing water down where boat is but it’s not that simple. Imagine boat slowly going deeper into water - if I keep lowering the water to prevent it from appearing in the cockpit - what should I do when boat will move entirely underwater? Suddenly make the lowered part of water pop-up? Or should I simulate water flowing over edges of boat and filling the cockpit? ( <- just kidding of course :slight_smile: )
Nah, just hide it by remodelling the cockpit. Make the floor ticker or something. Pushing down the water surface is too much work, but also possible.

I think the physics isn’t bad. At one point while boat was bouncing around, the front of the boat entered the ground but overall, it’s fine.

I played the wav files I found. It sounded ok. SO not sure. Perhaps it was the music. Perhaps the engine sounds.

Hey V-man. Please edit your last post - use QUOTE block instead of CODE.

Nah, just hide it by remodelling the cockpit
If I move floor up, I’ll have to move all seats up and the player will have to move up aswell. In the end I’ll have to mount stering wheel to front window :smiley: Pushing down water surface and dealing with all the sideeffects would actually be more reasonable.

Well, I have to deal with 3 bugs first. And then perhaps I’ll add a feature or two. First extra feature I would have to implement would be multiplayer I guess :slight_smile:

Thanks for all the comments. Just keep’em coming.

It crashed when I run it today with that Win XP style “send a bug report to MS”. I just double clicked on it and nothing had changed since yesterday.
So I tried to run it again and it’s fine.

Do you render the scene into a FBO at every frame?
Just wondering why the frame rate would be so low.

It crashed when I run it today
Yes, that’s worrying a bit, but crashes seem very rare. Usually crashes occured on old drivers - I fixed a few things and recently I ran this game on GeForce FX with release 81 drivers.
If it crashes again then please send a few last lines from log file. Is your driver fresh ehough?

It was mostly on high settings by default
Then you were actually playing on detail higher than meant for your GPU :slight_smile:

Do you render the scene into a FBO at every frame?
Just wondering why the frame rate would be so low.
25 FPS at 1280 x 1024 is exactly what this game needs.

I only render full scene to FBO if postprocessing (HDR) is enabled.

I use FBO for the folowing:
-rendering cloud animation (if enabled)
-water reflection/refraction (water quality >= medium/maximum)
-water heightmap (when using 3d water or water quality >= high)
-water heightmap for physics (always)
-water normalmap (water quality >= high)
-speed meter in boat’s cockpit (player’s boat only)
-few fbo’s for HDR: full size, half size (if FP16 filtering not supported), quarter size, blurred, final overlay

Originally posted by k_szczech:
If I move floor up, I’ll have to move all seats up and the player will have to move up aswell. In the end I’ll have to mount stering wheel to front window :smiley: Pushing down water surface and dealing with all the sideeffects would actually be more reasonable.

Maybe it is possible to use the depth buffer to do the trick to some degree by drawing depth only geometry (something like cap) inside the cockpit after you draw rest of the ship and before you draw the water. This way the water inside the cockpit and below the cap will fail the depth test as if it is behind the ship.