As part of the overall plan to make Interactive Rendering faster than ever, we implemented NVIDIA’s GPU denoising, which lets you run near-instant denoising on your Interactive Renders!
Corona Renderer 3, new NVIDIA GPU denoising in IR
Fast Preview Denoising is enabled by default for interactive rendering (the setting can be found under the Performance tab in the Render Setup if you wish to disable it):
Corona Renderer 3 for 3ds Max, NVIDIA AI Optix GPU Denoising for IR
Please note that this feature requires an NVIDIA GPU installed, and the GPU needs to be Kepler or newer. NVIDIA’s denoiser does not support all mobile GPUs, so this may not work on your laptop.
If you choose, you can use GPU denoising for your final renders too by selecting the “Fast Preview (NVIDIA)” option in the Denoising drop down (Corona “Full Denoising” has been renamed as “High Quality” under these options, if you are looking for it!). You can also use the GPU Denoising in the Corona Image Editor.
If you choose to use this new GPU denoising for final renders, please keep these points in mind:
– GPU Denoising may blur details and result in artifacts or a “painterly” look to your image. High Quality Denoising uses more precise algorithms to ensure effective denoising while preserving detail in the end result.
In the image below, while it has removed more noise at these early passes, the GPU denoising also loses some detail in the grass and flowers, resulting in a softer, blurred look that may not be desired:
And in the image below, loss of detail can be seen in the texture where the AI denoiser “hallucinates” especially around areas of high contrast, as well as having a blurrier look (of course, this difference reduces with more passes):
– GPU denoising has no temporal consistency, so results may vary from frame to frame for animations, which may cause flickering or other unwanted effects. Of course, it may not, but it is something to keep in mind!
– Your GPU memory will determine the maximum resolution that can be efficiently denoised (as using shared memory will be slower), and the number of render elements being denoised may also play a part in how efficiently GPU denoising can work.
The NVIDIA AI denoiser can be selected as the final denoising mode in the Scene tab of the Render Setup – in this mode, the rendered image is denoised with each VFB refresh.
Corona Renderer’s implementation of the NVIDIA denoiser preserves details in reflections and refractions, unlike some other implementations of the denoiser in other software.
The NVIDIA AI denoiser can also be enabled separately just for IR in the Performance tab of the Render Setup.
The NVIDIA AI denoiser is an optional component in the installer and requires an additional download (similar to the Material Library). This component is pre-selected when a supported NVIDIA GPU is detected on the computer.
Denoising time is displayed in the VFB Stats tab.
Corona Renderer 3, improved IR performance
Optimized IR restarts, making it more responsive.
IR restarts with the new light solver are now significantly faster.
IR restarts in the Corona VFB are now generally faster (comparable to the docked VFB).
The improvements to displacement result in better image quality without the need to sacrifice render time:
Perhaps more importantly, it allows the lowering of Displacement settings to get equivalent quality with faster parsing and lower memory usage. It is on by default in all new scenes, and when loading older scenes, you will be asked whether to switch to the new displacement mode with a click of a button to lower the RAM usage, or to preserve the original settings to keep original scene appearance.
In the example scene below, thanks to the new improvements, Displacement quality could be lowered from 1px to 4px with almost no visual difference, reducing memory requirements from 11.6 GB to 5.2 GB.
The new processing is disabled when loading a scene saved with a version earlier than Corona Renderer 3 to avoid changes to the scene’s appearance on rendering (a dialog box will let you enable it if you choose).
It is enabled by default in all new scenes, and the default displacement edge size in screen space has been changed from 2px to 3px.
Back in the day, RAM was cheap, so we focused on rendering speed even if this meant higher memory usage. However, the market has changed and RAM now costs a premium, so we’ve revisited Corona Renderer’s memory consumption.
Thanks to a variety of optimizations and improvements, you can expect savings of up to 2.5 GB for an 8K image without having to change any settings (although this will vary by scene, of course).
For testing, we wanted to use a regular scene and not one specially created to maximize memory savings, so we chose the much-loved Benchmark scene and renderer it at 8,000 x 4,500. The test was run using Release Candidate 7.
Corona Renderer 2 required 20.3 GB for an 8K render, while Corona Renderer 3 required 19.6 GB, in this instance saving around 0.7 GB without any changes to the scene or settings.
If we choose to also use the improved displacement on loading the scene, there is a final savings of 6.3 GB without losing any quality – and this scene doesn’t even make heavy use of displacement! You can also notice the improvements from the sharper textures at grazing angles, listed in the smaller changes further down the page, on the ground in the background.
Summary of Memory Optimizations:
Optimization of random sampler memory usage – High-res images render with less memory. There should be no impact on amount of noise (noise pattern itself can change).
Reduced Corona Renderer’s geometry memory usage by 16.6%. Note that 3ds Max and Embree still need their own geometry data in memory too, if you are wondering why this does not translate to an overall memory savings of 16.6%!
Reduced memory usage of the new light solver with volumetric media by up to 86% – this brings it in to line with memory usage in the old light solver.
Low memory warning now gives a bit more detailed breakdown of Corona Renderer memory usage (split into geometry, textures and frame buffer).
To make it easier to track and breakdown Corona Renderer’s memory usage, we’ve also added new renderstamp variables which let you monitor memory usage at all stages during rendering:
Randomization by Mesh Element
Both the CoronaMultiMap and the CoronaUvwRandomizer now support randomization by Mesh Element (one contiguous triangle group). A prime example would be randomizing the color of each individual leaf on a tree, randomizing different planks in the keg, and randomizing the color of the fruit, all using the MultiMap and randomizing by Mesh Element:
Or randomizing the marble texture on the tiles using the UvwRandomizer in Mesh Element mode to avoid repetition:
Support for additional image file formats
Corona Image Editor and Corona Standalone:
Extended the list of file formats which the frame buffer can save to, and when saving the user can now specify the output color depth and whether to include an alpha channel.
Added support for Kodak Cineon, Adobe PSD Reader, SGI file, RLA image file, and DDS image file formats.
First implementation of Unified Lister
This first implementation of a unified Corona Lister is in place – it lists Corona Scatters and Corona Lights in this release (with more object types to be added in Corona Renderer 4).
Corona Renderer 3 for 3ds Max, Unified Lister
New Light Solver Improvements
Optimized the new Light Solver, giving an overall speed up of between 5 – 15%.
The initialization of the light solver is now parallelized. The solver is also re-initialized only if some lights changed, making IR restarts significant faster.
Improved sampling of translucent objects.
Improved light sampling in cases where geometry is very close to a spherical light.
Fixed inefficient sampling when the shading normal differs significantly from the geometry normal.
Fixed square artifacts that appeared when non-physical lights (invisible or transparent lights) are used in the scene.
Fixed the new light solver producing rectangular artifacts when textured lights are used.
Fixed NaNs (black pixels) occasionally appearing in the rendered image.
Reduced the memory usage for volumetric media (in some cases, down to 14%, an 86% savings compared to the New Light Solver in Corona Renderer 2).
Fixed bias when rendering portal hidden behind another portal.
Fixed crash in new light solver with extremely bright lights.
Fixed a few other occasional crashes.
No longer called “Experimental” due to the fixes so it should work in most scenes – however, we have held off on making it the new default for now.
Optimized VFB redraw speed.
UI controls in object lists in Scatter have been reorganized to make more space for object names.
Unified Look & Feel of Corona Renderer’s warnings/question popups.
The Corona Color Picker now remembers the sRGB checkbox state and color range between sessions.
Fixed Corona Color Picker not taking into account values entered via keyboard right before OK is clicked.
The Corona Camera shutter offset now has a range from -1 to 1.
Changed the order of operations in the installer, so that components which need additional downloads (the material library, or the NVIDIA AI denoiser) are installed last – this means if installation is cancelled during the additional downloads, everything else should already be properly installed.
Unsupported materials are now gray for GI rays, which removes the red bleeding of the material into the scene:
Improved texture sharpness on grazing angles (for diffuse, bump, displacement, etc.) – in the image below, notice how definition and detail is preserved:
In the viewport, scatter is now able to toggle the instance color between the original object wire color and the scatter object color.
In Corona Scatter, the rotation and scale of the original instanced objects no longer affects the scattered instances (this does not change existing scenes unless the Legacy checkbox is disabled).
Installation and Licensing
Corona Renderer now requires SSE4.1 CPU for all tools – including licensing server. We had hoped to continue supporting the licensing server on legacy CPUs, which we mentioned in the Corona 2 release blog – unfortunately, this has proven to be time and cost prohibitive and we had to change our plans. Only CPUs more than a decade old will be affected.
Licensing and DR servers are now 64-bit applications.
The CIE, Corona Standalone, and DR and licensing servers are now installed to sub-directories by default, to avoid problems with multiple versions of the same DLL being installed at the same time.
Added better reporting of Corona Renderer version to MAXScript (see getVersionNumber etc. on https://corona-renderer.com/wiki/maxscript#corona_rendering_core).
IR Bug Fixes (and improvements)
Fixed IR not restarting when render elements were modified.
Fixed non-filtered render elements not being correctly rendered in IR.
Fixed unnecessary reparsing of the the environment map in IR.
IR no longer unnecessarily restarts when a map not attached to the scene is modified.
Fixed some unnecessary IR restarts when navigation the material editor.
IR is no longer restarted when switching between Bitmap nodes in the Slate material editor.
Fixed IR restarts when Scatter visualization settings (dot, box, full, etc.) are changed.
DR Bug Fixes (and improvements)
DR is now able to automatically discover slaves connected through all network interfaces.
IFL image sequences are now correctly handled by Corona DR.
Integrity of scenes sent via Corona DR is checked, and reported in the case of integrity failure.
Fixed Tilt&Shift in XRefed camera when rendering with DR.
Added an option to restart slave 3ds Max after each render (we implemented this as a workaround for some potential problems that a small number of users may encounter with DR server freezes).
Fixed DR slaves not fetching missing assets from master in some cases (for example bitmaps referenced by atmospheric effects).
Path to 3ds Max is now correctly auto-detected even when the 3ds Max is reinstalled to a different path, unless the path was explicitly overridden in the configuration file.
Fixed some cases where rendering non-camera view leads to an incorrect result.
Fixed DR slaves sometimes introducing “dots” of darker color in the CMasking_ID render element.
Added a button in the DR Server for opening the folder with EXR images which were sent to master.
Added a button in the DR Master to the DR render settings for opening the folder with EXR images which were sent from slaves.
Better error reporting when the slave 3ds Max fails to start.
Scatter Bug Fixes (and improvements)
The density spinner below distribute-on object list has been renamed to Factor spinner since it better describes its purpose (see its improved tooltip for further details). Also both Factor and Frequency spinners are now disabled when they are not considered in current scattering mode.
Fixed Scatter to respect Material IDs set on polygons of distribute-on objects while evaluating MultiMap plugged into density or scale map slots. Behavior in old scenes is not changed unless the Legacy checkbox in the Scattering rollout gets unchecked.
Fixed occasional crash in Scatter when displaying instances as wire boxes or point clouds in the viewport.
Fixed crashes occurring while scattering large amounts of instances.
Tooltips for Factor and Frequency spinners in Scatter are now displayed also for their labels; the tooltips now also state under which circumstances the spinners are enabled.
Fixed problem where scatter density map updates were not reflected in scatter viewport display in 3ds Max 2017.
The “Original wire colors” checkbox in Scatter is now disabled for Previz types for which it is not supported.
For surface scattering mode, fixed the Count control so that it is disabled when the scatter is switched to UV map scattering.
Fixed the Dots viewport display mode to display dots at the correct places for animations (this bug did not affect rendering, only the viewport display).
Fixed the distribute-on object density and instanced object frequency spinners so that they get updated when changing the object selection (in the lists above them) via keyboard input.
Reworked the MAXScript interface for the Scatter. The old interface is no longer available. See https://corona-renderer.com/wiki/maxscript#corona_scatter_api
General Bug Fixes (and improvements)
Fixed “Region” button update in VFB when regions were enabled/disabled via MAXScript.
System-wide settings (accessible through the System Settings dialog) are now accessible from MAXScript.
Fixed unlinking target in targeted camera.
Fixed CoronaCamera occasionally having an incorrect mesh after loading a scene.
Daylight system no longer creates a target for the CoronaSun.
Fixed crash when trying to run Corona Renderer on unsupported CPU – now an error message is shown instead.
LightMix now properly works with lights having “Occlude other lights” disabled.
Fixed undo/redo not working with various object lists in Corona Renderer UI – scatter instance/distribution objects or density and frequency values, material override exclude list, etc.
Fixed diffuse texture being visible in reflection render element when non-physical lights are used.
Minimized problem of installer progress log window blinking when downloading additional pack files.
Fixed Corona Light gizmo scaling in viewport when scene units changed.
Fixed crash when CoronaSun is used as an input node for Corona Distance Map.
Fixed CoronaSun object cannot be selected when using the Daylight system without a Sky light.
Fixed auto-scaling of the Kelvin temperature result in volumetric rendering (CVolumeGrid).
Fixed occasional crash in denoising.
Fixed loading denoised image from the Render History (previously, this may have resulted in NaNs when using Regions, Render Selected, etc.).
Fixed incorrect unmapping of Filmic tonemapping.
Fixed incorrect results of CoronaBitmap used as screen mapped environment.
Fixed incorrect shading result of CoronaRoundEdges map (in fast mode) on displaced geometry.
Fixed crash occurring when attempting to show removed render element in Corona VFB.
Corona Standalone is no longer showing modal error dialogs in silent mode.
Fixed undo/redo for Clear list option in right-click menu on “+” button in various object lists.
Fixed Clear list option in right-click menu on “+” button in Scatter not to cause crashes.
Fixed CoronaColorCorrect “Invert colors” being ignored when the map is assigned to a bump map slot.
CoronaColorCorrect now preserves alpha of the input map.
Fixed rare crashes with non-manifold geometry (e.g. geometry where two or more triangles only share a single vertex, where an edge is shared by more than 2 triangles, self-intersecting meshes, etc.).
Added an error message when rendering a mesh with changing topology and velocity render element is enabled.
Updated the readme.txt for the “Unpack” option of the Corona Renderer for 3ds Max installer.