Version 3.8.1.26
Feb 10, 2010
Copyright © 1986-2010 mental images GmbH, Berlin
These release notes list changes in mental ray since version 3.7.1.1.
Note: Version 3.8 and later versions of mental ray are binary incompatible with mental ray versions 3.7.x and prior. Partial compatibility with 3.7 is maintained.
Bug fixes:
ccmesh implementation), fixed a crash observed for some objects.Bug fixes:
Shader changes:
Glare output shader.Bug fixes:
globillum or
    caustic) was used in a scene with assemblies.Feature improvements:
premultiplied flag introduced in version 3.8.0.8 has been
    changed to maintain compatibility with mental ray 3.7+ and prior. For the
    primary framebuffer, the default value is true. For user
    color framebuffer, the default value is false. The flag is
    effective for rasterizer mode only.Bug fixes:
rgbe type (in particular,
    .hdr images). If a color profile has been specified in the scene, the
    loaded images were black.state->bary[0] sometimes was
    initialized to NaN value, fixed.Bug fixes:
ccmesh objects, fixed echo of derivatives and length
    approximations."output off" option and command line option disabled
    the file output statement together with calling of output shaders.
  Fixed.rgba primary framebuffer could be
    advanced to rgba_16 without a need to do so, consuming more
    memory."? :" ) operator.Bug fixes:
mi_output_image_open() function with out-of-range
    framebuffer index could cause an unknown tag access fatal or crash.
    Fixed, an error message is printed.Bug fixes:
half type, so
    that half and float images are handled
    consistently."environment lighting shadow" modes "solid" or
    "off" were used.Shader changes:
Feature improvements:
Bug fixes:
Feature improvements:
libiraymr and libiray. The libraries are loaded
    automatically by mental ray as soon as iray rendering is enabled, and
    searched for along the regular library search path.Bug fixes:
--disable-gl
  set.Feature improvements:
libiraymr.so/.dll/.dylib. This library is distributed
    together with iraylib and is installed at the same location.Bug fixes:
For SPM-protected mental ray licensed by mental images, simplified the licensing scheme.
One license per 4 cores on a machine is requested.
In particular this new scheme provides a fair license counting on virtual machines, which was not possible to achieve with the per-CPU-socket scheme used before.
Bug fixes:
mi_tri_vectors() function. The
    list of such shaders includes architectural material, subsurface
    scattering shaders, and many common OEM shaders.
    The validity scope of mi_tri_vectors() function is
    adjusted. The returned pointers are valid until the next
    call to that function for a given rendering tile/task. In
    particular, shaders may need to be adjusted to copy the results before
    evaluating shader parameters (mi_eval), tracing rays and calling other
    functions which would lead to execution of other shaders. In earlier
    versions of mental ray, the validity scope of the data returned by
    pointer was not specified and could be extremely short when mental ray
    was low on memory.
mi_api_add_shader() function, check if the new tag for
    the given name is the same as the old one, and issue an error in this
    case. The usage is illegal as this function is unfenced to delete the old
    tag.Bug fixes:
Summarized release notes for iray are provided in a separate document.
Feature improvements:
In earlier versions, compilation was triggered by scene preprocessing and was done sequentially.
Bug fixes:
Together, this fixes issue with deleting shader declarations for existing shaders.
imf_disp tool, possible wrong image display after
    window resizing.Known issues in this version:
Bug fixes:
mi_phen_clone/unclone
    functions.Bug fixes:
#define's values wrapped by ()-brackets are parsed correctly
    now.Feature improvements:
finalgather force <bool>. Usual
    scene DAG inheritance rules apply. The default value is off.
    The miIrrad_options structure has been extended with
    finalgather_force member , so that a shader has a
    possibility to overwrite the value from the scene DAG. The default value
    is 0 (inherit). The value 1 can be used to enable, the value 2 to disable
    finalgather force computation. This option makes the "state->type
    = miRAY_LM_VERTEX;" trick obsolete.
If finalgather force is enabled, mental ray will compute finalgather indirect illumination directly at the hit point instead of interpolating it from the finalgather map. This produces more accurate result image at the price of increased rendering time.
-finalgather_passes 0 command line option, it is now
    possible to enable the compatibility mode for finalgather map computation
    used in mental ray 3.6+ and prior (all finalgather points are placed in
    one pass, somewhat lower memory consumption especially for images with
    huge resolution).-m32/-m64 option to the default
    C++ compiler and linker option list (invoked for MetaSL shader
    compilation with MetaSL C++ backend enabled). In particular, this
    simplifies deployment of 32-bit mental ray executable on 64-bit Linux
    platform. On MacOSX this option has already been used in the earlier
    mental ray versions.mi_kdtree_*
    interface are affected,as well as scenes with BSP2 acceleration in the
    debug build or in combination with multihosted rendering.-progressive_max_time F command line option in
    addition to the equivalent string option. This option limits mental ray
    progressive rendering and iray execution time. Bug fixes:
darts.-output off command line option: it disabled all
    image file outputs instead of suppressing executions of output
  shaders.Occlusion_options, Irradiance_options,
    Light_sampler_options, Light_profiles,
    Particle_map, and Particle_map_options
    constructors.Bsdf type.Cube and Spectrum texture samplers.ray
    -mslc command line option), fixed generation of uniform and const
    constructor attributes.Bug fixes:
T/-texture_path command line option), fixed wrong handling
    of back slashes used in combination with the '!' sign.miState::inv_normal to
    miFALSE for hair hits. For hairs, the flag is meaningless.
    However, initializing it improves compatibility with non-hair-specific
    shaders respecting surface orientation.Shader writers and application developers are strongly discouraged from using non-trivial static destructors.
Feature improvements:
-T /
    -texture_path commands on the command line.dlopen/dlsym instead of the platform-specific NS* function
    family.Bug fixes:
mi_query function was called in
    miQ_PRI_BBOX_MIN/MAX modes with null
    state->pri. mi_query now returns
    miFALSE in these cases.link statement has been
    applied on a file of an unknown or unsupported type.orthographic state variable.Feature improvements:
.so ->
    .dylib. Old shader libraries with .so extension must
    be renamed. The consistent .so/.dll/.dylib substitution
    rules provide .mi scene cross-platform compatibility.Bug fixes:
link statements.msl/xmsl) files.mi_trace_continue function or volumetric rendering with
    autovolume mode used.switch statement.switch/break/continue/return combinations.-mslc -t msl command line
    options), fixed missing half/double qualifiers on the literals. libiray.dylib (instead
    of .so) .Bug fixes:
gen_llvm.dylib (not
    .so) for LLVM MetaSL backend.Known issues in this version:
gen_llvm.so, not gen_llvm.dylib.Feature improvements:
.dylib. mental ray still allow
    shaders to have .so extension on these platforms. On Windows, a default
    substitution rule .dylib -> .dll is added. On Linux, a
    default substitution rule .dylib -> .so is added. On
    MacOSX, .so is not substituted into .dylib in
    order to provide compatibility with old shaders.mi_rc_progressive_tonemapper_function by adding an
    opaque pointer argument passed to the callback function registered. Note
    that this changes binary interface and the applications may require
    re-compilation as well as minor textual changes if plain C is used.mia_physicalsun shader.mi_rc_progressive_* interfaces has been improved.Bug fixes:
#import token.default case in
    switch statements.light_shadow
    output of light shaders.Shader changes:
apply attributes.LumeTools shader used to GUI attributes only.Feature improvements:
-mslc command line option), added a possibility to
    output MetaSL files. Unused output of binary MetaSL file (.bmsl) is
    removed.cpu
    for the -iray command line option. With -iray
    cpu option, iray rendering will use CPU mode even
    if CUDA-capable GPU is present in the system.Bug fixes:
"progressive error threshold"string option to 0.05, as
    documented. The value for earlier versions was 0.1.const
    String' type was used.dot(int, int)
    function, Occlusion_options constructor, and
    String == and != operators.break, continue and
    return operators.Shader changes:
paint.mi file no longer links base.so
    explicitly. Though paint phenomena depend on base shaders, the way to
    link shader explicitly was inconsistent with rayrc
    configuration workflow.Feature improvements:
-mslc
    command line option), allow file arguments to be specified after compiler
    options.Bug fixes:
MI_METASL_LLVM_OPTLEVEL environment variable).Known platform-specific issue in this version: On 64-bit Linux, the MetaSL LLVM backend asserts for most of MetaSL shaders.
Feature improvements:
fork-based solution used in previous versions was not
    reliable due to the extensive usage of phtread library (multiple threads,
    locks).
    The environment variable MI_DEBUG_INVOKE is no longer
    used.
MI_METASL_LLVM_OPTLEVEL could be used to control the
    optimization. It is recommended to set it to 1 on Windows platforms in
    order to increase generate code reliability."progressive
    error threshold" F string option, which stops rendering when
    specified quality is reached.physical_light and
    mib_light_photometric (including light profiles) light
    shaders are supported.Bug fixes:
Feature improvements:
frame_begin: <frameno> <xres> <yres>,
    <is_output_shader>
where is_output_shader is 1 for output shaders and 0 for normal rendering. This allows display applications to distinguish the rendering and postprocessing stages.
Bug fixes:
imf_disp tool, fixes creating of the second frame
    if output shaders are used in the scene.Feature improvements:
