we have created a new build of the NVIDIA Mental Ray for Maya plugin, version 1.2.1. The primary purpose of this update is to fix a problem with the original installer, which stopped working with latest NVIDIA driver installers on Windows. At the same time, we also addressed few minor issues in the plugin itself, and in the Mental Ray core engine.
You can download the new version from our Mental Ray for Maya Forum for Linux, Windows, and Mac. This update is not auto-distributed through the NVIDIA Professional Application Center this time.
We would appreciate if you let us know that it works for you.
Here’s a new version of the abcimport shader that is compatible with mental ray 3.12 and mental ray for Maya 2015. It can be downloaded from this link. The package contains a version for Windows, Linux and Mac OS X, as well as the .mi file with the new shader declaration.
The new features:
Support for hair import
Alembic curve objects are translated into mental ray hair geometry. The curves can be defined with linear segments, quadratic bezier and cubic b-spline (either uniform or with given knot vector). Hair approximation quality can be set with the shader parameter “subdivisions” (default 0). The parameter controls the number of subdivisions for hair segments. The picture shows a rendering of an Alembic file generated by Ornatrix 3, with linear hair segments and using the shader “mib_illum_hair_x”. Hair alembic file courtesy Ephere Inc
Faceset material support
In Maya, the facesets are assigned with material names. Our abcimport shader now uses this information to reference materials with these names. Facesets can be either triangle or polygon mesh. (Facesets for subdivision surfaces will be added later.) Faceset translation is enabled by default and can be turned off by setting the shader parameter “facesetmaterials” to off.
User data support Triangle meshes now can reference user data such as color3, color4, point, normal, float, integer. The user data must be attached as “arbitrary geometry parameter property” to objects in the abc file. Please, contact us for more details.
Subdivision control for hair, NURBS and subdivision surfaces
The “subdivision” parameter is now also applied to hair, NURBS trim curves, NURBS, and subdivision surfaces.
Motion blur issues fixed Motion blur for topology changing abc files is now possible. We fixed an issue with the velocities in Alembic which were not interpreted correctly.
These features will be incorporated into the upcoming versions of mental ray this year.
This is the first post of a new category: NVIDIA mental ray – In the Lab. We want to give peeks into research projects and features we are working on for future versions of mental ray. Here we like to talk about our GPU accelerated Ambient Occlusion solution, in short: AO GPU.
The video demonstrates three new features of AO GPU: Progressive Rendering, High Quality Anti-Aliasing and Object Instancing. It was generated using a standalone test application, using a NVIDIA Quadro K6000 GPU.
Previously, AO GPU used a sampling mode optimized for batch rendering. This sampling scheme, based on Fibonacci numbers, converges very fast and efficiently to good results. The caveat is that you have to know the number of samples in advance, plus there are only certain sample numbers you are allowed to use (1, 2, 3, 5, 8, 13, …). If you stop rendering ‘in-between’, the image will look wrong.
Now, sometimes you are not sure how many samples are needed to achieve the desired quality. The usual solution is to perform progressive rendering, which means watching intermediate rendering results and stop the render process when quality is good enough. As you can see in the video, Fibonacci sampling is not suited for progressive rendering, intermediate images show strange wobbling shadow effects (we moved the camera to trigger a re-rendering in the application). Switching to our new progressive sampling scheme fixes the wobbling artifacts, you just see the noise disappearing over time.
This progressive sampling scheme does not converge as fast but it is well suited for ‘time-constrained’ situations, where you want to stop rendering after a certain time limit, and you are not sure what the best sample count setting would be.
High Quality Anti-Aliasing
The existing AO GPU solution used a very simple anti-aliasing scheme to filter pixel jaggies at geometric edges. Essentially, this filtering was constrained to the area of a single pixel, and every sample was equally weighted. Of course, for some scenes this simple Box filtering is not good enough. In the video, we magnified a detail of such a scene to show the problem. Look at the dark vertical gap between the doors of the cupboard; it looks staggered even with many anti-aliasing samples.
We added new filters to improve this. Anti-aliasing now samples in larger area than only a single pixel, and the samples are weighted according to a filter curve. In the video, we switch to a special Gauss filter curve with a sampling area of 3 pixels diameter, and you should see that the lines look much better now. Other available filter curves are ‘Triangle’ and ‘Gauss’.
For complex scenes, memory consumption is always a concern. The model shown in the video has 21 million triangles, using about 3 GBytes of GPU memory. If we want to render more objects, then we might lose GPU acceleration, because additional models do not fit anymore into GPU memory. The current AO GPU solution will switch to CPU rendering automatically, but rendering will take much longer. If the additional objects consist of the same model, then the model can be reused in the rendering without taking much more memory. This model-replication technique is called instancing.
We implemented instancing in the AO GPU prototype to see how far we can get with this technique on a GPU. As the video shows, a million replicas are no problem.
We hope you enjoyed reading this post and watching the video.
Autodesk 3ds Max 2015 and Autodesk Maya 2015 ship with mental ray 3.12 which includes a prototype of our new global illumination engine accelerated by the GPU. We encourage our 3ds Max and Maya users to try it out. Your feedback will help us in making this a big step forward into the future of rendering with mental ray. While the current version is in prototype status and not yet feature complete, we are constantly improving the algorithms and adding new features. Your input is most welcome in this process.
The key idea of the new GI engine is full and exact simulation of the lighting interactions in a scene. This way, we overcome drawbacks from caching techniques and interpolation, and make mental ray more interactive and predictable. The brute-force raytracing approach is accelerated on CUDA capable NVIDIA GPUs making it particularly attractive in this set-up. Its result gets combined seamlessly and automatically with the primary rendering done on the CPU. This ensures full compatibility with existing custom shaders, which do not need to be touched in order to take benefit of the new GI engine.
The following Maya scene is rendered using the new GPU GI prototype in 11 min 34 sec (2 x Quad-core Xeon E5620 @ 2.4 GHz in hyper-threading, 8 GB RAM, Quadro K5000)
For comparison, this image is rendered with the classical finalgather automatic mode in 20 min 52 sec (2 x Quad-core Xeon E5620 @ 2.4 GHz in hyper-threading, 8 GB RAM, Quadro K5000)
In the current version, the GI GPU mode considers diffuse-diffuse bounces only, similar to what final gathering typically computes. In fact, if this mode is enabled without setting further parameters then finalgather settings are used to derive reasonable default parameters to render towards the same quality. If certain prominent ray tracing effects like mirror reflections or transparent windows are not used in a scene then the fastest diffuse mode is best suited. For current limitations, see below.
The following image is rendered with the GI prototype in diffuse mode in 37 minutes (Core i7-3930K (6 cores), 16 GB RAM, Quadro K5000)
The following 3dsMax scene is rendered on the CPU with finalgather force in 13 hours (Core i7-3930K (6 cores), 16 GB RAM, Quadro K5000)
The GI GPU mode can be enabled and controlled with scene options or on the command line of the standalone mental ray. We also provide scripts for Maya and 3dsMax that provide a simple GUI for enabling GI GPU (see screenshot). Please, note, that this is by no means how we envision it to be integrated in the applications. It’s rather to provide easy access to users that would like to test the prototype.
The scripts to easily enable and access the GI GPU prototype can be downloaded directly from us here:
GI GPU transfers the scene geometry, presampled shader data, and some constant amount of buffer memory onto the GPU. Textures are not needed on the GPU. In the case that the GPU memory is not sufficient, there is an equivalent CPU mode. The new GI engine can still be used but the GPU acceleration must be disabled (uncheck the ‘Use GPU’ checkbox). There is also an absolute limit of 25 million triangles.
For GI GPU to be effective, finalgather must be turned on. Some features are not yet supported: distorting lens shaders, motion blur, particles, volume shaders, camera clipping planes, progressive rendering. There is only limited support for scattering shaders, emissive materials, and hair rendering.
We would like to hear your feedback and see your renderings using this prototype. Please join our NVIDIA Advanced Rendering forum, if you have not already, and send us your comments and discuss the mental ray GI GPU prototype. The dedicated mental ray GI GPU Prototype forum topic here
mentalray for Maya 2015 SP2 is now available and provides important fixes around XGen hair rendering, layering shaders, massive assembly scenes, native IBL and more. Here’s a short list of fixes that come with the new mental ray 188.8.131.52 and the new version of the mental ray plugin.
Please, consult the mental ray and the Maya 2015 SP1 and SP2 release notes for the complete list.
XGen The performance of the XGen hair shader has been significantly improved for scenes with dense hair.
Layering shaders (Mila)
Several fixes in the shaders and the UI – namely, possible crash with subsurface scattering initialization, possible NaN values and a too bright contribution of the user IBL environment shader in glossy components, reordering layers with bump or weight connection.
Binary Maya file compatibility with Maya 2014 restored
Some mental ray shader nodes saved in .mb files were not compatible between 2014 and 2015. This is now fixed.
Improved performance of the GPU and multi-CPU rendering, and added support for NVIDIA Maxwell GPUs.
Large scene with assemblies
Fixed possible crash when rendering large scenes with multiple assemblies exceeding physical memory.
Native environment lighting
IPR now automatically updates when changing the new “emit light” features which control the native environment lighting. Fixed brightness difference in IPR versus Render Current Frame.
Recently, we were asked about a not-so-well-known feature to help rendering heavy scenes with mental ray inside Maya, or 3ds Max.
You may skip the introduction and jump down to the setting at the end of this article. For those who are into details, here is a little background.
As you might know, mental ray is based on the concept of “loading on demand”, which helps to cope with huge amounts of data that won’t ever fit into the available memory at once. Buying more memory for your rendering machine will help, but, at the same time, your scene size and texture needs have grown again. Well, typically you should not notice since mental ray takes care of handling these cases automatically. It delays all operations that are memory exhausting or expensive to compute to the latest point in time, and only executes them when really needed to render the current pixel. That is true for scene data, when loading elements from an assembly or Alembic archive, but also for textures, reading and decoding only those textures needed, possibly even keeping just pieces of it in memory, so-called “tiles“. Most importantly, the tessellation of source geometry into triangle data is done on demand only, absolutely critical when working with very detailed displacement. Finally, this mental ray machinery of demand loading is also exposed to shader writers.
Let’s look at mental ray for Maya and its use of this technique for scene translation. Normally, if you do a preview render in Maya (like “Render Current Frame“), the whole scene will be converted to the mental ray database before the actual rendering starts, often referred to as the “translation” step. This will include every scene element independent of its contribution to the rendering of the frame or animation. What is usually OK for most scenarios, might become a bottleneck in extreme situations with many large pieces of geometry or several big chunks of hair, especially if they are not really actively involved when rendering the current view. Like in the example below (a quickly painted cityscape in Maya, but you get the idea)
The usual answer to this problem would be: create a mental ray assembly for those scene parts and reference that in your master scene. But, there is an easier way right from within Maya:
Enable “Render Settings > Options > Translation > Performance > Export Objects On Demand“, as marked below.
What is it doing ?
It does not pre-translate geometry before rendering starts, as it usually does, but delays it to rendering time. The translation just creates so-called “placeholders” – basically bounding boxes around the pieces of geometry – that will trigger execution of the actual translation only when a ray hits that box (or a certain feature is requesting the actual geometry). Because translation becomes very fast it finishes almost unnoticed, so that the Maya progress bar typically starts with “mental ray rendering…” . Leaving the “threshold” setting at 0 (zero) will cause all objects to be demand-loaded, even if tiny. That may be inefficient. Increasing this to a higher number, only those objects with its number of points/vertices beyond the value will be considered for demand loading, the rest gets pre-translated.
Please remember, that in a ray tracing or global illumination context all the objects may be demand-translated immediately anyway even if out of sight! In that case there may be no real benefit using this mode. And, this translation mode has a certain runtime overhead attached to it, so it may pay off only in certain cases, and only with an appropriately chosen threshold.
This setting is saved with your scene. That means, it will also work with “Maya Batch”.
You are working with 3ds Max ? The same feature is available here too, enabled with “Render Setup > Processing > Translator Options > Memory Options > Use Placeholder Objects“, as shown below.
Just give it a try, and leave a comment if you find it useful.
the mental ray Standalone has a similar feature if bounding boxes are given in the .mi file. It is enabled on the command line with:
You can now preview mental ray rendering interactively in 3dsMax: camera navigation, adjustments to light and material parameters, and object creation are immediately reflected in the ActiveShade window using mental ray. The rendering provides an accurate look overtime – just as what you will get in the final frame.
mental ray takes advantage of the ActiveShade improvements that are released with 3dsMax 2015: Many changes are captured more frequently offering finer grain updates. These changes include: viewport navigation, switching between viewports, adjustments to light parameters, and certain other scene changes (Creating, moving, or deleting objects).