Private FPS challenge

[quote]If you had an object graph with a string somewhere in the middle that changed length, only the changed data would be sent (with a tiny bit of overhead for the copy/append command bytes).
[/quote]
Cool, it’s much smarter than I thought it was.

I tried the DeltaCompressor on the world state sent from the server to the clients. It went from around 750 to between 50 and 150 bytes :slight_smile: Although it seems to be a bit buggy. I keep getting the following exception:


Caused by: com.esotericsoftware.kryo.SerializationException: Invalid delta command: -105
        at com.esotericsoftware.kryo.compress.Delta.decompress(Delta.java:256)
        at com.esotericsoftware.kryo.compress.DeltaCompressor.decompress(DeltaCompressor.java:82)
        at com.esotericsoftware.kryo.Compressor.readObjectData(Compressor.java:101)
        at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:566)

Maybe I’m doing something wrong.

Here is the screenshot that I promised:

http://home.halden.net/tombr/fps/images/fps_screen02.jpg

That’s a mighty pretty skybox.

Deadline update!

Everything is up and running, tho the networking is a bit over optimistic and naive for the moment (Read: It’s letting the client decide a couple of things…).

I will post an update, with pictures, tomorrow.

hehe, just what the world needs. Yet another scenegraph :stuck_out_tongue:
[/quote]
One more for tensei to validate for his master thesis. :smiley:

Btw, gotta love those normal maps! Looking good tom.

Also, looking forward to feel the freedom of jetpacks tensei! ;D

Well, here’s the promised pictures update!

I’ve implemented dynamic shadows with an early version of shadow mapping. It only uses 2x2 PCF (percentage-closer filtering) and nothing more.
This can be seen by the rough edges on the shadows.

I’ve also made a very easy user interface. Just using sprites and text. No fancy window boxes etc.
I did plan on using Awesomium… but since I code in VS2010 I had to use the C API instead of the C++ API.
I could have handled it, but the only example/sample/tutorial was a ported C++ example. Nothing more provided.

I did make the example work, by having a box in 3D which presented a website live. But I didn’t get the interaction part to work. And for a menu, that is quite essential.
So I stopped pursuing that and instead just made it work with sprites and text.

(Right click and open image in new tab or view image, if the details are too small.)

This is the main menu.

This is the in-game menu.

And lastly the scoreboard. It sorts the players on score and team.

The networking is also up and running using RakNet. But still in a very early phase. The green box is a network player.
(Luke is the listen server and running on a 60 hz screen, hence the 60 fps. Anakin is the client and running on a 120 hz screen.)

I also mentioned in an earlier post that the bullet KinematicCharacterController used the look vector in the jump algorithm. I’ve also noticed that it seems to be using the walk direction as well in the algorithm.
So I have to see if I can find a fix for that. Or just make my own implementation.

libgdx had an Awesomium wrapper (JNA) at one point, now deprecated. FWIW, it might be helpful as example code. Input:
https://code.google.com/p/libgdx/source/browse/deprecated/awesomium/gdx-awesomium-tests/src/com/badlogic/gdx/awesomium/GLTest.java#88
Wrapper (though not very interesting as it doesn’t add much to the native API):
https://code.google.com/p/libgdx/source/browse/#svn%2Fdeprecated%2Fawesomium%2Fgdx-awesomium%2Fsrc%2Fcom%2Fbadlogic%2Fgdx%2Fawesomium
Why no Java? :stuck_out_tongue: At any rate, looking very nice enjoyLuke!! 8)

Hmm, it is possible that it is bugged. :frowning: Unit tests? What unit tests!? :wink:

Cool. I didn’t know you were doing shadows. And the menus look nice.

I ported the latest KinematicCharacterController to JBullet. I did not see the look vector or walk direction bug, but I set the y component to 0. Although there are a couple of other problems. Walking off a ledge wont make it use the vertical velocity when falling. It will instead use the step height and it falls very fast. My other problem is that I’m using this on the server where I have to rewind and reapply the simulation. This means I will have to store away the internal state of the KinematicCharacterController. Hopefully wont be a big problem.

If I get around to it I will try to make a test case. I can try to write it to a separate kryo and somehow grab the bytebuffers and reproduce it somehow. Not on the top of the todo list though.

You should try variance shadow mapping. It’s really easy to implement, good quality and faster than PCF with same quality. This also usually give you change to use smaller shadow map textures.
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch08.html
http://fabiensanglard.net/shadowmappingVSM/index.php

I implemented it for open gl es and performance is great even with android. I use (256x256)^2 shadow map(128 look ok too) with 9x9 kernel gaussian blur pass.

The visuals for both of your games look very impressive, I really feel like I’m presenting the short end of the stick here in terms of visual fidelity. I will definitely work more on the visuals, I am currently looking into deferred rendering.

Can definitely see the influence from CS on your score screen Luke :wink: Are you planning on showing the fps for each player, or is it just for debugging?

I know I know… I’m the black sheep in this thread… :expressionless:
And thanks! :slight_smile:

I will definitely take a look at that, thanks. It’s not my priority for the moment, so I’ll have to endure my shadows a bit longer.

You are very much correct sir! ;D
CS is my influence all over. And yes, I am actually planning on showing the fps for each player. :slight_smile:

I consider myself done with the character model and animation. Mad artistic skillzzz!

http://home.halden.net/tombr/fps/images/fps_character01.jpg

It’s time to start thinking about bots. Found a kind of Java reimplementation of recast at http://www.critterai.org/. Managed to generate a navigation mesh and do a navigation query.

http://home.halden.net/tombr/fps/images/fps_navmesh01.jpg

Next is to see if I can get a bot to follow the path. Not sure if I will manage by just generating the input. I might have to cheat.

This is such an awesome thread! Huge respect for those that’re working on these. It’s looking neat guys :slight_smile:

EDIT: Fak. I’m gravedigging. It had a “new” sign on it, and was on the frontpage. I guess I don’t visit this section of the forums very often. Bah!