As I touched on in the Dev blog, one thing we're working on in Lithic is having a full 3d modelled environment instead of using bill-boarding or sprites to display environmental objects. In this diary I'll post updates on how we're doing this and any problems we get.
To begin with, what I mean by a full 3d environment is that objects that would normally be billboarded (such as grass or leaves on plants) will be modelled. Why do this? For anyone not familiar with real time rendering I'll quickly explain Polycounts and Draw calls, as its these that govern how much work the GPU has to do to render the scene.The Polycount is pretty self explanatory, its the number of polygons visible on screen. Drawcalls are a bit more complicated but basically its the number of times the renderer has to access the draw function to process an object for rendering.
Billboarding objects is a means of cutting the polycount down and it can drastically reduce the number of polygons on screen, but it doesn't do anything for drawcalls. It doesn't matter wether an object has 4 polygons or 4 million polygons as the number of drawcalls is based on materials. A few years ago the limiting factor for PC platforms was poly's, but that's not really the case now.
Early on in Lithic's development we decided to build for PC, this means for us Poly counts are not something we needed to worry about (much). Our on screen poly budget for recommened target system specs is 8 million. Using billboards we'd be so far under this it would be negligible, but as each piece of grass, leaf, etc would need its owns transparent material we would rapidly have hit several thousand drawcalls. A Figure that would make even two GTX Titans running SLi chug down to under 60 fps. By using geometry we can get round this.
On top of that is Tessellation shaders, these are pretty new and only work on DirectX 11 graphics cards, but what they do is add detail to a low poly object by tessellating the mesh at render time for a very minimal impact on render performance.
Heres an example scene, this shot contains about 300,000 blades of grass totalling 3.2 million polys but it only uses 600 drawcalls. (350 of these are for the terrain, skybox and camera effects) and it runs at 400fps on our test rig with a 3.6gHz processor and an NVidia 780 GTX.
This isn't a final game shot, its just a stress test, but I hope you get the idea.
Because we're using geometry to show the plants, we also get access to Vertex level animation. We are using this to simulate plants moving in the wind, being crushed by creatures are reacting to in game events like spells, fires and rain. I'll try to cover this shortly when we have some examples that are a bit better than our current development assets.