Original Post — Direct link

Edit: /u/FGS_Gerald replied with an explanation from an engineer:

Hello! I connected with one of our engineers to help shed some light on SnowPlay and how it works, as illustrated in the GIF from our Kickstarter campaign.

First, the OP is correct in that SnowPlay uses a deterministic lockstep (as opposed to a client/server) network model. He is correct that every input is sent to all clients to be handled deterministically.

What’s missing from his explanation is that "time" is an input, just like unit commands are inputs. Each client needs to be deterministically told how much time to step the simulation forwards.

When rollback is OFF, the client blocks until it receives a "time" input that allows it to step the simulation forwards. When rollback is ON, the client assumes that a "time" input will be eventually received and steps the simulation forward predictively (predicting that there are no other user inputs in the meantime). If it later receives an input other than "time" that should have happened, it will load the simulation state at that input's time and then process it deterministically.

In the Kickstarter GIF, the network conditions were simulated using a program called clumsy, which simulates a loss of incoming packets caused by lag, drops, throttling, tampering, etc. Many players in online games experience degraded or unreliable network conditions and packet loss for a variety of reasons. This simulation was generated to illustrate how rollback can help mitigate the impact of that packet loss on the gameplay experience.

Rollback may not necessarily mean much to players who have excellent and reliable broadband access, but to those that it helps, it can help a lot. It has resulted in significant improvements to performance and quality of life for some of our players in underserved regions such as Australia/NZ and South Africa, for example. You can also find testimonials from competitive Stormgate players who have been able to compete in overseas tournaments and win, which is not typical for other games in this category.

I hope that helps explain how it works.

https://reddit.com/r/Stormgate/comments/1f7s2jb/frost_giants_snowplay_gif_in_the_kickstarter_is/llpcxbc/


In Stormgate's Kickstarter campaign tab, Frost Giant offers this GIF as an example of their revolutionary Snowplay technology:

Rollback Off vs Rollback On

While I have no concerns over the Rollback On side, the Rollback Off side is so incredibly misleading it's arguably outright dishonest and deceptive.

RTS games such as StarCraft 2 and presumably Stormgate use a networking model called "deterministic lockstep". This is a very different system from the networking solution commonly used in first person shooters, which is why a custom networking solution is necessary when using Unreal Engine to create an RTS. In a typical FPS, the server sends your game client position updates of relevant actors (where an "actor" is basically anything that Unreal Engine renders). Your client then uses that data to determine where each actor should be rendered on each frame, interpolating between locations as necessary so that actors move smoothly on your screen regardless of the server tick rate.

When using deterministic lockstep, actor properties aren't transferred between a client and the server. Instead, data about user inputs is transferred instead. This is critically important as it is far cheaper to send input data than it is to send a constant stream of updates for unit properties every tick. With the traditional FPS model, you'd get a stream of position updates for every unit 64 times per second (due to Stormgate's 64Hz server tick rate). With deterministic lockstep, your client only needs to send a message to the server whenever you issue a command like attack-moving, and no additional network traffic is needed to simulate the command.

So how does this tie into the GIF that Frost Giant shared? The key is that once the server acknowledges your input and notifies your client of what game tick the command will take place on, all subsequent simulation is handled by your client. If you've ever played SC2 on server located on a different continent, you'll have seen this effect. Units will play their voiceline as soon as you issue the command, but they won't immediately begin following the command because the server hasn't acknowledged the command yet. Once the server acknowleges the command, your units follow the command without any stutter or hitching. This is because the command is entirely simulated locally, so the only latency caused by the network is from the initial command and not the per-frame updates.

In the GIF that Frost Giant shared, the Rollback Off side is clearly not using deterministic lockstep. If it were, there should be a delay between when the command is issued and when the dog begins moving. The dog should then smoothly move to the targeted location without locking up like what we see in the GIF. This would still be enough to show the improvement from Snowplay since a simulated high latency network connection (say 300ms ping) would translate to over 600ms of delay between when the command is issued and when your client can start simulating it. This would not affect the Rollback On side since with rollback, your client assumes that the command will be accepted by the server and rolls back the game state if that assumption is broken.

My best guess as to what Frost Giant is showing in the Rollback Off side of the GIF is Unreal Engine's standard networking with high packet loss. However, even if that assumption is true, Frost Giant may still have crippled Unreal Engine to make their Snowplay tech look better.

Unreal Engine has shipped with an actor component called a Character Movement Component since at least Unreal Engine 4 (4.27, 5.4). This component offers a networking implementation suitable for the most common use cases, and supports clientside prediction - aka what Frost Giant advertises as Snowplay's defining feature. Even in a high packet loss environment like what I'm speculating was used, the Rollback Off side can still look significantly better using only networking code provided out of the box with Unreal Engine.

To be clear, I am not saying that Unreal Engine's built in networking component would be suitable for full scale use in an RTS. However, it's still extremely misleading to suggest that the game would look the way that Frost Giant is claiming with their Rollback Off side. The most accurate comparison in my opinion would be the scenario where you issue a move command and the dog sits there for a significant amount of time due to network latency. That's something that Frost Giant should be able to simulate by using Snowplay with rollback off, or using SC2 with high latency. Regardless, based on the knowledge I have of game networking and Unreal Engine, I don't consider the scenario shown in the Rollback Off side to be at all realistic to RTS networking.

If anyone is interested in the more technical details, I recommend reading these articles:

External link →
3 months ago - /u/FGS_Gerald - Direct link

Hello! I connected with one of our engineers to help shed some light on SnowPlay and how it works, as illustrated in the GIF from our Kickstarter campaign.

First, the OP is correct in that SnowPlay uses a deterministic lockstep (as opposed to a client/server) network model. He is correct that every input is sent to all clients to be handled deterministically.

What’s missing from his explanation is that "time" is an input, just like unit commands are inputs. Each client needs to be deterministically told how much time to step the simulation forwards.

When rollback is OFF, the client blocks until it receives a "time" input that allows it to step the simulation forwards. When rollback is ON, the client assumes that a "time" input will be eventually received and steps the simulation forward predictively (predicting that there are no other user inputs in the meantime). If it later receives an input other than "time" that should have happened, it will load the simulation state at that input's time and then process it deterministically.

In the Kickstarter GIF, the network conditions were simulated using a program called clumsy, which simulates a loss of incoming packets caused by lag, drops, throttling, tampering, etc. Many players in online games experience degraded or unreliable network conditions and packet loss for a variety of reasons. This simulation was generated to illustrate how rollback can help mitigate the impact of that packet loss on the gameplay experience.

Rollback may not necessarily mean much to players who have excellent and reliable broadband access, but to those that it helps, it can help a lot. It has resulted in significant improvements to performance and quality of life for some of our players in underserved regions such as Australia/NZ and South Africa, for example. You can also find testimonials from competitive Stormgate players who have been able to compete in overseas tournaments and win, which is not typical for other games in this category.

I hope that helps explain how it works.