Code and computer graphics join forces

Another look at the work of Vertex software development comes from Antti Heinonen. Heinonen coded his first computer game when he was still in elementary school, and later worked for Rovio while he studied. Alongside his interest in coding, Antti is passionate about computer graphics. At Vertex, Antti is free to put his expertise to use in developing our CAD software. Let’s let Antti tell us about his project.

Työpaikkablogi

Toukokuu 2020
Timo Tulisalmi

Taking Vertex CAD real-time 3D rendering to the next level

During the lifetime of Vertex CAD applications, the world of computer graphics and rendering has changed a lot. First, 3D shapes were software rendered — then came graphics libraries like OpenGL and dedicated hardware to handle rasterization and shading. Now, real-time 3D rendering technology has stabilized around a programmable graphics pipeline. Currently, Vertex CAD is settled on using OpenGL. OpenGL is great for its purpose, but due to being an almost 30 years old API, it’s dragging lots of history with itself — and this affects our code.

At Vertex, we have been prototyping and working on a completely new 3D rendering backend. The goal is to reduce technical debt, remove old code and future proof by rewriting the 3D rendering backend with modern technology and methods. By taking a fresh start, we can design the new 3D renderer to fully utilize modern graphics processing units.

Currently, the OpenGL backend is CPU limited and, at worst, only 10-20% of available graphics performance is used. The prototype significantly improves 3D performance and the user experience of handling large and medium sized CAD models in 3D viewports.
This is because the new rendering backend takes advantage of static batching of geometry and draw calls. This means we create a separate 3D graphics mesh from the CAD data model. A similar separation of geometry and CAD data is done in 3D model export to showroom service in glTF format.

By separating the 3D graphics mesh from the CAD data model, we eliminate the need to iterate the CAD model structure during rendering. The renderer just needs to know which sets of 3D mesh have  to be rendered, and with what material. Modern GPUs like big data sets, and rendering will be quickly CPU limited if draw call or material state change count rises. With the new backend, we’ve tried to arrange the mesh data and create big continuous graphics buffers and sort draw calls in order to render as much as possible with the fewest number of GPU draw calls or material state changes.

At the moment we leverage the open-source bgfx graphics library, which provides platform agnostic abstraction for graphics APIs. Although Vertex CAD is a Windows-only application, bgfx allows us to focus on designing the rendering backend architecture while future proofing for coming graphics APIs at the same time.

I strongly believe that this new 3D renderer is a turning point for handling and working efficiently with large 3D models in Vertex CAD applications.

Come join our team!

If you want to put your area of expertise to use in product and software development, we have excellent news: Vertex has work available for a knowledgeable C++ professional!

So come and join a knowledgeable and supportive group in a growing and financially stable company!

Read more here.