Having made its physically-based renderer available for free in a number of applications, AMD is now developing smart ways to cut render times, other than simply relying on the brute force of the GPU. Greg Corke reports
Radeon ProRender – accelerating GPU rendering For the last few years, AMD’s Radeon Pro graphics team has been busy driving development of the free physically-based renderer, Radeon ProRender. And it’s done a pretty good job of getting it into a wide range of 3D tools. For CAD, there are plug-ins for SolidWorks and PTC Creo. For Digital Content Creation, there’s Blender, 3ds max, Maya and Unreal Engine (beta). Radeon ProRender is also built into Cinema4D and Modo (beta) and there’s a Rhino version available on GitHub.
ProRender in its various guises is based on the same underlying technology, but the implementations vary and some are more polished than others.
AMD continues to add functionality all the time with frequent point releases, but the team is also turning its attention to performance, exploring new ways to generate photorealistic output quicker – even in real time. The reliance on powerful GPUs continues, of course, but AMD is also looking to make rendering smarter.
Machine learning denoising
Machine learning is very much in vogue for ray trace rendering, where the AI-based technology is used to ‘denoise’ an image to cut render times dramatically.
Nvidia currently has the lead here with its OptiX AI-accelerated denoiser that only runs on Nvidia GPUs. It is available in several commercial renderers, including V-Ray NEXT, Corona and SolidWorks Visualize. But AMD also has its own machine learning denoising technology for Radeon ProRender.
So how does machine learning denoising work? Instead of allowing a ray trace render to resolve naturally with hundreds or thousands of passes, a render is done with fewer passes and machine learning algorithms are then used to ‘denoise’ the grainy image. The end result is not 100% perfect but it’s a very good approximation as to what a rendered image would have looked like if it had been left to resolve over a much longer period.
AMD has trained its denoiser with lots of image pairs that were created in Radeon ProRender. By comparing noisy images with their fully resolved counterparts, the denoiser learns how to process other noisy images.
AMD’s machine learning denoiser should be available in Radeon ProRender for blender in Q1 2019 and will be added to other Radeon ProRender plug-ins later. The technology will also be made available to third parties like Maxon, the developer of Cinema4D, to implement if they so desire.
At the recent AMD Next Horizons event in San Francisco, Takahiro Harada, researcher at AMD, told DEVELOP3D that the machine learning denoising calculations are not that compute intensive, so standard GPU shader cores, such as those on the Radeon Pro WX 9100, can be used.
But the technology is not quite there yet. Currently, AMD’s GPU-based machine learning denoising has only been implemented on Linux. On Windows, in a development version of Radeon ProRender, the denoising is currently handled by the CPU, as the software stack that AMD wants to use is not yet available – although it will be soon.
As Radeon ProRender was developed by AMD’s pro graphics team, it’s little surprise that the ray trace calculations solve fastest on a GPU. And because it is based on the open standard, OpenCL, this can be any GPU – AMD Radeon / Radeon Pro or Nvidia GeForce / Quadro. Multiple GPUs are also supported.
For flexibility, Radeon ProRender’s ray trace rendering calculations can also be done on the CPU. Historically, the user has had to choose between GPU or CPU as it has not been possible to use both at the same time, but this is starting to change. So-called heterogenous rendering, which can use every bit of processing power that a workstation has to offer, is now supported in the Radeon ProRender plug-ins for 3ds Max, Maya, Blender and PTC Creo, with more to follow next year.
The speed up can be significant, but you really need a powerful multi core CPU to make a substantial difference. Harada told DEVELOP3D that supplementing a high-end AMD Radeon Pro WX 9100 GPU with a 32-core AMD Ryzen Threadripper 2 CPU, for example, would cut render times by around 20-30%.
With a quad core CPU in a typical CAD workstation, the speed up would be significantly less. However, Harada added that AMD is looking at ways to improve the algorithms, so Radeon ProRender will run faster on a CPU with fewer cores.
Real time viewport ray tracing Back in March 2018, AMD revealed a new technology designed to deliver fully interactive photorealistic graphics inside the viewport of a 3D application, which we covered in detail in this article. Real time viewport ray tracing based on the Vulkan API is now available in the Radeon ProRender SDK for developers to integrate into their 3D applications.
Speaking at AMD Next Horizons, Harada added a little bit of colour to this story. He explained that in order to get photorealism in real time on complex models, ray tracing could be used sparingly, in only the areas that matter most – car paint for example, where shadows and reflections can look much more realistic. In less important areas, the graphics can be ‘faked’ using rasterisation, the technology currently used to generate 3D graphics inside most viewports.
But would the end user have to manually choose which objects are ray traced and which are rasterised? Harada admitted that this would require a lot of work, but it is a problem that AMD is trying to solve. However, when a complex scene is optimised in this way, real time photorealistic visualisation is possible on a single GPU, such as the Radeon Pro WX 9100.
When it comes to ray trace rendering, performance is everything and AMD is addressing this from many different angles. Heterogenous rendering is an important development for Radeon ProRender but denoising through machine learning looks set to be a critical technology if you want to dramatically reduce render times.
With Nvidia’s own brand of denoising already appearing in several applications and only running on Nvidia GPUs, AMD will be keen to add machine learning denoising to all of its ProRender plug-ins as soon as possible. It seems likely that ProRender machine learning denoising will also appear in Cinema4D and Modo at some point in the future.
Of course, this is only the start of a long journey to make photorealistic visualisation more accessible and the results more immediate. The biggest opportunity for AMD, of course, is to make it instant, by delivering real time ray tracing directly inside the viewport of your 3D modelling tool, but this won’t happen overnight.
A graphics engine transplant is a major commitment and because the development work could be substantial, the third-party developer will also have to be certain there is customer demand. The fact that Dassault Systèmes took several years to develop its new OpenGL 4.5-based SolidWorks graphics engine (a beta feature in SolidWorks 2019) shows what a huge undertaking this can be.
By all accounts, implementing the low-level Vulkan API is even harder, although AMD’s Radeon ProRender SDK should help smooth the transition. As Bruno Stefanizzi, senior manager software engineering, AMD Radeon Pro, told DEVELOP3D in March 2018. “We’ve done a lot of the work for them.”
Of course, Nvidia is also on the case. In October 2018, it released a Vulkan extension that exposes its bespoke RTX technology for real-time ray tracing through the Vulkan API.
Real time ray tracing in the viewport of 3D CAD and DCC applications does seem inevitable. It’s just a question of when and how 3D software developers choose to implement the technology. There currently appears to be an open and closed way to do this – perhaps there’s room for both.
Radeon ProRender plug-ins can be downloaded for free from amd.com/en/technologies/radeon-prorender.
Running out of GPU memory?
Radeon ProRender supports ‘out of core’ rendering, which means that it can be used to render scenes that do not fit completely into GPU memory. This doesn’t necessarily boost performance – hence the box out – but it does mean users are able to render scenes that simply could not be done on GPU renderers or GPUs that do not support ‘out of core’ rendering. It becomes important when working with large models, complex textures, very high-resolutions or when using GPUs with limited memory.
Out of core rendering works by keeping textures in system memory (RAM) and streaming them into GPU memory as and when required. In order to take advantage of this feature, you will need a Vega-based GPU with an HBCC (High-Bandwidth Cache Controller), such as the Radeon Pro WX 9100.
If you enjoyed this article, subscribe to our email newsletter or print / PDF magazine for FREE