-assert_fatal <bool> command line option. If
    set to off, mental ray would continue execution after
    assertion (and possibly crash later). Default is on. This
    option should be used for debugging purposes only. It may be also used to
    prevent popup on Windows platforms in batch processing.half
  type.mi_lookup_*_texture_x functions, the filter is passed by
    value..mi parser, remove the limit of 4096 characters
    per line.iray, improved light source handling.Bug fixes:
premultiplied framebuffer flag.brdf_type annotation are compiled as BRDFs even with
    --brdf command line option is specified.dof_focus.mental ray's ability to flatten shading trees and Phenomena specified with
.mi syntax or mental ray API and consisting of nodes which are MetaSL shaders
has been disabled for 3.8 release. The value of the registry
{_MI_REG_METASL_FLATTEN} is ignored. This does not affect
flattening of Phenomena provided as XMSL files.
Feature improvements:
premultiplied framebuffer flag added in version
    3.8.0.8 to true. The new default behavior is
    backward-compatible with mental ray 3.7 and rendering with rasterizer
    disabled.Bug fixes:
Feature improvements:
"iraylib.dll/.so".
    mental ray searches for this library on the path list for the shader
    lookup (same mechanism as for the gen_llvm MetaSL backend). The plugin is
    loaded automatically.
    Standalone and SPM-protected mental ray libraries are now delivered
    with iray plugin and CUDA runtime libraries. The plugin installation is
    required only for rendering in the iray mode ( -iray command
    line option).
mi_lookup_color_texture(_x) or
    mi_lookup_filter_color_texture(_x) function are called for
    these textures and the upper pyramid levels would improve the
    performance. Same applies for MetaSL shader filtered texture lookups.
    The original image data is not changed, so on-demand MIPMAP pyramids
    are not available for shaders using low-level mi_img_*
    interface.
Bug fixes:
{_MI_REG_METASL_EMULATE_MI_PHEN} set on).void mi_msg_usleep(int secs); is restored in
    the integration interface.Shader changes:
Feature improvements:
[0,0] with motion blur option enabled, use
    static acceleration structure in order to improve
    performance and reduce memory consumption.Bug fixes:
mi_rc_run_query function to the shader interface.
    Though this function is intended for the integration, some existing
    mental ray shaders depend on it.Feature improvements:
Bug fixes:
imf_disp tool, removed possible display
  flickering.New features:
The support for MetaSL CIL backend on Windows is discontinued.
As the name implies, the backend is based on the LLVM technology. There is no dependency on external compilers or linkers. The compilation is done on demand in memory, no intermediate files are created. Currently, it is not possible to externalize shaders compiled with the LLVM backend. Thus, such shaders are not stored into the compiled shader cache. However, in case a shader has been compiled with C++ backend (using external C++ compiler), the existing shaders in the compiled shader cache would be used. Shaders compiled with LLVM and with C/C++ compiler can be mixed in one scene, phenomenon or shading tree.
In order to enable MetaSL LLVM backend, it is necessary to:
" {_MI_REG_METASL_BACKEND}" value to
        "LLVM" or "llvm".-L command line option and by the
        "{_MI_REG_LIBRARY}" registry value.LLVM MetaSL backend library is loaded automatically when the first MetaSL shader is compiled.
This version of LLVM backend is an initial implementation, only simplest shaders will compile successfully Known issue: on windows platforms, gen_llvm will crash at initialization.
In this release, iray is linked statically into the mental ray library. T
On Linux system, an automatic detection of the presence of CUDA-capable graphics card is provided. If not available, CPU mode is enabled. This functionality is planned for Windows and MacOSX as well.
In this version, iray relies on CUDA compute capability version 1.1.
Feature improvements:
    miBoolean mi_trace_probe_x(
        miState        state,
        const miVector *direction,
        const miVector *origin,
        miUint         flag );
    This function is similar to mi_trace_probe, but takes a
    bitmask of visibility flags to test hits for. The enumeration for the
    flags is added to the shader.h interface file."premultiplied" on/off has
    been added to the .mi syntax. If set, the compositing of a
    color framebuffer(primary or user) is done according to the formula
    (A + (1-opacity) * B), otherwise it is (opacity * A +
    (1-opacity) * B).ddx/ddy. The
    expressions only apply for normals, points and texture coordinates. Note
    that the normal derivatives are computed for the interpolated normal
    without the effect of bump shaders.imf_disp tool, added "always on top"
  functionality.imf_disp tool, added mouse wheel scrolling of the
    window.imf_disp tool, and DISP talk protocol, added the
    ability to specify region of interest in the progressive rendering
  mode.imf_disp tool, display currently rendered
    rectangle.imf_disp tool used for stereoscopic images, allow
    to select one of the possible ways to display stereo images
    (View menu item):
    -ip_rays command line
    option. Before it was only possible with a .mi file string option.const qualifiers are added to the public API.Bug fixes:
new/new[] operators under mental ray memory
    management/statistics system.imf_disp tool, link EXPAT library statically. The
    dynamic library is missing on some older Linux system.imf_disp tool, fixed several image displaying
    issues.Known limitations in this version:
Feature improvements:
.msl / .xmsl file include
    statements.const qualifiers are added to the public API.Bug fixes:
scanline on.mi_info,
    mi_warning, mi_error etc.: if called from
    threads not attached to mental ray, these functions will return
    immediately without printing any messages.MISTD. In
    particular, it does not have a dependency on the _SECURE_SCL
    define value.Feature improvements:
mi_rc_progressive_set_buffer() function get an additional
    bool argument with the default value false. If
    the new paramerer is set to true, multiple calls to
    mi_rc_run() could be used with the same framebuffer,allowing
    a simplified and more efficient call sequence as in the pseudo-code
    below. The call to mi_rc_progressive_shutdown() is not
    required in this case.
    
        mi_rc_run(miRENDER_PREPROC|miRENDER_RENDER| ..., ... );
    mi_rc_progressive_set_buffer( ... settings ... , true);
    while (loop condition) {
        mi_rc_progressive_cancel_rendering() or mi_rc_progressive_stop_rendering();
        // do application incremental updates
        // BSP is *not* rebuild by the kernel
        mi_rc_run(miRENDER_REINHERIT |
                  [miRENDER_REINHERIT_LIGHTS |]
                  miRENDER_RENDER, ...);
    }
    mi_rc_run(miRENDER_POSTPROC, ...);
    
    As the binary interface of the
    mi_rc_progressive_set_buffer() function has been changed,
    applications with progressive rendering integration need to be recompiled
    against the new header files. No source code changes are required for
    application using the old call sequence.
{_MI_REG_METASL_TRACE}" is set are put into the temporary
    files directory instead of current directory.Bug fixes:
mi_info,
    mi_warning, mi_error etc.: if called from
    threads not attached to mental ray, these functions will return
    immediately without printing any messages.new/new[] operators under mental ray memory
    management/statistics system.Bug fixes:
Feature improvements:
The command refine_fb xl,yl,xh,yh can be used to
    specify that in the progressive rendering mode, additional samples are
    placed in the specified window if progressive rendering is used. imf_disp
    tool allows the selection of the window with the mouse.
unlink "filename" command to the .mi syntax in order
    to allow shader library replacements in mental ray standalone. Without
    this syntax, this functionality was available for raylib integration
  only.Bug fixes:
ccmesh objects, fixed memory allocations bypassing
    mental ray memory manager. This memory was not counted in statistics and
    could lead to a crash for large scenes..mi statements like link "base.{EXT}".Feature improvements:
Bug fixes:
trace calls.Extended list and more detailed description for new features and changes will be provided with the next version.
Iray:
Some mental ray 3.8 distributions are coming with iray. Iray is a
CUDA-based high performance path tracing renderer implementing mental images
architectural material and material library shading model. The integration of
iray into mental ray follows the raylib progressive
rendering interface. In order to enable iray, the command line -iray
on options, or a string option "iray" on should be used. iray is work
in progress and is not functional in this alpha version.
New features:
lft_ and rgt_ for the
    left and right eye respectively. Stereoscopic rendering is supported for
    the rasterizer as well as scanline
    on/off. View-dependent tessellation and displacement is applied
    according to the camera located in the middle of two eye positions. Same
    applies for the computation of finalgather maps. This allows consistent
    rendering of two images and improves performance by exploiting locality
    of the data and avoiding redundant work.
    The .mi syntax for the camera is extended with
camera "mycamera"
stereo <method> <eye_separation>
...
end camera
where method of left/right eye camera could be one of the following:
off Default, no stereoscopic rendering.toein The camera frustums are rotated so that the two
        camera direction vectors meet at the focal length. This method
        introduces perceptually incorrect vertical parallax which increases
        out from the center of the projection plane and might cause a visual
        discomfort when looking at rendered stereo images for a longer
      time.offaxis This method is the perceptually correct way to
        create stereo camera pairs. It introduces no vertical parallax and is
        therefore less stressful to the observer. It requires an asymmetric
        camera frustum, which most manufactured cameras do not support as of
        today.offset This is the straightforward method for
        rendering stereo pairs. It shifts the eyes along the horizontal axis
        in camera space. It is possible to specify stereoscopic rendering parameters wit the command line option
