From Dean Hall:

So I’ve been working on moving away from always using meshes and textures for things like navballs, and doing it procedurally - in this case in a fragment shader alone. Why do this? Well, that’s actually a good question. Not one I have a great answer to. Primarily, it started (like much in this project) because I personally don’t like the way games look today. Everything is all washed out the heck, its all like someone has spread petroleum jelly over the screen (shakes fist at Tim Sweeney angrily). Bizarely, my time making a lot of complex avionics for my Stormworks vehicles also factored in this.

“What if”, I reasoned, “we could make it completely in the fragment”? Not only will it scale really well to any resolution - the nav ball will never have texture “pinching” at the poles, and modders could very easily replace any widget whenver they want with extreme ease. An added bonus you can see in this video, I can move the widget around very easily. To be fair, this would be true (to an extent) for a mesh + texture combo - but you can see it starts to look really great even when I scale it up. This has actually been a good example for me of the paradigm shift we face using BRUTAL. A lot of things get approached from first principles, which means you start asking all kinds of really weird questions and you end up asking what should i do?.

So whats the catch? Well, another really good question. I’m not a graphics programmer, but I’m tempted to say that this procedural shader willl always be less performant than doing it with a mesh + texture combo. However, whether you will notice the performance hit remains to be seen. This is because the entirety of drawing the procedural navball is drawn in the “fragment” shader, with essentially nothing at all from the CPU. No texture, no mesh (well, I do tell the GPU there is a quad - but it doesn’t exist, it is just used to make sure the fragment gets called). This has all been quite a ramble.

If I do end up continuing down this path successfully, I can make a lot of widgets like this, which can then be used for IVA gauges and the like, and then rendered on a separate framerate.