Greetings fellow developers!
So, today I've seen an ad for yet another cloud gaming service and decided to write this.
Since I started developing games I haven't played many AAA games and even less on consoles. I have fond memories of the days I used to play F-Zero GX, which was incredible at 60hz on a CRT display. The controls were very tight and satisfying, and the game was so fast that playing it seemed impossible at first, but it was so well designed that it felt natural and rewarding to play it.
I haven't played the PS4 until recently when I visited a friend who has the Pro version. As a PC gamer I was expecting to relive some of the experiences of when I was a console gamer. Unfortunately I left disappointed. The problem was latency. The controls just weren't tight and responsive, even on top notch exclusive games. The TV was modern and on 'game' mode, and while that certainly still has some latency, alone it shouldn't be clearly noticeable. The problem is many (if not all) of the games I've played have a fair amount of latency "by design". I know that because I've seen presentations by the very developers of some of those games showing how they did it, and as a developer I'm guilty of that too.
The problem is in order to render fancier visuals and increase fluidity, games these days buffer frame tasks one way or another. To extract the maximum from modern hardware you need heavy parallelization in order to use all CPU cores. However, the throughput of a single system never scales linearly, and chances are it starts to scale terribly after a very few threads. In order to address that reasonably, games just run different (multithreaded or not) subsystems in parallel (as opposed to multithreaded systems serially), and to further reduce the holes in your thread pool you have to process them asynchronously. A popular way to do that is by treating your frames as interdependent data blobs, so even if a given thread just finished processing say the particles of frame 0, it can start processing the particles of frame 1 immediately after that if it's the best task for that thread at that point. It's efficient and works fine, the only problem is you need buffering and that means latency.
That is the current state of many AAA games. Of course designing better parallelized systems could help solve some of that, but that has a cost, and that's exactly my point. Currently CPUs scale mostly in number of cores, and I can only imagine the complexity involved in scaling systems to 32 or 64 cores. It's several orders of magnitudes more complex than simply distributing tasks as we do today. However, in the cloud none of that is a big problem. You can be inefficient and still provide the best experience at a profit. Developing efficient software to that extent is much more expensive than simply throwing more hardware at inefficient software, especially if you purchase hardware in large quantities directly from the supplier.
Considering that many console games run at reduced framerates, it's obvious that few frames of latency represent more than the internet latency from coast to coast. And latency of both internet and display/input devices should only get lower. So if you have a lot of horsepower to quickly render a frame, you can pay for the latency in data transmission very easily.
Besides that, modern games tend to be unresponsive. You have to wait for animations and other arbitrary delays, and many games also use 3rd order control for movement, what could be reduced by simply designing/coding the controls correctly. For camera controls, you could simply render the surroundings and transform the image in the client machine. Think of streaming a video on a cube/spheremap for example and rotating the camera locally (ofc you wouldn't use an actual cubemap nor uniform resolution).
I see a lot of comments regarding privacy because basically you'll be using somebody else's computer. While that's a very valid concern, most people simply don't seem to care about that (at least not enough to stop using Google Docs or other services), and even if they do, it's just for games anyway, you won't store the nuclear codes there (:trumpface:)... and in my perception not running code in the client machine is a much bigger pro than a con, because cheating is simply going to be impossible, so that's yet another reason why game development costs will lower considerably (depending on the game). Modding is of course going to be impossible without official support, but then again it's a minority of people who use mods.
Another thing to keep in mind is that the demand for AAA/hi-fi games on mobile devices is only increasing, and these devices have limited storage, limited power, limited battery life, and also don't have active cooling systems what prevents you from running demanding software for too long. And that will certainly not change considerably in the near future (to match modern gaming PCs) while their popularity should only increase.
For those reasons I'm convinced that cloud gaming is the future. I can't say that I'm happy with that realization to be honest, but seeing how modern games are actively abdicating their only technical advantage over cloud gaming (which is latency), I don't see how it can unfold differently. Also, besides the technical aspects, there are practical advantages too, you won't need all that hardware and cables. Basically you'll only need display and input devices. And these days even your light switch has hardware capable of decoding and transforming video.
My only worry is that game development won't be accessible anymore. These days anybody with a computer can learn to and develop games. PCs in my opinion were a revolution not because everybody could do spreadsheets, but because it was a machine capable of not only running but developing software. You had at your disposal (roughly) the same tools the developers had, and that is empowering. The difference between a user and a developer was mostly knowledge, which was very accessible if you're willing to invest the time. If cloud gaming catches on, who knows what the future holds. Maybe it'll all run on enterprise level specialized hardware you won't have access to except through some education program. Consoles these days aren't very accessible for indies, and it used to be much worse, I can only imagine what kind of restrictions cloud game development could have. Will they run the same APIs we use in the long run? If you have control over the hardware, you might want to develop software specifically for it.
You might have noticed that this post is also a rant on how AAA games these days are bad in terms of gameplay and mechanics. When I was a kid I was also on the 'hi-fi visuals' bandwagon, without knowing that in the long run that would cost almost everything I used to hold dearly in the games I enjoyed: from mechanics to interactivity to complexity, almost everything was corrupted or simplified in favor of larger audiences and fancier visuals to the point that many games are becoming slightly interactive movies. The tight arcade controls I used to love were replaced by floaty simulation controls, and gamedev became an obsession in simulating reality as accurately as possible. I can only assume that's what most of the AAA audience wants these days, and movies are doing very well in the cloud.
The games I enjoy these days are 99% indie, and they only exist because anybody can be an indie developer, you just need a PC and some determination. If the cloud happens to be a thing I can see that drastically changing.
I would like to know your opinions on this.