-stereo <method> <eye_separation> 
miCamera::miCamera_stereo (enumeration) and
    miCamera::eye_separation members.
    Stereoscopic rendering is not supported for orthographic cameras. For shaders, the camera space used if the position/orientation of the camera in the middle of two eye.
imf_disp 2.0
    image viewer has been written. Unlike version 1, the
    implementation is identical on Windows, Linux and MacosX platform,
    delivering the same set of controls.
    The major improvements include the ability to display live any of the rendering framebuffers (not just the primary color one), zoom, display individual channels, expose and gamma control. Automatic tonemapping is provided.
The new image viewer tool is compatible with progressive rendering and with stereoscopic images.
The compete list of command line options is given below:
imf_disp [/l] [/c ] [/e ] [/g ] [/t] [/s] [--frame ] [--frame-rate ] [--live-update ] [--cache-all-layers ] [--view-controls ] [--playback-controls ] [--on-image-load ] [--disable-gl] [/h] [image files...] 
-l, --layer=layer to display -c, --channel= channel to display -e, --exposure= set exposure -g, --gamma= set gamma -t, --tone-map enable tone mapping -s, --stereo-display enable stereo display --frame= frame to display --frame-rate= set frame rate (FPS) --live-update monitor file for changes --cache-all-layers= retrieve and cache all layers --view-controls= toggle displaying the view toolbar --playback-controls= toggle displaying playback toolbar --on-image-load= set GUI behavior on image load --disable-gl disable GL-based display 
Feature improvements:
For scenes without motion blur, significant to performance improvement and dramatically lower memory consumption have been achieved.
For scenes with motion blur, moderate improvements on performance and memory consumption have been achieved. Further improvements are planned before mental ray 3.8 final version.
For hair rendering used with ray tracing, a new splitting scheme is used. The scheme resolves possible rendering artifacts known from earlier mental ray versions and moderately improves the performance.
No longer required MI_HAIR_SPLITTING environment variable
    is removed.
Rendering performance of scenes with many hair objects has been improved.
For hair rendering used in combination with the
    rasterizer, the new string option "rast hair
    disposable" <bool> has been added. Default is off. If
    enabled, mental ray will tessellate only hair parts inside of the current
    rendered tile view frustum and throw them one one the tile is rendered.
    This mode is recommended for scenes with many hair as the memory
    consumption is decreased significantly at a price of slightly longer
    rendering time.
"progressive" <bool> Turn progressive rendering
        on or off. The default is off."progressive subsampling size" <int> Enables and
        controls coarse sampling of the initial displayed images. The default
        is 0 for disabled. Values greater than 1 activate subsampling in
        blocks of pixels. The value specifies the size of pixel blocks (size
        x size) where initial samples are placed first, typically displaying
        as a coarse image with the impression of a lower resolution. The
        rendered tile size is adjusted to be a multiple of this subsampling
        size."progressive min samples" <int> Set the minimum
        number of samples per pixel to compute before considering any of the
        listed criteria to stop progressive rendering. The default is 4."progressive max samples" <int> Set number of
        samples per pixel to stop progressive rendering. The default is
      100."progressive max time" <int> Set time, in
        seconds, when to stop progressive rendering. The default is to run
        unlimited. Rendering is not guaranteed to stop exactly at the time
        specified. Especially for the low limits, certain minimal time
        exceeded those limits may be required."progressive error threshold" <float> Set error
        threshold to stop progressive rendering. The default is 0.05. A value
        of 0.0 would apply no quality-driven rendering termination. A value
        of 0.5 will stop rendering already at a very low quality."progressive interactive" <bool> For the
        integrated version of raylib, enables a high performance image
        feedback. Rendering can be displayed and modified interactively via
        the mi_rc_progressive_* set of integration functions.
        The DISP image mechanism and disp protocols are disabled for the
        performance reasons. Default is off.For mental ray library, the following integration API is provided:
extern "C" bool mi_rc_progressive_set_buffer(
    void *display_buffer,
    const size_tstride,
    const miRc_prog_buffer_typetype,
    const boolflip);
 
        This function need to be called by the application after calling
        mi_rc_run(). It provides the buffer used by the
        application for display to the core and implicitly starts rendering.
        Two types of buffers are supported, 8 bit and floating point.
typedef enum {
    PROG_BUFFER_RGBA_8 = 0,// RGBA, 8bit
    PROG_BUFFER_RGBA_32= 1,// RGBA, 32bit fp
} miRc_prog_buffer_type;
        Remark: different pixel layouts (like BGRA) could be implemented by providing a tonemapper function that swaps channels.
mi_rc_progressive_get_update_count()
        call with certain time intervals to see if there is something new to
        display. If a new frame is computed,
        mi_rc_progressive_update_buffer() can be used to copy
        its data to the application's display buffer. The special method
        mi_progressive_update_buffer_first_subframe() will
        always return the first subsampled frame, which allows to display
        constant image while moving the camera (which can be less visually
        disturbing to the user).
        extern "C" miUint mi_rc_progressive_get_update_count(); extern "C" miUint mi_rc_progressive_update_buffer(); extern "C" miUint mi_rc_progressive_update_buffer_first_subframe();There are special return values to the calls to above:
enum {
    // The rendering is not running (not yet started or already
    // been shut down)
    MI_RC_PROGRESSIVE_NOT_RUNNING = 0xfffffff,
    // The rendering has finished rendering and is on hold until the
    // application calls mi_rc_progressive_shutdown()
    MI_RC_PROGRESSIVE_FINISHED = 0xfffffff - 1
};
 
        If the rendering is finished (maximum number of samples taken), the
        rendering can either be reset using
        mi_rc_progressive_set_camera() or it can be shutdown
        using mi_rc_progressive_shutdown(). mi_rc_progressive_set_camera()
        function. This call stops the current rendering, sets the camera to
        the specified values and restarts rendering from there. It is a full
        reset of the rendering and the frame number returned by
        mi_rc_progressive_get_update_count(),
        mi_rc_progressive_update_buffer() and
        mi_rc_progressive_update_buffer_first_subframe() are
        reset to 0.
        
        extern "C" void mi_rc_progressive_set_camera(
    const miMatrix camera_instance,
    const miCamera*camera);
 
      extern "C" void mi_rc_progressive_stop_rendering(); extern "C" void mi_rc_progressive_cancel_rendering();
mi_rc_run() and
        mi_rc_progressive_set_buffer().
        
        extern "C" void mi_rc_progressive_shutdown();
Tonemapping functions need to map an arbitrary floating point value to the valid interval [0,1], i.e. clamping to the maximum displayable value of 1 and minimum value of 0 has to be performed. The default builtin tonemapper implements [0,1] clamping with no further pixel modifications.
Although the tonemapping function can be changed at any time, the tonemap function can be called called until the current frame has been transferred to the application. Tonemapping is executed in parallel (multithreaded). The tonemapping function should be thread-safe.
extern "C" void mi_rc_progressive_set_tonemapper_function(
    void(*tonemapper)(float out[3], const float in[3]));
      MetaSL integration is subject to active development in this alpha version. In particular, the planned LLVM-based backend is not a part of this release.
If enabled (default), mental ray will create an MD5 hash code and create a .so / .dll library identified by that hash code, the platform (32 or 64 bit, Windows, Macosx or linux etc), debug or optimized, and mental ray version. This gives a unique identification of a shader and avoids possible conflicts if different version or mental ray are installed on the same system (such as 32 and 64-bit executables).
The following registries control the shading cache behavior:
{_MI_SHADER_CACHE_ENABLE} if not set to "off" /
        "false", the cache is enabled.{_MI_SHADER_CACHE_DIR} if set, specified the directory
        to use for the shader cache.{_MI_SHADER_CACHE_SIZE} if set, specifies the size of
        the cache to maintain, in Megabytes.For network rendering, mental ray distributes the source code of metasl shaders. Each host participating in the network rendering compiles shaders individually. This includes heterogeneous network support and possible combination of different backends, like CIL on windows machines and C++ on Linux machines.
In the current version, shader instances referring to MetaSL shader need to be deleted before MetaSL shader modification. It is planned to remove this requirement for the case when only the implementation part of the shader, but not the interface input/output parameters are changed.
Changes affecting compatibility with mental ray 3.7/3.7+.
Overview of the Information related to the changes between mental ray 3.7/3.7+ and 3.8 can be found in the upgrading38.html section of the manual.
"{_MI_REG_METASL_BACKEND}" registry should be set to
    "c++","cil" or "llvm". The
    "{_MI_REG_METASL_CIL}" registry used in mental ray 3.7+ to
    enable CIL backend is ignored.metasl_runtime.dll assembly to be shared
    across all compiled shaders. This assembly file should be located in the
    same directory as the application and/or mental ray standalone
    executable. Alternatively, it should be registered in GAC ("global
    assembly cache") with gacutil -i metasl_runtime.dll command
    once at mental ray installation.
    Note that default Windows security policy does not allow assemblies to be loaded from network drives. This may impose some constrains on the application / mental ray installation process.
-fvisibility=hidden flag. This is done in order to avoid
    symbol conflicts. Shader writers should make sure to specify the
    visibility attribute or use DLLEXPORT define for the
    exported symbols.cudart.dll/libcudart.so) to be
    installed on the system in order to start mental ray.Bug fixes:
