Please be advised that these issues cannot be completely resolved by an NVIDIA driver. The developer will need to make code changes on their end to fix the issues on GeForce GPUs as well. As a result, we recommend you do not play Tomb Raider until all of the above issues have been resolved.
For this story we engaged with Nvidia and AMD to hear both sides of the GameWorks debate and get to the bottom of the issue. And I’m quite pleased to say that both parties were very receptive. There’s been a lot of confusion, a lot of hearsay, misconceptions and mischaracterizations around several aspects of this vital issue that we mean to address head-on today. And with the help of both Nvidia and AMD we’re hoping that we will come out with a clear understanding of both perspectives at either end of the discussion table and perhaps even find common ground from which potential solutions can spawn.
What GameWorks Is And Why It Exists
GameWorks is a developer program set-up by Nvidia to provide game developers with a collection of graphics libraries and tools aimed at improving the visual quality of games. It includes technologies such as PhysX – Nvidia’s proprietary physics engine – as well as VisualFX which encompasses a number of Nvidia optimized rendering techniques and in-game visual effects. These include things like shadows, anti-aliasing, depth of field, global illumination, hair simulation, ambient occlusion, lighting and other effects.
Below you will find the VisualFX solutions as listed on Nvidia’s website.
VisualFX provides solutions for rendering and effects including:
- HBAO+ Enhanced Horizon Based Ambient Occlusion
- TXAA Temporal Anti-aliasing
- Soft Shadows Improves on PCSS to reach new levels of quality and performance, with the ability to render cascaded shadow maps
- Depth of Field Combination of diffusion based DOF and a fixed cost constant size bokeh effect
- FaceWorks Library for implementing high-quality skin and eye shading
- WaveWorks Cinematic-quality ocean simulation for interactive applications
- HairWorks Enabling simulation and rendering of fur, hair and anything with fibers
- GI Works Adding Global Illumination greatly improves the realism of the rendered image
- Turbulence High definition smoke and fog with physical interaction as well as supernatural effects
Nvidia told us about several motivations which formed the primary driving force behind the development of the GameWorks program. For starters the program would allow the company to both widen its scope of reach and speed up the adoption rate of its technologies. The company had grown frustrated from how slowly things moved and it had to accelerate the turnover of its investment in this field. Faster and wider adoption means that more games can leverage more of Nvidia’s tech. This in turn translates to the creation of more games where the company can positively influence both the performance and the visuals to offer users of its latest GeForce products a better experience. But perhaps more importantly it gives the company a competitive advantage by which it can justify its investment.
We’re told that the rate of adoption was lacking because games had grown more complex and so had the visual effects and rendering techniques in these games. By offering developers the convenience of an easy to integrate dynamically linked library – essentially a middleware solution – that’s already optimized for Nvidia’s hardware, it can cut back tremendously on the development time and allow game developers to dedicate their resources to focus on other areas in their games.
The fact that Nvidia maintains tight quality control measures over its GameWorks libraries means that it can guarantee the level of quality and performance of each feature once it’s in the game. It also means that the company can more quickly and readily update and iterate on each library to introduce better visuals and superior performance characteristics on a regular basis. This in turn gives Nvidia a more authoritative say in how the feature runs and looks in the game, after all it is its intellectual property.
How Nvidia’s GameWorks Strays From Industry Tradition
This approach of providing game developers with ready-made effects in the form of DLLs as a middleware solution is certainly dissimilar to the more traditional approach that Nvidia has taken before GameWorks’ inception. And is also different from the approach that its competitors, namely Intel and AMD, continue to follow. The traditional approach that we’ve seen over the years involves supplying game developers with the source code of the feature so it can be implemented directly into the game rather than do it through an intermediate layer. The developers would have complete freedom over how the feature is implemented, they can look at the source code and make changes to it as they see fit. In this case the game developer would maintain the ultimate say in how their game looks, runs and more importantly how it’s optimized.
With the GameWorks program developers can gain access to source code through a licensing deal with Nvidia, something that Nvidia did not offer when the program was initially introduced but started to do so in response to requests from game developers. However this means that developers are not allowed to share this code with anyone else without a license, this obviously includes Nvidia’s competitors like AMD and Intel.
However we’re told that game developers are still allowed to optimize GameWorks features for competitors’ hardware without showing it to them and as long as it does not negatively impact the performance of Nvidia hardware.
This is inherently different from the traditional approach discussed earlier, where the developer not the hardware vendor – in this case NVIDIA – gets to decide who can and cannot see the code and what they can do with it. It brings us back to the earlier point about how GameWorks enables Nvidia to have a more authoritative say in the game’s performance.
I also have to point out an important distinction here between a regular GameWorks-developer partnership and a source license. By default Nvidia provides GameWorks features in binary only builds without source code. The license to gain access to source code is not automatically given to Nvidia GameWorks partners. If the developer wants access to the source code they have to specifically request a source license and are required to pay a fee. Unfortunately, Nvidia has not shared with us or any other publication what this fee is. However Nvidia has told us that they can choose to wave the fee in a case by case basis.
And this is where things get quite complicated and a few points of contention arise; both from AMD’s perspective and some game developers’ perspective. The first of which is that this puts some limits on the developers’ control over their game. Because it’s not their own code, rather it is Nvidia’s code that they’ve merely licensed. So they have to follow the guidelines set forth by the licensor. And this creates a different dynamic where some decisions – that would traditionally be made by the developer – would now be delegated to Nvidia instead.
“It’s not CD Projekt Red’s decision to allow the Nvidia tech to work on AMD GPUs – that is Nvidia’s decision and most commonly-used features from us are platform-agnostic. It’s the same for CPU-based PhysX and Clothworks as well.” Eurogamer.com
Clearly the implications of this beg a serious discussion and there were many questions that we wanted to ask both NVIDIA and AMD, so we talked to both. Let’s start with NVIDIA first. I’ve personally spent over an hour on the phone with NVIDIA’s head of PR for GameWorks, Brian Burke. He eagerly wanted to get on the phone to kick off this discussion and an hour long international call is nothing to sniff at. I’ve made sure to make mention of this because it just goes to show how important this debate truly is and how much it means to NVIDIA, so hats off to Brian for reaching out to us!
We discussed NVIDIA’s GameWorks developer program at length as well as some specifics with regards to its implementation in some games like The Witcher 3. But because the discussion had gone on for such a long time I followed up with Brian to distill it down to one digestible interview.
My Interview With NVIDIA’s Brian Burke
What’s the difference between Nvidia’s The Way It’s Meant To Be Played sponsorship program and the GameWorks developer program ?
TWIMTBP is our promise of a great gaming experience. GameWorks helps us achieve that promise. GameWorks encompasses all of the game-related technologies we’ve invented over the years, the graphics technologies and the tools to implement them that help game developers build better games. It is backed by over 300 visual effects engineers who develop libraries, developer tools, and samples, and who work closely with developers to help enhance their games.
In other words TWIMTBP is a marketing program through which game developers can partner with Nvidia to co-market their game. While GameWorks is a developer program through which NVIDIA can work with game developers to integrate its GameWorks IP – library of optimized visual effects – into the developers’ IP in this case video games.
Nvidia has managed to work with developers for years to implement technologies invented by Nvidia, for example HBAO and TXAA in Crysis 3, why does Nvidia see a need for the GameWorks program now ?
We created GameWorks to advance gaming at a faster pace. To make games better, faster. Everyone at NVIDIA believes that great gaming hardware needs great gaming content. So we invest an enormous amount of our resources in making games better.
We used to just give out code samples for effects, and we still do. But as effects became increasingly more complex, just giving away code samples was not effective. It took too long to get the effects in to games and created work for developers. So we turned our library of special effects into a middleware solution. Productizing them into middleware is a more production-oriented approach to game effects. It makes integration easier and allows effects to be adopted by more developers more quickly, accelerating the pace of innovation in games.
This is what we had mentioned earlier with regards to games’ visual effects growing more complex and NVIDIA’s motiviation to speed up the rate of adoption of its IP.
Are game developers precluded from optimizing source code provided by Nvidia through the GameWorks program for non Nvidia hardware ?
No. Our agreements with developers don’t prevent them from working with any other IHVs to optimize their game or any GameWorks features. GameWorks is a middleware, and like any other middleware we offer developers a source licensing. We provide source code, under license, to developers who request it. Licensees just can’t redistribute our source code to anyone who does not have a license.
If a developer requests source code for an Nvidia GameWorks feature, under license, and is then provided with source code, is that developer then free to edit that code as they see fit to optimize it for IHVs other than Nvidia ? assuming they don’t redistribute it.
Yes. As long as it does not lower performance on NVIDIA GPUs
This is an important point to touch on. NVIDIA does not enforce any limitation, contractual or otherwise, on game developers’ ability to work with AMD to optimize their games. However because game developers’ are dealing with NVIDIA’s intellectual property it does exercise control over all GameWorks features and will always have the final say with regards to what can and cannot be done with any of the code it owns.
Can you talk about some of the new GameWorks effects that Nvidia has in the pipeline and will be bringing out ?
We can’t discuss unannounced stuff.
Does partaking in the GameWorks program preclude a game developer from working with AMD to implement an alternative to a specific GameWorks visual effect like HairWorks for example?
No. We don’t prohibit them from adding technologies from other IHVs to their games.
Are game developers, who partner with Nvidia to co-market their game, contractually obligated to use GameWorks code in their game ?
We want to market with games that offer the best gaming experience. Typically that means games with our tech inside. It’s not required.
Again we wanted to make sure there was no ambiguity with regards to any sort of limitation that a GameWorks partnership would entail. The GameWorks program itself does not inherently preclude game developers from working with AMD to implement AMD specific technologies.
A GameWorks partnership isn’t equivalent to an exclusive The Way Its Meant To Be Played co-marketing partnership for example. Where it is naturally expected that Nvidia technologies would exclusively be incorporated into the game. Or on the other end of the scale an exclusive AMD Gaming Evolved partnership, where tech from AMD would exclusively be incorporated into the game. GameWorks itself is an enablement tool, it could be used in a game that’s subject to an exclusive Nvidia co-marketing deal or equally end up in a game that is not.
What other methods besides editing source code can an IHV like yourself or your competitor use to optimize the performance of a specific in-game visual effect ?
It is not impossible to optimize without source code. We don’t get source code for every game. But we still do a great job ensuring games run great on our platform as long as we have reasonable access to builds. Many developers don’t provide source code for their games to third parties, so we optimize games based on binary builds. We invest tens of millions of dollars annually in creating these technologies and it’s our intellectual property. We won’t share our IP with our competitors and I think that’s reasonable.
There are a couple of vitally important points that invite discussion here. The first is that Nvidia fully recognizes the importance of source code access and optimizing through source code. This is why the company, as discussed earlier, provides developers with the option of acquiring a source license to see and adjust source code. This is because Nvidia understands that there’s a lot that can be achieved through working directly with the source code itself. And undoubtedly improving and refining source code is often what yields the best results and leads to the most impactful performance improvements. Which is why it remains to be one of the most desirable methods for optimizing performance in games and a the only irreplaceable means by which some problems can be solved.
The Importance Of Source Code – A Quick Look Back To The Past
A great example of how important source code truly is would be the Tomb Raider reboot which launched in 2013. The game performed poorly on Nvidia hardware at launch, particularly so with TressFX Hair enabled which is AMD’s hair rendering and simulation technology similar to Nvidia’s more recent HairWorks feature.
The company laid the blame on not getting access to the final build of the game until very very close to launch. Which funnily enough is exactly the same issue AMD had with a number of GameWorks titles as well. Nvidia even issued a statement at the time saying that the performance issues cannot be completely resolved through a driver update and game code changes on the developer’s end would have to be made.
Tomb raider was the first game to utilize AMD’s TressFX Hair – or any type of physical hair simulation technology – and Nvidia GPUs really struggled to run this DX11 Direct Compute based visual effect initially. This was not out of the ordinary as the compute heavy effect is expected to naturally run better on AMD GPUs which enjoy an inherit advantage in compute performance over equivalent Nvidia hardware, while Nvidia GPUs are inherently stronger in geometry. This is unsurprising as both AMD and Nvidia play to their respective hardware’s strengths with the graphics effects that they develop. We clearly see this with AMD’s compute based TressFX and with Nvidia’s tessellation based HairWorks.
That said GeForce GPUs were brought to parity with their respective Radeon equivalents in TressFX performance despite their compute deficit, no matter which team your graphics card was from running TressFX would have an identical performance impact. And it was achieved through a game patch with the necessary code changes to TressFX. Which goes to show how integral code is to the optimization process and the hurdles that it enables hardware vendors to overcome.
What also played a pivotal part in all of this is that AMD makes the source code for TressFX Hair – and most of its developed visual effects – publicly available for anyone to download on its website.
Because these features are not packaged as a middleware solution they are integrated directly into games, so developers have full access to the source code to work with it and adjust it as they see fit.
TressFX Hair And HairWorks – Two Very Different Sides Of The Same Coin
The Story behind TressFX Hair And HairWorks – How Implementing Similar Features Resulted In Very Different Outcomes
With the Witcher 3 and HairWorks we saw nearly the exact same Tomb Raider scenario repeat itself with the roles reversed but with no similar success story in bringing the performance on both sides to parity. As mentioned earlier Nvidia played to its hardware’s strength with the tessellation based HairWorks feature so it was naturally expected that this effect would run better on Nvidia hardware. However what happened was very different from what we saw with TressFX.
A 13% performance advantage for Nvidia hardware in tessellation was turned to a 2X and 3X performance advantage running HairWorks. The game developers were not able to optimize the code for AMD nor was AMD able to even look at the code that’s running on its hardware.
“Many of you have asked us if AMD Radeon GPUs would be able to run NVIDIA’s HairWorks technology – the answer is yes! However, unsatisfactory performance may be experienced as the code of this feature cannot be optimized for AMD products. Radeon users are encouraged to disable NVIDIA HairWorks if the performance is below expectations.” CD Projekt Red’s Marcin Momot
“It’s not CD Projekt Red’s decision to allow the Nvidia tech to work on AMD GPUs – that is Nvidia’s decision and most commonly-used features from us are platform-agnostic. It’s the same for CPU-based PhysX and Clothworks as well.” Eurogamer.com
So unlike TressFX where the feature performs the same on Nvidia and AMD hardware, HairWorks penalizes AMD hardware with double and up to triple the performance cost. In a statement issued to PCPer.com, Brian Burke stated that this was because of AMD’s tessellation performance. As we’ve noted earlier in the story it’s been historically well known that geometry performance has been one of Nvidia’s GPU architectures’ strong suits. Conversely AMD’s GPU architectures enjoy a similar lead in compute performance.
So we initially believed that what Brian had told PCPer was the intuitive thing to say. But seeing as how performance parity was achieved on the compute heavy TressFX despite Nvidia’s inherit disadvantage at compute we were puzzled. A performance penalty running HairWorks that’s two to three times as worse on the AMD side vs the Nvidia side stroke us as bizarre despite the inherent tessellation advantage in Nvidia’s favor and our initial impression meant that we wanted to investigate further.
We started off by looking at two evenly priced graphics cards, we landed on the $200 price point with Nvidia’s GTX 960 and AMD’s R9 285. We should point out that since then AMD replaced the R9 285 with the faster R9 380 but for all intents and purposes they’re architecturally identical. We looked at Metro Last Light with tessellation set to max as well as the very tessellation intensive Unigine Heaven 4.0 test with tessellation also set to max and finally we looked at a pure tessellation synthetic benchmark which was Tessmark. We tested both cards at the extreme setting, factor x32, which is what we have found to be the default setting for HairWorks in the Witcher 3.
In our investigation we found that across a sample of Tessellation heavy games and benchmarks that the AMD Radeon R9 285 was either ahead of the Nvidia GeForce GTX 960 or at most 13% behind. Seeing as how Tessellation x32 is what’s used for HairWorks we were anticipating a similar 13% delta between the R9 285 and GTX 960.
But what we have found with HairWorks is that the performance cost on the R9 285 is double that of the Nvidia GPUs and it’s nearly three times for the R9 290X. If AMD’s tessellation performance was the real reason behind this huge penalty running HairWorks as Nvidia claims, then we would would’ve seen it reflected in our other tessellation tests but that’s clearly not what we’re seeing.
A 13% delta between the R9 285 and GTX 960 turns into a whopping 206% delta, in both instances running tessellation x32. The main difference is that in the first instance both cards were running a standard piece of code that both companies can optimize while in the second instance the R9 285 is running code developed by Nvidia that AMD cannot even see.
There’s such an absolutely massive delta created by HairWorks that it cannot simply be explained by the innate differences in tessellation performance between AMD’s and Nvidia’s GPU architectures. There’s absolutely no doubt that the AMD hardware itself can run HairWorks far better than what we see today. And it’s so inconceivably bizarre that Nvidia would develop the code, conceal it from AMD and then blame their architecture for performing poorly when running it.
Performance Trade-Off Vs. Perceptual Visual Improvement – A Very Fine Balance
One of the discussion points that Brian and I talked about which did not make its way to the interview was about the balance of trading performance for added visual quality, and how much performance was being lost for some GameWorks features such as HairWorks.
I argued that due to how intensive HairWorks is at tessellation factor x32 ( the standard setting for the feature ) many gamers, including ones using NVIDIA hardware, may choose to disable it completely in favor of improving the overall performance of the game. And that those gamers would have probably appreciated the choice of toggling between different tessellation factors just as they would normally toggle between different gradients of any other effect such as shadows or anti aliasing. Rather they are forced to accept x32, which is very intensive, or nothing at all.
Having a slider for HairWorks that augments the tessellation factor would give gamers the freedom to adjust the feature and find the right balance between visual fidelity and performance that best suits their personal preferences.
It’s abundantly clear that the company fears, many would argue falsely, that it may lose the competitive advantage that it has created with GameWorks by making the code accessible to its competitors. But by doing so it unfortunately took what has always been a traditional competitive play that leverages the hardware’s strong suit and turn it into something artificial.
There is no doubt that there is great value to be had from all the great technologies that the GameWorks program encompasses and clearly there are some genuine advantages – and disadvantages – to offering a middleware solution to game developers. Being a for profit organization NVIDIA obviously has to bank on its investments and make no mistake GameWorks is an investment. NVIDIA is taking a very aggressive approach to monetizing it, an approach that many gamers have and will certainly continue to hold objections to.
GameWorks is a double edged sword, not just for game developers but for NVIDIA as well. Because through promoting the use of its middleware in games NVIDIA has a responsibility to ensure everyone – not just owners of its latest and fastest products – is able to have a good experience and enjoy the game the way the developers intended for it to be enjoyed. This is essential for the company to maintain a healthy image in the gaming community and more importantly in the eyes of game developers who will be contemplating the idea of using NVIDIA technologies. If GameWorks proves to be a detriment to this goal then there’s clearly a problem that needs to be addressed.
Believe it or not we have only scratched the surface in part 1 of this story, so if you’ve enjoyed it stick around as we have much more to discuss. In the meantime you should definitely check out the discussion video that AMD published on Twitch.tv for AMD’s perspective on the GameWorks debate.