By now, if you follow these things, you probably know the sordid story of DirectX 11 support in Crysis 2. Developer Crytek, a PC favorite, decided to expand into consoles with this latest release, which caused PC gamers to fear that the system-punishing glory of Crytek’s prior, PC-only games might be watered down to fit the inferior hardware in the console market. Crytek assured its fans that no such thing would happen and, in a tale told countless times in recent years, proceeded to drop the ball dramatically. Upon release, Crysis 2 supported only DirectX 9, with very limited user adjustments, like so many other games cross-developed for the consoles. The promised DX11 support was nowhere to be found. Although the game’s visuals weren’t bad looking as released, they fell far short of fulfilling hopes that Crytek’s latest would be one of those rare games capable of taking full advantage of the processing power packed into a state-of-the-art PC. Instead, the game became known as another sad example of a dumbed-down console port.
Months passed, and rumors about a possible DirectX 11 update for the game rose and fell like the tide, with little official word from Crytek. Then, in late June, Crytek and publisher EA unloaded a massive, PC-specific update to Crysis 2 in three parts: a patch to version 1.9 of the game weighing in at 136MB, a 545MB patch adding DirectX 11 support, and a hulking 1.65GB archive containing high-res textures for the game. An awful lot of time had passed since the game’s release back in March, but the size and scope of the update sure felt like a good-faith effort at making things up to PC gamers.
With the DX11 update installed, Crysis 2 becomes one of the most visually striking and technically advanced video games in the world. The features list includes a host of techniques that represent the cutting edge in real-time graphics, including objects tessellated via displacement mapping, dynamically simulated and tessellated water, parallax occlusion mapping (where tessellation isn’t the best fit), shadows edges with variable softness, a variant of screen-space ambient occlusion that takes the direction of light into account, and real-time reflections.
The highest profile of those features is probably tessellation, which seems to be the signature new capability of DX11 in the minds of many. Tessellation allows the GPU to employ its vast computing power to transform the low-polygon models used in most games into much higher-detail representations, with a relatively minimal performance cost. Used well, tessellation promises to improve the look of real-time graphics in some pleasant and impactful ways, eliminating—at long last—the pointy heads on so many in-game characters and giving difficult-to-render objects like trees much more organic external structures.
One of the major benefits of DX11’s tessellation capability is its dynamic and programmable nature: the game developer can ramp up the polygon detail only where needed, and he can scale back the number of polygons in places where they wouldn’t be perceived—say, in the interior of objects compromised of flat surfaces or in objects situated further from the camera. Such dynamic algorithms can maintain the illusion of complexity without overburdening the GPU’s geometry processing capacity.
Unfortunately, we have so far seen few examples of tessellation used well in a video game. That’s true in part because of the aforementioned scourge of console-itis (though the Xbox 360 does have limited tessellation hardware) and in part because game developers must create higher-detail versions of their underlying 3D models in order to insert them into games—not exactly a cost-free proposition.
With its DX11 update, Crysis 2 had the potential to be one of the first games to offer truly appreciable increases in image quality via tessellation. A busy summer has kept us from spending as much time with the DX11 update as we’d like, but we saw some intriuging things in Damien Triolet’s coverage (in French) over at Hardware.fr. (English translation here.) We won’t duplicate all of his hard work, but we do want to take a look at one aspect of it: a breakdown of Crysis 2‘s use of tessellation using a developer tool from AMD called GPU PerfStudio.
GPU PerfStudio is a freely available tool for Radeon graphics cards, and its integrated debugger can analyze individual frames in a game to see where GPU time is going. The work needed to construct each frame can be broken down by individual draw calls to the DirectX 11 3D API, and a visual timeline across the bottom of the screen shows which of those draw calls are taking longest to complete. PerfStudio will even let you take a look at the DX11 shaders being used in each draw call, to see exactly how the developer has structured his code.
When we fired up Crysis 2 in its DirectX 11 “ultra” quality mode, we saw that some obvious peaks were related to the creation of tessellated objects. Not only could we see the hull shaders used in the first stage of tessellation—proof that tessellation was in use—but we were also able to see the polygon meshes output by the tessellation process. We noticed some of the same things Damien pointed out, along with a few new ones, including one of the true wonders of this game’s virtual world.
The world’s greatest virtual concrete slab
Yes, we’re talking about a concrete barrier of the sort that you’ll find lining highways all across the country at this time of the year. Also known as a Jersey barrier, these simple, stark structures are strewn liberally throughout the mid-apocalyptic New York cityscape in Crysis 2, providing cover and fortifying certain areas. You might not know it, and you almost surely didn’t expect it, but these flat concrete blocks are one of the major targets for enhancement in the DirectX 11 upgrade to the game.
Here’s a look at the DX9 and DX11 versions of the Jersey barrier. Rather than resize these first few screen shots, I’ve cropped them to provide you with a pixel-for-pixel capture of the game’s imagery.
You can see that there’s not much visual difference between the two. The biggest change is the little “handles” atop the slabs. In the DX9 version, they’re flat and just textures. In DX11, they appear to be real structures protruding from the top of the barrier. I think there may be higher-quality textures in use in DX11, but some of the difference there may be the result of the fact that I haven’t duplicated the camera position precisely between the two shots. Whatever the case, the visual improvement when moving from DX9 to DX11 is subtle at best.
However, in the DX11 “ultra” mode, the handling of this particular object takes up a pretty good chunk of GPU time during the creation of this frame. Why? Well, have a look at the output of one of the most time-intensive draw calls:
Yep, this flat, hard-edged slab is one of the most highly tessellated objects in the scene. The polygons closest to the camera are comprised of just a few pixels each. Further from the camera, the wireframe mesh becomes a solid block of red; there, we’re probably looking at more than one polygon per pixel. Those are some very small polygons indeed.
Let’s move around and have another look at the same barrier from the side, so we can get a cleaner look at its geometry.
These barriers a strewn all over the streets. Let’s take a look at another one from a different part of the game.
Yes, folks, this is some truly inspiring geometric detail, well beyond what one might expect to see in an object that could easily be constructed from a few hundred polygons. This model may well be the most complex representation of a concrete traffic barrier ever used in any video game, movie, or any other computer graphics-related enterprise.
The question is: Why?
Why did Crytek decide to tessellate the heck out of this object that has no apparent need for it?
Yes, there are some rounded corners that require a little bit of polygon detail, but recall that the DX9 version of the same object without any tessellation at all appears to have the exact same contours. The only difference is those little metal “handles” along the top surface. Yet the flat interior surfaces of this concrete slab, which could be represented with just a handful of large triangles, are instead subdivided into thousands of tiny polygons.
Venice in Gotham
Another of Crysis 2‘s DX11-exclusive features is, as we’ve mentioned, dynamically simulated and tessellated water.
Gazing out from the shoreline, that simulated water looks quite nice, and the waves roll and flow in realistic fashion.
GPU PerfStudio gives us a look at the tessellated polygon mesh for the water, which is quite complex. It’s hard to say for sure, but the tessellation routine doesn’t appear to be scaling back the number of polygons dynamically based on their distance from the camera. As a result, the mesh dissolves into a solid purple band of pixels near the horizon. Still, the complexity is used impressively; the water is some of the most convincing we’ve seen in any game.
From the same basic vantage point, we can whirl around to take a look at the terra firma of Manhattan. In this frame, there’s no water at all, only some federally mandated crates (this is an FPS game), a park, trees, and buildings. Yet when we analyze this frame in the debugger, we see a relatively large GPU usage spike for a certain draw call, just as we saw for the coastline scene above. Here is its output:
That’s right. The tessellated water mesh remains in the scene, apparently ebbing and flowing beneath the land throughout, even though it’s not visible. The GPU is doing the work of creating the mesh, despite the fact that the water will be completely occluded by other objects in the final, rendered frame. That’s true here, and we’ve found that it’s also the case in other outdoor areas of the game with a coastline nearby.
Obviously, that’s quite a bit needless of GPU geometry processing load. We’d have expected the game engine to include a simple optimization that would set a boundary for the water at or near the coastline, so the GPU isn’t doing this tessellation work unnecessarily.
A happier example
Not all of the additional polygons in the DX11 version of Crysis 2 are wasted—far from it. For instance, we were looking for tessellated objects in the scene above, when we saw this:
Those bricks alone the side of the window are incredibly detailed and are almost surely the result of tessellation with displacement mapping. In the DX9 version of the game, those bricks won’t have individual contours or variation like that. Make no mistake: this is a lot of polygons, again approaching one poly per pixel in places. Still, this is an addition to the game that genuinely improves image quality.
Unfortunately, because there’s a little patch of water out on the horizon, this entire area has a tessellated water mesh beneath it.
One complex scene
DirectX 11 tessellation and some of the other effects have been added into Crysis 2 somewhat haphazardly after the fact, and some scenes have little or no such “enhanced” content. Others, though, are chock full of it. We’ve seen a few examples of specific tessellated objects; now let’s take a closer look at a frame that ties a bunch of these elements together.
We’re back in the first level of the game, having just emerged into the city for the first time. The building we were in is a tangled wreck of debris. Again, these are some pretty nice visuals for a modern game. The splintered wood and rubble is complex enough to look relatively natural and realistic, for the most part.
The wood on the floor isn’t just a flat texture mapped to a flat surface. Instead, the boards are angled and warped—and tessellated heavily. Some of the boards really are just long stretches of flat surfaces, though, and even those are comprised of many thousands of tiny polygons.
The displacement-mapped bricks that we saw in the prior scene are back here, covering a partially destroyed wall. Once again, they look very nice, and the polygon counts are huge.
The splintered wood supports in the scene are also heavily tessellated, so much that the mesh begins to look like a solid surface.
A closer look at some of that tessellated wood reveals some straight, rectangular planks. The only really apparent complexity is at the splintered ends of one plank, but even those spikes aren’t terribly jagged. They’re just a handful of sharp points.
Amazingly, the flat window frame, the splintered plank, and the interior wall are all made up of incredibly dense polygon meshes.
Pulling back to our full scene once again, we note that beneath it all lies a blanket of wavy water, completely obscured but still present.
So what do we make of this?
Crytek’s decision to deploy gratuitous amounts of tessellation in places where it doesn’t make sense is frustrating, because they’re essentially wasting GPU power—and they’re doing so in a high-profile game that we’d hoped would be a killer showcase for the benefits of DirectX 11. Now, don’t get me wrong. Crysis 2 still looks great and, in some ways at least, is still something of a showcase for both DX11 and the capabilities of today’s high-end PCs. Some parts of the DX11 upgrade, such as higher-res textures and those displacement-mapped brick walls, appreciably improve the game’s visuals. But the strange inefficiencies create problems. Why are largely flat surfaces, such as that Jersey barrier, subdivided into so many thousands of polygons, with no apparent visual benefit? Why does tessellated water roil constantly beneath the dry streets of the city, invisible to all?
One potential answer is developer laziness or lack of time. We already know the history here, with the delay of the DX11 upgrade and the half-baked nature of the initial PC release of this game. We’ve heard whispers that pressure from the game’s publisher, EA, forced Crytek to release this game before the PC version was truly ready. If true, we could easily see the time and budget left to add PC-exclusive DX11 features after the fact being rather limited.
There is another possible explanation. Let’s connect the dots on that one. As you may know, the two major GPU vendors tend to identify the most promising upcoming PC games and partner up with the publishers and developers of those games in various ways, including offering engineering support and striking co-marketing agreements. As a very high-profile title, Crysis 2 has gotten lots of support from Nvidia in various forms. In and of itself, such support is generally a good thing for PC gaming. In fact, we doubt the DX11 patch for this game would even exist without Nvidia’s urging. We know for a fact that folks at Nvidia were disappointed about how the initial Crysis 2 release played out, just as many PC gamers were. The trouble comes when, as sometimes happens, the game developer and GPU maker conspire to add a little special sauce to a game in a way that doesn’t benefit the larger PC gaming community. There is precedent for this sort of thing in the DX11 era. Both the Unigine Heaven demo and Tom Clancy’s HAWX 2 cranked up the polygon counts in questionable ways that seemed to inflate the geometry processing load without providing a proportionate increase in visual quality.
Unnecessary geometric detail slows down all GPUs, of course, but it just so happens to have a much larger effect on DX11-capable AMD Radeons than it does on DX11-capable Nvidia GeForces. The Fermi architecture underlying all DX11-class GeForce GPUs dedicates more attention (and transistors) to achieving high geometry processing throughput than the competing Radeon GPU architectures. We’ve seen the effect quite clearly in synthetic tessellation benchmarks. Few games have shown a similar effect, simply because they don’t push enough polygons to strain the Radeons’ geometry processing rates. However, with all of its geometric detail, the DX11 upgraded version of Crysis 2 now manages to push that envelope. The guys at Hardware.fr found that enabling tessellation dropped the frame rates on recent Radeons by 31-38%. The competing GeForces only suffered slowdowns of 17-21%.
Radeon owners do have some recourse, thanks to the slider in newer Catalyst drivers that allows the user to cap the tessellation factor used by games. Damien advises users to choose a limit of 16 or 32, well below the peak of 64.
As a publication that reviews GPUs, we have some recourse, as well. One of our options is to cap the tessellation factor on Radeon cards in future testing. Another is simply to skip Crysis 2 and focus on testing other games. Yet another is to exclude Crysis 2 results from our overall calculation of performance for our value scatter plots, as we’ve done with HAWX 2 in the past. We haven’t decided exactly what we’ll do going forward, and we may take things on a case-by-case basis. Whatever we choose, though, we’ll be sure to point folks to this little article as we present our results, so they can understand why Crysis 2 may not be the most reliable indicator of comparative GPU performance.