miState::inv_normal
    properly. Fixes possible black indirect illumination rendering for some
    double-sided materials.Feature improvements:
{_MI_REG_CPP_COMPILER} if set, specifies the C++
        compiler{_MI_REG_CPP_COMPILER_FLAGS} if set, specifies the C++
        compiler flags{_MI_REG_LINKER} if set, specifies the path to the
        linker{_MI_REG_LINKER_FLAGS} if set, specifies liker
      flags{_MI_REG_MANIFEST_TOOL} if set, specifies the manifest
        tool to use on Windows platforms. Bug fixes:
ccmesh object tessellation.Feature improvements:
{_MI_REG_DEBUG_INVOKE} is set. The change is complimentary
    to the environment variable added in 3.7.55.21.Bug fixes:
get_ray_data or
    clear_ray_data is used.
    
  Feature improvements:
MI_DEBUG_INVOKE is set. This may be useful for debugging as
    gdb is has issues on debugging applications using pthread
    fork/join.Bug fixes:
Shader changes:
Feature improvements:
-progress_frequency <num> to accept float
    number for the percentage progressive message frequency. Previous
    versions required an integer.Bug fixes:
mi_msg_register_thread() function)
    while mental ray is low on memory.Light_iterator_options::set_shadows and
    Light_iterator_options::set_cone methods.Shader changes:
mip_binaryproxy shader, fixed a crash
    if an invisible object (no trace/visible flags) has been created. Fixed
    missing database tag unpinnig which could have negative effect on mental
    ray database flushing when mental ray is low on memory.Bug fixes:
Light_iterator::set_shadows(false) option. The option is
    only active if the light shader is a MetaSL one.Shader changes:
Feature improvements:
ccmesh subdivision surface, the mi_tri_vectors
    function returns the position, normal, texture, motion and derivative
    vertex data for an incident triangle to the current displaced vertex. For
    position, the last refinement level is used instead of the limit position
    which is overwritten during displacement mapping.Feature improvements:
phtread_join/fork for the external
    compiler and linker invocations. This allows debugging with
    dbgdb. gdb has a known issue (freeze) while
    dealing with these system function calls. Note: a
    disadvantage on this change is that debug mental ray will not capture the
    output of invoked processes.Bug fixes:
main() methods of shaders generated from phenomena. Also
    fixed possible loosing of array specifiers for such variables.get_trace_depth() without
  parameters.Shader type.Bug fixes:
trace_immediate.call
    function will not beak C++ compilation, even though the calls will not be
    functional.Bug fixes:
Shader changes:
Feature improvements:
Bug fixes:
shutter_delay = shutter >
    0, fixed possible shadow artifacts due to the static BSP2 tree
    used in this case. Note that with this fix, the memory allocated by the
    BSP2 acceleration is increased, but stays below the memory required for
    motion BSP2 acceleration.Irradiance_options, which are not intended for passing
    between shaders. An error message is added.Type
    t(); and Type t = Type(); for "non-fundamental"
    builtin types Irradiance_options,
    Light_iterator_options, Sample_iterator etc.Texture*.Bug fixes:
Bug fixes:
sincos function calls.Bug fixes:
mental ray manual has been updated for this version.
Feature improvements:
intrinsics.dll /
    intrinsics.so, has been added. The library contains the set
    of 400+ MetaSL intrinsic shades. Linking this library may significantly
    reduce memory consumption and improve performance if MetaSL shaders are
    used.-progressive <bool> 
-progressive_subsampling_size <int>
-progressive_min_samples <int> 
-progressive_max_samples <int> 
-progressive_error_threshold <float> 
Corresponding string options are "progressive",
    "progressive subsampling size", "progressive min
    samples", "progressive max samples" and
    "progressive error threshold".
The -progressive_subsampling command line option has been
    renamed to match the string option name.
The new options set allows usage of progressive rendering with
    adaptive sampling. The "progressive min samples" specifies
    the minimal number of samples used. "progressive max samples" and
    "progressive error threshold" specify the maximal number of samples and
    estimated error level to be used per pixel before stop, whatever criteria
    is reached first.
stdout is captured by mental ray kernel and
    printed out as LINK module debug messages. The output to
    stderr is printed as LINK module error messages. For Windows
    platforms, same functionality has been added earlier in version
  3.7.52.14.Bug fixes:
imf_disp interactive display has been created at the
    correct location, but the framebuffer file has been saved somewhere else
    or failed to save. Fixed.for loops containing declarations in initializers and for
    assignments elements of arrays of structures.Shader changes:
Bug fixes:
-fb_virtual on) and
    interactive display (imf_disp) attached.light_type member of the light state.operator*= operators.Type t(); and
    Type t=Type(); constructor expressions.int2, int3, bool2 and
    bool3 parameters.Shader changes:
"mi_car_paint_phen_x"
    phenomenon.Bug fixes:
-fb_virtual cache) were used.-fb_virtual cache) fixed possible short delays when multiple
    tiles appears in display window in bunches. The tiles displaying is made
    more uniformly in time.Shader changes:
Feature improvements:
miBoolean is
    neither miTRUE nor miFALSE, echo it as an
    integer.Feature improvements:
light_dot_nl, light_uv,
    light_area and light_area_delta state
  variables.light_distance_limit with
    huge scalar.Bug fixes:
Bug fixes:
Feature improvements:
When such external compiler, linker, CIL assembler or manifest
    embedding is invoked, its output to stdout is captured by
    mental ray kernel and printed out as LINK module debug messages. The
    output to stderr is printed as LINK module error messages.
    Some of the external tools put error-style messages into
    stdout, so for troubleshooting it is recommended to run
    mental ray with debug output (-v 6 command line option for
    mental ray standalone).
Bug fixes:
Fixes the issue on texture declarations described in the release note for version 3.7.52.13.
lerp function compilation.Shader changes:
New features:
-mslc
    option are passed to the compiler. The compiler is invoked instead of
    mental ray renderer if the option is present. For example, the
    combination -mslc -h will print out compiler options.
    Current version of the compiler can be used to produce C++ (-t
    cpp) and .mi declaration (-t mi) files, hardware
    shader compilation is not included.
Feature improvements:
imf_disp
    is attached to an image rendered with 16bit, float or half pixels. The
    improvement is primarily relevant for progressive rendering. This
    improvement does not apply to cached (tiled) framebuffers, which are not
    recommended for usage with progressive rendering for general performance
    reasons.Note that such textures need to be declared before including XMSL files, like
filter 1.0 color texture "default.dds"
    "MyDefaultTexture.jpg"
Due to the way mental ray parser works in the current version, it is
    also required to explicitly terminate texture grammar before the
    including msl/xmls files. This can be done with a "set"
    statement like:
set "MetaSL default textures provided" "on"
The latter limitation will be removed in the future versions (fixed in 3.7.52.14).
fb_index variable.Bug fixes:
If the primary framebuffer is known under multiple names, all names
    are listed with the fb_list_name command.
Fixed possible wrong indices for some framebuffers.
-texture_path options was used on the command line.half type, added
    missing clipping in mi_img_clip_color function.is_nan and
    is_finite functions.float3,
    float4, Color and Spectrum
  types.clamp function.any and all functions.abs function on integers and integer vectors.float2 returned uninitialized value, added initialization
    with zeroes.Shader changes:
Known MetaSL limitations in this version:
Feature improvements:
In order to accommodate this changes, the i_is_connected
    mi_is_connected macro has been added. The
    miFunction::has_connection field has been added, which is
    set if at least one shader parameter is connected.
Note that this change may affect shader binary compatibility:
Old shaders using mi_eval and mi_call macro
    for parameter evaluation will work with the new kernel without changes
    and recompilation. For the performance reasons it is recommended to
    recompile these shaders with the new shader.h header
    file.
Shaders which accessed internal ghost tags directly in order to check
    for the connected parameters may require minor source code modification.
    The mi_is_connected macro should be used instead of direct
    access.
Note that old .map textures of rgb_h/rgba_h image types are binary incompatible with the new version of mental ray. If used, such textures will be loaded into memory and converted, but they will not be memory-mapped.
Bug fixes:
"? :" expressions.abs, acos and some other builtin functions.operator %=.vector *= matrix and
    matrix *= vector operators.Shader changes:
mip_render_subset, fixed possible artifacts if
    rendering of placeholder objects in combination with coverage framebuffer
    filtering was used.mip_motionblur shader, fixed possible
    black stripe artifacts.mi_metallic_paint_output_mixer
    was not linked into the library, fixed.Feature improvements:
fb_list_name: <framebuffer
    index>,<int image type> <image
    type name with +-prefix, like +rgba>, <int
    resolution_x> <int resolution_y>, <int
    number of image components> <bits per pixel
    component>, "<framebuffer_name>"
The framebuffer name is quoted. Also fixed a bug in
    fb_list command which did not list all the framebuffers.the
    second version, 
Bug fixes:
"? :" expressions.switch used with non-consecutive enum case
    labels.Shader changes:
mip_metallic_paint(_x) shader, fixed wrong
    illumination if multiple area light sources are present in the scene.mip_rayswitch_stage shader, fixed
    declaration apply mask.
    
  Bug fixes:
