Being a game developer, I often think about how we evaluate the quality of the games we make, as well as those we play. I know everyone has their own subjective list of what is important, but there have been some metrics that as an industry we have embraced. The one that comes to mind for today is “Frames Per Second.” Love it, hate it, but for better or worse we measure games, hardware, etc. by that simple little number. I don’t think that number tells the whole story, but it does measure one important element. Why? Because it helps us measure the responsiveness of the game we are playing. Our input, and the games output are directly affected by the latency at which information and commands can be transferred. The faster the input and the output, the more enjoyable the experience.
Way back when, 30 FPS was the gold standard that every developer wanted to achieve. That goal was due in part to technological limitations and considerations. There was however another factor in setting that goal. Both developers and players believed 30 FPS would be good enough. Our experience at the time made it difficult to believe that designing a game and technology to run at 60 FPS would be worth the potential sacrifice in fidelity (both visual and simulation). Consider that at 30 FPS you have 33 milliseconds of time for rendering, simulation, audio, etc. Moving your frame rate target means you now have to fit in only 16 milliseconds. Ouch. That is a pretty big risk to take. Especially if you aren’t sure gamers really want it.
Fast forward to today, and I think we are in a very interesting place. I’d argue that for most first person style games, 60 FPS is your target. While it’s been a slow evolution in the market, the main driver for this has been that more and more players haven been able to achieve 60 FPS due to the rapid development of PC hardware. And once you’ve played a game at 60 FPS, do you really want to go back to 30?
So what about other game genres? It just so happens that Oxide, in partnership with Stardock, has just produced an RTS. Ashes of the Singularity. Big maps, tons and tons of units, …. good stuff. During early access and all through release I think it’s important to read through the forums, user reviews, etc. My goal is pretty simple. Figure out what’s going right, and also where we can improve the game for our players. So one night while gathering feedback, I came across a negative review that stuck with me and really made me think.
It was a very short negative review,
“The game only runs at 45 FPS on my machine”.
The player had a moderate gaming machine, and my initial thought was, “Hey, that’s pretty damn good for a large scale RTS like Ashes, on a machine like that”.
I’ve worked on a lot of RTS games, and played a lot of RTS games. Generally, they all struggle to maintain 30 FPS during heavy combat or other periods of heavy gameplay due to serial workloads on the CPU. Ashes is in an interesting position as the Nitrous engine it’s built on is designed for heavy distributed workloads, and in this case it was the GPU that was holding him back. But that’s not really what I want to focus on.
For me, the real interesting part of his feedback is that 45 FPS in an RTS isn’t good enough anymore. Not when you are used to playing games at 60. And hey, you know what? I want all my games at 60 FPS too. It doesn’t really matter to the gamer that it’s generally harder to accomplish 60 FPS in an RTS, it’s what the market now demands.
60 is the new 30.
But not for long. Why? Well, a couple of reasons.
This next generation of graphics cards being produced will be able to drive games faster and cheaper than ever before. As more players get access to that class of performance, their expectations will increase. In addition, newer graphics API’s like DirectX 12 allow the developer to directly support multi-GPUs. No more waiting for a specific profile for your game! Pop in another card and boost your frame rate.
Adaptive Sync monitors are becoming the standard. Not only does this give gamers access to higher frame rates than 60, but it also gives developers a bit of flexibility since they don’t have to target a fixed refresh rate.
Virtual Reality requires 90 FPS or greater. Yes, the technology is in it’s infancy, but if you’ve tried it I think you will agree that it has huge potential. While early adopters may be the main users jumping on board now, the technology is maturing at a rapid pace and will become more accessible quickly.
With multiple avenues currently available for users to experience games at 90 FPS, how much longer will 60 FPS remain the standard target frame rate? I don’t think it’s going to be very long at all.
But, I’ve left out a key component. The CPU. The heart of the machine.
Remember back at the beginning of this blog when I mentioned how painful it can be for a developer to make the leap from 30 FPS to 60 FPS? Well going to 90 FPS is even trickier. 11 milliseconds are all you get to render and simulate your frame. Audio, Graphics, AI, Physics, Network, IO, etc. And the CPU has to drive it all. In addition, the CPU has to support your OS and all of the services you have running. The game can’t monopolize the CPU or else the entire machine will starve. An under-powered CPU at best will cause noticeable hitches (which are even more objectionable in Virtual Reality). At worst, well, those important OS services fail to respond in time resulting in outright failure of the game.
The challenge becomes even more daunting when you consider the scope of your game. With an RTS the number of units + projectiles tend to be a good approximation. Do you want to be able to handle 1000 units all in combat? 2000? More? For Ashes of the Singularity, we certainly wanted more. But where do you find the milliseconds you need? Well, those extra milliseconds are right there on the CPU just waiting to be used.
Every additional core or thread the developer can utilize will in theory give us back another 11 milliseconds. So at 4 cores we’d get a whole 44 milliseconds, at 8 cores we get 88 milliseconds, 16 cores …. a whopping 176 milliseconds to simulate, render, …. whatever your game demands. As the architect responsible for the Nitrous task scheduler, I’m personally aware of how hard it is to achieve perfect scaling in real world applications. However significant results can be achieved by scaling, and now more than ever.
So why am I so optimistic about us seeing real results from multi–core CPU’s now? In my view there have been some incredibly significant changes in the industry. The advent of Graphics API’s (DirectX 12, Vulkan) that are designed specifically with multi-core is a key element in enabling developers to take advantage our multi-core CPUs.
In addition, multi-core CPUs are available everywhere. Just take a look at your console … how many cores does it offer right now that developers are focusing on? Titles are becoming less exclusive, and that technology makes its way back to the PC space quite quickly. The PC space itself is moving faster than ever to take advantage of multi-core as well. The availability of consumer 6,8,10 core CPU’s is steadily rising. With the advent of faster ram (DDR4) to feed those CPU cores, the PC space has a lot to offer developers.
The Tools and libraries which allow developers to take advantage of multiple cores have also never been better, and from Oxide’s perspective we are seeing real world results. Whether you use Intel’s Threading Building Blocks, the Nitrous Thread scheduler, or someone else’s … high quality libraries exist which enable developers to quickly unlock the power of their CPU.
Current CPU profilers are also quite good, and I’m constantly impressed with the amount of information you can extract from them if you take the time. For me what has been extremely helpful in analyzing the Nitrous engine and Ashes is newer concurrency views where you can extract information about each CPU core for every millisecond running.
Where does that leave us? How long will take before 90 is the new 30? For me it’s somewhat interesting. On hardware you can buy today, I can load up Ashes of the Singularity and play at 90 FPS. And that is on a large-scale RTS.
So maybe tomorrow is already here today.