Digital displays have seemingly taken over the world, first appearing in the 1980s. Today drivers expect to get into a new vehicle and find a well-designed and functioning digital dashboard resting just past the steering wheel. Glowing beautifully with unprecedented visual depth and a wide array of colors, digital dashboards can provide more information than a conventional dial. They can be customized to suit a driver’s personal preferences and they are also capable of being adaptive and dynamic, showing exactly what information a driver needs to see at any given moment.
Just like any other digital display, automotive dashboards require graphics processing units (GPUs) to power them. However, the reality is, automotive dashboards are often poorly designed in terms of geometry and the dials – the speedometer or rev counter – are typically the worst offenders. Instead of optimizing their development for precision, accuracy and clarity, the dials are frequently developed using incredibly dense meshes to produce the desired level of roundness. That roundness – while aesthetically important to any dashboard – is a significant cause for concern. This is due to the incredibly dense meshes which result in poor performance on the embedded GPUs that are used in the car.
Whether driving a sedan, a luxury SUV or the fastest ride on the road, the last thing anyone wants is poor performance. Not even the dashboard can get away with lackluster results. To address the issue, the GPU is likely to be over-specified, requiring far more horsepower than would otherwise be needed were the dials simply designed sensibly in the first place. This begs the all-important question: what can be done about it? How can engineers optimize their automotive dashboards to develop efficient renderings?
Working around the roundness dilemma
Many engineers begin by increasing the geometric density by adding smaller and smaller triangles to the mesh because it is the easiest way to improve the roundness of the dial, eliminating unsightly jagged edges.
Figure 1: The round dials dilemma: efficiency or quality? (Source: Imagination Technologies)
That might sound like a good idea on paper. However, by cramming a very large number of triangles into an area that’s only a few pixels wide, poor performance is guaranteed to follow. That’s because of the way GPUs were designed. GPUs were made to accelerate the rendering of relatively few triangles spanning large amounts of pixels. In this instance, we have the opposite, causing significant performance losses that can’t be overcome through brute force.
To make matters worse, the dial – which will be slow to render under the weight of thousands of triangles – will also be very aliased. Consequently, every edge, indent and bevel will end up showing “stair-stepping” pixel artifacts. Multi-Sample Anti-Aliasing (MSAA) can be used to clean things up, but doing so comes at a price: rendering that’s even slower than before. The reason for this is that when using MSAA, extra processing has to take place for every pixel on a triangle boundaries: first, the colour for either sides of the edge must be computed, then multiple points (usually two or four) inside the pixel are tested to see how many are actually inside the triangle, and finally, this ratio is used to mix the two colours together. Given the image quality improvement, this cost is usually acceptable, but when parts of the screen see almost every single pixel crossed by a triangle edge, it is easy to imagine how processing time would increase.
To get around these hurdles – including the need for MSAA – the dial can be easily approximated with a simple transparent textured quad. This essentially pre-computes all the geometry and lighting into something the GPU can handle with ease. Better still, the texture can be easily tweaked to feather the edges for extra smoothness.
The process begins with a very important step: reducing the number of wasted pixels by making the dial shape even rounder. Now we have a simple transparent quad, this reduces the pressure on the geometric processing units. However, unfortunately, it also adds a lot of unnecessary work for each pixel: the way rendering works, even parts of an object that are fully transparent (and do not contribute to the final image in the slightest) still need to be processed as normal pixels. Even worse, objects flagged as being transparent must be rendered on top of an already rendered background, essentially doubling the cost of their pixels. It is therefore critical to reduce the number of transparent areas on screen.
Instead of a quad, how about a very coarse disc? Adding a handful of triangles to save on hundreds or thousands of pixels seems like a good compromise. Then only the outer edge of the dial needs transparency, allowing the object to be split in two. The central disc will be opaque (and therefore efficiently rendered) while the outer ring remains transparent. This retains the roundness of a perfect disc and the soft feathering on the edges to avoid aliasing, at the cost of having to submit two objects with slightly more triangles instead of one.
Figure 2: A texture projected onto an approximation of a disk. Highlighted areas are drawn transparently. (Source: Imagination Technologies)
The dial can now be efficiently rendered, but there is a problem: all we’ve done so far is offload the precision aspect from the geometry to a texture. And the more details need to be encoded in a texture, the larger it needs to be, which, in small embedded systems, is generally frowned upon.
Thankfully, dials tend to be radially symmetrical, which means that a lot of the data stored in the texture is actually redundant. Instead of the whole dial, why not just store one small wedge and duplicate it around its center? This means that for the same texture size, the actual detail density can be much higher.
If a dynamic lighting environment is needed, small surface details can be simulated using normal mapping instead of actual geometry. Normal mapping works by using a texture that represents small variations in the surface direction, which, when combined with a standard lighting technique, will give the impression of a very detailed surface. On top of the extra texture requirements, it also comes with an increase in mathematical operations: for a simple dial with simple lighting it could be as much as double the amount of instructions per pixel.
Why bother with this? We started with a dial that was easy to author and integrate into an application to something that is more complex and requires expensive and advanced techniques, surely, we’ve just made things worse on every single aspect?
It may sound counter intuitive at first, but these techniques actually result in vastly superior performance: from barely 52 frames rendered per second to more than 120! What happened is that with the naïve rendering technique, the vast majority of the rendering happened inside a single overworked GPU unit doing its best to process an overwhelming amount of geometry, whereas with a few simple optimisation tricks, we essentially spread this cost across other parts of the GPU, namely the texture processing unit and arithmetic logic unit (ALU). Furthermore, the use of transparency to feather the dial and needle edges means we no longer need MSAA at all, which reduces the performance cost further.
The optimized dial on the left looks and runs better than its naïve counterpart on the right. (Source: Imagination Technologies)
The future of automotive dashboards
GPUs have come a long way in terms of performance since the first automotive digital dashboards were created. While we haven’t quite reached the point where you can just rely on brute force, we have demonstrated how designing in a more subtle and clever way can make a real difference. It’s also important that engineers and artists can and should collaborate more closely to realize these substantial benefits. By designing in a more subtle and clever way, it’s possible to render cleaner images faster than the device can display them – all without sacrificing the perfectly round dials everyone desires.
Nigel Leeder is the Chief Innovation Officer at Imagination Technologies. Previously, Nigel performed senior leadership roles for PowerVR for over a decade, guiding the evolution of PowerVR’s Graphics Processing Units (GPUs) and advances in AI technologies. This included leading the customer engineering team, which was responsible for delivering and supporting all Imagination’s technology deliverables to its customers and guiding its roadmap evolution based on those deep engagements.