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