Sticky: Jittery-Jerky planes in formation flying

Started by krombit, September 30, 2007, 01:42:57 AM

Previous topic - Next topic

krombit

There was some initial comment about jittery remote planes discussed here (http://www.chocolatesoftware.com/forum/index.php?topic=649.msg3159;topicseen#msg3159) but nothing else has been mentioned since.

I have FSHost 3.2 with FSHostClient 1.1. As a test, I had 3 PCs (1 host, 2 clients) on the same LAN segment. Planes in the remote PC (ie the other plane that you are not flying) appears jerky when in close formation. This same 'bug' appears when testing with another distant client (ping of 110ms). The amount of jerkiness is about the same for the 'local remote' and 'distant remote'.

I wonder how M$ are doing this in FSX multiplayer? Is this another case of where M$ are using 'un-documented' APIs?

Weps

Has nothing whatsoever to do with undocumented API's.





Russell Gilbert

#2
Hi guys,

Yes, this is still a big pain in FSHostClient, and something that I definitely want to get fixed.  The problem is that when FSHostClient displays the remote "fake" plane to represent the other player, it tries to move it quickly enough that it'll look smooth, but it's unfortunately jumping around and looking all jittery.  I've seen the problem myself also.

There are several places where the problem could be, and I've spent quite a lot of time trying to figure it out.  So far though, I've been unable to find the solution.  First, it gets all the location data from the remote plane.  Then it moves the fake plane to the new location.  But if the location data isn't coming quickly enough from the other player, then it needs to do some hairy calculations to try to predict the movement, so it can do updates several times per second.  I think actually that the predicting part of it is ok, but when it gets the next real location update, for some reason it's jumping the plane backwards and forwards, and sometimes even sideways.

I think the reason why it doesn't happen when using FSX's built-in multiplayer system is that it's not having to do all the same calculations, since it has direct access to the information.

Anyway, it's at the absolute top of my priority list.  Hopefully I'll get a break soon from "real life" and dig into it again and get it figured out.  Sorry I don't have a better answer at the moment, but I'm definitely aware of the problem.

Russell

Kenny Fox

Hi Russell.

Russell a big thanks for your work on the FShost Client for FSX ;D There maybe a few bug, but it is still far better that going to Microsoft's gamespy! Anyways a big thanks agent.

Thanks
VATA Kenny
Senior Admin VintageATC ;D
Thank you
FSV1142 Kenny
fsvkenny@fsvintageair.com

DonOscar

Hi Russel,

first of all thanks a lot for this wonderful program. We area large FSX community in Spain and are currently evaluating the possibility of getting rid of MS IP network sessions and migrating our server to your FSHost systems. Now, the only issue we see at the moment concerns this jumping effect, as we often fly formations.

I'm not familiar with the algorithms used by FSX and FSHost to position planes, but what you describe in the various posts about this "bug" sounds to me like a problem of location updates when communication between hosts fails.

Now this is nothing new, but I was wondering if the solution to this could be to ignore the updated real position and always use the forecasted (and according to the latest available coordinates adjusted) values. As I understand the problem, this has to do with the fact that in case of forecasted position (which will never be the actual no matter how good the algorithm is) your program sends the outdated packages of data to the hosts and these apply outdated coordinates causing these jumping planes.

OK this was my humble knowledge about algorithms used in real time traffic modelling. Hope it is helpful,

cheers, keep up the great work

DonsOscar

Russell Gilbert

Hi guys,

Well, it's been just over a year since my last post about this, so it's probably time I updated everyone on the status of this problem.  It's not good, I'm afraid.  :(

I believe the main cause of the problem is SimConnect, which is the new system that Microsoft forced us all to switch our programs to when FSX came out.  Instead of using the multiplayer system that the last few versions of FS had used, they removed the multiplayer SDK (developer system, for programmers like me) completely and made us build our own multiplayer system in each of our programs, so they could use the GameSpy multiplayer system instead (which is proprietary, and completely closed-off to us).

Just to give you an idea of the impact of that, think about how the multiplayer system works in FS2004 and FS2002...  Two players are flying next to each other, and sending each other location updates.  Each player's FS uses the location updates to draw a fake plane in the other player's location to represent them.  That's why you see the other player's plane flying next to you -- your FS is drawing a fake plane there, and keeping it moving according to the location updates it's getting from that player.  And if the other player doesn't send an update for a while, your FS keeps moving the fake plane in the same direction it was moving in the last update, so when it finally does get another location update, the fake plane is pretty close to the correct position and it doesn't look like the fake plane is jumping around each time it gets an update.  The important thing here is that FS is keeping the fake plane moving automatically.

FSX has the ability to keep fake planes moving automatically too, but unfortunately that part of FSX was never designed to be used in a 3rd party multiplayer system (like with FSHost), so it's not an option for us multiplayer programmers.  Microsoft told us all that we had to build our own multiplayer system, and keep the fake planes moving ourselves by jumping them forward a little bit at a time, several times per second.  If we do it fast enough, and if our predictions are correct for where the fake plane should be according to the last known positions, then it looks smooth.  But the plane is essentially sitting still in the sky, like it's in slew mode, and then we hop it forward a little bit each time.  If the hops are fast and short enough, it's ok.

The problem seems to be related to the fact that FSX is moving your local plane, but FSHostClient is moving the fake plane.  In previous versions of FS, the sim itself was moving both, so it could keep the movements in sync.  Now the programs like FSHostClient have to move the fake planes using SimConnect, but SimConnect doesn't give us any way to keep our movements of the fake plane in sync with the movements of the local player's plane.  The result is that the two planes are constantly out of sync, and if they're both moving, the fake plane always looks like it's jumping forward and backward.  It's not really jumping backward, it's just that in the small amount of time between hops when the fake plane is frozen still, your local plane might hop a bit forward, so from your point of view the fake plane appears to be hopping backward.  Since they're not in sync, they always appear to be moving forward or backward relative to one another.  And as you may have noticed, if your plane is sitting still on the ground, the fake plane flies perfectly smooth -- that's because only one plane is moving, so we don't have the problem keeping the two movements in sync.

I posted a message about all of this on the FSDeveloper forums several months ago, challenging anyone to show me an example of this type of movement working with SimConnect.  Several of the top FS developers posted replies, and some tried various methods of fixing the problem, but nobody has yet figured out how to make it work.  My only hope is that the next version of FS will work better in the multiplayer environment.

You're welcome to read my two posts on the other forum (posts 1 and 7 in the thread), as well as the other programmers' replies.

http://www.fsdeveloper.com/forum/showthread.php?t=9240

Thanks,
Russell

wheelie

Wow, I read a lot of those posts about this topic and went cross-eyed trying to understand it. I am seriously impressed by the effort that you, Russell, and the other programmers have put into trying to resolve this problem.

I would like to make one comment: I don't think Microsoft are on top of the problem either. If I do an instant replay in FSX (best seen in the last two minutes when landing) and use the 'exterior position view' to watch the plane then it will jump around (mainly backwards and forwards) like another player's plane when using FSHostClient. However, if I use the 'tower view' then the plane is really smooth.

This seems to indicate to me that FSX itself has a problem when the viewpoint is moving at the same time as a 'plane' is moving and so FSX is not correctly predicting where the plane should be. Not wanting to point fingers but just maybe the problem is in FSX and not in FSHostClient.

Bob_8712E

Yes Wheelie, I agree.
The problem is definatly in FSX.
I've tried several Recorder programs and the playback is very smooth unlike the FSX positioning.

FlyingsCool

When in FSX viewing from outside the plane, the jumping around in the exterior view is the viewpoint jumping around.  If you change to locked spot view, the jumping around will stop.

FSVKenny

Hi Russell.

Russell, now that Lockheed has taken over FSX..... Now Prepar3D v2.1, is there anything more you can do with FSHost Client ??