Post news RSS New Year goodies with Core and Skinning

Getting closer to the first release with Core and tightening screws here and there

Posted by on

Going Core... and fast please!

To get closer to a first release the OpenGL module has been reworked in terms of context handling. Up to now a compatible profile has been used based on extensions. This is mostly due to the way how the engine grew up. To get things better defined the system has been reworked to operate strictly on a minimal Core profile with the option to use higher Cores if the GPU supports it. This allows now to define better the minimunm specs a GPU has to support to be able to run the Graphic Module while allowing to still take advantage of higher Core profile features if available. So the OpenGL Graphic Module is now officially set to require a minimum OpenGL 3.3 capable GPU to run. This covers GPUs of the last couple of years and should not be a problem for most people. Certain features up to Core 4.3 are supported and will be used if present.

Besides this the Debug Drawer System has been reworked. This is the main debug visualization system provided by the Drag[en]gine. Since all editors and some modules are using this extensively the existing implementation went a bit out of scale. The system is now more speedy, clenaer and more stable than before. Also the bindings to the game scripts have been improved to allow better debugging visualization while developing the game scripts.

Improved World Editing

The IGDE Game Definition received now support for custom defined Class Hiding and Class Partial Hiding. It is now possible to defined tag lists for classes to fully or partially hide them while editing. The world editor provides a list of all hidding tags found in the current game definition. If a class hiding tag is set all elements with the affected classes are fully hidden from the edited world. If a class partial hiding tag is set all elements with the affected classes have their visual representation hidden but not their effect. For example if the "light" tag is set all light classes hide their light bulp box and are not selectable any more but their effect (the lighting) remains active. This allows to switch on and off custom sets of objects while editing the world reducing the clutter. I'm using this also as a quick preview mode.

IGDE Game Definition Class Hiding

GPU Skinning Improvement

With this topic I would like to stay a little bit. GPU skinning is the process of transforming models to render on the GPU instead of the CPU. GPU skinning in general suffers from various limitations (limited animations, limited model parameters or tricky batching) and the result are inaccurate (incorrect normal/tangent calculation). For this reason the skinning had been opimized CPU side so far. Over the year change I've experimented with ways to get the skinning on the GPU without the existing problems if possible. Out of this resulted three ways to do skinning the player can choose from.

The first is CPU Skinning. This is the slowest solution to choose from but is 100% accurate and serves as reference implementation.

The second is Accurate GPU Skinning. This version does all the complex CPU skinning calculation on the GPU using a combination of Transform Feedback and TBO Rendering. The calculation is nearly as accurate as the CPU version but faster. Brings the calculation time down to estimated 35% of the CPU version. This is the second best choice for players and usually only an option if the accuracy is really required.

The third is the Approximate GPU Skinning. This version is a short-cut version of the Accurate GPU Skinning. The basic problem with skinning is that while transforming positions is accurate transforming normals and tangents is not. To get proper normals/tangents you have to calculate face normals/tangents (from transformed vertices) and then sum up the normals/tangents over all face corners. This is the correct way and what the accurate methods are using. The approximate version just uses the weight matrices to approximate the correct normals/tangents. This is faster but results in errors if weights have certain characteristics. For example if a triangle runs across two bones and they just translate not rotate transforming normals/tangents with them lacks rotation. This result produces incorrect normals/tangents which can negatively affect physical rendering. Most of the time though you have models not showing this problem that much. Compared to the CPU version the Approximate GPU Skinning reduces calculation time down to estimated 11% while supporting all kinds of complex and large models without any restrictions. In general this method is the best choice for players.

Using the improved GPU skinning the number of online NPCs can be raised to make the life of players more interesting. But this is not the end of optimizations. I'm going to crank out more online NPCs in the new couple of days.


When will Drag[en]gine release to public?

Reply Good karma Bad karma+2 votes
Dragonlord Author

If everything goes according to plans somewhere this year.

Reply Good karma+2 votes
Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.