Spectrum type.input: a = normal;). Note
    that in this version such initializers may overwrite the explicit (not
    connected) value for parameters provided by mental ray API / .mi
  syntax.Bug fixes:
Feature improvements:
"environment lighting shadow". Possible values are:
    "off": no visibility tests, no shadows from the
        environment,"solid": all objects (including
        transparent/semi-transparent ones) cast solid shadows,"transparent": support for transparent and
        semi-transparent objects.The default value is "transparent". Earlier versions of
    mental ray follow the "solid" option. Rendering with
    "solid" option is slightly faster.
fmod function for integers has been
    deprecated. Replaced it with operator%.{_MI_REG_METASL_EMULATE_MI_PHEN} introduced in version
    3.7.52.0 to convert MetaSL phenomena into mental ray phenomena for usage
    with precompiled shaders has been changed to false.Bug fixes:
get_light_parameter()
    function returned true even if the parameter did not exist. Fixed.Feature improvements:
Bug fixes:
-photonmaps only command line option or the corresponding
    rendering mode for integrated versions.Feature improvements:
Bug fixes:
.xmsl files.Feature improvements:
float2 are now mapped to mental ray API parameter type
    miVector. float4 maps to miColor.
    int2/3/4 and bool2/3/4 map to
    miVector (for 2 and 3 values) and miColor (4
    values), respectively. MetaSL matrices of all types are mapped to
    miMatrix.Bug fixes:
Feature improvements:
Type_access resp. Type_edit
    to Access_type resp.
    Edit_type. Corresponding typedefs are provided for
    compatibility.Bug fixes:
Color(0, 0, 0, 1) is fixed.Feature improvements:
shader_sds34.h which is automatically
    included by shader.h when using C++ compilers..xmsl
    files, added support for constructing the actual phenomenon in mental ray
    instead of compiling it into a single mental ray shader. This allows to
    support MetaSL phenomena that are built externally (like in mental mill)
    but rendering with shader nodes which have been pre-compiled (from native
    or MetaSL source code) and pre-loaded into mental ray. This feature
    explicitly avoids runtime compilation of MetaSL shaders or phenomena.
    Note, that this behavior is enabled by default. It can be
    disabled defining the registry key
    {_MI_REG_METASL_EMULATE_MI_PHEN} and setting its value to
    off. Texture_info class.Bug fixes:
Shader changes:
Feature improvements:
-progress_frequency n and
    remove former support for an optional second argument to
    -verbose. This option allows to control the frequency of
    percentage progressive messages. For example, -verbose 5
    -progress_frequency 10 command line would result in printing
    progress messages for approximately each 10 percent.Bug fixes:
miQ_NUM_TEXTURES for hair
    objects with placeholders.trace function was called with environment ray
    type."transparency" parameter of type float was
  used.Feature improvements:
Known issue in this version: photon emission from some type of lights may fail leading to "no photons emitted" error (fixed in 3.7.50.16).
Bug fixes:
mi_opacity_get function for each sample.Shader changes:
miState::importance is now used consistently instead of the
    miIM key for
    mi_shaderstate_set/mi_shaderstate_get functions. This
    provides interoperability with MetaSL shaders and improves performance
    slightly.mip_matteshadow shader by
    avoiding unnecessary mi_flush_cache calls.miIrrad_options::id has been
    introduced in version 3.7.50.4).Feature improvements:
builtin_light_env_inst". This allows to use IBL in the
    explicit light lists.Bug fixes:
miRC_TO_SPIRAL rendering tile
    order was used. Regression in version 3.7.50.11.Feature improvements:
miState::point, miState::dist and
    miState::dir according to the closest hit the closest
  hit.Bug fixes:
Known limitation is this version: MetaSL CIL backend can crash for shaders with no input parameters, fixed in 3.7.50.13.
Feature improvements:
Bug fixes:
A temporary CIL backend usage example has been added to
common/doc/tutorials/metasl_cil_backend.
New features:
Though image base lighting is implemented in some of OEM shader packages, built-in solution is more efficient and does not require efforts to be invested atop of mental ray kernel to develop corresponding shaders.
IBL can be enabled by setting the string option "environment
    lighting mode" to the value "light" (further modes
    will possibly be made available in the future). The "environment
    lighting quality" <float> string option with a floating
    value in range from 0.0 to 1.0 can be used to control the quality of the
    image, with 1.0 been the highest quality.
If used, mental ray would create an internal light of a "user" type and use this light in the light lists according to the conventional lightlist inheritance rules. mental ray kernel would also presample the environment, create a lookup acceleration structure and use importance driven adaptive sampling to obtain the environment light to the scene.
IBL can be combined with progressive rendering,
Feature improvements:
intrinsics.xmsl. For scenes using
    intrinsic MetaSL shader nodes as parts of shading trees and
    .mi files phenomena, this file need to be to generate
    internal intrinsic shaders declarations.mi_color_filter_lookup function called on an image
    with a negative filter value would return unfiltered value of a single
    image pixel. This allows to combine unfiltered image lookup in existing
    shaders.none"
    (unfiltered) and "data".mi_query modes miQ_GROUP_KID,
    miQ_GROUP_NKIDS, miQ_GROUP_LABEL,
    mIQ_GROUP_DATA, and miQ_MERGE_GROUP check that
    the database tag passed is of the miSCENE_GROUP type and
    return false otherwise. This fixes potential crashes in case of
    inappropriate i_querymi_query usage.Bug fixes:
mi_mem_set_flush_failure_cb().bool, int, float and
    float3.Light_iterator and Sample_iterator.Trace/Occlusion/Irradiance_options and most of their
  methods.Shader changes:
mip_rayswitch_stage. It takes one of several color
    parameters named after mental ray rendering stages (tile rendering,
    finalgather precomputing, globillum/caustic photon emission, lightmapping
    etc.) and returns one corresponding to the current rendering stage.mip_fgshooter.
    This special lens shader optimizes precomputation of finalgather map for
    animation renderings that contain a camera move. For tile rendering, the
    shader just passes the mi_trace_eye call with no further
    effects. For the finalgathering precomputation stage though, it takes the
    array of matrices passed as parameter and applies them as camera
    transformations. When, it shots an eye ray according to each of the
    transformations. This causes the location of finalgather points (for
    static object) to be consistent across the entire animation, reducing
    flicker. The "mode" parameter controls for the
    pre-visualization of finalgather precomputations. For the
    mode value 0, views from multiple cameras are painted in the
    same image side-by-side. For the mode value 1, an average
    image from multiple cameras is displayed. For the mode value
    3, the image for the camera in the scene DAG is displayed (note that this
    mode also influences finalgather point distribution). The mode parameter
    is experimental and may change in the future versions.New features:
Integrated MetaSL compiler does not generate binary code representation itself: instead, the C++ backend generates C++ code and an external C++ compiler and linker is invoked to generate a DLL linked back into mental ray process. Though compilers are typically installed on Linux and MacOSX systems, this is not the case for Windows platforms. In order to avoid the requirement on the external C++ compiler with corresponding installation and license issues, the CIL backend is currently being developed.
The MetaSL CIL backend generates .NET (CIL) assembly code. An external
    Microsoft .NET 2.0 (or optionally a higher version) CIL assembler
    executable is invoked on that .cil file and generates a
    managed code DLL. The assembler is a part of Microsoft .NET Framework
    redistributable package, so no installation of a C++ compiler is
    required.
To enable CIL backend, the {_MI_REG_METASL_CIL} mental
    ray registry variable need to be set to any non-empty value. By default,
    the C++ MetaSL backend is used. MetaSL using CIL is supported on Windows
    platforms only.
Current version is extremely incomplete and can be used for
    demonstrational and workflow experimental purposes. Only simplest shaders
    like constant color shader would work in the current version. variables
    (l In particular, integer and float type [fixed in version 3.7.50.11],
    generation of state functions (like trace()), writing to
    state variables (like normal for bump shaders), free
    functions, functions with varargs,
    Trace/Occlusion/Irradiance_options, structs, arrays,
    color/vector component selections and swizzles have not been implemented
    yet.
Note also that the (temporary) DLL files generated by CIL backend use
    __stdcall linkage convention. Current version of mental ray
    does not expect this convention unless it knows that the DLL just has
    been generated by it. An attempt to load such generated file in a
    different mental ray process would cause a crash.
Feature improvements:
-v / -verbose command line option
    gets an optional second argument specifying the frequency in percent. For
    example, -v 5 10 command line would result in printing
    progress messages for approximately each 10 percent. Note: this command
    line option has been replaced with -progress_frequency n
    options in version 3.7.51.0.mi_get_metasl_interface to get new
    mi::shader::Metasl_interface class with API for generated
    MetaSL shaders. This API is not intended to be used by shaders written in
    C/C++. The getMetaSLState method of the
    mi::shader::Interface class is removed. This provides a
    clean separation of C/C++ and MetaSL interfaces.{_MI_REG_METASL_DEBUG_CPP}
    registry key added in version 3.7.0.8 is disabled. Instead, the
    {_MI_REG_METASL_TRACE} registry key is now supporting t
    disable the removal of the temporarily generated C++/CIL files and emit
    more debug information.mi_kdtree_lookup function, allow
    miKdtree_lookup_callback to be null, which may be useful if
    only the effective radius of the lookup is of interest.Bug fixes:
miState::raster_x/y coordinates in the lookup were 0.5
    (sub)pixel off the corresponding miState::point, which
    sometimes led to a wrong pyramid level selected.s_fp) used instead of half
    (s_h), as well ass rgba_h used instead of
    rgb_h.Shader changes:
