mental ray Release Notes
Version 3.9.1.37
Feb 4, 2011
Copyright © 1986-2011 mental images GmbH,
Berlin
Introduction
These release notes list changes in mental ray since version 3.7.1.1.
Changes by Version
Note: Version 3.9 and later versions of mental ray are binary
incompatible with mental ray versions 3.8.x and prior. Partial compatibility
with 3.8 is maintained.
- Some shaders compiled for previous versions may need recompilation to
be used with this version. MetaSL generated shaders compiled for earlier
mental ray versions need recompilation.
- Version 3.8 cannot be combined with version 3.8.x and earlier versions
in network rendering.
Changes in version 3.9.1.37
Bug fixes:
- For network rendering, fixed a memory corruption which caused frequent
crashes after a slave or satellite was disconnected.
- For scenes using builtin BSDFs, fixed possible NaN pixel color
artifacts.
Changes in version 3.9.1.36
Bug fixes:
- For rasterizer, fixed broken opacity blending if the primary
framebuffer is not the first one declared. The issue showed up if a
material shader does not call
mi_opacity_set(): objects were
handled as fully transparent in such case.
- Completed the partial fix for rasterizer used in combination with lens
shaders in version 3.9.1.34.
- Fixed wrong ray type visibility flags used for
mi_trace_probe_x() function in combination with BSP2
acceleration.
- For raylib integrations using progressive rendering and iray rendering
mode, fixed possible freeze of a fast sequence of stop/resume rendering
events.
Changes in version 3.9.1.35
Bug fixes:
- Fixed wrong gamma correction offset if sRGB (mental ray name:
"micsSRGBg") color space was used.
- Fixed possible severe shading artifacts for the combination of
rasterizer and BSP2 acceleration and motion blur (or motion vectors).
State normals are not initialized properly in that case.
- For progressive rendering, fixed error estimation code (red channel
only was used). This improves sampling distribution and convergency rates
for many scenes.
- For MetaSL compiler, fixed possible endless loop when compiling call
statement.
- For MetaSL compiler, fixed possible crash.
- For MetaSL compiler, fixed several memory leaks.
Changes in version 3.9.1.34
Bug fixes:
- For rasterizer used in combination with lens shaders, fixed possible
black image parts or missing lens shader effect (fix in version 3.9.1.34
is incomplete, extended in version 3.9.1.36)
- For unified sampling, added a sanity check on min sampling rate. Fixes
possible crash.
- For iray rendering mode, fixed improper handling of bumped normals for
some OEM shaders.
Changes in version 3.9.1.33
Bug fixes:
- Fixed possible lighting artifacts if objects (i.e. custom geometry)
light sources were used.
- For machines with high number of cores, fixed multithreading
performance regression in finalgather precomputation stage .
- For unified sampling used in combination with rasterizer and low
sampling rates (less than 1 sample per pixel), fixed possible black
images rendered.
- For iray rendering mode:
- For high resolution scenes, fixed possible black stripe artifacts
if multiple CUDA devices are used.
- Fixed possible black stripe artifacts and/or crashes due to
excessive fragment size used for simple scenes rendered in very large
resolution.
- Fixed possible precision artifacts (black lines on the ground
plane).
- For visible rectangle area lights, fixed wrong
side and size.
- Fixes several memory leaks and thread safety issues in MetaSL
compiler.
- Fixed possible crash at exit or mental ray plugin unload when MetaSL
compiler with LLVM backend was used.
- For MetaSL compiler, fixed possible unknown tag access fatal when LLVM
backend was used to compile shaders with compound (array/structs) input
parameters, in particular if the sizes of parameter types in mental ray
API do not match the sizes of corresponding types in MetaSL.
Changes in version 3.9.1.32
Feature improvements:
- Improved MetaSL compiler reporting (added warnings and notes).
Bug fixes:
- Fixed a crash if a DISP socket client (like the
imf_disp
tool) is detached from mental ray during rendering.
- On Linux and Macosx platforms, fixed a performance regression if cached
framebuffers were used. A file close/open operation was applied on each
tile rendered, which could lead to a significant slowdown in particular
when temporary framebuffer files were located on network drives.
- For rasterizer used in combination with volume rendering, fixed
possible missing volumetric effects and/or black images.
- Fixed possible missing shadows artifacts if detail
shadow maps were used.
- For progressive rendering and iray rendering mode, fixed possible
missing effect of output shaders in case when the first framebuffer was
not a primary one.
- For the debug version, removed assertions triggered when hair objects
with wrong bounding boxes were part of the scene.
- For map containers, fixed possible issues with the nearest lookups
(first element was not the closest one). In particular "search next"
functionality could deliver wrong results.
- For map containers, fixed missing/wrong reporting of loading ascii map
files. Fixed possible failure to load some of such files.
- For MetaSL compiler, fixed threat-safety of some compiler operations.
Fixed a potential deadlock.
- Fixed several issues in the documentation.
Changes in version 3.9.1.31
Feature improvements:
- Allow Tiff/OpenEXR/map textures which do not contain MIPMAP pyramids to
be cached (highest resolution level is cached, upper levels are created
on demand in such case to this is less efficient than having a texture
file with MIPMAPs, but more efficient than loading the complete texture
into memory).
- Improved MetaSL compiler performance. Decreased compiler memory
consumption.
Bug fixes:
- Fixed possible missing volume rendering effect or black images of
rasterizer was used in combination with volume shaders.
- For finalgather preview images (
-finalgather_display on
command line option), fixed color profile correction if the legacy
precomputation mode is used. Final rendered images were not affected.
- Fixed unified sampling rendering used in combination with
scanline on option.
- For unified sampling, fixed per-object min/max sampling rates.
- For progressive rendering mode, changed adaptive sample generation to
match unified sampling.
- For interactive progressive rendering and iray rendering mode, fixed
rendering of moved lights.
- For map containers (including those used for finalgather maps), fixed
possible race condition crash when low on memory.
- For map containers loaded from the open binary format, fixed possible
wrong reporting on the number of elements, and the computation of
bounding boxes. The standard 'private' binary format used in particular
for finalgather maps is not affected.
- For ray-traced particle map objects, fixed a performance
inefficiency.
- Fixed an error message when assemblies are used in combination with
builtin environment lights.
- For builtin environment lights, messages and memory consumption is
reported in the "IBL" module now.
- Fixed possible crash when reading binary map container files with large
declaration section.
- For scenes with multiply-instanced map objects, fixed possible
rendering artifacts and/or crashes.
- Fixed several memory leaks in MetaSL compiler kernel.
- For MetaSL compiler, added support for
geometry_tangent_u/v state member.
- For MetaSL compiler, fixed possible infinite loop freeze.
- Fixed possible MetaSL compiler crash on deleting a MetaSL shader if
nested imports were used.
Shader changes:
- In architectural material shader, improved importance-driven area light
sampling.
Changes in version 3.9.1.30
Feature improvements:
- Allow to use string option with several float values when fewer values
are expected. In particular, this allows to use 4 floats for options
expecting 3 floats, which is a commit case than an option represents a
color.
- For MetaSL compiler:
- added support for non-const initialization expressions for shading
graphs defined in .msl files
- added support for array typedefs
- added new (Java-style) syntax for arrays.
- For
imf_disp tool, switched command line options to use
underscores for multi-word ones. Improved help banner.
- For
imf_copy tool, a tiled Tiff file is written out if the
-p option is used. Note that the Tiff subformat used in that
case is not compatible with mental ray 3.8 and prior, including old
imf tools.
Bug fixes:
- Fixed possible crash in Irradiance Particles if even number of rays
(
"irradiance particles rays" string option) was used.
- For Tiff image files, fixed several issues in reading and caching
various Tiff subformats. Allow scanline Tiff files to be cached. Added a
limit to prevent tiny Tiff files from being cached for efficiency
reasons.
- For raylib integrations: In the progressive interactive mode, fixed a
"progressive cannot resume render" error message.
- Fixed several memory leaks in MetaSL compiler kernel.
- For MetaSL compiler, fixed internal coping of shaders with compound
return types.
- On Windows platforms, for iray rendering mode, fixed possible wrong
device enumeration used in NVAPI test added in version 3.9.1.29. Fixed
ECC detection code added in version 3.9.1.29.
Changes in version 3.9.1.29
Feature improvements:
- On Windows platforms: iray detects if it is running
under SLI or with ECC mode enabled. Both SLI and ECC decrease iray
performance significantly, so a warning is printed in such cases. In
order to allow this diagnostic, iray is linked against NVAPI library.
Bug fixes:
- For unified sampling, fixed sample generation if "samples max" value is
set to less than 1.
- For progressive rendering mode, changed adaptive sample generation to
match unified sampling.
- For iray rendering mode:
- Improved driver timeout prevention mechanism in SLI configuration.
After a certain number of driver timeout failures the GPU is
disabled.
- For procedural OEM textures, scale bump by factor 5. With this
change, rendered images look is very close to mental ray's one.
- Added support for OEM double-sided materials.
- Fixed warning messages if standard OEM lens shaders are used in a
scene.
- For MetaSL compiler, fixed compilation error of phenomena encapsulating
light shaders.
- For MetaSL compiler, fixed possible crash in parser.
- For MetaSL standalone compiler (
ray -mslc), removed
obsolete command line options.
Changes in version 3.9.1.28
Feature improvements:
- For iray rendering mode, report total and available
memory for each GPU used.
Bug fixes:
- Fixed inefficiency of the kernel small memory block allocator. Some of
partially-used pages were not reused for further allocations, which led
to a sometimes major memory consumption increase in animation
rendering.
- For raylib integrations using
mi_msg_thread_register()/unregister() functions, fixed
possible memory leak of small memory blocks allocated by code in one of
mi_msg_thread_register-ed threads and released by other
threads.
- For mental ray standalone, fixed possible segmentation fault in case of
an fatal error (
mi_fatal() call).
- For iray rendering mode:
- Fixed a crash when rendering an empty scene.
- On multi-GPU machines, fixed possible freeze in case of a falling
back to CPU rendering after a failure on one of the GPUs.
- Fixed possible crash for baking of textures via GUI attributes
introduced in version 3.9.1.24.
- Fixed possible driver timeout detection failures on CUDA capability
2.0 GPUs.
- For MetaSL C++ backend, fixed possible compilation error for bsdfs.
- For MetaSL compiler integrated into mental ray standalone (
ray
-mslc command line option), fixed compiler message reporting.
Changes in version 3.9.1.27
Feature improvements:
- For imf_copy tool, added support for writing out MIPMAP pyramids for
OpenEXR output image files (
-p command line option). With
this change, imf_copy -p option is supported for OpenEXR,
Tiff and .map files.
Bug fixes:
- For texture caching, stripes Tiff files with topdown line numbering
(default for Tiff) were read incorrectly. Fixed.
Changes in version 3.9.1.26
Bug fixes:
- For the MetaSL standalone compiler (
ray -mslc command
line), fixed obfuscation option.
- For iray rendering mode:
- GUI attribute lookup introduced in version 3.9.1.24 resolves the
namespace scope properly
- fixed missing illumination from mirrored (transformation with
negative determinant) self-illumination objects
- decrease the default fragment size used to prevent driver timeouts.
This is required for scenes with complex OEM shaders.
Changes in version 3.9.1.25
Feature improvements:
- For iray rendering mode:
- Improved performance and decrease GPU memory usage
- Added support for a set of OEM procedural textures.
Bug fixes:
- Fixed wrong output if the primary framebuffer type is specified to be
alpha (
a,a_16, a_h,
a_fp). The intensity was written out instead.
- For unified sampling, if the
quality parameter is set to
zero, the default quality value is used.
- For unified sampling used in combination with rasterizer, the
rasterizer is derived from the
quality parameter.
- For MetaSL compiler, fixed compilation const expression for array
size.
- For MetaSL compiler, fixed a series of memory leaks.
- For MetaSL compiler, fixed possible crash if MetaSL files were not
found.
Changes in version 3.9.1.24
Feature improvements:
- For mental ray integrations: API GUIs specified inside of shader
declarations are now put into the namespace of the shader declaration
name. Such attributes are now echoed together with shader declaration.
mental ray echo options have been extended with a flag (
gui)
allowing to echo all gui attributes from the global namespace (i.e. not
defined inside of the shader or phenomena declarations). This options is
disabled by default. An equivalent mental ray standalone option
(-echo gui <out_filename>) has been added.
- For iray rendering mode, allow baking of 3rd-party
textures if the resolution gui attributes
(
"bake_resolution_u", "bake_resolution_v",
"bake_scale_u", "bake_scale_v",
"bake_coord_shader") are specified.
- For rendering using unified sampling, allow diagnostic framebuffers to
be specified explicitly: buffers matching names
"mr_diagnostic_buffer_*" are used for corresponding
diagnostics. In particular, this allows to specify image file names and
types where the diagnostic data is saved.
- For MetaSL LLVM backend, improved runtime performance of generated
shaders by allowing LLVM compiler optimization. The optimization can be
disable with the registry " value "0" end
registry
"{_MI_REG_METASL_LLVM_OPTIMIZATION_LEVEL}" value
specified to "0".
- For
imf_disp tool, allow to switch between images with
Ctrl Left/Right keys.
- For
imf_comp tool, added a new command line option
-u. As mental ray creates pre-multiplied rgb/a images by
default, imf_comp composites in premultiplied mode, unless the new
u-u option is used.
Bug fixes:
- Fixed possible sporadic crashes in finalgather rendering. The crashes
were observed on some multicore machines on 64-bit Windows platform.
- Fixed possible rare crash in the kernel memory manager.
- Fixed a crash when
-reload command line option
(auto-converting of objects into placeholders) was used. The
-reload option is still incompatible with gzipped .mi scene
files.
- For BSP2 acceleration, avoid a crash if a shader traces a ray from a
NaN origin or in a NaN direction.
- For BSP2 acceleration used to render scenes with motion blur, avoid
possible unneeded object tessellation.
- On Linux platforms: in iray rendering mode, fixed
possible freezes when multiple CUDA capability 1.3 devices were used.
- For MetaSL compiler, fixed compilation of string-from-double
constructor.
- For MetaSL compiler, fixed support of Spectra values in XMSL files.
- For MetaSL LLVM backend, fixed possible shader compilation failure on
64-bit Windows platforms.
- For
imf_disp tool, fixed possible freeze if an attempt to
load an image of an unknown sub-format is done.
Shader changes:
- For base
mib_map_get_* shaders used for map object data
retrieval, fixed the return types in .mi declarations.
Changes in version 3.9.1.23
Feature improvements:
- Improved performance for motion blur scenes with large number of fast
moving objects when rendered with BSP2 acceleration.
- For
imf_copy tool, added support for writing out MIPMAP
pyramids for TIFF output image files (-p command line
option).
- Cached texture statistics are printed out sorted by number of
accesses.
Bug fixes:
- Fixed possible memory corruption in MetaSL compiler frontend and LLVM
backend.
Changes in version 3.9.1.22
Bug fixes:
- Fixed mental ray kernel's internal memory management failure to
re-claim pages with small allocated memory blocks after working thread
shutdown. This failure may be perceived as memory leak in long animation
rendering.
- Force writable textures to be unfiltered. Update of pyramids on texture
modifications is not supported.
- For map containers fixed:
- search path substitution not applied properly
- minor memory leaks in map container declaration, definition headers
and global values
- null tag access fatal when echoing a map object with map which
failed to load.
Shader changes:
- For production
mip_motionblur()and
mip_motion_vector() shaders, fixed possible crash when
use_coverage parameter was set.
Changes in version 3.9.1.19
Feature improvements:
- For MetaSL compiler, added support for shader graphs and phenomena
specified in .msl file.
Bug fixes:
- Fixed a crash when empty scene is rendered with BSP2 acceleration and
motion blur enabled.
- Fixed a crash if a TIFF image file with (exactly) two channels is
loaded. The first channel is used in such cases, the second one is
ignored.
- Fixed a memory leak when map cache is flushed due to mental ray running
low on memory.
- For
ccmesh objects without texture
spaces, fixed possible crash if mesh contains polygons with 5 or
more certifies.
- On Linux and MacOSX, fixed possible crash when loading ASCII map
files.
- For MetaSL shaders, fixed raster space transformations for orthographic
camera.
- Fixed doxygen comments in public header files.
Changes in version 3.9.1.18
Feature improvements:
- Added import of map files in ASCII format. The files follow the general
.mi file grammar, but allow only map declaration and definition elements,
as well as nested
$include statements.
- Per-texture cache statistics are printed out only if IMG module file
verbosity is set (
-message img files -- command line
option). Combined all cached textures and cached framebuffers statistics
is printed after each frame (if not void).
- If
mi_rc_run()'s mode miRENDER_ACCEL_DELETE
is set, map container cache is flushed from memory. In particular, this
applies to the memory occupied by finalgather map from the last frame.
Map container cash is also (partially) flushed if mental ray is running
low on memory.
- For iray rendering mode:
- Report the memory available on each CUDA device
- Improved performance on CUDA 2.0 ("Fermi") capable devices.
- Improved convergency rate for scenes with many lights and
objects.
Bug fixes:
- Fixed a fatal/crash in
mi::integration::Access/Edit_result_image when the call was
done after the scene postprocessing.
- For mental ray integration, expose functions
mi_colorprofile_to/from_internal(). Some OEM integrations
depends on these function used to convert colors from / to internal color
space, in particular in DISP callbacks.
- Fixed minor memory leaks in BSP2 acceleration.
- For iray rendering mode:
- Fixed possible freezes or crashes when rendering images of high
resolution not fitting into the GPU memory.
- Fixed possible failure to detect CUDA kernel execution error. In
particular,this fixes stripe artifacts when GPU + CPU mixed rendering
is used.
- Fixed difference in the images rendered on CPUs and GPUs.
- Fixed possible pattern artifacts in textures using Perlin
noise.
- Fixed possible infinite loop in light sampling for scenes with
transparent materials.
- Fixed artifacts for
Normals_height_bumpmap MetaSL
shader.
- Added support for shaders returning alpha value of their input.
- Fixed a warning when a light falloff exponent was used instead of
the value provided by a light shader.
- Fixed possible environment sampling artifacts.
- Fixed conversions of phenomena attached to lights.
- Improved support for OEM shaders.
Shader changes:
- For
mip_bump_basis shader, fixed the basic computation for
non-orthonormal transformations of geometry instances.
Changes in version 3.9.1.17
Feature improvements:
- For the
dsm_copy (detailed shadow map inspector), added an
option -l. If used, the Z depth is stored to the color image
alpha channel. Note that many image viewers will not display such output
images in a correct way.
Bug fixes:
- For raylib integrations using iray and progressive rendering in
interactive mode, fixed possible freeze in a fast sequence of stop and
resume events.
- Fixed a database tag and memory leak when animation was rendered with
finalgathering and
finalgather rebuild on option.
- Some of memory blocks were not accounted into the memory statistics,
fixed.
Changes in version 3.9.1.16
Bug fixes:
- Fixed possible crash for ray-traced hair rendering with motion
blur.
- Platform specific: for 32-bit windows executables (in particular,
running on 64-bit windows systems), fixed segmentation fault crash in
ray-traced hair rendering.
- If unified sampling is used, fixed possible artifacts in user
framebuffers. In earlier versions, if no value was set by a shader for a
raster sample, the previous sample's value was used due to a missing
initialization.
Shader changes:
- For subsurface scattering shader, fixed possible black speckles
self-shadowing artifacts.
Changes in version 3.9.1.15
Feature improvements:
- For cached TIFF textures, added support for MIPMAP pyramids in the TIFF
files.
- For MetaSL language, added
set_importance(float) for
Occlusion_options, Irradiance_options,
Trace_options without warnings.
Bug fixes:
- Cached TIFF textures were displayed topdown, fixed.
- When rendering finalgather with
"finalgather rebuild on"
option, a finalgather map created with mental ray 3.8 and prior was not
updated with the new content, fixed.
- Fixed possible crash in MetaSL compiler when compiling XMSL files.
Changes in version 3.9.1.14
Feature improvements:
- For unified sampling, added the time spent for each pixel buffer
(
"mr_diagnostic_buffer_time"). The time stored is only
approximate any may vary significantly for individual pixel, in
particular when a ray used to compute pixel triggers tessellation of
geometry, loading of texture or assemblies, executes init shader etc. Few
pixels having significantly higher rendering times are expected for all
non-trivial scenes.
Bug fixes:
- Fixed unnecessary resending of tiles through DISP protocols and
callbacks.
- On gcc4-compiled platforms fixed wrong texture cache reporting due to
gcc4 compiler optimization bug.
Changes in version 3.9.1.13
Feature improvements:
- For map containers, added API
(
Map_base::Map_status_write() parameter) to specify in the
file is saved in optimized binary, simplified binary or ascii format.
- For MetaSL phenomena, added support for external/internal input/output
parameter name mapping. mental ray API and .mi syntax operate on external
names. Runtime MetaSL cross-shader calls and message passing use internal
names.
- For MetaSL shaders, improved color texture lookup quality when
derivatives are provided. Elliptic filtering lookup is used in that case
now.
Bug fixes:
- Fixed possible out-of-memory fatal in rare cases when a memory block
was
mi_mem_reallocated to a zero size. In particular, this
was observed in rendering animations with irradiance particles.
- Texture cache reporting is switched to prints stats after each frame
rendered. Fixed an issue with SPM-protected mental ray standalone, which
exited before the statistics were printed out in version 3.9.1.10.
- On Linux/Macosx systems, fixed possible open file descriptor leak if
both texture caching and cached framebuffers were used.
- For raylib integrations: with unified sampling, 4-channel buffers were
used for 1-channel (
s or a) image types.
Fixed.
- Do not print an error message if output shader or raylib integration
code attempts to access a framebuffer with out-of-range index. A null
image pointer is returned, like in earlier mental ray versions.
- For MetaSL LLVM backend, fixed ray type comparison operators and shader
type state variable.
Shader changes:
- For the subsurface scattering skin shader, fixed possible stream of
error messages for scenes using hull materials (those with no surface and
bsdf shaders).
Changes in version 3.9.1.11
Feature improvements:
- iray rendering mode is switched to use CUDA 3.2. This
may require a graphic driver update on machines using iray. This improves
iray performance and fixes broken rendering on Fermi (GTX 400 series)
cards.
- Improved performance of TIFF texture caching introduces in version
3.9.1.10 (reduced the number of IO operations).
- For raylib integrations, added
mi::integration::Access/Edit_result_image::get_result_image_count()
static method to get the number of images. For stereoscopic rendering the
returned value is the number of images per camera.
Bug fixes:
- Fixed a performance regression in a special case when
rasterizer with motion steps 1 was used in combination with BSP2 ray
tracing. In this case, a motion version of the BSP2 tree was constructed,
though only a static one is used.
- Fixed echo of verbatim map containers.
- For hair rendering, rendering abort test was missing, which could lead
to a long reaction time. Fixed.
- For MetaSL compiler, fixed several issues for swizzles.
- Fixed an error message printed with
-iray off command line
options is used.
Shader changes:
- Added a new shader library
userdata.dll/.so/.mi. This library
contains a set of utility mib_data_* shaders for accessing
named user data values attached to the scene graph elements. The
documentation is provided in the userdata.html manual
file.
Changes in version 3.9.1.10
Feature improvements:
- Enable texture caching for TIFF file format. In this version, MIPMAP
pyramids form TIFF files are not supported yet. Non-RGBA(A) images,
images with strip height equal to 1 and with components count equal to 1
are not cached.
- Improved texture cache stat reporting. If a texture is (re)loaded
several time, the consolidated statistics including the number of
re-loads is printed at the end of process / before raylib shutdown.
Number of (re)loads of texture is added. Stats clearly distinguish
between cached textures and cached framebuffers.
- Performance of the hair shadow intersection code has been improved.
- For raylib integrations using progressive rendering, added an enum
member
MI_RC_PROGRESSIVE_FG_PRECOMP. This value is returned
by mi_rc_progressive_*() functions during finalgather
precomputation stage.
- Added registry
{_MI_REG_MAP_CACHE_SIZE} which allows to
specify the memory size used by map containers. Value is interpreted in
MBs. This is an addition to already existed command line option
-map_cache_size N.
- For MetaSL compiler, check grammar stricter to catch the following
illegal constructs:
input, output, member
sections in structs
typedef, enum, constructor, destructor,
or method declaration in struct
output section in bsdf.
- For the
dsm_copy tool, fixed the 'color combine' mode.
Added support for conversion to 'z' type images.
Bug fixes:
- Fixed a crash in
mi_shaderstate_set() function, if an
existing value of a key is reset to a new value of a larger size.
- For ray integrations based on static raylib library: compile the PNG
library with C++ and wrap it by MI namespace. This solves possible symbol
conflict if the integrating application uses its own copy of PNG
library.
- For progressive rendering and iray rendering mode, fixed possible
freeze if stop and resume events were issued with low time interval
between them.
- Fixed possible wrong min/max samples warning if unified sampling was
used.
- For MetaSL shader, ignore
metasl_connected_normal
parameter if it is not used as an attachment (this is a reserved
parameter name generated for MetaSL shaders for attaching bumped
normals).
- For MetaSL compiler, fixed a serious of bugs related to shadowing
elements defined in an outer scope by elements with the same name in the
inner scope.
- For imf_disp tool, fixed image format error reporting.
Shader changes:
- For subsurface scattering shader, unroll the changes in version
3.9.0.13 due to the possible artifacts in reflection. Instead, a new
parameter
"fallback_shader" as added to the
misss_fast_shader(_x) shaders. This parameter allows to make
sure that the proper light is used if lightmap samples are completely
missed due to small lookup radius. Old version of the shaders used
lambert illumination. If this parameter is not specified, the old
behavior (lambert) is maintained.
Changes in version 3.9.1.7
New features:
- Added two new utilities for usage in production rendering:
dsm_copy allows to create a slice visualization image
of detailed shadow maps, which can be used for tuning the quality of
shadow maps. Usage:
dsm_copy/dsm_copy [-h] [-c] [-v] [-z float]] detailshadowmap
[outimage [outformat [outtype]]]
-h option print online help
-c combine z and color/alpha in single image
-v prints verbose info about the detailed shadow
map
-z <positive float> specify the z-depth
threshold to sample values from.
imf_comp is a simple compositing tools which can be
used to combine several images rendered with camera window
(-window command line option) into a single one. Usage:
imf_comp [-h] [-v] -o imagefile [compfile...]
-h option prints online help
-v prints verbose output
-o options specified the file name of the composites
image.
Feature improvements:
- In case of finalgather precomputation, create rendering framebuffers
after the finalgather map is build. In case of in-memory framebuffers
this reduces memory consumption during finalgather precomputation
phase.
Bug fixes:
- For rendering with finalgather, fixed possible error message on
unpinning null tag. Regression in version 3.9.1.4.
- Fixed possible crash in rendering finalgather in progressive
interactive mode.
- For hair rendering, fixed possible shadow artifacts due to a numerical
precision issue.
- For MetaSL compiler, fixed compiler error on
operator= for
enumerations.
- For shader writers: fixed a compiler warning on 64-bit Windows platform
in
shader.h include file.
Shader changes:
- For experimental rendering map particles, added the new base shaders
added in version 3.9.1.1 are renamed to
mib_map_get_scalar/integer/vector. Added shaders
mi_map_get_transform/scalar_ array/integer_array for
retrieving transforms and arrays. For arrays, the complete array is
returned and the caller must assure that the size of the buffer is
sufficient.
- For
mib_continue and for rendered particle map data access
shaders (mib_map_*), added missing "apply
texture" qualifier to the declaration.
Changes in version 3.9.1.5
Bug fixes:
- For progressive rendering, fixed possible crash when a camera is
deleted or incrementally changed. Regression in version 3.9.1.4.
- Fixed possible numerical precision artifacts in hair shadows.
Changes in version 3.9.1.4
Feature improvements:
- For interactive progressive rendering, improved the granularity of
detected scene changes. Updating light shaders, updating light instance
transforms, updating lens shader and updating environment shader are now
detected individually.
- Reduced memory consumption of the BSP2 acceleration for motion blur
scenes in a special case when no rasterizer, shadowmaps, are scanline
used, and shadows are limited to the simple mode (not segmented or
sorted).
Bug fixes:
- Fixed confusing warning message on the progressive max samples.
- Fixed possible crash (frequent on Windows platforms) in framebuffer
image output when contour shaders were used.
- For multihosted rendering, fixed possible crash or missing indirect
illumination in rendering sequences of several frames.
- For integrations, fixed
mi::integration::Access/Edit_result_image classes for the
finalgather preview framebuffers created in finalgather precomputation
stage.
- In multi-hosted rendering, fixed a crash of the slave/satellite hosts
at shutdown.
Changes in version 3.9.1.3
Feature improvements:
- Improved controllability and reporting of texture caching.
- Added a command line option
-texture_cache_size
<MB> and registry {_MI_REG_TEXTURE_CACHE_SIZE} . If set,
the value is taken as a limit of texture cache in MBs. By default
(value 0), the dynamic texture cache limit based on the size of all
textures loaded to mental ray is used (as in mental ray 3.8 and
prior). The minimal value of the cache is 20 MB. Command line option
takes precedence over the registry.
- Added a command line option
-texture_cache
<mode> and registry
{_MI_REG_TEXTURE_CACHE}. The value can be one of
"on", "off" or "local". The
default value is "local", meaning that only local (and
.map, which are automatically local) textures can be
cached. This is the default behavior. With "off",
texture caching is disabled and textures are loaded/memory-mapped
completely. With "on", the local texture modifier is
ignored and all textures with image formats supporting caching
(currently .map, tiled .exr, .iff, .bmp) are cached. This mode should
not be used with multi-hosted rendering. Applications integrating
raylib should make sure that all non-local textures are deleted
before this mode is enabled.
- Print out texture cache mode and cache size limit in the options
info banner before each frame rendering.
- Print out the statistics on the number of pixel accesses and
per-thread/local cache coherency rate for each cached image file
(i.e., for cached textures and cached framebuffers). Print out
accumulated statistics before process/raylib exit.
- For TIFF images, utilize the full libtiff library. In particular,
reading of LZW-encoded images is supported.
- For raylib integrations, added support for a combination of finalgather
preview mode with progressive interactive rendering utilizing application
framebuffer.
- For MetaSL compiler, allow typedefs inside of shaders and
functions.
- For MetaSL compiler, improved static code analysis.
- For MetaSL LLVM backend, added support for techniques.
Bug fixes:
- Fixed a crash in progressive rendering stopped on the quality criteria
reached (regression on version 3.9.1.2).
- Fixed a crash when finalgather previewing mode
(
-finalgather_display on command line option) was used in
combination with unified sampling.
- Fixed several memory leaks in MetaSL compiler.
Changes in version 3.9.1.2
Feature improvements:
- Improved integration workflow for mental ray progressive rendering and
iray rendering mode:
- Added support for incremental instance updates (materials and
transformations).
- mental ray kernel monitors database tags for modifications (with
mi_scene_edit/growedit functions), mi_api_* functions). This
information is used on avoid unnecessary re-baking in iray rendering
mode.
- Tags deleted by integrating application during progressive
rendering are not destroyed immediately. Instead, they are
accumulated in a pool which is cleaned up when the rendering is
finished.
- For iray rendering mode:
- added support for texture clipping and alpha
- reduce memory consumption by detecting duplicated textures
- in interactive mode, added support for changes of the environment
shader
- added statistics for texture memory
- fixed black pixel artifacts
- improved support for OEM shaders
- For displacement shaders changing
miState::point
(displacement not in the direction of normals), print a warning if the
sum of the point shift and displacement along the normal is larger than
maxdisplace limit. In such case, reduce the displacement by normalizing
the sum of two components to the vector of maxdisplace length.
- Use mental ray memory management for blocks allocated by the integrated
OpenEXR library.
Bug fixes:
- For displacement shaders called on the triangle meshes in the
presampling face,
miState::normal was not normalized.
Fixed.
- For displacement shaders called on
ccmesh objects, the
modification of miState::point by a shader was ignored.
Fixed.
- Fixed possible rare race-condition crash during finalgather
precomputation, more likely for simple scenes.
- Fixed possible assertion/crash when finalgather precomputation with
legacy mode (
"finalgather precomputation legacy" string
option) was aborted.
- For progressive rendering, fixed tone mapping artifacts if no filter
was applied.
- For MetaSL shaders, fixed shader parameter initialization.
- For MetaSL shaders, fixed missing textures which were not exposed as
input parameters of phenomena.
- On MacOSX platforms, fixed a memory corruption in STL file streams. In
particular, this caused crashes if OpenEXR image files were used.
Regression in version 3.9.1.0.
Changes in version 3.9.1.1
Feature improvements:
- For iray rendering mode, incremental updates for lights, geometry,
textures and materials are now supported.
Bug fixes:
- For raylib integrations: for Access_result_image/Edit_result_image()
calls, fixed possible deadlock if more than one image is accessed
simultaneously.
Shader changes:
- For experimental rendering map particles, added new shaders
mib_map_integer_picker(),
mib_map_scalar_picker(),
mib_map_vector_picker() and
mib_map_color_picker(). This shaders take a map filed name
as a parameter. The result is set to and the value of the particle
currently being hit. If object is not map, or if the map does not contain
corresponding value, shaders return miFALSE.
Changes in version 3.9.1.0
Feature improvements:
- For MetaSL compiler:
- Added trace() function without explicit differentials. The
differentials are computed by the kernel in this case.
- Empty structs are allowed in MetaSL language now.
- Compiler kernel has been refactored for better performance. A
series of memory leaks has been fixed.
- Hair rendering uses the new acceleration structure now, which result in
significantly better performance and lower memory consumption. For
backward compatibility / performance comparison, the string option
"hair acceleration" could be set to off.
- Integrated OpenEXR library is updated to version 1.7.0.
Bug fixes:
- Fixed possible artifacts and crashes with scenes containing several
renderable map objects.
- For MetaSL frontend, fixed handling of empty annotations.
- For memory management, memory allocated for the management system
itself was not counted in the statistics. Fixed.
- For geometry shaders and raylib integrations: the inheritance
information on the leaf instances was broken. In particular, the
miLEAFHISTORY macro did not work properly. Fixed.
- Fixed a regression in version 3.9.0.14. If iray rendering mode was used
with
"gpu" mode (default), and no CUDA-capable GPUs were
found in the system, mental ray exited with fatal. Fixed similar
regression if echo iray mode (-echo iray command line
option) was used, independently of the iray mode specified.
Changes in version 3.9.0.14
Feature improvements:
- For texture caching, the dynamically computed texture cache memory is
based on the in-memory size of the uncompressed textures
instead of the file size used in the earlier version. In
particular, the memory used for rendering no longer depends on the type
of texture compression used.
- For particle map containers, improved performance of merging
operations.
Bug fixes:
- The value for
"primary" qualifier of a framebuffer was
ignored. Now interpret the "primary" off flag correctly.
- For raylib integrations, fixed a crash when
mi::shader::Framebuffer::reset() method was called.
- For unified sampling feature, fixed writing out of multiple
framebuffers.
- For unified sampling feature, fixed finalgather diagnostics.
- Fixed an assertion in memory management system. Possible memory leak at
shutdown messages are downgraded to debug.
- Fixed echo of trilist object with some rarely used vertex layouts.
- Fixed a crash in single-threaded baking of environment map.
- For unified sampling, fixed possible NaN pixel value artifacts on the
tile borders.
- Fixed possible assertion for
ccmesh objects.
- For iray rendering mode, fixed a fatal for 2D texture transformation
MetaSL nodes.
Changes in version 3.9.0.13
Feature improvements:
- For iray rendering mode, added a string options "iray mode" which
controls the selection of GPUs vs. CPUs. The valid values are:
"gpu". Only GPUs are used. CPUs are used if the
machine has no CUDA-capable GPUs available.
"cpu". Only CPUs are used.
"mixed". Both GPUs and CPUs are used.
The default value is "gpu".
Bug fixes:
- Fixed a crash in
ccmesh/sds displacement if displacement
shader returned a color (scalar value is expected).
- Internal
mi_img_mmap_address function is removed from the
public headers.
Shader changes:
- For subsurface scatter shader, fixed illumination when no samples could
be found within the specified lookup radius.
Changes in version 3.9.0.12
Feature improvements:
- Drastically improved the performance of the MetaSL LLVM backend.
- Added final gathering diagnostics to unified sampling modes.
- In approximate mode, the number of light samples for the environment
lighting is calculated based on the value of
miState::importance.
- Added support for a new map file format (open binary), read mode only
(open binary map files can be read in, but not written out as of
now).
- For the experimental ray-traced particle maps, added two new
mi_query() modes, miQ_PRI_PARTICLE_TYPE (that
returns 0 for spheres, 1 for tubes and -1 in case it's not a map object)
and miQ_PRI_PARTICLE_UV (returns the UVs of the intersection
point on the particle).
Bug fixes:
- Fixed an issue with
miState::derivs for freeform-surface
displacement presampling.
- Fixed an issue with hair radii - sometimes they were not properly
accounted for, causing artifacts.
- Fixed a bug in
imf_disp that prevented to stop an
animation render after the first frame.
- Fixed an issue regarding an error message being printed before adding a
framebuffer in case there was none. Now only an info message is
printed.
Changes in version 3.9.0.11
Feature improvements:
- For imf_disp, added the build number to the "About" dialog.
- Reduced the blur in texture lookups, differential-based filtering was
too strong with the default settings.
- Improved the map caching system by making it more adaptive and more
responsive to changing memory conditions.
- For iray rendering mode, added a new mode (ground) to the environment
dome modes.
Bug fixes:
- Fixed an issue with mi_raylib_license_get returning the wrong number of
licenses.
- Fixed an issue with missing derivatives for displacement
presampling.
- Fixed an issue with filtering, no filtering is applied for secondary
rays when differentials are not enabled.
- For iray rendering mode, fixed the echoing of spot lights.
Changes in version 3.9.0.10
Bug fixes:
- Fixed a crash in imf_disp that occurred when opening an image with only
one layer after displaying a different layer in another image.
Changes in version 3.9.0.9
On MacOSX, minimal supported version is increased to 10.5 (Leopard).
Feature improvements:
Bug fixes:
- For echo, added proper escaping of the quote sign (
") in
API names and string values.
- Fixed possible missing shadow artifacts if classic (not detail) shadow
maps with no shadowmap bias were used for scenes utilizing shadow cast
and receive flags (i.e., some object having just one of the flags
set).
- Fixed wrong motion put to motion blur buffer if a shader on a moving
object calls
mi_trace_continue() function, and the object
hit behind is static. In particular, this is the case for the
mip_card_opacity production shader.
- Fixed an error in computation of motion factor (
"geom displace
motion factor" string option) for ccmeshes (since version
3.9.0.6). For slow motion, the tessellation sometimes was coarser than
for equivalent static case.
- For the deprecated
mi_tri_vector() function called from a
displacement shader, the value for the first vertex were returned for all
vertices. Fixed. Regression in mental ray 3.9.
- For MetaSL compiler, fixed several memory leaks.
- For MetaSL compiler, fixed shader inputs with external names.
- For MetaSL LLVM backend, added missing support for String
constructors.
Shader changes:
- For the production
mip_rayswitch_advanced shader, fixed a
crash if an attached parameter shader had more than one output. The first
output of the latter shader is taken as a result of
mip_rayswitch_advanced now.
- For
mia_physicalsky shader, fixed sun disk showing at
night rendering artifacts.
Changes in version 3.9.0.8
New features:
- Experimental / early work in progress: particle maps as native
primitives.
mental ray syntax has been extended, allowing an object to contain
particle maps. Unlike "named" particle maps which are used by shaders,
those maps become a part of the scene DAG and rendered by mental ray
kernel.
Extended .mi syntax with:
object
...
particle "spheres" | "tubes"
[ "take_what" "from_this_map_field"]
map
[ map file list ] |
"<map declaration name>" [ map elements ]
end map
end object
Currently, two particle element types are supported: spheres and
tubes. More types may be added in the future. For integrations, added
function mi_api_map_obj_type() which allows to specify a
type of the map.
With the next syntax statement, it is possible to specify which map
files should be used as special parameters. For examples, for spheres
"radius" "my_rad" would instruct mental ray to
interpret the value "my_rad" of a particle as a radius. For spheres,
"radius" is the only name supported. For tubes, it is possible to specify
"radius0", "radius1", "direction"
and "length" in addition. For integrations, added function
mi_api_map_obj_field().
The body of the map is similar to the declaration of the named map
object, with the exception that the name of the map is omitted.
For integration: the miObject_type enum has been extended
with miOBJECT_MAP entry.
In this alpha version, particle maps have many limitations including o
supportno support for motion blur, rasterizer, shadow maps,
complex shaders.
Feature improvements:
- In unified sampling (introduced in version 3.9.0.6), changed "samples
min" / "samples max" options to float. This is done as work in progress
on allowing less than 1 sample per pixel.
- For BSP2 acceleration used with motion blur in scenes with multiple
instancing,reduced the amount of data not shared among instances by
approximately one third.
- Initial implementation of unified sampling in rasterizer mode has been
enabled. Due to the fundamentals of the rasterizer algorithm, the
semantic of parameters is slightly different. The raster sampling pattern
is taken based on the max samples parameter. The min samples parameter is
used as the minimal number of shading sampler per pixel. The quality
parameter increases the number of shading samples.
- For finalgather precomputation, "fake" frames no longer inserted by the
talk protocol for finalgather precomputation.
- Added new builtin environment shader
declare shader
color "builtin_environment_lookup" (
color texture "tex"
)
version 1
end declare
If the shader is used in the scene and the IBL settings are compatible
(IBL scale set is not set or set to 1.0, no IBL resolution set or the
resolution matches the resolution of the builtin shader texture
parameter), when the texture is applied directly as a spherical lookup,
bypassing internal environment map re-baking.
This shader is in particular intended to be used in iray rendering
mode, there environment precomputation may consume a significant fraction
of rendering time otherwise.
- For ray traced hairs, reduce the memory used by acceleration
structures.
Bug fixes:
Changes affecting compatibility:
- The
mi_msg_hyper() function has been removed from the
integration interface. In many cases, in particular for virtual machines,
there is no way to reliably determine if the machine is running
hyperthreaded CPUs.
Changes in version 3.9.0.7
Feature improvements:
- Print info banner on the sampling parameters if unified sampling
introduced in version 3.9.0.6 is used.
- Improved documentation.
Bug fixes:
- Fixed a crash when rendering with zero framebuffers was started.
- Fixed importance sampling for BSDF shaders glossy component.
- Fixed several minor issues in MetaSL compiler.
Changes in version 3.9.0.6
New features:
- New sampling scheme.
In this version, the sampling need to be enabled explicitly with
string option
"unified sampling" on
The controlling string options are:
"samples min" <int> (<float>
since version 3.9.0.8). Specifies the minimal number of samples per
pixel. Unlike in the old scheme, this value is linear, not
exponential. The minimal acceptable value is 1.
"samples max" <int> (<float>
since version 3.9.0.8). Specifies the maximal number of sampler per
pixel before stopping the rendering.
"samples quality" <color> Synthetic criterion to
stop rendering. Higher value lead to better quality. The "soft" valid
range for color components is [0,1], however values larger than 1 are
accepted. The default value is 0.5.
"samples error cutoff" <color> This is the error
level where further improvements are considered negligible. The
default value is zero (black). Setting the value higher leads to less
samples taken in the dark area of the image.
"samples per object" <bool> If enabled,
per-object min/max sample values are taken into account. Note that
the semantic of this values is different from the old sampling scheme
(linear instead of exponential).
New sampling scheme provides per-color framebuffer control over the
filtering. The framebuffer .mi syntax is extended with:
filtering <bool> Enables / disables filtering.
If framebuffer filter is not specified, the one from miOptions is
used.
filtering [clip] "filter name" [support_x] [support y]
Specifies the filter type ("box", "gauss", "mitchell", "lanczos"),
clipping version (only relevant for mitchell and lanczos), and a
support size (floating value in pixels).
clip <bool> This controls clipping of samples
before pixel value is computed. By default, this is on if the
framebuffer is not of float/half resolution.
For the integration API, the Access_fb::set() method
recognizes the "filter type", "filter support",
"filter support x", "filter support y",
"clip filter" and "clip" attributes.
miOptions::images_info is deprecated.
miOptions::no_buffers gives the actual number of
framebuffers used in the rendering process. Note that this number may be
different from the number of framebuffers explicitly specified in the
scene.
This feature is WIP.
- For output shaders, added classes
Access_out_img and
Edit_out_img (shader_output.h), which allow to access
framebuffer images by name and by index.
The enumeration miRC_IMAGE_* is deprecated.
Feature improvements:
- Improved performance of the BSP2 accelerations in motion blur scenes.
Reduces memory consumption for scenes with multiple instances. Improved
accuracy of motion blur images by shading with time-accurate geometry
normal, interpolated normals and shadow tolerances.
- For ccmesh objects, implemented support for motion-driven displacement
quality reduction enabled with
"geom displace motion
factor".
- Improved performance of ray-traced hairs.
- For ray traced hair, mental ray adds caps at the end of the hair
cylinders. Added a string option
"hair caps" <bool>,
to make caps optional. By default, caps are enabled.
- Finalgather maps are switched to the MAP container. The advantage is
that for large maps it is no longer require to keep complete finalgather
map in memory as the map container caching system is utilized. Also, when
a precomputed finalgather map is loaded from file, the load operation is
significantly faster. New
fg_copy utility can be used to
convert mental ray 3.8 and prior finalgather maps into the new format and
vice versa.
- For the stereoscopic rendering offaxis mode, added a possibility to
specify parallax distance different form the camera focal plane.
The .mi camera syntax is extended with stereo offaxis
<eye_separation> [<parallax_distance>] statement
(the last parameter is new and optional). The default value for parallax
distance is camera focal distance.
For raylib integrations, miCamera::parallax_distance is
added to the camera structure.
- For stereoscopic rendering, change the scheme used for output files.
The registries
{_MI_REG_STEREO_LEFT_SUFFIX} and
{_MI_REG_STEREO_RIGHT_SUFFIX} can be used to specify the
suffix added to the file name before the extension(s) (if any). The
default values are "_left" and "_right". (For
example, if no registers are specified and a framebuffer file name is
output.my.exr, when the files
output_left.my.exr and output_right.my.exr will
be written.) Note that this naming scheme is incompatible with the fixed
prefixes lgt_ and rgt_ used with earlier mental
ray versions.
- Performance and robustness of MetaSL compiler has been improved.
- Improved support of MetaSL phenomena in mental ray, including material
phenomena. Enable
ior() node.
- Improve compatibility of the native C/C++ shader packages with MetaSL
shaders.
When the string option "light relative scale"
<float> or the registry
"{_MI_REG_LIGHT_RELATIVE_SCALE}" is set, the colors passed
from MetaSL light shaders to native surface shaders are multiplied by the
specified value. The colors passed from native C/C++ light shaders to
MetaSL surface shaders are multiplied by the inverse of the value.
Some of the OEM native shader packages use non-standard conventions.
By using the string option/register value of 1/Pi, identical/consistent
rendering results may be achieved with scenes using both native and
MetaSL shaders, as well as builtin BSDFs.
- For MetaSL shaders, do not load MetaSL LLVM backend library
(gen_llvm.dll/.so) if MetaSL C++ backend is used. Improved the messages:
an error message is printed if gen_llvm.dll/.so cannot be found. An info
message containing the full path is printed when the library is loaded.
The path list search is downgraded from info to debug. The LLVM backend
is not loaded when mental ray standalone is used as MetaSL compiler
(
ray -mslc command line).
- Job scheduler: improved multi-threaded and multi-hosting scalability.
Reduced number of hosts synchronizations in multi-hosted rendering.
- Memory management: improved multi-threaded scalability. Frequency of
locked operations is reduced significantly.
- For raylib integrations, if application registers a callback with
mi_job_percent_register_cb() call, the callback is called
during iray/progressive rendering. The zero percentage value is passed if
the exact percentage is not known (unlimited rendering), the type
parameter of the callback is miJOBP_RENDER. In earlier mental ray
versions, this callback was only called for other rendering tasks (tile
rendering, photon emission etc.).
- In multihosting rendering, reduce shutdown time of slaves/satellites in
case of the master host shutdown or crash.
- The function
mi_tri_vectors() is deprecated (but still
functional). Instead, a series of mi_query() modes is
provided:
miQ_PRI_VERTICES_POINTS
miQ_PRI_VERTICES_NORMALS
miQ_PRI_VERTICES_MOTION
miQ_PRI_VERTICES_TEX (accepts space)
miQ_PRI_VERTICES_USER (accepts space)
miQ_PRI_VERTICES_BUMPS_U (accepts space)
miQ_PRI_VERTICES_BUMPS_V (accepts space)
miQ_PRI_VERTICES_DERIVS_U
miQ_PRI_VERTICES_DERIVS_V
miQ_PRI_VERTICES_DERIVS_UU
miQ_PRI_VERTICES_DERIVS_VV
miQ_PRI_VERTICES_DERIVS_UV
miQ_PRI_VERTICES_DERIVS_VU
miQ_PRI_VERTICES_DERIVS_UV
Caller should provide a space to store results: an array of vectors, one
for each vertex of the primitive. In this version, the query modes are
functional only for triangle mesh, so it is safe to assume that the
number of vectors is 3.
miVector tri[3];
miVector *q[] = { &tri[0], &tri[1], &tri[2]};
mi_query( <query mode>, state, 0, q, <space for modes accepting space>);
Examples of the shader usage are available in the source code of base
shaders.
- For C++ shader interface, added an utility class
mi::shader::State_importance
(shader_importance.h header file) as a handy way to adjust
importance factor.
- During finalgather precomputation, no longer check if the angle between
interpolated normal and geometry normal is below 90 degrees and flip
geometry normal in such cases. The large angle can be a result of a
string bump mapping is applied.
mental ray 3.8.3.23 and earlier versions printed a warning and flipped
geometry normal, assuming that the issue originates from an incorrect
shader. Many old shaders which computed the irradiance on the back side
failed to flip the geometry normal.
The old geometry normal flipping behavior can be enabled by setting
the string option "finalgather flip bad geom normal"
<bool> to true.
- For the .mi parser, added syntax to remove a string option:
"optionname" NULL inside of the option block.
- Added
{_MI_REG_FBVIRTUAL} registry and
MI_FBVIRTUAL environment variable for the completeness of
-fb_virtual command line option interface to specify if
in-memory/memory mapped/cached framebuffers are used.
Added MI_FBDIR environment variable which specifies the
directory to keep temporary framebuffer files. (The command line option
and {_MI_REG_FBDIR} registry exist in earlier mental ray 3.8
and earlier versions).
Bug fixes:
- For BSP2 acceleration, fixed possible crack artifacts on 64-bit
platforms. Rare numerical precision issue.
- Fixed possible crash in rendering of scenes with assemblies containing
shader declarations. If multiple frames were rendered, a crash could
occur in a frame following a scene change removing a previously used
assembly from the scene DAG.
- For rendering of scenes with assemblies containing phenomena
declaration inside of assemblies: fixed possible "phenomenon root not
found" error messages and black images or image parts in second and
subsequent frames.
- Fixed possible artifacts and crashes in hair rendering when both
rasterizer and ray tracing are enabled. The rasterizer and ray tracing
tessellations of hair were mixed up in some cases.
- Fixed possible crash in erroneous scenes with phenomena containing
undeclared shaders.
- For scenes with large number of assemblies, fixed an inefficiency in
rasterizer mode.
- Fixed a memory leak in loading detailed shadowmaps from file.
- In multihosting rendering, fixed a significant memory leak on the
slave/satellite hosts in finalgathering precomputation.
- The shader C/C++ source code file specified with "
code"
statement in .mi syntax was removed after rendering. Fixed.
- For MetaSL light shaders, fixed sampling of area lights with MetaSL
light shaders returning uneven sample weights.
- For MetaSL shaders, fixed light normal (wrong coordinate space was
used).
Shader changes:
- For the production
mip_rayswitch_advanced shader, fixed a
crash if an attached parameter shader had more than one output. The first
output of the latter shader is taken as a result of
mip_rayswitch_advanced now.
Changes in version 3.9.0.4
Feature improvements:
- Implemented direct parsing of .mi files compressed with gzip. The
compression is detected automatically. Added an echo bit and command line
option (
-echo compress ...) which would echo a scene
directly into a gzip compressed file.
- Added two new
mi_rc_run_query() modes:
miRCQ_CUDA_DEVICE_PROPERTIES and
miRCQ_CUDA_MEMORY_STATS. The parameter passed to the call
should be the two new structures with the matching names added to
mirelay.h. On success, mi_rc_run_query fills
the structures are with the corresponding values.
- Extended .mi syntax for verbatim textures. The texture header can now
be given in a form
color texture "texname" [<width> <height> "typename"]
In particular, this allows to specify "rgbe" textures not
distinguishable from rgba""rgba" with the old syntax.
- Added new
mi_rc_run_query() mode
miRCQ_IRAY_VERSION. The passed const char **
parameter is initialized with the address of the iray plugin version
string if iray plugin is successfully loaded. Note that calling to this
function triggers loading of iray plugin.
- For mental ray standalone, added
-echo command line option
qualifier "iray". If used, the scene is echoed after
substituting shaders with those supported by the iray rendering mode.
- For mental ray standalone, allow http and https URLs to be specified as
echo 'file' output parameter.
- Improved options info banner printed with progressive rendering. The
output format used in standard rendering mode.
- For progressive rendering, including iray mode, allow max samples to be
set to 0 or a negative value. In this case, the value is treated as
"unlimited", and the rendering is stopped by other criteria: error
threshold or maximal rendering time. The default value (100) is used if
the string option
"progressive max samples" is not set.
- Build MetaSL LLVM backend on the basis of LLVM 2.6. Earlier version
used LLVM 2.5. With this change, a separate LLVM module is created for
each shader compiled. In particular, this improves robustness when
shaders are deleted or modified.
- iray rendering mode is switched to use CUDA 3.0.
- For raylib integrations using interactive progressive rendering: added
mi_rc_progressive_resume_rendering() function. This allows
continuation of the rendering process after
mi_rc_progressive_stop_rendering() or
mi_rc_progressive_cancel_rendering() calls.
- For raylib integrations using interactive progressive rendering: added
mi_rc_progressive_region_of_interest() function. When
called, upcoming samples will be places inside of the region specified by
the function.
- Feature and shader coverage set of iray rendering mode has been
improved.
Bug fixes:
- Fixed a series of issues in MetaSL LLVM backend.
- For
ccmesh objects, fixed possible wrong subdivision level
selected for subobjects.
- For mental ray standalone, texture (
-T) and include
(-I) search paths provided on the command line were
combined. Fixed.
- For mental ray standalone, fixed command line parsing when multiple
-L paths are provided. The path lists are concatenated.
- In lightmap baking, lightmap shaders were executed several times if an
array of materials with several entries of the same materials was
inherited to the lightmap object. Added a test for this case in order to
avoid the redundant work.
- Fixed performance regression: a light shader return value 2 was ignored
and did not terminate the light sampling loops as specified.
- Significantly improve performance of image based lighting (IBL) used in
combination with finalgathering. The number of environment samples done
for finalgather ray hits was unnecessary high.
- Fixed artifacts for IBL approximate mode (the mode enabled with
"environment lighting mode" string option value
"approximate").
- In some cases, in particular when BSP2 acceleration was used, available
work was not scheduled on all threads, fixed. This improve
multi-threading scalability, in particular during the construction phase
of the BSP2 acceleration for large scenes.
- On Windows platforms, fixed a crash when a shader printed a very long
(1024 or more symbols) message with
mi_info(),
mi_warning(), mi_error() and similar function.
The crash was in the shader.lib library. 3rd party shader
writers should re-link shader DLLs with the new shader.lib
in order to profit from this fix.
- For interactive progressive rendering, fixed possible crash in
accessing freed camera while changing the framebuffer resolution.
- For MetaSL shaders, accept shader graphs with only the
surface_bsdf node specified.
- Fixed a crash when a MetaSL shaders was used in a frame, and a C/C++
shader library was loaded after that frame was finished.
Shader changes:
- For fast subsurface scattering shader, fixed possible artifacts due to
missing QMC sampling initialization.
- For fast subsurface scattering shader, fixed possible noise an unstable
images rendered differently with multiple runs on the same settings.
Lightmap textures being rendered are excluded from the usage by
reflection / refraction ray hits coming from the same or some other
lightmap computations.
Changes in version 3.9.0.3
For mental ray standalone executables and integration libraries protected
my SPM, switch the license counting to 1 license per machine. This is more
generous than 1 license per 4 threads used since version 3.8.1.16.
Known limitations:
- Framebuffer code is undergoing refactoring and may be unstable in this
version.
- MetaSL compiler is undergoing refactoring and may be unstable in this
version.
Changes affecting compatibility:
- In shader C/C++ interface, some missing const qualifiers have been
added. In particular, the
mi_db_access() and
mi_db_access_type() functions return const void
* pointer now, to hint shader writers that the database elements
accessed that way should not be modified. This may require recompilation
of some C++ shaders adding a const_cast<>.
miState::cache has been removed from the
miState struct. Some volume shader trying to ray trace
shadows from the volume may need minor modifications (remove the
references to that state member).
- iray integration interface has been extended and is not compatible with
libraries used with mental ray 3.8.
Feature improvements:
- Performance, memory consumption and robustness of the BSP2,
acceleration, including motion scenes, has been improved compared to
mental ray 3.8 and mental ray 3.9.0.0.
- For
ccmesh objects, handing of texture seams has been
improved. The first texture space takes into account possible texture
seams of further texture spaces, and vice versa.
- Added functionality to detect the amount of memory available to the
application. The estimation is printed out before rendering each
frame.
- Significantly improved performance of the Map containers.
- Following customer requests, the default value for per-framebuffer
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.
- For IBL, added option to control the IBL brightness. The
environment lighting scale" f [f f f] string option affects
all illumination from the environment, but not the directly visible
environment.
- Build MetaSL LLVM backend on the basis of LLVM 2.6. Earlier version
used LLVM 2.5. With this change, a separate LLVM module is created for
each shader compiled. In particular, this improves robustness when
shaders are deleted or modified.
- In progressive rendering, including iray rendering mode, mental ray
kernel now tracks incremental changes to the camera and immediate (bottom
level) camera instance done with
mi_api_* calls. This makes
the requirement to call the mi_rc_progressive_set_camera()
function obsolete.
- The list of shaders and features supported by iray has been
significantly expanded.
- For iray rendering mode, intercept CUDA errors and memory allocation
errors. CUDA devices issuing errors are excluded from the rendering.
- For iray rendering mode, improved scalability when rendering with
multiple GPUs and when both GPU and CPU are used.
- For iray rendering mode, improved rendering performance when multiple
CUDA devices with different CUDA capabilities are used.
Capability 1.1 devices are not longer switched to CUDA capability 1.0
mode in such case.
Bug fixes:
- Light loops did not stop on light shaders returning the value 2.
Regression, fixed. Performance of IBL in combination with finalgathering
has been significantly improved.
- For lightmap rendering, avoid running lightmap computation multiple
times in case of redundant materials in the material array inherited for
the lightmap object.
- Fixed possible self-intersection artifacts in the build-in ambient
occlusion.
- Fixed ray differential initialization in finalgather precomputation
stage.
- Fixed possible crash at shutdown if API forward declarations were
used.
- Fixed texture filtering in rasterizer mode. Ray differentials were not
initialized properly.
- For texture lookups with negative filter value: a single image pixel
with no filtering is returned.
- Fixed a crash in case of incremental change for a camera stereo mode
(on/off).
- Fixed possible
ccmesh artifacts if non-view dependent
approximation was used.
- For
ccmesh objects, fixed echo of derivatives and length
approximations.
- For subdivision surfaces (
ccmesh implementation), fixed a
crash observed for some objects.
- Fixed a crash if a hair object with no hairs is rendered.
- Fixed a crash if ambient occlusion with caching was used in combination
with contour rendering.
- Fixed finalgather preview rendering with color profiles. Color profile
was not applied.
- Fixed an artifact on triangle edges that occurred when using BSP2
acceleration.
- Fixed a clipping artifact when using BSP2 acceleration.
- Fixed rendering speed regression if BSP2 acceleration used for scenes
with builtin IBL.
- For the BSP2 acceleration, fixed a memory leak with assemblies and
multiple instances.
- For scenes with shadow maps, a copy of string option tags was deleted
twice. This is not know to cause any observable issues.
- Fixed a crash if photon map (
globillum or
caustic) was used in a scene with assemblies.
- Added traversal callback functionality for assemblies.
- For mental ray integrations, fixed a race condition which could lead to
a crash in aborted photon emission.
- Do not apply gamma correction for images of
half type, so
that half and float images are handled
consistently.
- Fixed a crash in output of multiple framebuffers into the same OpenEXR
file for scenes with more than 6 user framebuffers rendered.
- Fixed possible too high capacities (bit per pixel, alpha) used in the
main color framebuffer file for scenes with more than 6 user framebuffers
rendered. In particular,
rgba primary framebuffer could be
advanced to rgba_16 without a need to do so, consuming more
memory.
- In progressive rendering, camera movement was not taken into account
when rendered with
scanline off. Fixed.
- For IBL (image based lighting), fixed possible NaN pixel colors if the
"environment lighting shadow" modes "solid" or
"off" were used.
- When rasterizer was used with very low shutter times (0.0001), the
scene was rendered black. Fixed.
- For hair ray tracing,
state->bary[0] sometimes was
initialized to NaN value, fixed.
- Calling
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.
- For material phenomena with no surface shader, attach bsdf (if any) to
the surface slot.
- Fixed major memory and database tag leaks for scenes with assemblies.
Shader instances defined inside of assemblies were not deleted together
with assembly.
- Fixed a memory and database tag leak in multihosted rendering. For
geometry tessellation jobs executed on slave hosts, the parameter tags
were not deleted. Tessellation is likely to be executed on slave hosts
for scenes with finalgather.
- In network rendering, fixed possible fatal error master host if a
connection to a slave/satellite on the master host when a connection to a
slave/satellite was closed during the initial handshake. This was
observed on Windows platforms if the satellite service port was
misconfigured.
- In multihosted rendering, fixed possible memory (on Windows platforms -
handle) leak on slave hosts.
- In multihosted rendering, removed some pointless communication between
hosts. This slightly improves performance of the network rendering.
- For mental ray standalone, the
-core command line option
was ignored, and the value was always set to on. Fixed.
- For iray, prevent possible crash if iray plug-in was not loaded.
- For MetaSL shaders, the value of Light_iterator::dot_nl was not
adjusted according to the modification of State::normal (bump mapping).
Fixed.
- For MetaSL compiler, fixed missing conversion for
bool
vectors.
- For MetaSL compiler, fixed equal/non-equal operators for
Ray type.
- For MetaSL compiler, fixed expressions in array sizes.
- For MetaSL Illumination node shaders, removed deprecated "compile as
bsdf" annotation. In particular, this fixes internal shader declaration
generated for these shaders.
- For MetaSL C++ backend, fixed code generated for 3-dimensional float
texture samplers.
- For MetaSL shaders, fixed regression where shader state inputs were
being ignored.
- For MetaSL shader runtime, fixed 4th component of
half4/float4/double4 texture
sampler lookups.
- Fixed a crash when a MetaSL shaders was used in a frame, and a C/C++
shader library was loaded after that frame was finished.
- For MetaSL compiler, issue errors if global variables are declared.
Such variables are illegal according to the MetaSL spec.
- For MetaSL LLVM backend, fixed the search path provided with the
{_MI_REG_LIBRARY} register. The register is now correctly
taken into account.
- For MetaSL LLVM backend, fixed inputs of struct types.
- For MetaSL LLVM backend, fixed problem with consecutive
compilations.
- For MetaSL LLVM backend, evaluate only const and uniform inputs in the
constructor. This resolves possible deadlock on the init shader lock.
- For MetaSL LLVM backend, fixed possible crash in an input parameter of
enum type was used.
- For MetaSL LLVM backend, fixed a code generation on 64-bit platforms:
call immediate instructions are avoided. Call immediate instructions use
32-bit offsets, which may cause sporadic crashes when LLVM-generated code
is located at addresses with are more than 2GB away from the mental ray
kernel code.
- For MetaSL LLVM backend, fixed runtime crash due to calling generated
destructors at improper time.
- For MetaSL LLVM backend, fixed wrong code generation for swizzles and
for the ternary (
"? :" ) operator.
- For MetaSL LLVM backend, fixed bytecode generation for shaders with
array of structs parameters.
Shader changes:
- For fast subsurface scattering shader, fixed possible artifacts due to
missing QMC sampling initialization.
- For fast subsurface scattering shader, fixed possible noise / unstable
images rendered differently with multiple runs. Lightmap textures in the
process of being rendered are excluded from usage by reflection /
refraction ray hits coming from the same or some other lightmap
computation.
- For the architectural material shader, fixed Exact AO feature.
Regression from mental ray 3.7+.
- Fixed a crash in the lume
Glare output shader.
- For fast subsurface scattering shader, fixed printing of progress
messages handle id's on 64-bit platforms.
- Platform specific: for physical subsurface shader, fixed artifacts on
64-bit Windows.
- For paint.dll shader library on Windows platforms, copyright/version
information was not included. Fixed.
Changes in version 3.9.0.0
Feature improvements:
- For the BSP2 acceleration used for motion blur scene, enabled new
prototype implementation of a fast motion blur BSP2 mode with a much
lower memory consumption compared to previous solutions.
Changes in version 3.8.2.0
Feature improvements:
- For progressive rendering, disable clamping of the framebuffer values
by default.
Bug fixes:
- For SPM-protected mental ray licensed by mental images, fixed
the new licensing scheme.
Changes in version 3.8.1.18
Feature improvements:
- For iray, finish the separation of iray related
functionality out of mental ray into the external libraries
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.
- For iray, enable support for CUDA compute capabilities
1.0 in addition to compute capabilities 1.1. This allows to render with
iray even on first generation of CUDA-enabled GPUs, but may take up to 20
percent more time to finish.
Bug fixes:
- For raylib integration, expose functionality to convert colorprofiles
from the internal colorprofile to a specified colorprofile.
- Fixed a crash that occurred with phenomena declarations in
assemblies.
- Fixed a crash for irradiance particles when increasing the IP indirect
passes between frames.
- Fixed a crash in imf_disp that occurred when changing the camera
resolution or switching stereo mode on incrementally.
- Fixed imf_disp with command line option
--disable-gl
set.
Changes in version 3.8.1.17
Feature improvements:
- For iray, shader mapping functionality and component
of mental ray connectivity has been moved from mental ray
standalone/raylib to a separate dynamic library,
libiraymr.so/.dll/.dylib. This library is distributed
together with iraylib and is installed at the same location.
- For MetaSL compiler, improved compiler error file/line reporting.
Bug fixes:
- Fixed another crash for BSP2 acceleration for scenes with motion blur
containing both moving and static objects. The fix in version 3.8.1.16
was incomplete.
- For the BSP2 acceleration used for motion blur scene, fixed possible
improper selection of splitting planes, which could lead to memory
consumption inefficiency.
- For MetaSL LLVM backend, fixed code generation for enums.
- For MetaSL compiler, fixed search path for the import statements.
- For MetaSL compiler, fixed texture comparison operators.
Changes in version 3.8.1.16
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:
- Fixed a crash for BSP2 acceleration for scenes scenes with motion blur
containing both moving and static objects.
- When mental ray is low on memory, fixed possible segmentation fault
crashes for shaders using
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.
- When mental ray is low on memory, fixed possible rare unknown database
tag access fatal (rare race condition).
- For
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.
- In debug version of mental ray, suppress messages from the ZLIB
library, used in particular in (de)compression of some of OpenEXR
images.
Changes in version 3.8.1.15
Bug fixes:
- Fixed MetaSL LLVM backend crash on Windows XP machines.
- For MetaSL LLVM backend, the default optimization level of LLVM is set
to zero. The optimizer in LLVM 2.5 JIT compiler has been observed to
produce illegal code in some case.
Changes in version 3.8.1.14
Summarized release notes for iray are provided in a separate document.
Feature improvements:
Bug fixes:
Changes in version 3.8.1.13
Known issues in this version:
- On MacOSX platform, mental ray will crash if LLVM backend is used
(since version 3.8.1.8). Fixed in 3.8.1.14.
Bug fixes:
- Removed undocumented and unneeded
mi_phen_clone/unclone
functions.
- For mental ray standalone, fixed a regression in command line parsing
which may lead to a crash.
- Texture pyramid fix in version 3.8.1.12 was incorrect, a proper fix is
added.
- For MetaSL shaders, fixed builtin bsdf names according to the MetaSL
spec.
Changes in version 3.8.1.12
Bug fixes:
- Fixed a crash if a texture with on-demand-created filtering pyramids is
loaded twice.
- For MetaSL compiler, fixed a regressing in parser. The
#define's values wrapped by ()-brackets are parsed correctly
now.
- For MetaSL compiler, fixed conversion of integer vector parameters.
- For MetaSL compiler, allow arbitrary const expressions for array
size.
- For MetaSL compiler, fixed improper handling of const and uniform
attributes for constructor calls.
- For mental ray used as a MetaSL standalone compiler (ray -mslc command
line option), fixed compilation of BSDF shaders into C++ code.
Changes in version 3.8.1.11
Feature improvements:
- Added support for MetaSL material phenomena.
- For animation rendering, improved incremental changes on the camera
framebuffers. If a new framebuffer is specified for an incremental
camera, the list of framebuffers is cleaned. In earlier versions
framebuffers were accumulated, which lead to issues when rendering
animations of echoed scenes.
- For finalgathering, provide a way to enforce finalgather computation of
a per object/per instance basis. .mi syntax for objects and instances has
been extended with
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.
- With
-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).
- On Linux platforms, add
-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.
- Improved physical memory utilization by avoiding unnecessary
largecontinuous memory blocks. In particular,
scenes using finalgather maps and shaders using
mi_kdtree_*
interface are affected,as well as scenes with BSP2 acceleration in the
debug build or in combination with multihosted rendering.
- Provide
-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:
- Echo requirements for struct and array of struct shader parameters
properly. In particular, fixed missing shader instances and textures
passed as values for such parameters.
- Fixed echo of per-object min/max sample parameters.
- Cylinder area light sources were echoed as discs, fixed.
- Fixed echo of subdivision surface vertices with
darts.
- Fixed
-output off command line option: it disabled all
image file outputs instead of suppressing executions of output
shaders.
- For 3-dimensional DDS textures, fixed error message (unsupported image
format subtype).
- On Windows platforms, fixed "Permission denied" error when creating
directory for shader cache.
- Fixed a crash in unlinking a shader library if MetaSL LLVM backend has
used to create some (other) shaders.
- For MetaSL compiler, fixed compilation of BSDFs used as parts of
phenomena.
- For MetaSL Phenomena provided as xmsl files, set all internal default
parameter values properly even when they do not belong to the phenomena
external interface.
- For MetaSL compiler, fixed code generation for shader classes inherited
from base shader classes.
- For MetaSL runtime, added missing message passing (trace call returns)
for several matrix and vector types.
- For MetaSL LLVM backend, fixed selection of shader primary output. In
particular, this fixes black image rendering if MetaSL light shaders were
used.
- For MetaSL C++ backend, fixed compiler crashes for
Occlusion_options, Irradiance_options,
Light_sampler_options, Light_profiles,
Particle_map, and Particle_map_options
constructors.
- For MetaSL C++ backend, fixed illegal code generated for some
overloaded matrix and vector functions.
- For MetaSL C++ backend, fixed illegal code generated for the
Bsdf type.
- For MetaSL C++ backend, fixed illegal code generated for
Cube and Spectrum texture samplers.
- For MetaSL C++ backend, fixed swizzles for types other than float.
- For mental ray used as a standalone MetaSL compiler (
ray
-mslc command line option), fixed generation of uniform and const
constructor attributes.
- For iray, fixed possible crash when rendering is
canceled.
Changes in version 3.8.1.10
Bug fixes:
Changes in version 3.8.1.9
Feature improvements:
- For mental ray standalone, allow multiple
-T /
-texture_path commands on the command line.
- On MacOSX platforms, mental ray loads shader library with
dlopen/dlsym instead of the platform-specific NS* function
family.
Bug fixes:
- Fixed a performance regression in rasterizer. The regression was due to
unnecessary frequent memory allocations / deallocations.
- For progressive rendering and iray used in combination with DISP
protocol, fixed growing memory consumption during long "single-frame"
rendering sessions.
- Fixed a crash if
mi_query function was called in
miQ_PRI_BBOX_MIN/MAX modes with null
state->pri. mi_query now returns
miFALSE in these cases.
- Fixed possible crash if the
link statement has been
applied on a file of an unknown or unsupported type.
- For MetaSL C++ backend, fixed code generation for initialization of
inputs of struct types containing texture fields and for inputs that are
arrays of structs.
- For MetaSL LLVM backend, added missing implementation of uniform and
const constructors and destructors.
- For MetaSL runtime, fixed
orthographic state variable.
- Fixed a memory leak in MetaSL compiler.
Changes in version 3.8.1.8
Feature improvements:
- On MacOSX platform, added a default substitution rule
.so ->
.dylib. Old shader libraries with .so extension must
be renamed. The consistent .so/.dll/.dylib substitution
rules provide .mi scene cross-platform compatibility.
- For MetaSL shader cache, add user name to the temporary directory
created to keep the cache. This fixes possible permission conflicts if
mental ray is used by multiple users on the same machine.
Bug fixes:
- Fixed a crash when echoing camera with multiple framebuffers.
- Fixed missing echoing of ink
link statements.
- Avoid echoing of shader declarations derived from MetaSL
(
msl/xmsl) files.
- For BSP2 acceleration, fixed possible infinite loop and artifacts if
mi_trace_continue function or volumetric rendering with
autovolume mode used.
- Implemented missing functionality of MetaSL shader distribution in
multihosting rendering. MetaSL shaders are send to slaves in text form
and generated by each slave host on demand with its own MetaSL compiler
and backend.
- For MetaSL compiler, fix boolean control expression in the
switch statement.
- For MetaSL compiler, fixed improper logic in some of
switch/break/continue/return combinations.
- For MetaSL C++ backend, generate correct code for constructors of
texture samplers used in expressions.
- MetaSL compiler errors were printed by a wrong module, fixed.
- For mental ray standalone invoked as a metasl compiler in order to
(re)generate MetaSL code (
-mslc -t msl command line
options), fixed missing half/double qualifiers on the literals.
- Fixed possible mental ray crash at shutdown if MetaSL compiler was used
in the session.
- For iray on MacOSX platform, load
libiray.dylib (instead
of .so) .
- On Windows platforms, errors in plugin loading (MetaSL LLVM backend,
iray) were silently ignored. Added printing out system error
messages.
Changes in version 3.8.1.7
Bug fixes:
- Fixed crashes in multihosting rendering (regression in version
3.8.1.6/3.8.1.5). Fixed sending link statements from master to
slaves.
- On MacOSX platform, load
gen_llvm.dylib (not
.so) for LLVM MetaSL backend.
- For MetaSL C++ backend, fixed significant performance issue for array
shader parameters.
- For MetaSL C++ backend, fixed texture sample constructors used in
expressions. Fixed possible wrong type generated for temporary
swizzles.
Changes in version 3.8.1.6
Known issues in this version:
- In multihosted rendering, a slave would crash when the second library
is send from master to the slave host.
- On MacOSX platforms, mental ray searches for LLVM backend under the
name
gen_llvm.so, not gen_llvm.dylib.
Feature improvements:
- Improved sampling of IBL (image based lighting), which results in
better quality images and in faster convergence of IBL used in
combination with progressive rendering.
- On MacOSX platforms, dynamic libraries (shaders, plugins) file
extension is switched to
.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.
- For applications integrating raylib with progressive rendering, changes
the
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.
- For iray, provide full support for the
mia_physicalsun shader.
- For iray, improved overall performance. In particular,
the performance of image processing with both DISP and
mi_rc_progressive_* interfaces has been improved.
- For iray, extended support for several OEM
shaders.
Bug fixes:
- For mental ray standalone on windows platforms, fixed a memory
corruption popup window if rendering is aborted (In particular, by
pressing Ctrl-C).
- Fixed linking info/progress messages incorrectly printed from the DBN
module.
- For MetaSL parser, fixed possible incorrect handling of
import
#import token.
- For MetaSL compiler, fixed wrong/missing const expression
evaluations.
- For MetaSL LLVM backend, fixed memory leaks.
- For MetaSL LLVM backend, fixed crashes in half and double texture
samplers and matrices.
- For MetaSL LLVM backend, fixed handling of
default case in
switch statements.
- For MetaSL LLVM backend, fixed support for
light_shadow
output of light shaders.
Shader changes:
- For base and physics shaders, added
missing
apply attributes.
- For lume shader package, removed the declaration of
the
LumeTools shader used to GUI attributes only.
Changes in version 3.8.1.4
Feature improvements:
- For progressive rendering, lift the restriction that task size had to
be a multiple of subsampling size.
- For standalone MetaSL compiler option of mental ray
(mslc
-mslc command line option), added a possibility to
output MetaSL files. Unused output of binary MetaSL file (.bmsl) is
removed.
- For raylib integration, expose progressive rendering API in the plain C
interface.
- For mental ray standalone, allow to specify the value
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.
- iray is switched back to CUDA library version 2.2 in
order to improve compatibility with drivers.
- For MetaSL LLVM backend, added support for shader parameter
initializers.
Bug fixes:
- Adjusted module id enumeration to keep same error/warning codes as for
mental ray 3.7+ and earlier versions.
- For progressive rendering, changed the default value of the
"progressive error threshold"string option to 0.05, as
documented. The value for earlier versions was 0.1.
- For MetaSL compiler, implemented missing compatibility between Spectrum
and Color, Spectrum and float3, Spectrum and float4 classes.
- For MetaSL compiler, fixed a possible crash if '
const
String' type was used.
- For MetaSL C++ backend, map MetaSL half literals (like 1.0h) to C++
float literals properly.
- For MetaSL LLVM backend, added missing support for invocation as a
shadow shader.
- For MetaSL LLVM backend, added missing
dot(int, int)
function, Occlusion_options constructor, and
String == and != operators.
- For MetaSL LLVM backend, fixed handling of destructors on leaving
scopes with
break, continue and
return operators.
- For iray, fixed wrong light transforms.
- For iray, fixed superfluous verbosity.
Shader changes:
- For precompiled MetaSL shader library, added a set of missing intrinsic
shaders.
- The
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.
Changes in version 3.8.1.3
Feature improvements:
- For mental ray standalone used as a MetaSL compiler (
-mslc
command line option), allow file arguments to be specified after compiler
options.
- For iray, added support for directional light
sources.
- The GUI attributes for several shader declaration files are moved into
separate files. These GUI files are only used by some of the OEM raylib
integrations and are excluded from other release tapes.
Bug fixes:
- For raylib integrations, fixed possible unknown tag fatal or crash when
framebuffers are deleted.
- For Map containers, added removal of temporary swap files in case of
rendering abort.
- For MetaSL LLVM backend, fixed several issues related to the inlining
in the generated code with high optimization level (controlled by the
MI_METASL_LLVM_OPTLEVEL environment variable).
- The version 3.8.1.2 64-bit Linux platform specific
issue with MetaSL LLVM backend has been fixed.
- For MetaSL LLVM backend, fixed tangent space code, swizzle constructors
for atomic types, and parameters to the sample iterators.
- For MetaSL C++ backend, fixed literal string symbol escaping.
- For raylib OEM integration, fixed a corruption in the GUI attributes
handling.
Changes in version 3.8.1.2
Known platform-specific issue in this version: On 64-bit Linux, the MetaSL
LLVM backend asserts for most of MetaSL shaders.
Feature improvements:
Bug fixes:
- Fixed a possible crash in multihosted rendering for scenes using
instance light lists.
- Fixed on-demand texture filtering (added in version 3.8.0.11) for
textures of tiny resolution.
- For the BSP2 acceleration, fixed possible improper handling of
visibility flags of assemblies. Regression in mental ray 3.8.
- For iray, fixed possible rendering artifacts with more
than 4 threads.
- For iray, fixed an issue in sampling generation
causing significant visual difference between images rendered on GPU and
on CPU.
- For LLVM backend, fixed texture sampler constructors and texture
width/height.
Changes in version 3.8.1.1
Feature improvements:
- Extended DISP talk protocol. The frame begin reply string has not the
form
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:
- For the
imf_disp tool, fixes creating of the second frame
if output shaders are used in the scene.
- For MetaSL LLVM backend, fixed type conversion for mental ray scene
parameters.
Changes in version 3.8.1.0
Feature improvements:
- Added
-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.
- For MetaSL shaders, added native support for
half
type.
- For MetaSL shaders, improve mapping of MetaSL types to mental ray
types. In particular, added support for matrix types.
- Changed signature of the recently added
mi_lookup_*_texture_x functions, the filter is passed by
value.
- For the
.mi parser, remove the limit of 4096 characters
per line.
- For the
iray, improved light source handling.
- Removed left-overs of the deprecated hardware rendering (mental ray
3.4) from the shader and integration interface.
Bug fixes:
- Fixed echo of the
premultiplied framebuffer flag.
- Allow BSDFs to be nested inside of Phenomena.
- Fixed a crash for MetaSL shaders used in combination with multi-hosted
rendering.
- For the standalone MetaSL compiler functionality, only shaders having
brdf_type annotation are compiled as BRDFs even with
--brdf command line option is specified.
- For MetaSL C++ backend, fixed possible wrong initializers inside of
phenomena.
- For MetaSL shaders, fixed possible artifacts due to wrong volume in/out
stack computation.
- For MetaSL shaders, fixed missing support for camera
dof_focus.
Changes in version 3.8.0.12
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:
- Added support for the combination of stereoscopic rendering in
combination with progressive rendering.
- For the rasterizer, changed the default value of the
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.
- Improved performance for progressive rendering and iray used with DISP
callbacks and protocols.
- For the MetaSL LLVM backend, added support for the explicit shader
calls from MetaSL shaders.
Bug fixes:
- For iray, fixed possible crash for scenes using
textures.
Changes in version 3.8.0.11
Feature improvements:
- iray functionality has been encapsulated into a
plugin. This removes the symbol dependencies on the CUDA runtime from OEM
raylib libraries. The plugin is name is
"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).
- On 64-bit MacOSX platform, provide CPU fallback functionality for
iray.
- Provide MIPMAP pyramids for effective filtered texture lookup on
demand. Like in the earlier version, mental ray will create MIPMAP
pyramids for textures declared filtered at the load/memory map/cache
insertion time. If a texture is not declared filtered,
the pyramids are created on demand when
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.
- For MetaSL compiler and C++ backend, added support for user data.
- For MetaSL LLVM backend, added support for a plurality of features,
including mental ray - MetaSL parameter conversions and compilation of
light shaders.
Bug fixes:
- Fixed a regression: shader cache did not update changed metasl
code.
- Fixed a regression: in network rendering, the link statements for
compiled C/C++ (.so/.dll files) shaders (.so/.dll files) were not
propagated from the master host to the slaves.
- For MetaSL integration, fixed possible wrong default parameter values
in the XMSL phenomena emulation mode (registry
{_MI_REG_METASL_EMULATE_MI_PHEN} set on).
- Fixed possible false error message on camera stereo mode.
- The function
void mi_msg_usleep(int secs); is restored in
the integration interface.
Shader changes:
- Improved architectural shader applied to the glass and similar
materials. If after several bounces inside of a glass the trace depth
limit has been reached, the black or environment color has been returned.
In bright environments this lead to visible "light leak" artifacts. The
shader behavior is changed to trace a transparent ray instead of picking
environment or black color. It is a better approximation to the true
result of several additional reflection/refraction light bounces. For
compatibility reasons, the old behavior still could be achieved by
setting the per-shader trace depth limit to the value "-1".
Changes in version 3.8.0.10
Feature improvements:
- For the BSP2 acceleration and the special case of the shutter interval
[0,0] with motion blur option enabled, use
static acceleration structure in order to improve
performance and reduce memory consumption.
- For the MetaSL C++ backend, added support for displacement shaders.
- On Windows platforms, removed run-time overhead related to the
discontinued MetaSL CIL backend. mental ray kernel no longer relies on
the .Net installation.
Bug fixes:
- On Windows platforms, fixed a crash when MetaSL compiler LLVM backend
was initialized. The functionality of LLVM is still limited, only simple
shaders can be compiled in this version.
- Fixed possible deadlock or assertion in the debug mental ray version.
The issue has been observed if a MetaSL shader has been deleted, or if
the IBL feature was used.
- Expose
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.
- For IBL rendering, fixed switching IBL modes between frames.
- Fixed a crash in multihosted rendering if finalgather was used.
- For MetaSL shaders, fixed possible crash in filtered texture
lookup.
- For MetaSL shaders compiled with C++ backend, fixed possible improper
handling of vector parameters.
Changes in version 3.8.0.9
Feature improvements:
- For iray integrated for into OEM libraries, the fallback into the CPU
solution has been implemented for Windows and 32-bit MacOSX in addition
to Linux.
- For MetaSL shaders and C++ backend, added support for volume
shaders.
Bug fixes:
- Fixed a crash if an attempt to compile MetaSL shader with non-existing
compiler backend was done.
- Fixed possible crash if mental ray 3.5 compatibility framebuffer syntax
was used (regression in version 3.8.0.8).
- For
imf_disp tool, removed possible display
flickering.
Changes in version 3.8.0.8
New features:
- MetaSL LLVM backend. A new backend for MetaSL shaders is provided. This
backend replaces CIL backend on Windows platforms (superior performance
and uniformity of the solution on all platforms). The backend is
supported on Windows, Linux and MacOSX: 32 and 64 bit each.
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:
- Set the registry
" {_MI_REG_METASL_BACKEND}" value to
"LLVM" or "llvm".
- Make sure that the file gen_llvm.so / .dll is present in the path
list where mental ray searches for shaders. This paths are specified
by the
-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.
- OEM integration libraries now contain a functional version of
iray on 32 and 64 bit Windows and Linux, as well as on
32-bit MacOSX. The 64-bit version of MacOSX is planned.
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:
- Added new function
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.
- For the rasterizer, allow per-framebuffer control over the compositing.
The new per-framebuffer modifier
"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).
- For MetaSL shaders, added support for
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.
- For the
imf_disp tool, added "always on top"
functionality.
- For the
imf_disp tool, added mouse wheel scrolling of the
window.
- For the
imf_disp tool, and DISP talk protocol, added the
ability to specify region of interest in the progressive rendering
mode.
- For the
imf_disp tool, display currently rendered
rectangle.
- For the
imf_disp tool used for stereoscopic images, allow
to select one of the possible ways to display stereo images
(View menu item):
- Color Anaglyph (default)
- Grey Anaglyph
- Half Color Anaglyph
- Left Only
- Right Only
- For Irradiance Particles, allow to specify number of secondary rays
with additional parameters to the
-ip_rays command line
option. Before it was only possible with a .mi file string option.
- Missing
const qualifiers are added to the public API.
- Improved runtime performance for MetaSL shaders.
Bug fixes:
- Fixed possible wrong illumination if IBL was used in a combination with
other light sources.
- Fixed possible artifacts in motion blur scenes rendered with BSP2
acceleration.
- Fixed missing visible lights in scenes with no geometry.
- For applications integrating raylib, fixed a possible deadlock if a GUI
element with the same name is re-defined without deleting the old
one.
- Fixed possible crash in rendering of multiple frames with incremental
camera changes which switch stereoscopic rendering on/off.
- Put some memory blocks allocated with global
new/new[] operators under mental ray memory
management/statistics system.
- For integrated version of mental ray, fix the table of exported symbols
needed for the integration.
- For the
imf_disp tool, link EXPAT library statically. The
dynamic library is missing on some older Linux system.
- For the
imf_disp tool, fixed several image displaying
issues.
- For MetaSL shaders, fixed a series of bugs related to type conversions
and multiple output.
- For MetaSL shaders, fixed inefficiently in the coordinate system
transformations.
Changes in version 3.8.0.7
Known limitations in this version:
- Type system and parts of the MetaSL compiler SDK and runtime system
(including headers) have been refactored. Work in progress. In
particular, CIL backend currently fails to compile many shaders.
- Performance of MetaSL shaders using array parameters is very poor.
Feature improvements:
- Added a support for number of area light samples, which is not an exact
power of 2. Prior to this version, mental ray would increase the number
of sample for area lights. In the current implementation, the exact
number of samples to be taken is respected up to the u * v = 64. In order
to keep old behavior, the number of samples per light in the scene could
be adjusted to be an exact power of 2.
- Added echo for the
.msl / .xmsl file include
statements.
- Missing
const qualifiers are added to the public API.
Bug fixes:
- For IBL, fixed possible shadow artifacts. The shadow rays are shot from
the lights towards telemetry, like this is done for usual lights. This
increases compatibility of IBL with existing shadow shaders.
- On 64-bit Linux machines, fixed possible memory corruption crash. The
crash has been in particular been observed during rendering of large
scenes with
scanline on.
- Fixed possible crash in raylib integration. If an application was low
on memory and a new thread has been registered with raylib, the
application memory handle callback could be called in order to inform
application that some memory should be freed if possible. At the moment
of the call, the thread is not registered into raylib yet and thus no
calls to mental ray functions should be done. In order to prevent
possible crash, added a check to
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.
- For the SPM-protected mental ray executables and libraries, fixed
possible failure to obtain the necessary number of licenses in
core-restricted environments (such as virtual machines) and some machines
with Intel i7 CPUs.
- On Windows platforms, one of the modules has been compiled with
platform STL headers, which caused symbol conflicts for an integrated
version of mental ray library. Fixed. The complete mental ray now is
compiled with STLPORT put into the namespace
MISTD. In
particular, it does not have a dependency on the _SECURE_SCL
define value.
- Fixed possible creases during parallel compilation of several MetaSL
shaders.
Changes in version 3.8.0.12
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:
- Added support for the combination of stereoscopic rendering in
combination with progressive rendering.
- For the rasterizer, changed the default value of the
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.
- Improved performance for progressive rendering and iray used with DISP
callbacks and protocols.
- For the MetaSL LLVM backend, added support for the explicit shader
calls from MetaSL shaders.
Bug fixes:
- For iray, fixed possible crash for scenes using
textures.
Changes in version 3.8.0.11
Feature improvements:
- iray functionality has been encapsulated into a
plugin. This removes the symbol dependencies on the CUDA runtime from OEM
raylib libraries. The plugin is name is
"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).
- On 64-bit MacOSX platform, provide CPU fallback functionality for
iray.
- Provide MIPMAP pyramids for effective filtered texture lookup on
demand. Like in the earlier version, mental ray will create MIPMAP
pyramids for textures declared filtered at the load/memory map/cache
insertion time. If a texture is not declared filtered,
the pyramids are created on demand when
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.
- For MetaSL compiler and C++ backend, added support for user data.
- For MetaSL LLVM backend, added support for a plurality of features,
including mental ray - MetaSL parameter conversions and compilation of
light shaders.
Bug fixes:
- Fixed a regression: shader cache did not update changed metasl
code.
- Fixed a regression: in network rendering, the link statements for
compiled C/C++ (.so/.dll files) shaders (.so/.dll files) were not
propagated from the master host to the slaves.
- For MetaSL integration, fixed possible wrong default parameter values
in the XMSL phenomena emulation mode (registry
{_MI_REG_METASL_EMULATE_MI_PHEN} set on).
- Fixed possible false error message on camera stereo mode.
- The function
void mi_msg_usleep(int secs); is restored in
the integration interface.
Shader changes:
- Improved architectural shader applied to the glass and similar
materials. If after several bounces inside of a glass the trace depth
limit has been reached, the black or environment color has been returned.
In bright environments this lead to visible "light leak" artifacts. The
shader behavior is changed to trace a transparent ray instead of picking
environment or black color. It is a better approximation to the true
result of several additional reflection/refraction light bounces. For
compatibility reasons, the old behavior still could be achieved by
setting the per-shader trace depth limit to the value "-1".
Changes in version 3.8.0.10
Feature improvements:
- For the BSP2 acceleration and the special case of the shutter interval
[0,0] with motion blur option enabled, use
static acceleration structure in order to improve
performance and reduce memory consumption.
- For the MetaSL C++ backend, added support for displacement shaders.
- On Windows platforms, removed run-time overhead related to the
discontinued MetaSL CIL backend. mental ray kernel no longer relies on
the .Net installation.
Bug fixes:
- On Windows platforms, fixed a crash when MetaSL compiler LLVM backend
was initialized. The functionality of LLVM is still limited, only simple
shaders can be compiled in this version.
- Fixed possible deadlock or assertion in the debug mental ray version.
The issue has been observed if a MetaSL shader has been deleted, or if
the IBL feature was used.
- Expose
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.
- For IBL rendering, fixed switching IBL modes between frames.
- Fixed a crash in multihosted rendering if finalgather was used.
- For MetaSL shaders, fixed possible crash in filtered texture
lookup.
- For MetaSL shaders compiled with C++ backend, fixed possible improper
handling of vector parameters.
Changes in version 3.8.0.9
Feature improvements:
- For iray integrated for into OEM libraries, the fallback into the CPU
solution has been implemented for Windows and 32-bit Macosx in addition
to Linux.
- For MetaSL shaders and C++ backend, added support for volume
shaders.
Bug fixes:
- Fixed a crash if an attempt to compile MetaSL shader with non-existing
compiler backend was done.
- Fixed possible crash if mental ray 3.5 compatibility framebuffer syntax
was used (regression in version 3.8.0.8).
- For
imf_disp tool, removed possible display
flickering.
Changes in version 3.8.0.8
New features:
- MetaSL LLVM backend. A new backend for MetaSL shaders is provided. This
backend replaces CIL backend on Windows platforms (superior performance
and uniformity of the solution on all platforms). The backend is
supported on Windows, Linux and MacosX: 32 and 64 bit each.
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:
- Set the registry
" {_MI_REG_METASL_BACKEND}" value to
"LLVM" or "llvm".
- Make sure that the file gen_llvm.so / .dll is present in the path
list where mental ray searches for shaders. This paths are specified
by the
-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.
- OEM integration libraries now contain a functional version of
iray on 32 and 64 bit Windows and Linux, as well as on
32-bit Macosx. The 64-bit version of Macosx is planned.
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:
- Added new function
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.
- For the rasterizer, allow per-framebuffer control over the compositing.
The new per-framebuffer modifier
"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).
- For MetaSL shaders, added support for
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.
- For the
imf_disp tool, added "always on top"
functionality.
- For the
imf_disp tool, added mouse wheel scrolling of the
window.
- For the
imf_disp tool, and DISP talk protocol, added the
ability to specify region of interest in the progressive rendering
mode.
- For the
imf_disp tool, display currently rendered
rectangle.
- For the
imf_disp tool used for stereoscopic images, allow
to select one of the possible ways to display stereo images
(View menu item):
- Color Anaglyph (default)
- Grey Anaglyph
- Half Color Anaglyph
- Left Only
- Right Only
- For Irradiance Particles, allow to specify number of secondary rays
with additional parameters to the
-ip_rays command line
option. Before it was only possible with a .mi file string option.
- Missing
const qualifiers are added to the public API.
- Improved runtime performance for MetaSL shaders.
Bug fixes:
- Fixed possible wrong illumination if IBL was used in a combination with
other light sources.
- Fixed possible artifacts in motion blur scenes rendered with BSP2
acceleration.
- Fixed missing visible lights in scenes with no geometry.
- For applications integrating raylib, fixed a possible deadlock if a GUI
element with the same name is re-defined without deleting the old
one.
- Fixed possible crash in rendering of multiple frames with incremental
camera changes which switch stereoscopic rendering on/off.
- Put some memory blocks allocated with global
new/new[] operators under mental ray memory
management/statistics system.
- For integrated version of mental ray, fix the table of exported symbols
needed for the integration.
- For the
imf_disp tool, link EXPAT library statically. The
dynamic library is missing on some older Linux system.
- For the
imf_disp tool, fixed several image displaying
issues.
- For MetaSL shaders, fixed a series of bugs related to type conversions
and multiple output.
- For MetaSL shaders, fixed inefficiently in the coordinate system
transformations.
Changes in version 3.8.0.7
Known limitations in this version:
- Type system and parts of the MetaSL compiler SDK and runtime system
(including headers) have been refactored. Work in progress. In
particular, CIL backend currently fails to compile many shaders.
- Performance of MetaSL shaders using array parameters is very poor.
Feature improvements:
- Added a support for number of area light samples, which is not an exact
power of 2. Prior to this version, mental ray would increase the number
of sample for area lights. In the current implementation, the exact
number of samples to be taken is respected up to the u * v = 64. In order
to keep old behavior, the number of samples per light in the scene could
be adjusted to be an exact power of 2.
- Added echo for the
.msl / .xmsl file include
statements.
- Missing
const qualifiers are added to the public API.
Bug fixes:
- For IBL, fixed possible shadow artifacts. The shadow rays are shot from
the lights towards telemetry, like this is done for usual lights. This
increases compatibility of IBL with existing shadow shaders.
- On 64-bit Linux machines, fixed possible memory corruption crash. The
crash has been in particular been observed during rendering of large
scenes with
scanline on.
- Fixed possible crash in raylib integration. If an application was low
on memory and a new thread has been registered with raylib, the
application memory handle callback could be called in order to inform
application that some memory should be freed if possible. At the moment
of the call, the thread is not registered into raylib yet and thus no
calls to mental ray functions should be done. In order to prevent
possible crash, added a check to
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.
- For the SPM-protected mental ray executables and libraries, fixed
possible failure to obtain the necessary number of licenses in
core-restricted environments (such as virtual machines) and some machines
with Intel i7 CPUs.
- On Windows platforms, one of the modules has been compiled with
platform STL headers, which caused symbol conflicts for an integrated
version of mental ray library. Fixed. The complete mental ray now is
compiled with STLPORT put into the namespace
MISTD. In
particular, it does not have a dependency on the _SECURE_SCL
define value.
- Fixed possible creases during parallel compilation of several MetaSL
shaders.
Changes in version 3.8.0.6
Feature improvements:
- For the integrations of raylib progressive rendering: the
mi_rc_progressive_set_buffer() function get an additional
bool argument with the default value false. If
the new parameter 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.
- Reduced memory occupied by BSP2 acceleration for motion blur
scenes.
- The files generated for the debugging purposes if the registry
"
{_MI_REG_METASL_TRACE}" is set are put into the temporary
files directory instead of current directory.
Bug fixes:
- Fixed possible crash in raylib integration. If an application was low
on memory and a new thread has been registered with raylib, the
application memory handle callback could be called in order to inform
application that some memory should be freed if possible. At the moment
of the call, the thread is not registered into raylib yet and thus no
calls to mental ray functions should be done. In order to prevent
possible crash, added a check to
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.
- If a shader declaration was deleted, the DLL library containing the
code for the corresponding shader implementation has been unlinked. Limit
unlinking of the DLLs to the case of MetaSL shaders compiled by mental
ray.
- Put some memory blocks allocated with global
new/new[] operators under mental ray memory
management/statistics system.
- Fixed possible crash in erroneous scenes with undefined material
inherited as a component of material array in a scene DAG.
Changes in version 3.8.0.4
Bug fixes:
- For the rasterizer, fixed possible artifacts for unsplitted quads
crossing the clipping plane. The fix is complimentary to the fix in
version 3.8.0.3.
Changes in version 3.8.0.3
Feature improvements:
- Experimental. Added an experimental extension to the
DISP talk protocol and imf_disp tool.
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.
- Added
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.
- For scenes with motion blur, improved BSP2 construction time for
objects having single motion segment.
- For MetaSL C++ backend, improves support for constructors and
destructors.
Bug fixes:
- For integrations of raylib containing iray, fixed possible symbol
conflicts.
- For integration of raylib in a form of static library, fixed possible
missing debug information due to several pairs of code object files with
the same names. Relevant for Windows platforms only.
- For the progressive rendering displayed with the imf_disp tool, fixed
stopping of the rendering. During the progressive rendering, the "stop"
(red square) button of the playback button group can be used to signal
mental ray to stop the rendering.
- For
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.
- Fixed possible ray hit misses for BSP2 acceleration used for photons
(globillum and caustics).
- Fixed a regression: registry substitution has not been applied when the
type of linked library files has been determined, causing disfunction of
.mi statements like link "base.{EXT}".
- For the rasterizer, fixed possible artifacts for quads crossing
clipping plane.
Changes in version 3.8.0.2
Feature improvements:
- For MetaSL shaders, implemented IOR in/out stack functionality.
Bug fixes:
- Restored stop command and stop button functionality in imf_disp 2.0 for
the progressive rendering mode.
- Fixed missing indirect illumination of finalgathering was used in
combination with importons for scenes containing materials using
BSDFs.
- Fixed a crash if finalgathering was used in combination with importons,
and the importon map was empty.
- For MetaSL shaders used with C++ backend, fixed passing parameters over
the
trace calls.
- For MetaSL shaders used with C++ backend, generate correct code for the
conversion of shader type parameters to boolean.
Changes in version 3.8.0.1 (incomplete list).
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:
- Stereoscopic rendering. mental ray 3.8 provides a
workflow to render two images (for the left and for the right eyes)
simultaneously. Two rendered images are stored in two separate
framebuffers sets and saved as pair(s) of image files. The names of the
files are prefixed with
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.
eye_separation is the distance between two eyes in
camera space.
It is possible to specify stereoscopic rendering parameters wit the
command line option
-stereo <method> <eye_separation>
The integration/shader API has been extended with
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.
- New
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 <str>] [/c <str>] [/e <str>] [/g <str>] [/t] [/s]
[--frame <num>] [--frame-rate <num>] [--live-update <str>]
[--cache-all-layers <str>] [--view-controls <str>] [--playback-controls <str>]
[--on-image-load <str>] [--disable-gl] [/h] [image files...]
-l, --layer=<layername> layer to display
-c, --channel=<c/r/g/b/a> channel to display
-e, --exposure=<exp> set exposure
-g, --gamma=<gamma> set gamma
-t, --tone-map enable tone mapping
-s, --stereo-display enable stereo display
--frame=<frame_number> frame to display
--frame-rate=<fps> set frame rate (FPS)
--live-update monitor file for changes
--cache-all-layers=<on/off> retrieve and cache all layers
--view-controls=<on/off> toggle displaying the view toolbar
--playback-controls=<on/off> toggle displaying playback toolbar
--on-image-load=<gui_behavior> set GUI behavior on image load
--disable-gl disable GL-based display
Feature improvements:
- BSP2 ray tracing acceleration is made the default one.
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.
- Hair rendering improvements.
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 rendering, in particular the progressive
rendering API, has been improved. For convenience, the summary of the
options and API is given below. The complete list of options of relevant
string options is given below:
"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:
- Set the display buffer and start rendering.
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.
- Update the display. The application can ask mental
ray core at any time if more samples have been computed to be
displayed. The recommended workflow is to query the number of
computed frames via
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().
- Camera interaction. User-driven navigation can be
implemented by calling
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);
- Stop or cancel a running rendering. The rendering
can be stopped or canceled at any time. Stopping mental ray kernel
will complete the current frame. This can be used to allow user
interaction based termination of rendering. Canceling the rendering
will stop sampling immediately, not finishing the current frame, and,
thus, allows to end rendering as fast as possible.
extern "C" void mi_rc_progressive_stop_rendering();
extern "C" void mi_rc_progressive_cancel_rendering();
- Shutting down the interactive mode. If the
rendering has finished (e.g. of the error threshold has been
fulfilled, the maximum samples were done, or the rendering was
canceled), the mental ray kernel waits for a shutdown to complete.
After shutting down the interactive mode, none of the API functions
are allowed to be called. Interactive rendering can be restarted by
calling
mi_rc_run() and
mi_rc_progressive_set_buffer().
extern "C" void mi_rc_progressive_shutdown();
- Tonemapping. At any time during rendering it is
possible to enable or change tonemapping which can be used for
applying gamma correction or adjusting the brightness on the fly.
Tonemapping is implemented by registering a function which mental ray
kernel will call per pixel. The tonemapping used for interactive
display purpose only. The framebuffer contains the values without
tonemapping. When the final image is written to disk, the desired
tonemapping can be implemented by using an output shaders.
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]));
- Image based lighting (IBL) performance has been
improved. IBL compatibility with MetaSL shaders has been improved.
- Finalgather combination with Irradiance particles and
with Importons have been enabled. If finalgather is used in combination
with Irradiance Particles, the second and higher diffuse bounces are
computed with help of irradiance particles. If finalgather is used in
combination with importons, importon distribution is used to drive the
distribution of finalgather rays. Especially for scenes with HDR (high
dynamic range) lighting, this may result in a faster convergency/better
images with the same computational efforts.
- DISP protocol has been extended in order to support stereoscopic
images.
- MetaSL 1.1 support. mental ray 3.8 will provide
extended support for MetaSL shaders with the updated language
specification. The stability, performance and functionality coverage are
significantly improved.
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.
- Shader cache. mental ray provides a mechanism to avoid
recompilation of MetaSL shaders with CIL/.Net (Windows) and C++ backend.
Same mechanism applies to the C++ shaders provided as source.
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.
- mental ray 3.8 adds the ability to remove MetaSL
shaders from the scene database, and to change
and re-define them. This allows the workflow when the
MetaSL shader source code is edited interactively. In mental ray 3.7+ it
was necessary to assign a new name for such shaders.
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.
Changes in version 3.7.55.26.
Bug fixes:
- Fixed a fatal if virtual or cached framebuffers were used, and the
temporary directory is not writable. mental ray will print a warning and
fall into in-memory framebuffers instead.
- Fixed improper handling of color profiles applied to user
framebuffers.
- In finalgather map lookup, added a tests for shaders incorrectly
flipping normal without setting
miState::inv_normal
properly. Fixes possible black indirect illumination rendering for some
double-sided materials.
Changes in version 3.7.55.25.
Feature improvements:
- To allow application-driven configuration of the external compiler
tools used to compile MetaSL shaders with C++ backend, added the
following registries:
{_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.
mental ray standalone command line option take precedence over the
registry values.
Bug fixes:
- Fixed possible crash in
ccmesh object tessellation.
Changes in version 3.7.55.24.
Feature improvements:
- On Linux/MacOS platforms, do not spawn threads for external
compiler/linker invocation if the registry
{_MI_REG_DEBUG_INVOKE} is set. The change is complimentary
to the environment variable added in 3.7.55.21.
Bug fixes:
- For MetaSL shaders compiled with C++ backend, fixed possible crash if
an array parameter in .msl file had an initializer.
- For MetaSL compiler, issue a meaningful error message is a
non-implemented function
get_ray_data or
clear_ray_data is used.
Changes in version 3.7.55.21.
Feature improvements:
- Improved error reporting for mental ray standalone invoked with -mslc
version for MetaSL compilation.
- On Linux/MacOS platforms, do not spawn threads for external
compiler/linker invocation if the environment variable
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:
- For MetaSL CIL backend, fixed possible crash for shaders using array
input parameters.
Shader changes:
- For architectural material shader, fixed possible artifacts if the
"thin wall" feature is been used in combination with finalgather.
- For architectural material shader, fixed possible black noise artifacts
in the alpha channel when trace depth is exceeded.
Changes in version 3.7.55.19.
Feature improvements:
- For mental ray standalone, changed the command line option
-progress_frequency <num> to accept float
number for the percentage progressive message frequency. Previous
versions required an integer.
Bug fixes:
- For raylib integration, fixed possible crash in attaching application
thread to raylib (call to
mi_msg_register_thread() function)
while mental ray is low on memory.
- Fixed a crash if progressive rendering is used in combination with
contours: disabled contour rendering. These two features are
algorithmically incompatible.
- For MetaSL CIL backend, fixed non-functional
Light_iterator_options::set_shadows and
Light_iterator_options::set_cone methods.
- For MetaSL CIL backend, fixed possible invalid code generated for light
samplers. Fixed possible memory corruption related to light samplers.
Shader changes:
- For the architectural material round corner shader, use both (front and
back) faces of the object to detect object corners instead of the face
specified by global options, object or instance. For one-faces objects,
some corners were not detected.
- For the production
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.
Changes in version 3.7.55.16.
Bug fixes:
- For finalgather precomputation, the face flag for the eye ray has been
mistakenly initialized from the options block in a way, so that kernel
considered it as set by shader and gave it higher priority than the
object / instance flags, which thus have been ignored.
- For MetaSL shaders, fixed
Light_iterator::set_shadows(false) option. The option is
only active if the light shader is a MetaSL one.
- For MetaSL CIL backend, fixed compilation of coping of Trace_options,
Occlusion_options, and Irradiance_options.
Shader changes:
- Fixed a crash in the architectural portal light shader if the light
instance for the shader call has not been set.
Changes in version 3.7.55.14.
Feature improvements:
- Support triangle vertex access for displacement shaders called on
subdivision surfaces. When called from a displacement shader applied to a
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.
Changes in version 3.7.55.13.
Feature improvements:
- For the DEBUG version of mental ray on Linux and
Macosx, do not use
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.
- For mental ray standalone invoked as MetaSL compiler with -mslc option,
the process will return non-zero on a compilation failure.
- For C++ code generated with mental ray MetaSL compiler, set the MI_RAY
define. This removes the requirement to add the define on the C++ command
line for shaders compiled manually.
Bug fixes:
- For MetaSL compiler, fixed an issue of not passing member variables to
the
main() methods of shaders generated from phenomena. Also
fixed possible loosing of array specifiers for such variables.
- For MetaSL compiler, fixed possible crash on compiling illegal MetaSL
source code, such as
get_trace_depth() without
parameters.
- For MetaSL CIL backend, fixed possible illegal managed code due to a
too low stack limit.
- For MetaSL shaders, fixes possible crash on loading shaders using
parameters of
Shader type.
Changes in version 3.7.55.12.
Bug fixes:
- For possible crash or database fatal for scenes which do not fit into
memory completely. A reference to subobject could stay in the kernel
after the complete object with subobjects was flushed for the second
time.
- For MetaSL compiler, added missing support for deprecated functions
like
trace_immediate.
- For MetaSL compiler, assure that shaders using
call
function will not beak C++ compilation, even though the calls will not be
functional.
- For MetaSL shaders, fixed texture wrong coordinate space used for
texture tangents.
Changes in version 3.7.55.10.
Bug fixes:
- For MetaSL shaders, fixed wrong ray origin setup used for occlusion
rays.
- For MetaSL XSML phenomena emulated in mental ray (precompiled MetaSL
shaders mode), fixed possible wrong translation for phenomena which are
not trees (example: an output of shader A is used as input for shaders B
and C, and an output of shader B is used in shader C). The symptoms of
the issue: API error messages on unknown shaders and broken shading due
to the partial phenomena created.
- For MetaSL XSML phenomena emulated in mental ray (precompiled MetaSL
shaders mode), allow phenomena with color + transparency roots.
Shader changes:
- For architectural material shader, fixed a performance regression in
case of multibounce finalgathering used in combination with "fake glossy
reflection" feature of the shader.
Changes in version 3.7.55.8.
Feature improvements:
- For progressive rendering, added color profiles support for interactive
image output. Optimized pipeline for color profile image tile conversion.
In the case of progressive rendering, apply fast but slightly less
accurate conversion routines. Speedup general image conversion routine by
avoiding unnecessary function calls and memory allocations.
Bug fixes:
- Fixes possible hangs and z-clipping artifacts in rendering of scenes
with motion blur with rasterizer. The precision of the z-clipping
computation is increased.
- For BSP2 acceleration used with
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.
- For MetaSL compiler, fixed a regression in version 3.7.55.4. For
precompiled shaders, state variable modifications were ignored in some
cases. In particular, bump mapping was missing in some of phenomenon.
- For MetaSL compiler, fixed mental ray crash if an illegal code
with input/output parameters of builtin types like
Irradiance_options, which are not intended for passing
between shaders. An error message is added.
- For MetaSL compiler, fixed default constructor expression
Type
t(); and Type t = Type(); for "non-fundamental"
builtin types Irradiance_options,
Light_iterator_options, Sample_iterator etc.
- For MetaSL compiler, fixed possible crash in the compiler for shaders
with multiple s of type parameters of type
Texture*.
- For MetaSL CIL backend, set FLOAT/DOUBLE/HALF_MIN/MAX defines to the
platform specific values.
Changes in version 3.7.55.7.
Bug fixes:
- For MetaSL C++ backend, set FLOAT/DOUBLE/HALF_MIN/MAX defines to the
platform specific values.
- For MetaSL shaders with int2/int3/int4 and bool2/bool3/bool4 input
parameters, fixed wrong initialization from .mi vector/color types.
- For MetaSL compiler, fixed broken xmls phenomena connecting inputs to
outputs directly.
- Fixed possible MetaSL compiler crash if an (illegal) MetaSL shader in
the graph misses main method.
Changes in version 3.7.55.6.
Bug fixes:
- For multiple bounce finalgathering, fixed wrong depth count for
secondary finalgather rays. Refraction limit has been applied instead of
reflections.
- For multiple bounce finalgathering, fixed wrong default
importance setting applied to the 3rd and higher diffuse bounces. This
resulted in a higher number of rays used, shifting the scene rendering
towards higher quality on the same settings.
- For MetaSL C++ backend, fixed possible illegal code generated for the
sincos function calls.
Changes in version 3.7.55.5.
Bug fixes:
- For progressive rendering used with SPM-protected mental ray
executables, fixed defect threshold-error-driven adaptivity.
Changes in version 3.7.55.4.
mental ray manual has been updated for this version.
Feature improvements:
- The new library,
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.
- For progressive rendering, adjusted the set of exposed string options
and command line commands:
-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.
- On Linux and Macosx, when an external compiler or linker 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. For Windows
platforms, same functionality has been added earlier in version
3.7.52.14.
Bug fixes:
- Path substitution rules have not been applied to the file names of
framebuffers. One of the effects of this bug was that the small stub file
for
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.
- On Windows, fixed initialization of the noise table with changing
values for several mental ray invocations.
- On 32-bit MacOSX platform, for SPM-protected executable, fixed possible
crash in the beginning of the second frame rendering.
- Fixed echo of the scenes with IBL.
- For multihosted rendering, fixed possible crash at the end of the frame
for scenes using assemblies. Some scenes with BSP2 acceleration may be
affected as well.
- Fixed potential rare crash if mental ray was low on memory and flushed
parts of the scene.
- For integrated version of mental ray, fixed possible rendered tile
tag/memory leak in case of aborting rendering.
- For MetaSL shaders, forocclusionrays, fixed initialization of
returned hit data like distance to the hit point.
- For MetaSL shaders, fixed possible unknown tag fatal if an undeclared
texture was used as a MetaSL shader parameter (usually passed as default
value).
- For MetaSL C++ backend, fixed incorrect code generated for user-defined
functions having the names conflicting with standard C++ ones.
- For MetaSL CIL backend, fixed incorrect code generated for the
for loops containing declarations in initializers and for
assignments elements of arrays of structures.
- For MetaSL compiler, respect platform-specific values for the value
interval defines like FLOAT_MIN/MAX, INT_MIN/MAX etc.
- For MetaSL compiler, fixed possible crash at loading of phenomena
containing BSDFs.
Shader changes:
- For architectural material shader, bump vector with zero first 2
component but not-zero 3rd component has not been applied, fixed.
Changes in version 3.7.55.3.
Bug fixes:
- Fixed a major memory leak regression in case of 8bit rendered images in
combination with virtual framebuffers (
-fb_virtual on) and
interactive display (imf_disp) attached.
- For ray-traced hair with motion blur, fixed possible rendering
artifacts due to too small bounding boxes used.
- For MetaSL shaders, added missing support for the
light_type member of the light state.
- For MetaSL compiler, fixed generation of the code for matrix
operator*= operators.
- For MetaSL compiler, fixed compilation of
Type t(); and
Type t=Type(); constructor expressions.
- For MetaSL C++ backend, fixed possible illegal code generated for right
hand side swizzles.
- For MetaSL CIL backend fixed compilation of shaders with
int2, int3, bool2 and
bool3 parameters.
Shader changes:
- Fixed missing output passes in the
"mi_car_paint_phen_x"
phenomenon.
Changes in version 3.7.55.2
Bug fixes:
- For hair rendering, fixed possible artifacts due to the hair radius not
taken into account when bounding boxes were computed.
- Fixed rendering artifacts for objects with number of motion segments
higher than the global motion steps options.
- For ambient occlusion, fixed possible artifacts and assertion in the
debug version if a negative number of AO rays was requested or if a
negative importance factor has been used.
- For multihosted rendering used in heterogenous network, fixed possible
crashes when rendering scenes with finalgathering. The crash was due to
binary incompatibility of the network protocol for 32 and 64-bit
machines.
- For multihosted rendering, fixed possible rare crash due to
inappropriate pincounting.
- Fixed possible crash at shutdown if cached framebuffers (command line
-fb_virtual cache) were used.
- For mental ray used with cached framebuffers (command line
-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.
- Fixed a regression in MetaSL compiler causing a crash during the
internal generation of shader declaration.
- For MetaSL compiler, fixed the order of handling for include files and
user types declared in such files.
- For MetaSL shaders, fixed compilation of a shaders returning structs
containing substructs.
- For MetaSL CIL backend, fixed compilation of some matrix constructors
and 4-vectors constructed from a couple of 2-vectors.
Shader changes:
- For base and subsurface scattering lightmap shaders, significantly
reduced memory consumption for scenes with large triangles covering high
number of pixels in the lightmap mesh rendering.
Changes in version 3.7.55.1
Feature improvements:
- For the scene echo, if the value of an
miBoolean is
neither miTRUE nor miFALSE, echo it as an
integer.
Changes in version 3.7.55.0
Feature improvements:
- Improved reaction time on rendering aborts, especially those during
finalgather precomputation stage displayed interactively. mental ray
kernel copies rendered tiles to the framebuffer asynchronously. The
outstanding tiles are no longer copied after abort signal.
- For progressive rendering, intercept invalid subsample size values
below 1.
- For MetaSL shaders, added support for light loops
light_dot_nl, light_uv, light_area
and light_area_delta state variables.
- For MetaSL shaders, initialize
light_distance_limit with
huge scalar.
- For MetaSL shaders, renamed some runtime header files.
- For MetaSL shader runtime, improve robustness of the tangent space
computation.
Bug fixes:
- For scenes with assemblies, fixed possible freeze and memory leak on
assembly deletion at the end of the frame rendering.
- For MetaSL shader integration, fixed possible memory corruption for
shaders and phenomena using textures and other parameters identified by
name.
- For MetaSL C++ backend, properly initialize array fields of structs in
the structs default constructor. This fixes a runtime crash if such
constructors were used.
- For MetaSL C++ backend, fixed illegal code generation: generate
user-defined types before functions defined in #include files.
Changes in version 3.7.52.15
Bug fixes:
- Fixed conversion of scalar half-float textures.
- Added missing support for half-floats for pass files.
Changes in version 3.7.52.14
Feature improvements:
- On Windows platforms, avoid popup windows for integrated version of
mental ray library when external commands for shader compilation are
invoked. Affected are MetaSL shaders with CIL and C++ backend, as well as
shaders provided in form of C/C++ source code, as .obj object file and as
.lib static libraries.
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:
Shader changes:
- For MetaSL noise generation shaders, replaced currently not supported
swizzles in the parameter initializers with equivalent code without
swizzles.
Changes in version 3.7.52.13
New features:
Feature improvements:
- In mental ray options/camera info banner printed before rendering, use
semantics / name of the framebuffer instead of the framebuffer index.
- Improved performance of the DISP module in case
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.
- For MetaSL C++ backend, implemented support for texture resources
specified as default MetaSL shader input parameter values.
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).
- Output messages from MetaSL compiler are now given according to
compiler submodules, not "LIB" as in the previous versions.
- For MetaSL C++ backend, generate framebuffer access code only when
required. This removes frequent C++ compiler warning on unused
fb_index variable.
Bug fixes:
- For mental ray 3.5 framebuffer compatibility interface, fixed wrong
handling of user framebuffers 6 and 7.
- For the second "talk" version of the DISP interactive display protocol,
fixed wrong image pixel depth. For the primary color buffer, the actual
pixel type used in the framebuffer is announced and sent through the
protocol.
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.
- For progressive rendering, fixed possible crash if rendering in a low
image resolution.
- For progressive rendering, fixed a crash if output shaders were
used.
- For standalone mental ray, fixed a crash if more than one
-texture_path options was used on the command line.
- For recently added internal support for
half type, added
missing clipping in mi_img_clip_color function.
- For MetaSL compiler, fixed a crash if both input parameter initializer
and annotations were present.
- For MetaSL compiler, added missing constructors for Trace_options.
- For MetaSL compiler, fixed possible crash in nested switch
operator.
- For MetaSL compiler and backends, added missing
is_nan and
is_finite functions.
- For MetaSL compiler, fixed conversions between
float3,
float4, Color and Spectrum
types.
- For MetaSL C++ backend, fixed possible broken generation of the code
for texture space access.
- For MetaSL CIL backend, fixed compilation failures for shaders using
ray types and light types.
- For MetaSL CIL backend, fixed compilation of shaders using
clamp function.
- For MetaSL CIL backend, fixed compilation of shaders using
any and all functions.
- For MetaSL CIL backend, fixed compilation of shaders using
abs function on integers and integer vectors.
- For MetaSL CIL backend, fixed string comparison operators.
- For MetaSL CIL backend, added support for member constructors and
destructors.
- For MetaSL CIL backend, fixed a regression for shaders using ray
types.
- For MetaSL shaders runtime, avoid asserts in creating local orthonormal
basis
- For MetaSL shaders runtime, request to unsupported value of type
float2 returned uninitialized value, added initialization
with zeroes.
Shader changes:
- Fixed MetaSL shader source code for shaders using reserved
keywords.
Known MetaSL limitations in this version:
- The following parts of MetaSL 1.0 specification are not supported by
mental ray 3.7+, and not planned to:
- Material Phenomena
- Techniques
- 3D and Cube textures
- MetaSL Spectrum is mapped onto mental ray color type
- Particle maps are not supported
- Some limitations on array and struct input/outputs apply. In
particular, output array parameters are not supported.
- Native functions
- Explicit shader invocation
- Derivatives and ray differentials
- mental ray shader parameter type is a subset of MetaSL type system. A
parameter type conversion mechanisms is applied which may result in
precision loss.
- Textures for default texture parameters need to be declared explicitly
before MetaSL shaders.
- MetaSL CIL backend has worse performance compared to C++ backend. C++
backend is the recommended solution.
- The following issues are known in this versions but planned to be fixed
in the mental ray 3.7+ final release:
- For input parameters of MetaSL shaders, initializers using swizzles
are not supported.
- Texture blur is not supported.
- Some of the light state members are not supported.
- CIL backend is less complete than C++ backend. For CIL backend,
default input texture parameters are ignored. Some of initializers
are not working properly.
- Switch between (precompiled) C++ shader backend and CIL backend is
global, not per shader.
Changes in version 3.7.52.12
Feature improvements:
- Implemented detection if a shader parameter has been assigned a value.
This mechanism is required in order to allow MetaSL shader input
parameter constructors which are not constant values. The order of
default values is:
- .mi file or mental ray API value of a shader
function.
- Default value of the input parameter in the MetaSL code.
- Default value of the input parameter in .mi file or mental ray API
shader declaration.
- Zero value / black.
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.
- Implemented support for "half" (16-bit floats). Prior versions of
mental ray supported 16-bit-float OpenEXR textures, but the internal
representation used 32-bits. Native 16 bit representations saves almost
50% of memory occupied by textures.
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.
- For MetaSL C++ backend, implemented support for non-constant input
parameter initializers in MetaSL shaders.
- Reduced memory consumption of the MetaSL CIL backend code generator and
improved its performance.
Bug fixes:
- If compatibility framebuffer interface was used, user framebuffers 6
and 7 have not been written out correctly, fixed.
- For MetaSL compiler, add a warning for older MetaSL phenomena assigning
values to output parameters in XMSL files. These values are ignored.
- For MetaSL compiler, changes the names of texture samplers according to
the MetaSL specification.
- For MetaSL compiler, added missing implicit type conversion handling
for the conditional
"? :" expressions.
- For MetaSL compiler, fixed a regression in compilation of
abs, acos and some other builtin functions.
- For MetaSL compiler, fixed comparisons operators for textures and
sampler.
- For MetaSL compiler, avoid assigning values directly to the xmsl
phenomena output parameters.
- For MetaSL compiler, fixed
operator %=.
- For MetaSL compiler, fixed
vector *= matrix and
matrix *= vector operators.
- For MetaSL compiler C++ backend, fixed possible crash when arrays of
length zero were used.
Shader changes:
- For the
mip_render_subset, fixed possible artifacts if
rendering of placeholder objects in combination with coverage framebuffer
filtering was used.
- For the production
mip_motionblur shader, fixed possible
black stripe artifacts.
- For the paint shaders, the
mi_metallic_paint_output_mixer
was not linked into the library, fixed.
- For the architectural material shader, fixed possible NaN artifacts
originating from dot normal precision.
Changes in version 3.7.52.10
Feature improvements:
- Extended the second "talk" version of the DISP interactive display
protocol with the "fb_list_name" command. It lists currently active
framebuffers, one line per buffer:
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:
- For progressive rendering, fixed a possible crash in displaying
miscounted DISP tiles.
- For MetaSL shaders compiled with flattened enabled, fixed missing
compilation of light shaders.
- For MetaSL compiler, added missing implicit type conversion handling
for the conditional
"? :" expressions.
- For MetaSL C++ backend, avoid a compiler crash if no main method is
present in a shader source.
- For MetaSL C++ backend, added missing support for shader static member
constructors.
- For MetaSL CIL backend, fixed wrong code generation for
switch used with non-consecutive enum case
labels.
- For MetaSL CIL backend, fixed generation of the code for construction
of matrices from matricide of some other dimensions.
- For MetaSL CIL backend, fixed generation of the code with changed
capitalization of texture sampler methods, follows recent MetaSL
specification adjustment.
Shader changes:
- For the
mip_metallic_paint(_x) shader, fixed wrong
illumination if multiple area light sources are present in the scene.
- For the production
mip_rayswitch_stage shader, fixed
declaration apply mask.
Changes in version 3.7.52.9.
Bug fixes:
- Fixed a crash for MetaSL shaders using
Spectrum type.
- For MetaSL shaders, added support for input initializers with direct
state variable assignments (like
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.
- For MetaSL shaders, added support for default-to-state annotations.
Note that this mechanism is deprecated, support for shader parameter
initializers will follow.
- For MetaSL CIL backend, fixed possible running out of memory crash if a
large number of shaders need to be compiled.
- For MetaSL CIL backend, fixed broken code generated for matrix
constructors.
- For MetaSL compiler, fixed broken code produced for struct input
parameters containing textures.
Changes in version 3.7.52.8
Bug fixes:
- For multihosted rendering, fixed possible odd warning on unfreezing
camera.
Changes in version 3.7.52.7
Feature improvements:
Bug fixes:
- For builtin architectural material BSDF, fixed too low reflections
under the Fresnel layer.
- For MetaSL shaders, fixed usage of info,warning,error functions in free
(non-shader) functions.
- For MetaSL shader light loops, the
get_light_parameter()
function returned true even if the parameter did not exist. Fixed.
- For MetaSL shade light loops, pass light direction properly.
- For MetaSL shaders, fixed a regression in shadow shaders: the
transparency value was taken as a result instead of applying it as
multiplier.
- For precompiled MetaSL shaders, fixed generation of shader declarations
with no inputs.
- For precompiled MetaSL shaders, fixed generation of shader declarations
with inputs in "float a, b;" style.
- For MetaSL shaders, fixed compilation of implicit texture to boolean
conversion.
- For MetaSL CIL shaders, fixed wrong code generated for assignments to
vector elements selected by indexing.
- For MetaSL shaders compiled to C++, fixed possible broken generated C++
code in array initialization.
- For MetaSL compiler, fixed possible crash when an input parameter was
declared as an unsized array with no initializer.
- Fixed some memory leaks in MetaSL compiler.
Changes in version 3.7.52.5
Feature improvements:
- Improved error reporting for MetaSL phenomena.
Bug fixes:
- For multi-hosted rendering of scenes with BSP2 accelerations, fixed
possible crash in rendering of second and subsequent frames.
- On Windows platforms: for multi-hosted rendering of scenes with BSP2
acceleration, fixed possible freeze in rendering of second and subsequent
frames.
- Fixed a crash if photon map diagnostic was used in combination with
-photonmaps only command line option or the corresponding
rendering mode for integrated versions.
- For precompiled MetaSL shaders, fixed normal connection for bump
shaders.
- For MetaSL shaders running in precompiled mode, fixed a crash for
phenomena having multiple outputs.
Changes in version 3.7.52.4
Feature improvements:
- Improved performance and scalability of progressive rendering.
- For MetaSL shaders, improved support for ray type.
Bug fixes:
- For ccmesh objects, improved possible artifacts originated from
insufficient numerical prevision of derivatives.
- Fixed double contribution of the environment lighting if finalgather
and IBL has been enabled.
- For progressive rendering, fixed wrong broken handling of events.
- For MetaSL BSDF shaders, avoid shooting unneeded rays in the rendering
kernel.
- For MetaSL compiler, fixed several bugs in MetaSL phenomena, including
crashes of loading of some
.xmsl files.
- Fixed initialization of arrays inside of MetaSL phenomena. This affects
MetaSL internal nodes only, mental ray shader parameters do not support
initializers.
Changes in version 3.7.52.3
Feature improvements:
- For high resolution images rendered with finalgather, substantially
reduced the amount of continuous memory needed by multi-pass finalgather
precomputation. This allows for bigger images to be rendered if memory is
fragmented.
- For MetaSL shaders, MetaSL shader parameters of type
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.
- In the MetaSL CIL backend, a number of missing MetaSL features have
been implemented. This includes (but is not limited to):
- assignment to state variables
- fetching multiple outputs of a shader in a trace call
- texture members
- texture samplers
- ddx and ddy
Beyond this various bugs have been fixed, most notably in the code
generated for swizzles, the mapping of some types and operators, and in
the handling of implicit conversions.
- For precompiled MetaSL shaders, shading graph connections to normals
and positions are now supported to allow for effects such as bump mapping
and normal mapping.
Bug fixes:
- For multihosted rendering, fixed memory leaks on slave hosts that
occurred after frame 1 in case multiple frames were rendered. When BSP
acceleration was used, these leaks were significant.
- For multihosted rendering, fixed distribution of MetaSL CIL shaders. In
order to use the CIL backend, all slaves hosts must run under Windows.
- In the MetaSL compiler, fixed a possible memory corruption which
occurred in multihosted network rendering, or debug versions of the
compiler.
Changes in version 3.7.52.2.
Feature improvements:
- For MetaSL shaders, added support for Lambert BSDF.
- For the API consistency reasons, renamed classes called
Type_access resp. Type_edit
to Access_type resp.
Edit_type. Corresponding typedefs are provided for
compatibility.
- In debug version of mental ray: for MetaSL CIL backend, generate
debugging information.
Bug fixes:
- Fixed possible shadow artifacts in Image Based Lighting (IBL).
- For MetaSL compiler, fixed missing arguments casts in constructors, in
particular
Color(0, 0, 0, 1) is fixed.
- For MetaSL compiler, implemented missing % (mod) operator.
- For MetaSL shades the glossy component for direct_light function has
been computed without testing the occluders of the environment,
fixed.
- For MetaSL CIL backend, fixed texture samplers with filtering. Fixed
several further issues.
- Platform specific: on Linux platforms, no longer link libgcc
statically. This has caused crashes in exception handling of MetaSL
compiler for some cases then Linux distribution where mental ray has been
compiled and executed were different.
Changes in version 3.7.52.0.
Feature improvements:
- Introduce C++ API for Catmull-Clark mesh subdivision surface geometry
for access and manipulation from shaders. The interface is provided in
the new header file
shader_sds34.h which is automatically
included by shader.h when using C++ compilers.
- Reduce peak memory consumption for finalgather progressive preview.
- Performance improvement in the progressive rendering mode to achieve a
desired quality in less time.
- Add motion blur to be rendered in progressive mode.
- For MetaSL shader graphs and phenomena provided in
.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.
- For MetaSL shaders, implement support for conditionals on scalars and
vector values expressions.
- For MetaSL shaders, implemented
Texture_info class.
- For MetaSL CIL backend, implement support for shadowing from MetaSL
light shaders.
Bug fixes:
- Fix a bug leading to crashes when using multiple finalgather map
files.
- For MetaSL CIL backend, fix problems when accessing files in temporary
directories with a name that contains spaces.
- For MetaSL support, fix recognition of registry keys together with
their actual values.
- For MetaSL CIL backend, fix more bugs in code generation on both 32bit
and 64bit reducing the potential for CIL compilation errors or .NET
runtime crashes.
Shader changes:
- For architectural material shaders, avoid artifacts when using
anisotropic effect in extreme conditions by raising accuracy of
computations.
- For architectural material shaders, fix uninitialized output values
leading to false color artifacts in certain cases.
- For production shaders, fix display order of finalgather shooters to be
top-left-to-bottom-right.
Changes in version 3.7.51.0.
Feature improvements:
- Add new command line option
-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.
- On Windows platforms, remove temporary cached framebuffer files is ray
executable is killed.
- For MetaSL shaders, implemented support for BSDFs (BRDFs).
- For MetaSL shaders, implement proper support for ray types in trace
functions.
- For MetaSL shaders, improve performance for frequent access to shader
states.
- For MetaSL CIL backend, implement support for unary operators.
- For MetaSL CIL backend, implement support for various texture lookup
functions.
- For MetaSL CIL backend, implement support for missing transformation
functions.
- For MetaSL shaders, re-enabled message passing across trace() and other
functions, which has been temporarily disabled in version 3.7.50.10.
- For MetaSL shaders, enabled message passing for light loops.
Bug fixes:
- Reduced the memory consumption for final gather progressive preview.
- Fixed return value of query
miQ_NUM_TEXTURES for hair
objects with placeholders.
- Fixed possible crash if a phenomenon evaluation was attached to a BSDF
slot. In particular, this could be the case when BSDFs were used in
combination with Irradiance Particles.
- For MetaSL shaders, fixed tracing a ray done instead of environment
lookup if
trace function was called with environment ray
type.
- For MetaSL shaders, fixed shader compilation error if variable length
array parameter was used.
- For MetaSL shaders used as shadow shaders, fixed a crash in MetaSL
shader with
"transparency" parameter of type float was
used.
- For MetaSL CIL backend, fix various bugs in code generation reducing
the potential for CIL compilation errors or .NET runtime crashes.
- For MetaSL CIL backend, fixed shader compilation if temporary directory
file name contained spaces.
Changes in version 3.7.50.15.
Feature improvements:
Bug fixes:
- For the BSP2 acceleration used in combination with motion blur with
multi-segment moving geometry, fixed possible artifacts due to improper
computation of the motion segment time interval.
- For non-rasterizer rendering modes, clean up the opacity used by
mi_opacity_get function for each sample.
- For MetaSL shaders, support enabling/disabling environment
properly.
- For MetaSL CIL backend on 64-bit Windows, generate 64-bit shader
libraries instead of 32-bit ones.
- For MetaSL CIL backend, fixed light iterators.
- For MetaSL CIL backend, implemented missing array support.
Shader changes:
- For architectural, paint, production, subsurface and base shaders,
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.
- Improved performance of the
mip_matteshadow shader by
avoiding unnecessary mi_flush_cache calls.
- For the mip_matteshadow shader fixed possible finalgather light leak
artifacts by using an individual id in order to restrict the finalgather
map lookup (
miIrrad_options::id has been
introduced in version 3.7.50.4).
Changes in version 3.7.50.14.
Feature improvements:
- For the Image Based Lighting (IBL) introduced in version 3.7.50.11,
allow to access the build-in environment light by the name
"
builtin_light_env_inst". This allows to use IBL in the
explicit light lists.
Bug fixes:
- Fixed possible crash if
miRC_TO_SPIRAL rendering tile
order was used. Regression in version 3.7.50.11.
- For MetaSL CIL backend, fixed enumerations and structs.
Changes in version 3.7.50.13.
Feature improvements:
- For lens shaders used with the rasterizer, initialize
miState::point, miState::dist and
miState::dir according to the closest hit the closest
hit.
Bug fixes:
- For MetaSL CIL backend, fixed crash in compilation of shaders with no
input parameters.
- For MetaSL CIL backend, fixed LHS (left hand side) swizzles.
Changes in version 3.7.50.12.
Known limitation is this version: MetaSL CIL backend can crash for shaders
with no input parameters, fixed in 3.7.50.13.
Feature improvements:
- Changed the license scheme for multi-core CPUs. The limit of 2 or 4
cores per CPU is removed.
Bug fixes:
- Fixed a crash in the integrated versions of mental ray using mental ray
3.5 compatibility framebuffer interface. Regression in version
3.7.50.9.
- Fixed possible infinite recursion in the error handline of broken PNG
images.
- For MetaSL CIL backend fixed static functions, fixed component
selection and swizzling on vectors.
Changes in version 3.7.50.11.
A temporary CIL backend usage example has been added to
common/doc/tutorials/metasl_cil_backend.
New features:
- Built-in Image Based Lighting (IBL).
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:
- For finalgather precomputations, the progress report percentage
messages are not joined for all passes.
- Added new include file
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.
- The
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.
- For MetaSL shaders, added support for filter types "
none"
(unfiltered) and "data".
- Shader libraries specified on mental ray command line have been loaded
before parsing of the rayrc config file, changed to take config file into
account.
- For
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:
- Platform specific: if cached framebuffer are used, create the temporary
file with FILE_FLAG_DELETE_ON_CLOSE flag to assure proper file deletion
if case of application abort or crash.
- For mental ray library integrations, fixed a problem in memory
management. If mental ray was running low on memory and a memory block
allocation failed, in some cases mental ray kernel failed to call the
application callback registered with
mi_mem_set_flush_failure_cb().
- On Windows platforms fixed possible crash in rendering abort if
memory-mapped or cached framebuffers were used (regression in version
3.7.50.5).
- Debug version only: removed incorrect assert in rendering of some large
scenes with BSP2 acceleration.
- For MetaSL C++ backend, fixed output types for shaders with multiple
outputs.
- For MetaSL CIL backend, a crash in compilation of a second shader.
- For MetaSL CIL backend, pass shader input parameter values
properly.
- For MetaSL CIL backend, fixed compilation of variable declarations of
types
bool, int, float and
float3.
- For MetaSL CIL backend, fixed compilation of
Light_iterator and Sample_iterator.
- For MetaSL CIL backend, fixed compilation of
Trace/Occlusion/Irradiance_options and most of their
methods.
Shader changes:
- For production shaders, added new shader
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.
- For production shaders, added new shader
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.
Changes in version 3.7.50.10.
New features:
- Initial implementation of the MetaSL CIL (.NET) backend on Windows
platforms.
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:
- Added a possibility to control the frequency of percentage progressive
messages. The
-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.
- Added function
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.
- For the BSP2 acceleration, significantly decreased the amount of memory
used for BSP tree construction on 64-bit machines.
- For the BSP2 acceleration, use the approximate number of triangles per
object if provided by .mi file / translator. This improves BSP2
performance vs. memory consumptions for scenes with placeholder objects
and with a lot of objects consisting of few triangles.
- For MetaSL shaders, the
{_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.
- For
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:
- Fixed possible pyramid texture filtering artifacts in the rasterizer.
The
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.
- For OpenEXR images, fixed possible wrong image output types, such as
single channel floating point (
s_fp) used instead of half
(s_h), as well ass rgba_h used instead of
rgb_h.
- Messages from MetaSL integration are printed for "RMSL" module instead
of "LIB".
- For MetaSL shaders, resolved the error message on unknown depth of
field ("state variable 37").
- For malformed scenes containing light lists with instances referring to
non-existing lights, fixed possible null tag access fatal.
Shader changes:
- For multipass rendering, fixes possible artifacts in metallic paint
shader.
Known limitations in this revision:
- For MetaSL shaders, message passing across trace() and other functions
has been temporarily disabled in order to unify C++ and CIL backends.
Restored in version 3.7.51.0.
Changes in version 3.7.50.9.
Feature Improvements:
- Added
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.
- For MetaSL shaders sampling lights, implemented
get_light_parameter() method.
Bug fixes:
- For the BSP2 acceleration, use static BSP2 trees if the shutter
interval is zero, even if motion vectors are required.
- For the finalgather interpolation lookup to a restricted finalgather
point set introduced in version 3.7.50.4, fixed the
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.
- For finalgathering used with BSP acceleration and volumetric shaders,
fixed possible shading artifacts due to
miState::dist not
initialized to zero if finalgather ray misses geometry.
- For OpenEXR output images specified with mental ray 3.5 output
compatibility syntax, fixed broken compression type always set to
"
rle".
- For the SPM-protected version of mental ray: fixed possible failure to
acquire necessary number of licenses if more than one SPM server host has
been specified, one of the SPM servers crashes or shuts down and none of
the other SPM servers has sufficient number of licenses so that the
licenses need to be collected from multiple hosts.
- Fixed possible crash or allocation of large memory block fatal on
loading a MetaSL shader.
Changes in version 3.7.50.8.
Feature Improvements:
- For ccmesh objects with large faces, implemented pre-splitting of such
faces for more efficient tessellation and displacement.
- For MetaSL shaders, added
{_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).
- For the progressive rendering DISP interface, no longer send frame
end/begin event between subsequent passes.
- Added support for cached framebuffers in the progressive rendering
mode. The combination is not recommended for performance reasons
though.
Bug fixes:
- For scenes with assemblies and incremental changes, fixed possible
crash at the beginning of the second frame.
- Fixed possible crash in incremental changes of scenes with
assemblies.
- For rendering with anisotropic BSDFs, fixed wrong orientation of
highlights.
- For MetaSL shaders in windows platforms, fixed embedded manifest.
- For MetaSL shaders, fixed a fatal of 1D texture was used.
- Platform specific: on Linux in the binary echo mode fixed broken echo
of vector data.
Changes in version 3.7.50.7.
Feature Improvements:
- For MetaSL shaders, the library paths (default and specified with the
{_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:
- Fixed a possible crash in the integrated version of raylib.
- For MetaSL shader compilation, added quotes around include and link
paths in the compiler invocation. This resolves MetaSL compilation errors
if default installation has been applied on Windows platforms.
- For MetaSL shader compilation, do not protect compiler/linker command
name with the quotes. On Windows platforms, this resolved the compiler
invocation failure by CMD.EXE shell, which printed "The input line is too
long" error message.
- For the new temporary framebuffer file handling added in version
3.7.50.5, fixed possible cleanup failure if the rendering abort was
handled by the net thread.
Changes in version 3.7.50.6.
Bug fixes:
- Fixed possible artifacts and NaN warnings for rendering of scenes with
anisotropic BSDFs, such as Ashikhmin and architectural.
- For MetaSL shaders, fixes the scheme for temporary file names. The old
one allowed only a limited number.
Changes in version 3.7.50.5.
New features:
- Added progressive rendering mode. There are two versions of this mode
planned, for usage with mental ray conventional shaders for maximal
compatibility with conventional mental ray rendering, and with build in
BSDFs for maximal performance / fastest response.
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:
Bug fixes:
- For the BSP2 acceleration, fixed possible artifacts or crashes due to
wrong triangle indices used in scenes with multiply-instanced objects
containing large number of triangles.
- Put some of the memory blocks in BSP2 acceleration and Irradiance
Particles under mental ray memory management / statistics.
- For ccmesh objects with displacement, apply vertex displacement for the
estimation of subdivision level to be used. This solves possible shading
artifacts for object areas close to the camera plane.
- Fixed possible crash for scenes with assemblies when incremental
changes have been applied to the scene.
- Removed unintended dependency of caustic photon map on importon map.
This improves the visual quality of caustics.
- Fixed a file descriptor leak in scenes using IES or Eulumdat light
profiles. For scenes with many or with changing lightprofiles this could
cause severe problems due to running out of file descriptors.
- For MetaSL shaders, fixed possible artifacts due to wrong default
parameter values used.
- Fixed echo of default shader parameter values for parameters declared
textually after an array one.
- Fixed broken echo of object faces.
- For the new progressive finalgather precomputation, fixed possible
artifacts due to improper placement of adaptive points. The amount of
jittering is slightly increased to improve the distribution quality.
Fixed progressive visualization artifacts on the edges of pseudo-tiles.
Fixed intensity artifacts for pseudo-tiles showing both objects with
diffuse material and background environment.
- For the new progressive finalgather precomputation, fixed statistic
info messages.
- For the new progressive finalgather precomputation, fixed possible
missing DISP tiles due to a wrong number of tiles expected.
- For the new progressive finalgather precomputation, fixed possible
crash for rendering second and subsequent frames.
- Platform specific: on Windows (32 and 64 bit), the vararg argument for
mi_query mode miQ_TEXTURE_DIM has not been
passed properly to the kernel, which caused crashes on 64-bit platforms.
Fixed.
Shader changes:
- The base shader
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.
Changes in version 3.7.50.4.
Feature improvements:
- Multi-pass finalgather precomputation visualization has been
implemented.
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 "finalgather passes", or with the command line
option -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".
- For finalgathering, implemented a way to restrict finalgather map
lookup to a specified subset of finalgather points.
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.
- For the imf_disp tool, added
-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:
- For MetaSL shader compilation on Windows, remove manifest files form
the temporary directory.
Changes in version 3.7.50.3
Feature improvements:
- For multiply-instanced objects inside of assemblies, share the
tessellated geometry for non-view-dependent objects. Note that sharing
objects need to be a part of the same assembly.
- Added new carpaint BSDF with the arguments as below:
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
- For MetaSL shader compilation, the MI_DLL_IMPORT define on the compiler
line is not longer required, moved to the include headers. The RAY define
is no longer used and is removed.
- For MetaSL shaders compiled on Windows platforms, include manifest file
into the compiled DLLs. This may be necessary when the compiler version
installed on the user system differs from one used to build mental
ray.
- For MetaSL shaders, the C++ compilation and linkage is now done on
demand. For shader declaration, parsing and analysis of the MetaSL source
code is done when MetaSL file is loaded.
- For network rendering, compilation of the MetaSL shaders on the
slave/satellites is enabled.
- Work in progress: for shading trees defined in mental ray scene files,
implemented the first version on the shading tree flattening, which
combines shaders by connecting parameters, and compiles the composite
shader. The flattening is possible for shading trees and mental ray
phenomena completely consisted of MetaSL shaders (i.e. no mixture with
C/C++ shaders). The flattening can be enabled by setting the
{_MI_REG_METASL_FLATTEN} registry to a non-empty value.
Known limitations in this version:
- In the current version, the feature is provided to the compilation
testing only. mental ray kernel does not call the flattened shaders
(Fixed).
- Textures are not supported for the flattened shaders yet
(Fixed).
- Flattened shaders are compiled immediately, not on demand
(Fixed).
Bug fixes:
- For OpenEXR headers, fixed possible crash when reading images of types
a, a_h, a_fp, m,
n and z.
- Export
mi_api_get_assembly_root function properly for
geometry shaders.
- For MetaSL shaders, apply include search path for the includes from
MetaSL (.msl/.xmsl) files.
- For MetaSL shaders: command line used for compiler and linker
invocation has been limited to 512 bytes, fixed.
- For MetaSL shaders: use state of the art compiler and linker options on
MacOSX platforms.
- For MetaSL shaders, do not echo derived shader declarations.
Changes in version 3.7.50.2
Feature improvements:
- For the BSP2 acceleration, added functionality to reduce allocation of
large amount of memory during the construction of the BSP2. For large
scenes this may prevent mental ray from running out of memory for
geometry where the kernel heuristic estimating the number of triangles in
a voxel fails by an order of magnitude.
- Removed dependency of the MetaSL shaders compiled to C++ on the
STL.
- For the MetaSL shader compiled with C++ compiler on windows platforms
for mental ray debug executables: added
/debug and /Z7 compiler/linker keys to keep the
debug information.
Bug fixes:
- For rendering of scenes with assemblies and hair, fixed possible
missing hair artifacts.
- During the importon emission from the camera, avoid calling
miCamera::volume shader. Importons need to be proceeded with photon
volume shaders, not with a volume shader attached to the camera. In
particular, this fixes possible empty irradiance particle map issue.
- For the MetaSL shader compilation added missing MI_DLL_BUILD define
passed to the C++ compiler.
- For the debug version of mental ray compiled on windows platforms,
compile shaders with
/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.
- Fixed a rare crash in the object splitting code coming from
out-of-range array read.
- Fixed running out of memory in parsing of surfaces with very high
number (50000) of trimming curves.
- Fixed several memory leaks in MetaSL compiler and its integration.
- Fixed a linkage errors if
Access_bsdf was used in a
shader.
- Ignore empty strings passed to the C++ compiler (an empty string cleans
up C++ compiler include path list).
- For MetaSL shaders, added missing eye ray type.
- Fixed a crash in mental ray when writing out images of
"vta", "vts", "tag" or
"bit" types into OpenEXR files.
Changes in version 3.7.50.1
New features:
- MetaSL compiler has been integrated into mental ray.
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:
- For windows platforms, it is planned to generate
managed code for MetaSL shaders directly to avoid
requirement of C++ compiler installed. This is work in progress.
- It is planned to collapse shading trees consisting exclusively of
MetaSL shaders at compilation time, this is not fully implemented
yet. (Partial implementation exposed in version 3.7.50.3. This is not
a default mode in mental ray 3.7+.)
- Network rendering with MetaSL shaders will not work yet (fixed in
version 3.7.50.3)
- Multiple MetaSL features are not or partially implemented yet
(fixed, with few exceptions).
- C++ and .xmsl/.msl files are not removed from the temporary file
directories.
- Unnecessary compiler invocations are done to assure functionality
testing. This may result in reduced performance (fixed).
- MetaSL compiler memory is not cleaned up properly at shutdown
(significant memory leaks fixed).
Feature improvements:
- Changed transformation inheritance for leafs inside of assemblies.
Assembly leaf instance transformation is now multiplied properly with the
object leaf instance transformation inside of assembly.
- For the command line options,
"-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.
- For compilation of shaders on windows platforms, it is no longer
required to add WIN_NT define to the C/C++ compiler invocation.
- Changes the order of temporary directory lookups. The environment
variables TMPDIR, TMP, TEMP are checked in that order. If not set, the
current directory is used on Windows, and /usr/tmp is used on other
platforms.
- On Windows, temporarily created object and DLL files contains now the
process id to avoid possible conflicts from several mental ray processes
running on the same machine.
- Added string option
"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.
- Added a progress percentage message for optimization of Irradiance
Particle maps with large number of particles.
- Added compatibility version of the architectural BSDF. Its
functionality is the same as for the
builtin_bsdf_architectural, but the declaration follows
those of the architectural material.
- Enabled
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.
- The
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.
- Added support for displacement of primlist objects with no vertex
normals specified.
- Added
A_H and S_H image types to represent
alpha and intensity images in half float resolution.
Bug fixes:
- For scenes with multiply-instanced assemblies, fixed motion
transformations.
- For scenes with multiply-instanced assemblies, fixed view-dependent
approximations.
- For scenes with multiply-instanced assemblies, fixed displacement
mapping inherited from a material defined on an instance in the main
scene and inherited into the assembly.
- For scenes with assemblies, fixed
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.
- For builtin BSDFs, fixed missing contribution of environment lighting
in glossy reflections.
- Fixed artifacts in contour rendering used in combination with hull
objects.
- Do not echo built-in BSDF shaders.
- For the BSP2 acceleration, fixed a regression from mental ray 3.6+ with
memory allocations bypassing mental ray memory management. This fixes
wrong memory usage statistics and possible crashes for large scenes not
fitting to the memory completely.
- For the BSP2 acceleration, reduced effective memory consumption by
releasing memory used for tree constructions immediately after the
construction is finished.
- For the BSP2 acceleration used with motion blur, fixed possible missing
geometry artifacts originating from numerical precision issues.
- For hair objects with per-hair textures, fixed
mi_query
mode miQ_NUM_TEXTURES to return correct value and avoid
unnecessary tessellations.
- For the rasterizer used with motion blur, initialize
miState::time properly for volumetric and environment
shading.
- Fixed a possible crash if hair was used in combinations with
assemblies.
- Fixed a possible crash in rendering hair with rasterizer.
- Fixed a possible crash and the ray library shutdown if an extremely low
memory limit was set at startup.
- Fixed possible crash if Irradiance Particles were used in combination
with BSP2 acceleration.
- Fixed echo of verbatim textures
(-echo textures command
line option) for images using with more than 8 bits per pixel per color
channel, such as HDR.
- Fixed a crash in photon map diagnostic mode rendering used in
combination with cached framebuffers.
Shader changes:
- For integrators, added an externally visible
mia_tonemap_api_untransform_color function which may be used
to revert the tone mapping effect.
- For the architectural material shader, fixed possible rare freeze in
ambient occlusion computation.
- For the
mip_gamma_gain shader, added gamma correction for
negative numbers. In particular, this protects against possible NaN
values.
- Fixed possible max version check warning for the subsurface scattering
shader library.
Changes in Version 3.7.1.13.
Feature improvements:
- For the map containers, use shorter more expressive names for the
classes.
Bug fixes:
- For multihosted rendering with integrated version of raylib, fixed
slave host removal with the
mi_msg_remove_host() function
call for IPv6 addresses.
Changes in Version 3.7.1.12.
Feature improvements:
- For secondary finalgather diffuse bounces, rays are traced now as
finalgather rays and finalgather flags on objects an instances are
respected, instead of reflection/retraction rays and flags used
prior.
Bug fixes:
- Fixed unnecessary large number of sub-objects for polygonal objects
with displacement presampling and large maxdisplace value specified. In
particular, large number of subobjects resulted in slow lightmap
rendering.
- For the BSP2 acceleration used with motion blur, fixed possible
artifacts due to self-intersection precision issues.
- For Catmull-Clark objects, min/max subdivision levels in approximations
were ignored, fixed.
- For Catmull-Clark objects, take into account shrinking when estimating
subdivision level. This fixes unnecessary over-tessellations in such
cases.
- Fixed syntax error in echoing of instance override approximation
lists.
Shader changes:
- Make multiple-output
mi_metallic_paint_shader_x work if
used as an a single shader or a phenomena root.
Changes in Version 3.7.1.11.
Feature improvements:
Bug fixes:
- For Iff image file format, enable to writing out of alpha ("a")
files.
- Fixed major memory leak at the end of the frame if BSP2 acceleration
was used in combination with assemblies. Some of the acceleration
structures have not been deleted.
- Fixed a memory leak if hair rendering was enabled.
- For raylib integrations: fixed a typo in
mi_par_aborted()
check which prevented application callback from been called.
- Options consistency: disable irradiance particles if ray tracing is
switched off.
- Fixed possible crash in photon emission on scenes with assemblies.
- For the rasterizer, environment shaders were called with non-zero
miState::pri, fixed.
- For ambient occlusion with enabled caching for scenes with motion blur,
fixed visual artifacts due to computing of all ambient occlusion values
at shutter open time.
- For hair objects with view-dependent approximations, set the view
dependency flags properly.
- For Catmull-Clark meshes, fixed possible crash for objects with
derivatives.
- Platform specific: on Windows platforms, fixed IO error reporting
related to the image processing.
Shader changes:
- Changed the multi-output version of fast subsurface scattering shader
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.
- For the fast subsurface scattering shader, importance-driven sampling
for glossy reflections has been added, which may significantly improve
performance for some scenes.
- For the fast subsurface scattering shader, fixed possible artifacts
edges of objects with very small scatter radii below 1 pixel in the
lightmap resolution.
- Added new multi-output
mi_metallic_paint_x shader
identical to the metallic paint shader, but allowing multiple outputs
following the architectural material conventions.
- Changed architectural material shader to avoid assertions in the
debug version of mental ray due to of
mi_ward_anisglossy function with inconsistent arguments. The
change also lead to a minor performance improvement.
- For the production
mip_mirrorball and architectural portal
light mia_portal_light shaders, changed errors to warnings
in accordance to the common conventions for recoverable scene issues.
- The architectural portal light
mia_portal_light shader is
made compatible with point-style area lights with no direction
specified.
Changes in Version 3.7.1.10.
Bug fixes:
- Fixed wrong motion bounding boxes for Catmull-Clark meshes with
multiple motions steps and no motion vectors specified.
Changes in Version 3.7.1.9.
Changes affecting compatibility with older versions:
Changes in Version 3.7.1.8
Feature improvements:
- For the shader interface, performance of the string options lookups
(
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.
- For the
Map containers, avoid rebuilding of the internal
lookup acceleration structure when this is not necessary.
Bug fixes:
- For scenes with assemblies, avoid unnecessary loading of assemblies
with hair rendering enabled.
- Fixed artifacts in the shared -displacement mode enabled with the
{_MI_REG_SHARED_DISPLACEMENT} registry.
- Fixed echoing of registries specifying kernel modifications including
like the shared displacement trigger above.
- Fixed echoing of displacement approximation for polygons and
trilists.
- Fixed a memory leak in the string options interface.
- Fixed
$ifeq preprocessor instructions of the .mi parser
for the environment variables.
- Platform specific: on Windows, fixed possible failure to save large
photon or finalgather maps onto network drives.
Changes affecting compatibility with older versions:
- The
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.
- For the shader interface
Maps, fixed some const
qualifiers.
- The miObject_type enumeration is changed to keep the same values as in
mental ray 3.6+ in order to include binary compatibility with mental ray
3.6+ (in particular, for the production
mip_binaryproxy
shader).
Shader changes:
- Improved performance of the portal light shader by avoiding multiple
calls for insignificant lighting.
- Made production
mip_binaryproxy shader compatible with
mental ray 3.7.
- For
mia_roundcorner shader, fixed possible crash if the
shader attached to the bump parameter returned struct consisting of
several outputs.
- For the architectural environment shader
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.
- For the architectural material shader, the ambient occlusion
functionality of the shader has been changed to ignore objects not
casting shadows.
Changes in Version 3.7.1.7
Changes affecting compatibility with older versions:
- Typedef BSDF
Type to miUint to avoid possible
incompatibilities on sizeof(enum).
- For the
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:
- Added a warning if deprecated version 1 file format used in mental ray
version 2 and earlier is parsed.
- Improved robustness of geometry tessellation if corrupted geometry data
is parsed.
Bug fixes:
- For multihosted rendering, fixed possible crash at shutdown if the BSP2
acceleration was used.
- Platform specific: on Windows, fixed possible failure to initialize
library if DNS server resolved IPv6-style address lookups (like
"::1") into IPv4 addresses.
Changes in Version 3.7.1.6
Tutorial on usage of irradiance particles has been added.
New features:
- Added new object flag "
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.
- For mental ray integration and geometry shaders API, added a new
function
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:
- Renaming across scopes is not supported, by design.
- Compatibility with incremental echo is limited.
mental ray kernel does not maintain list of renaming. If renaming are
done and scene changes are echoed, application should print a set of
rename commands as previously echoed parts of the scene may contain
old names.
- API Notify callback is not called for the function.
- Renaming PHCR GUI is not supported.
- Renaming of shader declarations is possible bus discouraged as
corresponding functions are linked using the same name as in the
shader declaration.
Feature improvements:
- In the displacement tessellation, the warning on removal of triangles
of (close to) zero area is printed only once per sub-object and gives the
number of triangles removed.
Bug fixes:
- On Windows platforms, fixed broken
shader.lib proxy for
shaders calling to mi_scene_recreate on
miSCENE_NBOX type.
- For the standalone, fixed wrong process exit value 1.
Changes in Version 3.7.1.5
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:
- For the BSDFs introduced in version 3.7.1.4, the BSDF component type
has been transformed into a bitmask.
Bug fixes:
- For the DDS image file format, non-square images with mipmap pyramids
were not loaded. Fixed.
- Fixed a crash if an empty photon map was loaded from a file
and the
finalgather fastlookup option has been enabled.
Changes in Version 3.7.1.4
New features:
- Added Bidirectional Scattering Distribution Function
(BSDF, or BRDF for non-transmitting
materials) support for mental ray kernel.
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:
- Fixed
$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.
Changes in Version 3.7.1.3
Feature improvements:
- For SPM-protected version of mental ray standalone executable, added a
boolean string option
-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.
- Assure that
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.
- For mental ray standalone executable, changed exit code to 1 if (some
of) .mi file(s) specified on the command line is not found. If multiple
files are specified, rendering stops after the first file missing.
- Restored scene extent info message at the beginning of rendering as
known in mental ray 3.5.
Bug fixes:
- For the debug build only, fixed an erroneous assert in rendering of
shadowmaps.
- For rendering of lightmaps, avoid allocating of unnecessary large
memory blocks. For objects with high number of certifies this may reduce
memory consumption significantly.
- Fixed several bugs in the adaptive tessellation for Catmull-Clark
meshes introduced in the previous version.
- For the finalgather automatic mode, fixed possible dark artifacts on
objects containing finalgather points with significantly different normal
orientations (like thin objects with indirect illumination computed on
both sides, or on the object corners).
Changes affecting compatibility with older versions:
- The content of
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:
- For the architectural environment shader
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.
Changes in Version 3.7.1.2
New features:
- Implemented adaptive tessellation for Catmull-Clark meshes. Each region
can now have a different refinement level. t-vertices with neighbor
regions having different refinement levels are fixed with triangle fans.
Positions are always computed on the limit surface.
- Initial implementation of Map containers has
been added. Maps are particle systems in N
dimensional space. Each particle has a position and set data assigned.
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:
- For OpenEXR textures, added ability to use display window. If
_MI_OPENEXR_WINDOW registry is set to "display" (valid values are
"display" and "data"), the OpenEXR display window used. Note that display
window is not compatible with mipmap pyramids for filtered local
textures.
- For the integrated versions of raylib, the emergency exit for
renderings running out of memory has been modified. The function
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.
- For the BSP2 acceleration, more improvements in memory consumption and
construction time has been applied, with focus on motion blur scenes.
Several bugs have been fixed.
- For string options, allow shader to access boolean values as integers.
This is handy if shaders use variables of type
miBoolean,
which is typedefed to int.
Bug fixes:
- For framebuffers, fixed possible crash if image file name with no
extension was used.
- For scenes with assemblies, fixed flag inheritance from the main scene
to assemblies. This resolves some cases of unnecessary loading of
assemblies when they are not required for rendering (for example, a
combination of assemblies visible only to shadow rays and shadow option
set to
off).
- For the
'{{' and '}}' escaping for file name
lookups introduced in version 3.6.52.5, fixed possible failure to apply
the unescaping exactly one time.
- For texture caching, fixed possible issue of not releasing references
to texture pages fast enough (slower than allocating new references) for
large scenes with many textures and database flushing active.
- For OpenEXR images texture caching, fixed a possible crash for files
with tiles not aligned the pixel coordinates origin.
- For multiply-instanced trilist objects with view-dependent
displacement, fixed wrong identical displacement quality used for all
instances.
- Fixed a bug where BSP2 acceleration could miss intersections if a
substantial amount of secondary rays were spawned as children of a single
eye ray. For cached glossy rays in the architectural material shader
these missing intersections became visible as white dots or blocky
artifacts.
- Fixed wrong motion blur for BSP2 acceleration used with multiply
instanced moving objects.
- For integrated versions of mental ray: fixed possible crash at
aborting of the rendering for large scenes which did not fit
into the memory completely and triggered database flushing. The crash was
more likely with BSP2 acceleration used.
- In some cases when using the rasterizer with shutter_delay > 0, with
motion on, and samples_motion > 1, incorrect motion could be
calculated. Fixed.
- In the subdivision surface compatibility mode (enabled with
MI_SURF_CCMESH environment variable), fixed broken motion
vectors for multi-segment motion.
- For scenes with camera motion and scanline mode off, fixed missing
motion blur regression from version 3.7.1.1.
- Platform specific: on Linux and MacOSX, fixed possible freeze for very
long rendering sessions occurring after 4 billion of database creation
and editing operations.
- Platform specific: on Windows, fixed a bug in rayserver service causing
possible connection failures.
Changes affecting compatibility with older versions:
- Changed default value for importon density used in combination with
Irradiance Particles. The new value is
0.1 (per pixel). In
combination with photons, the old default value of 1 is still used.
Shader changes:
- For the
mip_render_subset production shader, fixed
possible wrong subset of geometry rendered in the finalgather
precomputing mode.
- Fixed rendering with
mip_motionblur and
mip_motion_vector production shaders used with orthographic
camera.
- For the production shaders
mip_mirrorball and
mip_greyball, fixed possible crash with non-zero blur and no
texture attached.
- For production
mip_binaryproxy shader, the amount of
displacement has not been taken into account for bounding box
computation, fixed.
- For the architectural material library,transparent portal lights have
been fixed to not show up in the Z buffer anymore.
- The physical "
transmat" shader did not support segment
shadow mode. Fixed.
Changes in Version 3.7.1.1
New features:
- Hair approximation. In addition to the old approximation syntax which
directly specifies the number of approximating segments, it is now
possible to specify adaptive length, distance, angle approximation
including view-dependent approximations. Parametric approximations
depending on the degree of the hair curves are supported as well.
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 moving polygonal objects with displacement, added functionality to
automatically control the quality of
displacement according to the amount of visual motion.
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.
- Experimental: In mental ray 3.6/3.6+ the
only object-size independent approximation technique is the angle-base
approximation which in some cases does not result in performance-optimal
meshes. A new distance-ratio based approximation technique has been
implemented, which is driven by the approximation error along an edge and
the length of the edge.
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:
- Significant algorithmic changes have been applied to the BSP2
acceleration construction:
- for the scenes with motion blur, the construction time has been
decreased dramatically
- for static scenes, memory required for the construction has been
reduced and the construction time significantly decreased
- for both static and motion BSP2 trees, the quality of the
constructed trees has been improved significantly, resulting in the
performance improvements of the intersection tests.
- Irradiance Particles have been extended with IBL-style functionality
which can be enabled with the string options "irradiance particles
indirect passes" is set to -1.
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.
- For the detailed shadow maps saved to a file: render and store all
shadowmap tiles (not just actually used ones).
- The OpenEXR version as been updated to 1.6.1.
Bug fixes:
- For Irradiance Particles, contribution of the environment was off by
factor PI, fixed.
- For volume shaders used in segmented shadow mode with autovolume turned
off, added missing call of the volume shader for the last segment (one
between the last occluder and the light).
- For standalone version of mental ray, fixed wrong number of licensed
used by machines with hyperthreaded CPUs if the number of licenses was
specified as a command line parameter.
Changes affecting compatibility with older versions:
- mental ray 3.7 code has been switched to use STLPORT compiled in the
proprietary namespace MISTD. This resolves potential symbol conflicts for
integrating application and 3rd party plugins; requirements on the
compiler compatibility / version match are reduced.
- OpenEXR library is linked statically. On an attempt to link
mi_openexr.dll, a warning message is printed.
- Removed obsolete syntax and API interface for implicit patches.
- Removed obsolete box type from the
miGeoBox structure.
miMaterial structure has been extended with bsdf slot.
- The layout of
miHair_list structure has been extended with
approximation. Unused integer approximation has been removed.
- Map containers have been added to the
mi::shader::Interface class.
Support for OpenEXR
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:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of Industrial Light & Magic nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
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:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of Pixar Animation Studios nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
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.
Multi-View Images in OpenEXR files come with the following copyright,
which apples only to parts of the OpenEXR portion of mental ray:
Copyright © 2007, Weta Digital Ltd
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of Weta Digital nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
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-2011 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.