Hair in compute games is notoriously hard to get ‘right’. Often, it’s too stiff, with very little animation involved. Also, generally there’s lack of detail and separation from the individual strands of hair. AMD have been looking to change that with the TressFX technology. It was first implemented in Crystal Dynamic’s latest iteration of Tomb Raider, where thanks to the third person camera Lara’s luscious locks (or not so luscious without TressFX) were always on display.
AMD were smart by opening up their technology, allowing Nvidia and Intel owners to use TressFX. This is in stark contrast to Nvidia’s PhysX, which despite being an often very impressive piece of technology has few titles supporting the hardware PhysX technolgy. This is because Nvidia keep the technology to their own range of Geforce cards, cutting off potentially around 50 percent of a games customers having a chance to enjoy it. In turn, this lessens the chance a developer will make use of the technology. Check out my recent Assassin’s Creed 4 analysis of the PhysX patch if you’d like more info.
That isn’t to say that TressFX was perfect, there were several underlying problems with the technology. This isn’t unexpected, it was the first version after-all. The first issue which end users would note is TressFX would punish your GPU, often leading to a drop of between 10 and 30 percent depending upon the GPU that you were running. In particular, Tomb Raider with TressFX seemed to hit Nvidia cards particularly hard, although a driver update from Nvidia and a patch from the games developers did help this out.
Also, despite Lara’s hair looking much nicer than the standard non-TressFX look, there were still abnormal and visual issues. Lara’s hair would at times seem to have a mind of its own, acting completely wild and unrealistically. More over, the basic behavior of her hair still seemed a little ‘off’ from how you’d expect in nature. It felt, for lack of a better description, too light. The hair would seemed to just move too freely, and despite sometimes soaking conditions (for example, just coming out from a swim, or during pouring rain) the hair didn’t accurately represent this. It also had an alarming tendency to over stretch, or glitch into weird angles.
Another potential issue is that since the release of Tomb Raider, there hasn’t been much on the horizon in terms of games who’re willing to actually support and make use of this technology, which is a real shame. We’re getting word that the remake of Thief is going to make use of the TressFX 2.0 technology (more on that in a moment) along with AMD’s new API, Mantle. Mantle was originally supposed to see its debut last year, with Battlefield 4 being patched in December, but this patch has since slipped to January, 2014.
TressFX 2.0 – now with Grass and Fur?
If we’re pointing out faults, another of the original TressFX (other than it being hard to code for, but we’ll get to that) was that it had limited use. This AMD are fixing for the next version, TressFX 2.0 With it, AMD are hoping to better animate Grass and Fur. Grass and foliage in general is another very difficult thing for games developers to create and animate in a realistic way. Much like hair, they require a lot of detail which is hard to emulate in real time using a game’s engine. Recently, AMD have held their APU2013 conference and issued the following statement:
“TressFX is AMD’s realistic hair rendering technology which renders and simulates the physics of thousands of individual strands of hair. It was first used in Crystal Dynamic’s Tomb Raider, released earlier this year. Now AMD is introducing TressFX 2.0, a newer version of TressFX with better performance and easier integration into games. Additionally research is now being done to use TressFX for other things besides hair, like grass and fur. In this talk we will cover how TressFX rendering and physics works, the improvements made in TressFX 2.0, and the research which will be used in future products.”
To find more of this original presentation please head over to their conference here. Then click on Sessions -> Gaming Summit and you’ll find the TressFX 2.0 slides. Should you so wish, you can play around with the technology demo too. This is downloadable directly from AMD. Head to AMD’s official developer website to find it, among various other cool things to try out. You can use a Nvidia card just fine (along with AMD’s own Radeon range).
TressFX 2.0 Performance – Head and Shoulders better
You’re likely familiar with the term “LOD” or “Level of Detail”. A simplified explanation of Level of Detail is that an artist will create a model, texture or something (let’s call it a model for clarity’s sake). This model will be the highest level of detail possible, let’s say for sake of argument that it is comprised of 10K Polygons. If that model is a distance away from the camera, or partially blocked by say a sign post or a building, the GPU rendering that high Level of Detail is a waste of resources. So what happens is that often there’ll be several versions of that same model, with varying degrees of polygons.
For example, from the base of 10K Polygons, there might be another at 7,500, another at 5,000, and a final at say 2,000. Depending upon your distance from the model, the games engine will swap in the best model for the job. Thus helping improve the frame rate. Just like in real life, if you’re a large distance from something, you’ll be unable to make out these fine details anyway.
TressFX however lacked much of this functionality, and so strands of hair that were hidden out of view were still being calculated. Still eating up a lot of GPU power, despite the fact that for all intents and purposes from our perspective of a player, they could never be viewed. Additionally, as mentioned above with the Level of Detail example, there should be ideally multiple Level of Details depending upon distance. TressFX 1.0 didn’t feature this, thus it didn’t matter how close the camera was to Lara, or how much of Lara was visible, the GPU was rendering the same work load.
Now, you might start thinking to yourself – well, doesn’t that mean that Lara could start looking a little thin on top? No, TressFX will compensate by increasing the thickness of the strands of hair, so that each strange is ‘thicker’ and thus fills in more space. It’ll mean less detail at distance, but much better and more constant levels of performance.
So that’s the stuff that most gamer’s care about, but let’s speak about the code and implementation. The easier it is to code and use the TressFX technology in games, the more games will in turn implement the technology and so we’ll be able to benefit from it. TressFX 2.0 helps to improve the implementation side of things with cleaned up code and better modularity.
As you see above, AMD are touting that the performance jump of TressFX 2.0 from the original TressFX will be around 2x. Simultaneously, it’ll also be able to affect hair, grass and fur all equally. Interestingly enough, it’s also possible to use TressFX on consoles. We’ve seen recent evidence of this with the re-release of Tomb Raider on the next generation consoles, which does indeed feature the TressFX technology. Clearly, with the consoles having significantly less grunt available compared to a high end PC GPU, clean and concise code is even more important.
The only major issue with TressFX right now is that it has been less than pushed. Despite it being a very promising bit of technology, next to AMD’s Mantle API, which swallows up a lot of press time, Mantle is often ignored. Hopefully now that consoles are able to use it, with AMD providing the grunt for both the Xbox One and PS4, we’ll see more than just the next thief game implementing it.