Known limitations in this revision:
Feature Improvements:
mi_query mode miQ_FUNC_PARAM_LOOKUP. A
    pointer to the string (char *) containing the name of the shader
    parameter, and the type of the parameter (miParam_type enum)
    should be passed as varargs of mi_query. The result argument
    pointer of mi_query is initialized with the shader parameter
    value if the named shader parameter is found and the value is not
    connected to be an output from other shader.get_light_parameter() method.Bug fixes:
miIRRAD_DEFAULT macro to initialize the id
    option properly. This fixes unpredictable finalgather lookup results for
    shaders compiled with shader.h header file taken from
    versions 3.7.50.4 to 3.7.50.8.miState::dist not
    initialized to zero if finalgather ray misses geometry.rle". Feature Improvements:
{_MI_REG_METASL_DEBUG_CPP}
    registry. If set, the temporary generated C++ files are left over (the
    behavior of version 3.7.50.7 and prior), otherwise the C++ files removed.
    (Starting with version 3.7.50.10, use the
    {_MI_REG_METASL_TRACE} registry for this).Bug fixes:
Feature Improvements:
{_MI_REG_LIBRARY} registry and -ld_path command
    line option) are passed to the linker automatically. On Windows platforms
    it is recommended to add a path to the directory containing the
    shader.lib file in order to avoid specifying the full file
    name with the -ld_libs command line option.Bug fixes:
Bug fixes:
New features:
This version of mental ray enables the mental ray shader compatible mode. This mode is compatible with finalgathering (in particular, with progressive finalgather precomputation), photon mapping and other techniques.
In the progressive mode, samples are placed sparsely (few samples per pixel or even one sample for several pixels), and the result is displayed immediately if an interactive display using the DISP protocol is attached. For the fastest response times, the first pass is usually computed with less than 1 sample per pixel. Additional samples are computed in the subsequent passes and the accumulated framebuffer tile is re-displayed interactively.
User may decide to stop rendering once the desired quality is reached.
Progressive mode can be enabled with the string option
    "progressive" on, or with the command line option
    -progressive on (default: off).
The "progressive max samples" <int>
    string option and -progressive_max_samples <int>
    command line option can be used to specify the number of samples per
    pixel after which rendering will stop automatically.
The "progressive subsampling size" <int> string
    option and -progressive_subsampling <int> command line
    option (default: 1) can be used to specify the sample density in several
    initial passes. If set to N, approximately one sample for each N*N pixel
    tile per pass will be used.
Feature improvements:
miState
    parameter should be current intersection state, and the tag parameter
    should be 0. If the result out parameter is zero, the bump vectors are
    calculated and stored in the state->bump_x/y_list. If
    result out parameter is not 0, it should point to a
    miVector[2] array (6 floats), and the fifth argument
    specifying the texture space should also be provided. The result array is
    filled with the bump basis in addition to
    state->bump_x/y_list in that case.mi_rc_run_query
    modes miRCQ_DISP_NET_PORT and
    miRCQ_DISP_TALK_PORT. The output result parameter of the
    function should be a pointer to int. It is filled with the
    port used by mental ray for the DISP net (used bu imf_disp utility) and
    DISP talk interactive display protocols respectively. (Note: mental ray
    uses the same port ids for TCPv4 and TCPv6 protocols).progressive
    rendering mode described above.FILE_FLAG_DELETE_ON_CLOSE flag is also added on Windows
    platforms, however it is less reliable.
miMetasl* mi_api_metasl_begin(char *name) begins
        MetaSL shader block declaration. The name parameter is
        API name of the metasl code block.miBoolean mi_api_metasl_filename(char filename*)
        instructs mental ray kernel to take the MetaSL code from the
        specified file.miBoolean mi_api_metasl_code(char code*) instructs
        mental ray to treat the code string as MetaSL code.miTag mi_api_metasl_end(void) finishes the MetaSL code
        and adds it the the mental ray database. The tag returned is the
        named API tag for the block. {_MI_REG_METASL_TRACE}. If its value is set, mental ray will
    print verbose information for MetaSL shader generation useful for
    debugging purposes.Bug fixes:
mi_query mode miQ_TEXTURE_DIM has not been
    passed properly to the kernel, which caused crashes on 64-bit platforms.
    Fixed.Shader changes:
mib_illum_ward_deriv is extended to
    support derivatives on all geometry types, using "bumps" (texture
    derivatives) if available for NURBS and polygonal surfaces and surface
    derivatives for subdivision surfaces and NURBS. The source code of the
    get_derivs() function is a recommended illustrative example
    for shader writers.Feature improvements:
The finalgather precomputation image report can be enabled with the
    -finalgather_display on command line option or with the
    miRENDER_DISPLAY_FG bit in the rendering mode mask. Unlike
    in mental ray 3.7 and prior, the computation is split into several
    passes, each one refining the previous ones. The finalgather
    precomputation respects the order of tile computations specified
    with mi_rc_set_taskorder() function call.
The number of FG precomputation passes can be specified with the
    string option "", or with the
    command line option finalgather passes-finalgather_passes <int>. The
    default value is 3. 
In the current implementation, the maximal value of finalgather passes is 8. Only 2 most recent one apply adaptivity in the raster sampling, the purpose of others is to provide progressive rendering report. I.e. for the number of passes larger or equal to 3 the final image does not change.
For compatibility with mental ray 3.7 and prior, single pass
    finalgather progressive display can be enabled with the string option
    "finalgather precomp legacy".
In particular, this feature may be used for rendering of objects with multiple semi-transparent surfaces where explicit separating of layers is more efficient than limiting interpolation distance or increasing the density of the finalgather map.
The miIrrad_options structure passed to
    mi_compute_avg_radiance() function has been extended with
    the integer field "id". The default value for id is zero.
    The id is stored with each finalgather point. For interpolation, the id
    passed to the interpolation call is taken into account: if zero, all
    finalgather points are potentially accepted. If non-zero, only
    finalgather points with the same id are accepted.
Backwards and forwards binary compatibility of mental ray shaders and finalgather map files is maintained.
-layer <name> command
    line option for displaying of OpenEXR files. When rendering OpenEXR
    images containing multiple framebuffers, mental ray stores framebuffer
    images in channels called <framebuffer name>.R,
    <framebuffer name>.G, <framebuffer
    name>.B and <framebuffer name>.R. In order
    to display one of those framebuffer images, the <framebuffer
    name> without suffix could be used with the -layer
    option.Bug fixes:
Feature improvements:
declare shader color "builtin_bsdf_carpaint" (
    color       "base_color"       default 1 0 0 1,
    color       "reflectivity0"    default 0.1 0.1 0.1 1,
    color       "reflectivity90"   default 0.3 0.3 0.3 1,
    scalar      "fresnel_falloff"  default 5,
    scalar      "metallic"         default 0.3,
    color       "metallic_color"   default 1 1 1 1,
    scalar      "metallic_falloff" default 8,
    color       "edge_color"       default 1 0 0 1,
    scalar      "edge_falloff"     default 2,
    scalar      "unit_scale"       default 1,
    scalar      "sparkle_weight"   default 0.05,
    scalar      "sparkle_falloff"  default 1,
    integer     "mode",
    array light "lights")
end declare
  {_MI_REG_METASL_FLATTEN} registry to a non-empty value.
    Known limitations in this version:
Bug fixes:
a, a_h, a_fp, m,
    n and z.mi_api_get_assembly_root function properly for
    geometry shaders.Feature improvements:
/debug and /Z7 compiler/linker keys to keep the
    debug information.Bug fixes:
/MDd key. This fixes the message box
    pop-up when a MetaSL shader was used with mental ray debug executable.
    Added /debug and /Z7 compiler/linker keys to
    keep the debug information.Access_bsdf was used in a
  shader."vta", "vts", "tag" or
    "bit" types into OpenEXR files. New features:
If a file with .msl or .xmsl extension is
    included ($include statement in .mi file), it
    is treated as a MetaSL shader source. mental ray would read it, parse and
    convert it into the internal representation. This internal representation
    is when used to create a shader declaration and to generate shader C++
    code. The external C++ compiler and linker are invoked in that file and
    create a dynamic linked library in the directory containing temporary
    files. That DLL is when linked into mental ray.
