Strazdas said:
You cannot offload rendering. I never claimed otherwise. You can offload Physics calculation, remaining the movement factor to be information recieved by the client. World of Tanks recently did server-based physics. They are not working on a hybrid where part of physics wil lbe calculated at user side and part at serverside because its a large strain on their servers as now they take most of the calculating load and thus they cant add all the physical structures they want (like turrets flying off from explosions).
Well, WOT seems to handle it with pings as low as up to 17ms. OF course thats server calculation and not cloud, cloud would add extra latency because my game would have to wait for somone to send his calcualtion results via his dialup from congo.
I can't speak about World of Tanks... never played it, so I can't comment. But, I can tell you categorically, as someone who's been developing video games for decades, you can't process anything that is frame critical - and let me clarify what frame critical means... it means you need the result of the calculation before you can render the next frame - anywhere other than locally if you want to maintain a stable frame rate of 30fps or above in any type of remotely fast paced game. Take a driving game, for example, if you send your inputs off to the cloud, and wait to get the resolution of the rigid body solver back from the cloud before rendering the frame, the game will be running at single digit frame rates if you're lucky, and the frame rate will vary wildly between frames as the latency on the data rate varies. Same with shooters (especially something running at 60fps like CoD)... if you wait for the physics on the player to be computed on a cloud before rendering the frame, you won't be anywhere near 60fps. And, of course, you can't defer calculations like these because you need to update object positions prior to rendering the frame. The same goes for collisions if the result of the collision is required prior to rendering the frame, which of course they typically are.
Strazdas said:
No, render rate cannot drop due to slow data transfer unless you transfer render data, which noone does. It stops and waits for response, which is lag, but this does not affect your actual framerate. dont confuse lag caused by ping and lag caused by slow hardware.
The more particle effects generation is a fair point, however this has nothing to do with internet speed but rather with how the game engine is set up and if it can handle many particles at once or not.
We're not talking about the length of time it takes to render a frame. We're talking about frame rate, which is a different thing altogether. Perhaps, not being an engineer, you're not quite understanding what FPS is...? If your game has to wait 100ms for a lump of data to arrive before it can render the frame, it doesn't matter whether you can render the entire frame in 1ms (you can't), because you've just had a delay of 100ms on top of that. Bang, your frame rate drops drastically. Frame rate is the TOTAL amount of time required to update and render a frame. If you're busy sitting waiting for some data from a server, that will affect your frame rate. And lets not forget: 16.66666ms is all you have to run at 60fps, 33.33333ms is what you get to run at 30fps.
Once again, with the particles, you're not quite understanding how game traffic works when an external cloud is involved. In your scenario of offloading it all to the cloud, if there are 20 people all blasting away with rocket launchers and blowing stuff up, the explosions will probably generate debris and particles. Every single client in the game will need to be told of the creation of these particles by the cloud (which increases the amount of data being sent... delay number 1), then each client has to create their own version of these particles and objects in their local simulation of the world (delay number 2), and then they all need to be rendered in the next frame (extra polys to process and render = delay number 3). And, of course, if all calculations are being done in the cloud for these particles (as in your scenario), the local client can't render the next frame until they've been notified of all the new particle positions. The more data this becomes, the longer it takes to transmit it, so you can see how this all adds up as the number of players increases, and this will, in turn, hit the frame rate. And now bear in mind that if you get a round trip to and from the cloud in less than 50ms you're doing really well, that would put your frame rate around 15fps - in the real world it would be less than this, because even if you have a speed of light connection to the cloud, you're at the mercy of the slowest client that's connected - the cloud can't send you a new update packet until it has all other clients' input data and has done a full processing update. This is why the best way to handle a situation like this is to have the arbiter (whether that be a server or the cloud) inform the clients that something has blown up, and the local client decides what debris it can handle (bearing in mind everything else that is in view on that particular client) and will process all physics and collision locally to avoid a synchronous reliance on the arbiter.
I'm not sure how many client/server or peer-to-peer network engines you've written, but I've written quite a few over the years, and they are complicated beasts. Keeping as much processing as is humanly possible local to the client removes a considerable amount of frame-lock reliance on the cloud/server.