For windows platforms, it is planned to generate the managed code directly, which would remove the requirement on the C++ compiler installed.
In order for C++ compilation to succeed, the C++ compiler need to be
    pointed to the include directories containing mental ray headers files
    (shader.h and others), as well as MetaSL C++ header files
    (root directory for mi/metasl_runtime/*). In order to
    simplify it, mental ray now applies the mental ray kernel include path to
    the compiler invocations automatically. I.e., the include paths may be
    specified on the mental ray standalone command line option
    -I, or with {_MI_REG_INCLUDE} registry.
On windows platforms, shaders need to be linked against
    shader.lib or ray.lib. If
    shader.lib is not present in the compiler library search
    path, it has to be specified with -ld_libs and/or
    -ld_path command line options.
Known issues and limitations:
Feature improvements:
"-I" include paths are
    passed to the C++ compiler invoked for MetaSL and C/C++ source code
    shaders. If multiple -I command line options are passed to
    the compiler, they are concatenated into semicolon separated list, which
    corresponds to the intuitive behavior. mental ray 3.7 and prior replaced
    the old command line option with a new one."finalgather normal tolerance". It
    specifies the maximal angle in degrees up to which a finalgather point
    normal may deviate from the surface normal for the finalgather point to
    be considered for interpolation.
    If the string option is not present, or exceeds its valid range of 0-90 degrees (exclusive of 0 and 90), the built-in default of 25.842 degrees is used to maintain backwards compatibility.
builtin_bsdf_architectural, but the declaration follows
    those of the architectural material. builtin_bsdf_architectural and
    builtin_bsdf_mirror BSDFs with the declarations as below:
    
    declare shader color "builtin_bsdf_architectural" (
    color       "diffuse_refl"           default 0 0 0 1,
    scalar      "diffuse_refl_scalar"    default 1,
    scalar      "diffuse_dev",
    color       "specular_refl"          default 0 0 0 1,
    scalar      "specular_refl_scalar"   default 1,
    scalar      "refl_gloss"             default 1,
    boolean     "metal_material"         default on,
    color       "specular_trans"         default 0 0 0 1,
    scalar      "specular_trans_scalar"  default 1,
    scalar      "trans_gloss"            default 1,
    color       "diffuse_trans"          default 0 0 0 1,
    scalar      "diffuse_trans_scalar"   default 1,
    scalar      "anisotropy",
    scalar      "anisotropy_rotation",
    integer     "mode",
    array light "lights")
end declare
 
    declare shader color "builtin_bsdf_mirror" (
    color       "reflection"             default 0 0 0 1)
end declare
    The builtin_bsdf_architectural is a simplification of the
    architectural material, containing the parameters relevant for the
    material properties. The builtin_bsdf_mirror is a simple
    specular reflection, which multiplies the reflected color with the
    reflection parameter.
mi_ambient_occlusion function behavior has been
    slightly modified. When the number of cache points in the
    miAmboccl_options argument structure passed to the function
    is 0, the cache is ignored and the ambient occlusion value is computed.
    Negative cache points value (default: -1) still can be used to take the
    number of cache points from the global "ambient occlusion cache
    points" string option.A_H and S_H image types to represent
    alpha and intensity images in half float resolution.Bug fixes:
mi_point/vector/normal_to/from_* function family. If called
    on a hit point inside of an assembly, these functions correctly use world
    space instead of the assembly local space now.mi_query
    mode miQ_NUM_TEXTURES to return correct value and avoid
    unnecessary tessellations.miState::time properly for volumetric and environment
    shading.(-echo textures command
    line option) for images using with more than 8 bits per pixel per color
    channel, such as HDR.Shader changes:
mia_tonemap_api_untransform_color function which may be used
    to revert the tone mapping effect.mip_gamma_gain shader, added gamma correction for
    negative numbers. In particular, this protects against possible NaN
    values.Feature improvements:
Bug fixes:
mi_msg_remove_host() function
    call for IPv6 addresses.Feature improvements:
Bug fixes:
Shader changes:
mi_metallic_paint_shader_x work if
    used as an a single shader or a phenomena root.Feature improvements:
"fine shared", "fine nosmoothing", and
    "fine shared nosmoothing". For the integrators, the
    miAPPROX_STYLE_FINE_NO_SMOOTHING_CONT_DISP value has been
    added to the miApprox_style enumeration.
    The registry _MI_REG_SHARED_DISPLACEMENT which could be
    used to enabled the "shared" mode globally for all objects is
    deprecated, but could be used in mental ray 3.7 for
    compatibility reasons.
Bug fixes:
mi_par_aborted()
    check which prevented application callback from been called.miState::pri, fixed.Shader changes:
misss_fast_shader_x to follow the same conventions as
    multi-output architectural material shader. The specular and diffuse
    properties of lights are adhered in the same way as for the architectural
    material shader.mi_metallic_paint_x shader
    identical to the metallic paint shader, but allowing multiple outputs
    following the architectural material conventions.mi_ward_anisglossy function with inconsistent arguments. The
    change also lead to a minor performance improvement.mip_mirrorball and architectural portal
    light mia_portal_light shaders, changed errors to warnings
    in accordance to the common conventions for recoverable scene issues.mia_portal_light shader is
    made compatible with point-style area lights with no direction
  specified.Bug fixes:
Changes affecting compatibility with older versions:
mi::shader_v3
    namespace. A namespace alias for mi::shader is added, so
    that no changes to the shader code are required. Shader writers are
    expected to continue to use the mi::shader namespace.
    This fixes possible crashes (mismatched symbol linkage) if several
    debug shader libraries using different versions of
    mi::shader::Access_fb / Edit_fb were used in
    the same rendering in version 3.7.1.8.
Feature improvements:
mi::shader::Options::get) and accessing of the framebuffers
    (mi::shader::Access_fb / Edit_fb) has been
    improved significantly. Accessing string option still includes a
    hashtable lookup, so for performance reason it is recommended to access
    them in the init shader once.Map containers, avoid rebuilding of the internal
    lookup acceleration structure when this is not necessary.Bug fixes:
{_MI_REG_SHARED_DISPLACEMENT} registry.$ifeq preprocessor instructions of the .mi parser
    for the environment variables.Changes affecting compatibility with older versions:
mi::shader::Interface version has been increased to 3.
    Shaders compiled for mental ray 3.7 alpha versions need to be recompiled.
    Shaders compiled for mental ray 3.6/3.6+ keep the limited binary
    compatibility with mental ray 3.7 over the
    mi::shader::Interface version 2. Maps, fixed some const
  qualifiers.mip_binaryproxy
    shader).Shader changes:
mip_binaryproxy shader compatible with
    mental ray 3.7.mia_roundcorner shader, fixed possible crash if the
    shader attached to the bump parameter returned struct consisting of
    several outputs.mia_envblur,
    improved the behavior of the shader in the erroneous situation of the
    parameter environment not set (meaning usage of the camera/material
    environment shader), and the share itself being set as such shader, which
    has caused recursive shader calls.Changes affecting compatibility with older versions:
Type to miUint to avoid possible
    incompatibilities on sizeof(enum).Map containers, adjusted signatures of
    get and set methods using
    miMatrix. This is required to as miMatrix is is
    typedef to float[16] and compiler cannot distinguish between
    reference to it and pointers for scalars on function calls.Feature improvements:
Bug fixes:
"::1") into IPv4 addresses.Tutorial on usage of irradiance particles has been added.
New features:
triangle estimate
    <int>" to the .mi syntax, and the new member field
    miObject::tri_est. If specified this field may be set by a
    translator or exporter and give approximate number of triangles expected
    for the given object. CAD application frequently would know the precise
    number, but even if it is know only up to an order of magnitude it is
    advisable to provide it. In the future versions, mental ray will use it
    as a hint for optimizing performance and memory usage. mi_api_rename(char *target, char *source) 
and corresponding .mi syntax
rename "target" "source"
This function may be used to rename existing scene entities without recreating them, in particular this may be used by application interface to follow user interaction.
The function has following limitations:
Feature improvements:
Bug fixes:
shader.lib proxy for
    shaders calling to mi_scene_recreate on
    miSCENE_NBOX type.The manual for this version has been improved.
New features:
Syntax and application API has been added for the Map containers introduced in version 3.7.1.2.
The syntax is similar to user data elements. The layout of the map can be declared with    declare map "name"
        [ dim int , ]
        paremeter1,
        ...
        paremeterN
    end declare
    with each of parameters being one of
    integer   "parname"
    scalar    "parname"
    vector    "parname"
    color     "parname"
    transform "parname"
    array int integer "parname"
    array int scalar  "parname"
    The allowed parameter types are 32-bit integers, single precision floats, float 3d vectors, 4 component float colors and 4x4 float matrices, as well as fixed size arrays of integers and floats.
For a declared layout, a map content may be specified as
    map "mapname" "layout"
    (
        ["mapfile1", ... "mapfileN"]             |
        { <rec1field1>, ... , <rec1fieldM> },
        ....,
        { <recKfield1>, ... , <recKfieldM> }
    )
    end map
 
    i.e., either a list of file names containing binary map data is specified, or the list of fields for each particles in the map.
Each recSfieldT entry should consist of the proper number of space separated float or integer values. The first record in each row should be N floats corresponding to the position of a particle in the N-dimensional map.
The Map type has been added to the list of legal shader parameter types, following usual conventions. A Map cannot be an output of a shader.
The equivalent API functionality is provided with the
    mi_api_map_* functions family.
Additional documentations and tutorials will be added in upcoming releases.
Feature improvements:
Bug fixes:
finalgather fastlookup option has been enabled.New features:
In the current version, mental ray supports Lambert, Phong and Ashikhmin BRDFs, which are built into the kernel. Built-in shaders implementing these BSDFs are pre-registered in the mental ray API as:
declare shader color "builtin_bsdf_phong" (
    color       "diffuse",
    color       "glossy",
    scalar      "exponent",
    array light "lights",
    integer     "mode" )
    version     1
end declare
    declare shader color "builtin_bsdf_lambert" (
    color       "diffuse",
    array light "lights",
    integer     "mode" )
    version     1
end declare
    declare shader color "builtin_bsdf_ashikhmin" (
    color        "diffuse",
    color        "glossy",
    scalar       "exp_u",
    scalar       "exp_v",
    array light  "lights",
    integer      "mode" )
    version      1
end declare
    Further standard BSDFs will follow.
An instance of a BSDF shader with given parameters may be specified
    with the usual syntax. Input parameters of a BSDF shader can be specified
    as the result of other shaders, allowing conventional shading trees and
    phenomena to be used. The miMaterial structure has been
    extended with a bsdf slot, which may specify an instance for
    one of the BSDF shaders listed above. The .mi syntax is extended with the
    bsdf keyword, allowing to specify the BSDF shader in the
    material.
A material shader may access the BSDF attached to the current shading
    state by using mi::shader::Access_bsdf class. The API for
    interaction with BSDFs is declared in the new shader_bsdf.h
    header file. It is described in the doxygen documentation in the manual.
    
BSDFs may be split into up to 6 components (reflection and refraction,
    with diffuse, glossy, and specular components each). The
    eval function evaluates all BSDF components, or a subset
    thereof, for a pair of incoming and outgoing directions. The
    Bsdf interface also provides a sample function,
    which allows importance sampling of outgoing directions for a given
    incoming direction. In addition, this function provides information about
    the sampled component and the sample weight. The latter can easily be
    combined with Russian roulette for absorption, which could be used e.g.
    for writing photon shaders.
A BSDF shader may be attached as material shader into
    miMaterial. In this case, mental ray takes care of
    simulating a material shader based on the BSDF.
With BSDF shaders, it is possible to omit photon shaders. For
    materials with a BSDF shader, but no photon shader specified, mental ray
    automatically uses the BSDF shader and use its sample
    function to simulate photon shader behavior. For the future version, this
    fallback into BSDF will be enabled for other indirect illumination
    techniques.
Bug fixes:
$ifeq preprocessor instructions of the .mi parser
    using registry variables. The mi_string_substitute function
    applied to a string consisting of a single reference to a undefined
    registry returned the unchanged string instead of empty string.Feature improvements:
-maxlics. This option may be usable
    for renderfarms running multiple mental ray executables on the same
    machine. If set on, independently on how many threads are running by each
    executable, the maximal number of licenses applicable for the given
    machine is allocated and shared between all
    mental ray executables. miState::dot_nd initialized by intersection
    code, and the dot_nl parameter returned by light loop are in
    the [-1, 1] range. Small deviations were possible due to precision
  issues.Bug fixes:
Changes affecting compatibility with older versions:
mi_shader_if.h header file now include
    several partial header files according to the features if the
    mi::shader::Interface class. Shader writers are still
    supposed to include the mi_shader_if.h file into the shader
    C++ files.Shader changes:
mia_envblur added
    a detection of the invalid usage of the "environment"
    argument pointing back to itself and for the similar case when
    mia_envblur shader is part of the global environment map,
    and the "environment" parameter is not specified, which
    efficiently resulted in self-reference. An error message is printed and
    the environment shader is disabled now.New features:
mental ray kernel provides functionality creating, accessing and
    editing of Maps, as well as loading them from files and saving them to
    files. An efficient nearest neighbor lookup functionality is implemented,
    utilizing either euclidian distance or arbitrary distance functor
    provided by user. The distance functor may implement rejections by
    returning the miHUGE_SCALAR value. 
Particle data may be any structure consisting of the common types including scalars, integers, vectors, colors and transforms. All particles in a single map have identical layout.
The position of a particle is an N-dimensional float vector, where N varies in range from 1 to 6 in the current implementation.
In this version, Maps need to be created or loaded by applications or
    shaders. API interface and .mi syntax for named Maps will be added in the
    next version. Minor modifications for the lookup interface are still
    expected. Documentation for the feature will follow. The interface
    functions can be found in the mi_shader_if.h file.
Feature improvements:
mi_rc_run now returns to the application in one second and
    does not wait until all rendering threads are blocked. The rendering
    threads are still blocked on memory or database operations, possibly
    after mi_rc_run returns. Previous synchronous mode where
    mi_rc_run returned first after all threads get blocked was
    less robust: threads blocked on internal locks were not counted, which
    resulted in a possible application freeze.miBoolean,
    which is typedefed to int.Bug fixes:
off).'{{' and '}}' escaping for file name
    lookups introduced in version 3.6.52.5, fixed possible failure to apply
    the unescaping exactly one time.MI_SURF_CCMESH environment variable), fixed broken motion
    vectors for multi-segment motion.Changes affecting compatibility with older versions:
0.1 (per pixel). In
    combination with photons, the old default value of 1 is still used. Shader changes:
mip_render_subset production shader, fixed
    possible wrong subset of geometry rendered in the finalgather
    precomputing mode.mip_motionblur and
    mip_motion_vector production shaders used with orthographic
    camera.mip_mirrorball and
    mip_greyball, fixed possible crash with non-zero blur and no
    texture attached. mip_binaryproxy shader, the amount of
    displacement has not been taken into account for bounding box
    computation, fixed.transmat" shader did not support segment
    shadow mode. Fixed.New features:
Especially for curved hair and hair at higher viewing distance, the new approximation criterion allows to have high approximation resolution restricted to the area where needed. The lower number of hair segments result in reduced memory consumption and increase rendering speed.
The approximation can be specified on a hair object with the following syntax:
approximate hair <curve_approx>
with <curve_approx> being any curve approximation
    technique, for example:
approximate hair view length 3 distance 0.1 angle 5 0
    7
In order to get benefit from curvature-dependent approximations, hair needs to be modelled appropriately with hair degree > 1.
For fast moving objects, images with comparable visual quality may be achieved with fewer displacement tessellation details compared to static or slow moving objects. Though it is also possible to tweak displacement approximation on a per-object basis, this requires a lot of manual efforts and is rarely done in practice. Per-object granularity may also be not fine enough for object having different amount of motion in different parts. The new approximation motion factor provides an automatic way for adjusting the displacement quality according to the amount of motion for a given object part.
For view-dependent fine poky displacement the adaptive subdivision checks motion length in screen space. The measured motion length is used to modify the use of the approximation constant. Geometry is reduced only in areas of the object with strong motion.
The string option"geom displace motion factor" f can be
    used to modify the amount of geometry reduction compared to static case,
    with float f >= 0. The factor f=0 turns off
    the feature. The factor f=1 is currently the default, and
    gives higher values of f give more reduction. This default
    value is experimental and is rather
    conservative: the simplification of geometry will have an effect for
    motion of approximately 16 pixels. In order to get effect on slower
    motion, higher values should be used. For example, the factor value of 8
    would reduce geometry in areas of objects moving at the speed of 2 pixels
    per frame.
In the current version, it can be enabled by setting the environment
    variable MI_DISTANCE_RATIO and using the
    distance approximation technique. Recommended values are of order 0.02,
    with finer approximations corresponding to smaller values.
Feature improvements:
If Irradiance Particles interpolation is disabled then only environment presampling map is build and no further precomputation steps are required.
If Irradiance particles Interpolation is enabled, then particles are emitted in the precomputation pass in a usual way, but used as interpolation points only.
In both cases, only the environment map lighting but not diffuse bounces are taken into account.
Bug fixes:
Changes affecting compatibility with older versions:
mi_openexr.dll, a warning message is printed.miGeoBox structure.miMaterial structure has been extended with bsdf slot.miHair_list structure has been extended with
    approximation. Unused integer approximation has been removed.mi::shader::Interface class.
    
  OpenEXR is a flexible image format designed by Industrial Light & Magic, which has been integrated in mental ray 3.3.0.389 and later versions. OpenEXR comes with the following copyright, which applies only to the OpenEXR portion of mental ray:
Copyright © 2004, Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd. Portions contributed and copyright held by others as indicated. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The ``Pxr24'' compression in OpenEXR comes with the following copyright, which apples only to parts of the OpenEXR portion of mental ray:
Copyright © 2004, Pixar Animation Studios
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Copyright Information
Copyright © 1986-2010 mental images GmbH, Berlin, Germany.
All rights reserved.
This document contains proprietary and confidential information of mental images GmbH and is protected under copyright law. The contents of this document may not be disclosed to third parties, translated, copied or duplicated in any form, in whole or in part, without the express written permission of mental images GmbH.
The information contained in this document is subject to change without notice. Neither mental images GmbH nor its employees shall be responsible for incidental or consequential damages resulting from the use of this material or liable for technical or editorial omissions made herein.
mental images®, mental ray®, mental matter®, mental mill®, mental queue™, mental world™, mental map™, mental earth™, mental cloud™, mental mesh®, mental™, Reality™, RealityServer®, RealityPlayer®, RealityDesigner®, MetaSL®, Meta™, Metanode®, Phenomenon™, Phenomena™, Phenomenon Creator®, Phenomenon Editor®, neuray®, iray®, DiCE™, imatter®, Shape-By-Shading®, SPM®, and rendering imagination visible™ are trademarks or, in some countries, registered trademarks of mental images GmbH, Berlin, Germany.
All other product names mentioned in this document may be trademarks or registered trademarks of their respective owners and are hereby acknowledged.