Version 3.8.1.21 Beta
Jan 6, 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:
mi_output_image_open() function with
out-of-range framebuffer index could cause an unknown tag access
fatal or crash. Fixed, an error message is printed.Bug fixes:
half
type, so that half and float images are
handled consistently."environment lighting shadow" modes
"solid" or "off" were used.Shader changes:
Feature improvements:
Bug fixes:
Feature improvements:
libiraymr and libiray. The libraries are
loaded automatically by mental ray as soon as iray rendering is
enabled, and searched for along the regular library search
path.Bug fixes:
--disable-gl set.Feature improvements:
libiraymr.so/.dll/.dylib. This library is distributed
together with iraylib and is installed at the same location.Bug fixes:
For SPM-protected mental ray licensed by mental images, simplified the licensing scheme.
One license per 4 cores on a machine is requested.
In particular this new scheme provides a fair license counting on virtual machines, which was not possible to achieve with the per-CPU-socket scheme used before.
Bug fixes:
mi_tri_vectors()
function. The list of such shaders includes architectural material,
subsurface scattering shaders, and many common OEM shaders.
The validity scope of mi_tri_vectors() function is
adjusted. The returned pointers are valid until the next
call to that function for a given rendering tile/task. In
particular, shaders may need to be adjusted to copy the results
before evaluating shader parameters (mi_eval), tracing rays and
calling other functions which would lead to execution of other
shaders. In earlier versions of mental ray, the validity scope of
the data returned by pointer was not specified and could be
extremely short when mental ray was low on memory.
mi_api_add_shader() function, check if the new
tag for the given name is the same as the old one, and issue an
error in this case. The usage is illegal as this function is
unfenced to delete the old tag.Bug fixes:
Summarized release notes for iray are provided in a separate document.
Feature improvements:
In earlier versions, compilation was triggered by scene preprocessing and was done sequentially.
Bug fixes:
Together, this fixes issue with deleting shader declarations for existing shaders.
imf_disp tool, possible wrong image
display after window resizing.Known issues in this version:
Bug fixes:
mi_phen_clone/unclone functions.Bug fixes:
#define's values wrapped by ()-brackets are parsed
correctly now.Feature improvements:
finalgather
force <bool>. Usual scene DAG inheritance rules apply.
The default value is off.
The miIrrad_options structure has been extended
with finalgather_force member , so that a shader has a
possibility to overwrite the value from the scene DAG. The default
value is 0 (inherit). The value 1 can be used to enable, the value
2 to disable finalgather force computation. This option makes the
"state->type = miRAY_LM_VERTEX;" trick obsolete.
If finalgather force is enabled, mental ray will compute finalgather indirect illumination directly at the hit point instead of interpolating it from the finalgather map. This produces more accurate result image at the price of increased rendering time.
-finalgather_passes 0 command line option, it
is now possible to enable the compatibility mode for finalgather
map computation used in mental ray 3.6+ and prior (all finalgather
points are placed in one pass, somewhat lower memory consumption
especially for images with huge resolution).-m32/-m64 option to the
default C++ compiler and linker option list (invoked for MetaSL
shader compilation with MetaSL C++ backend enabled). In particular,
this simplifies deployment of 32-bit mental ray executable on
64-bit Linux platform. On MacOSX this option has already been used
in the earlier mental ray versions.mi_kdtree_* interface are affected,as well as scenes
with BSP2 acceleration in the debug build or in combination with
multihosted rendering.-progressive_max_time F command line
option in addition to the equivalent string option. This option
limits mental ray progressive rendering and iray execution
time.Bug fixes:
darts.-output off command line option: it disabled
all image file outputs instead of suppressing executions of output
shaders.Occlusion_options, Irradiance_options,
Light_sampler_options, Light_profiles,
Particle_map, and Particle_map_options
constructors.Bsdf type.Cube and Spectrum texture samplers.ray
-mslc command line option), fixed generation of uniform and
const constructor attributes.Bug fixes:
T/-texture_path command line option), fixed wrong
handling of back slashes used in combination with the
'!' sign.miState::inv_normal
to miFALSE for hair hits. For hairs, the flag is
meaningless. However, initializing it improves compatibility with
non-hair-specific shaders respecting surface orientation.Shader writers and application developers are strongly discouraged from using non-trivial static destructors.
Feature improvements:
-T /
-texture_path commands on the command line.dlopen/dlsym instead of the platform-specific NS*
function family.Bug fixes:
mi_query function was called in
miQ_PRI_BBOX_MIN/MAX modes with null
state->pri. mi_query now returns
miFALSE in these cases.link statement has
been applied on a file of an unknown or unsupported type.orthographic state
variable.Feature improvements:
.so
-> .dylib. Old shader libraries with .so
extension must be renamed. The consistent
.so/.dll/.dylib substitution rules provide
.mi scene cross-platform compatibility.Bug fixes:
link statements.msl/xmsl) files.mi_trace_continue function or volumetric
rendering with autovolume mode used.switch statement.switch/break/continue/return combinations.-mslc -t msl command line
options), fixed missing half/double qualifiers on the
literals.libiray.dylib
(instead of .so) .Bug fixes:
gen_llvm.dylib (not
.so) for LLVM MetaSL backend.Known issues in this version:
gen_llvm.so, not
gen_llvm.dylib.Feature improvements:
.dylib. mental ray still
allow shaders to have .so extension on these platforms. On Windows,
a default substitution rule .dylib -> .dll is
added. On Linux, a default substitution rule .dylib ->
.so is added. On MacOSX, .so is not substituted
into .dylib in order to provide compatibility with old
shaders.mi_rc_progressive_tonemapper_function by
adding an opaque pointer argument passed to the callback function
registered. Note that this changes binary interface and the
applications may require re-compilation as well as minor textual
changes if plain C is used.mia_physicalsun shader.mi_rc_progressive_* interfaces has been improved.Bug fixes:
#import token.default
case in switch statements.light_shadow output of light shaders.Shader changes:
apply attributes.LumeTools shader used to GUI
attributes only.Feature improvements:
-mslc command line option), added a possibility
to output MetaSL files. Unused output of binary MetaSL file (.bmsl)
is removed.cpu for the -iray command line option.
With -iray cpu option, iray rendering
will use CPU mode even if CUDA-capable GPU is present in the
system.Bug fixes:
"progressive error threshold"string option to 0.05, as
documented. The value for earlier versions was 0.1.const
String' type was used.dot(int,
int) function, Occlusion_options constructor,
and String == and !=
operators.break, continue and
return operators.Shader changes:
paint.mi file no longer links
base.so explicitly. Though paint phenomena depend on
base shaders, the way to link shader explicitly was inconsistent
with rayrc configuration workflow.Feature improvements:
-mslc command line option), allow file arguments to
be specified after compiler options.Bug fixes:
MI_METASL_LLVM_OPTLEVEL environment
variable).Known platform-specific issue in this version: On 64-bit Linux, the MetaSL LLVM backend asserts for most of MetaSL shaders.
Feature improvements:
fork-based solution used in previous
versions was not reliable due to the extensive usage of phtread
library (multiple threads, locks).
The environment variable MI_DEBUG_INVOKE is no
longer used.
MI_METASL_LLVM_OPTLEVEL could be used to control the
optimization. It is recommended to set it to 1 on Windows platforms
in order to increase generate code reliability."progressive error threshold" F string option, which
stops rendering when specified quality is reached.physical_light and
mib_light_photometric (including light profiles) light
shaders are supported.Bug fixes:
Feature improvements:
frame_begin: <frameno> <xres> <yres>,
<is_output_shader>
where is_output_shader is 1 for output shaders and 0 for normal rendering. This allows display applications to distinguish the rendering and postprocessing stages.
Bug fixes:
imf_disp tool, fixes creating of the
second frame if output shaders are used in the scene.Feature improvements:
-assert_fatal <bool> command line
option. If set to off, mental ray would continue
execution after assertion (and possibly crash later). Default is
on. This option should be used for debugging purposes
only. It may be also used to prevent popup on Windows platforms in
batch processing.half
type.mi_lookup_*_texture_x functions, the filter is passed
by value..mi parser, remove the limit of 4096
characters per line.iray, improved light source handling.Bug fixes:
premultiplied framebuffer
flag.brdf_type annotation are compiled as BRDFs even
with --brdf command line option is specified.dof_focus.mental ray's ability to flatten shading trees and Phenomena
specified with .mi syntax or mental ray API and consisting of nodes
which are MetaSL shaders has been disabled for 3.8 release. The
value of the registry {_MI_REG_METASL_FLATTEN} is
ignored. This does not affect flattening of Phenomena provided as
XMSL files.
Feature improvements:
premultiplied framebuffer flag added in version
3.8.0.8 to true. The new default behavior
is backward-compatible with mental ray 3.7 and rendering with
rasterizer disabled.Bug fixes:
Feature improvements:
"iraylib.dll/.so". mental ray searches for this
library on the path list for the shader lookup (same mechanism as
for the gen_llvm MetaSL backend). The plugin is loaded
automatically.
Standalone and SPM-protected mental ray libraries are now
delivered with iray plugin and CUDA runtime libraries. The plugin
installation is required only for rendering in the iray mode (
-iray command line option).
mi_lookup_color_texture(_x) or
mi_lookup_filter_color_texture(_x) function are called
for these textures and the upper pyramid levels would improve the
performance. Same applies for MetaSL shader filtered texture
lookups.
The original image data is not changed, so on-demand MIPMAP
pyramids are not available for shaders using low-level
mi_img_* interface.
Bug fixes:
{_MI_REG_METASL_EMULATE_MI_PHEN} set on).void mi_msg_usleep(int secs); is
restored in the integration interface.Shader changes:
Feature improvements:
[0,0] with motion blur option
enabled, use static acceleration
structure in order to improve performance and reduce memory
consumption.Bug fixes:
mi_rc_run_query function to the shader
interface. Though this function is intended for the integration,
some existing mental ray shaders depend on it.Feature improvements:
Bug fixes:
imf_disp tool, removed possible display
flickering.New features:
The support for MetaSL CIL backend on Windows is discontinued.
As the name implies, the backend is based on the LLVM technology. There is no dependency on external compilers or linkers. The compilation is done on demand in memory, no intermediate files are created. Currently, it is not possible to externalize shaders compiled with the LLVM backend. Thus, such shaders are not stored into the compiled shader cache. However, in case a shader has been compiled with C++ backend (using external C++ compiler), the existing shaders in the compiled shader cache would be used. Shaders compiled with LLVM and with C/C++ compiler can be mixed in one scene, phenomenon or shading tree.
In order to enable MetaSL LLVM backend, it is necessary to:
" {_MI_REG_METASL_BACKEND}" value
to "LLVM" or "llvm".-L command line option and by the
"{_MI_REG_LIBRARY}" registry value.LLVM MetaSL backend library is loaded automatically when the first MetaSL shader is compiled.
This version of LLVM backend is an initial implementation, only simplest shaders will compile successfully Known issue: on windows platforms, gen_llvm will crash at initialization.
In this release, iray is linked statically into the mental ray library. T
On Linux system, an automatic detection of the presence of CUDA-capable graphics card is provided. If not available, CPU mode is enabled. This functionality is planned for Windows and MacOSX as well.
In this version, iray relies on CUDA compute capability version 1.1.
Feature improvements:
miBoolean mi_trace_probe_x(
miState state,
const miVector *direction,
const miVector *origin,
miUint flag );
This function is similar to mi_trace_probe, but takes
a bitmask of visibility flags to test hits for. The enumeration for
the flags is added to the shader.h interface
file."premultiplied" on/off has been added to the
.mi syntax. If set, the compositing of a color
framebuffer(primary or user) is done according to the formula
(A + (1-opacity) * B), otherwise it is (opacity
* A + (1-opacity) * B).ddx/ddy. The
expressions only apply for normals, points and texture coordinates.
Note that the normal derivatives are computed for the interpolated
normal without the effect of bump shaders.imf_disp tool, added "always on top"
functionality.imf_disp tool, added mouse wheel scrolling
of the window.imf_disp tool, and DISP talk protocol,
added the ability to specify region of interest in the progressive
rendering mode.imf_disp tool, display currently rendered
rectangle.imf_disp tool used for stereoscopic
images, allow to select one of the possible ways to display stereo
images (View menu item):
-ip_rays
command line option. Before it was only possible with a .mi file
string option.const qualifiers are added to the public
API.Bug fixes:
new/new[] operators under mental ray
memory management/statistics system.imf_disp tool, link EXPAT library
statically. The dynamic library is missing on some older Linux
system.imf_disp tool, fixed several image
displaying issues.Known limitations in this version:
Feature improvements:
.msl / .xmsl file
include statements.const qualifiers are added to the public
API.Bug fixes:
scanline on.mi_info, mi_warning,
mi_error etc.: if called from threads not attached to
mental ray, these functions will return immediately without
printing any messages.MISTD. In particular, it does not have a dependency on
the _SECURE_SCL define value.Feature improvements:
mi_rc_progressive_set_buffer() function get an
additional bool argument with the default value
false. If the new paramerer is set to
true, multiple calls to mi_rc_run() could
be used with the same framebuffer,allowing a simplified and more
efficient call sequence as in the pseudo-code below. The call to
mi_rc_progressive_shutdown() is not required in this
case.
mi_rc_run(miRENDER_PREPROC|miRENDER_RENDER| ..., ... );
mi_rc_progressive_set_buffer( ... settings ... , true);
while (loop condition) {
mi_rc_progressive_cancel_rendering() or mi_rc_progressive_stop_rendering();
// do application incremental updates
// BSP is *not* rebuild by the kernel
mi_rc_run(miRENDER_REINHERIT |
[miRENDER_REINHERIT_LIGHTS |]
miRENDER_RENDER, ...);
}
mi_rc_run(miRENDER_POSTPROC, ...);
As the binary interface of the
mi_rc_progressive_set_buffer() function has been
changed, applications with progressive rendering integration need
to be recompiled against the new header files. No source code
changes are required for application using the old call
sequence.
{_MI_REG_METASL_TRACE}" is set are put into the
temporary files directory instead of current directory.Bug fixes:
mi_info, mi_warning,
mi_error etc.: if called from threads not attached to
mental ray, these functions will return immediately without
printing any messages.new/new[] operators under mental ray
memory management/statistics system.Bug fixes:
Feature improvements:
The command refine_fb xl,yl,xh,yh can be
used to specify that in the progressive rendering mode, additional
samples are placed in the specified window if progressive rendering
is used. imf_disp tool allows the selection of the window with the
mouse.
unlink "filename" command to the .mi syntax
in order to allow shader library replacements in mental ray
standalone. Without this syntax, this functionality was available
for raylib integration only.Bug fixes:
ccmesh objects, fixed memory allocations
bypassing mental ray memory manager. This memory was not counted in
statistics and could lead to a crash for large scenes..mi statements like link
"base.{EXT}".Feature improvements:
Bug fixes:
trace calls.Extended list and more detailed description for new features and changes will be provided with the next version.
Iray:
Some mental ray 3.8 distributions are coming with iray. Iray is
a CUDA-based high performance path tracing renderer implementing
mental images architectural material and material library shading
model. The integration of iray into mental ray
follows the raylib progressive rendering interface. In order to
enable iray, the command line -iray on options, or a
string option "iray" on should be used. iray is work in progress
and is not functional in this alpha version.
New features:
lft_ and
rgt_ for the left and right eye respectively.
Stereoscopic rendering is supported for the
rasterizer as well as scanline
on/off. View-dependent tessellation and displacement is
applied according to the camera located in the middle of two eye
positions. Same applies for the computation of finalgather maps.
This allows consistent rendering of two images and improves
performance by exploiting locality of the data and avoiding
redundant work.
The .mi syntax for the camera is extended with
camera "mycamera"
stereo <method> <eye_separation>
...
end camera
where method of left/right eye camera could be one of the following:
off Default, no stereoscopic rendering.toein The camera frustums are rotated so that the
two camera direction vectors meet at the focal length. This method
introduces perceptually incorrect vertical parallax which increases
out from the center of the projection plane and might cause a
visual discomfort when looking at rendered stereo images for a
longer time.offaxis This method is the perceptually correct
way to create stereo camera pairs. It introduces no vertical
parallax and is therefore less stressful to the observer. It
requires an asymmetric camera frustum, which most manufactured
cameras do not support as of today.offset This is the straightforward method for
rendering stereo pairs. It shifts the eyes along the horizontal
axis in camera space.It is possible to specify stereoscopic rendering parameters wit the command line option
-stereo <method> <eye_separation>
miCamera::miCamera_stereo (enumeration) and
miCamera::eye_separation members.
Stereoscopic rendering is not supported for orthographic cameras. For shaders, the camera space used if the position/orientation of the camera in the middle of two eye.
imf_disp 2.0
image viewer has been written. Unlike version 1,
the implementation is identical on Windows, Linux and MacosX
platform, delivering the same set of controls.
The major improvements include the ability to display live any of the rendering framebuffers (not just the primary color one), zoom, display individual channels, expose and gamma control. Automatic tonemapping is provided.
The new image viewer tool is compatible with progressive rendering and with stereoscopic images.
The compete list of command line options is given below:
imf_disp [/l <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:
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 "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".
In particular, this feature may be used for rendering of objects with multiple semi-transparent surfaces where explicit separating of layers is more efficient than limiting interpolation distance or increasing the density of the finalgather map.
The miIrrad_options structure passed to
mi_compute_avg_radiance() function has been extended
with the integer field "id". The default value for id
is zero. The id is stored with each finalgather point. For
interpolation, the id passed to the interpolation call is taken
into account: if zero, all finalgather points are potentially
accepted. If non-zero, only finalgather points with the same id are
accepted.
Backwards and forwards binary compatibility of mental ray shaders and finalgather map files is maintained.
-layer <name>
command line option for displaying of OpenEXR files. When rendering
OpenEXR images containing multiple framebuffers, mental ray stores
framebuffer images in channels called <framebuffer
name>.R, <framebuffer name>.G,
<framebuffer name>.B and <framebuffer
name>.R. In order to display one of those framebuffer
images, the <framebuffer name> without suffix
could be used with the -layer option.Bug fixes:
Feature improvements:
declare shader color "builtin_bsdf_carpaint" (
color "base_color" default 1 0 0 1,
color "reflectivity0" default 0.1 0.1 0.1 1,
color "reflectivity90" default 0.3 0.3 0.3 1,
scalar "fresnel_falloff" default 5,
scalar "metallic" default 0.3,
color "metallic_color" default 1 1 1 1,
scalar "metallic_falloff" default 8,
color "edge_color" default 1 0 0 1,
scalar "edge_falloff" default 2,
scalar "unit_scale" default 1,
scalar "sparkle_weight" default 0.05,
scalar "sparkle_falloff" default 1,
integer "mode",
array light "lights")
end declare
{_MI_REG_METASL_FLATTEN}
registry to a non-empty value.
Known limitations in this version:
Bug fixes:
a, a_h, a_fp,
m, n and z.mi_api_get_assembly_root function properly
for geometry shaders.Feature improvements:
/debug and /Z7 compiler/linker keys to
keep the debug information.Bug fixes:
/MDd key. This fixes
the message box pop-up when a MetaSL shader was used with mental
ray debug executable. Added /debug and
/Z7 compiler/linker keys to keep the debug
information.Access_bsdf was used in
a shader."vta", "vts", "tag" or
"bit" types into OpenEXR files.New features:
If a file with .msl or .xmsl extension
is included ($include statement in .mi
file), it is treated as a MetaSL shader source. mental ray would
read it, parse and convert it into the internal representation.
This internal representation is when used to create a shader
declaration and to generate shader C++ code. The external C++
compiler and linker are invoked in that file and create a dynamic
linked library in the directory containing temporary files. That
DLL is when linked into mental ray.
For windows platforms, it is planned to generate the managed code directly, which would remove the requirement on the C++ compiler installed.
In order for C++ compilation to succeed, the C++ compiler need
to be pointed to the include directories containing mental ray
headers files (shader.h and others), as well as MetaSL
C++ header files (root directory for
mi/metasl_runtime/*). In order to simplify it, mental
ray now applies the mental ray kernel include path to the compiler
invocations automatically. I.e., the include paths may be specified
on the mental ray standalone command line option -I,
or with {_MI_REG_INCLUDE} registry.
On windows platforms, shaders need to be linked against
shader.lib or ray.lib. If
shader.lib is not present in the compiler library
search path, it has to be specified with -ld_libs
and/or -ld_path command line options.
Known issues and limitations:
Feature improvements:
"-I" include paths
are passed to the C++ compiler invoked for MetaSL and C/C++ source
code shaders. If multiple -I command line options are
passed to the compiler, they are concatenated into semicolon
separated list, which corresponds to the intuitive behavior. mental
ray 3.7 and prior replaced the old command line option with a new
one."finalgather normal
tolerance". It specifies the maximal angle in degrees up to
which a finalgather point normal may deviate from the surface
normal for the finalgather point to be considered for
interpolation.
If the string option is not present, or exceeds its valid range of 0-90 degrees (exclusive of 0 and 90), the built-in default of 25.842 degrees is used to maintain backwards compatibility.
builtin_bsdf_architectural, but the declaration
follows those of the architectural material.builtin_bsdf_architectural and
builtin_bsdf_mirror BSDFs with the declarations as
below:
declare shader color "builtin_bsdf_architectural" (
color "diffuse_refl" default 0 0 0 1,
scalar "diffuse_refl_scalar" default 1,
scalar "diffuse_dev",
color "specular_refl" default 0 0 0 1,
scalar "specular_refl_scalar" default 1,
scalar "refl_gloss" default 1,
boolean "metal_material" default on,
color "specular_trans" default 0 0 0 1,
scalar "specular_trans_scalar" default 1,
scalar "trans_gloss" default 1,
color "diffuse_trans" default 0 0 0 1,
scalar "diffuse_trans_scalar" default 1,
scalar "anisotropy",
scalar "anisotropy_rotation",
integer "mode",
array light "lights")
end declare
declare shader color "builtin_bsdf_mirror" (
color "reflection" default 0 0 0 1)
end declare
The builtin_bsdf_architectural is a simplification
of the architectural material, containing the parameters relevant
for the material properties. The builtin_bsdf_mirror
is a simple specular reflection, which multiplies the reflected
color with the reflection parameter.
mi_ambient_occlusion function behavior has
been slightly modified. When the number of cache points in the
miAmboccl_options argument structure passed to the
function is 0, the cache is ignored and the ambient occlusion value
is computed. Negative cache points value (default: -1) still can be
used to take the number of cache points from the global
"ambient occlusion cache points" string option.A_H and S_H image types to
represent alpha and intensity images in half float resolution.Bug fixes:
mi_point/vector/normal_to/from_* function family. If
called on a hit point inside of an assembly, these functions
correctly use world space instead of the assembly local space
now.mi_query mode miQ_NUM_TEXTURES to return
correct value and avoid unnecessary tessellations.miState::time properly for volumetric and environment
shading.(-echo textures
command line option) for images using with more than 8 bits per
pixel per color channel, such as HDR.Shader changes:
mia_tonemap_api_untransform_color function which may
be used to revert the tone mapping effect.mip_gamma_gain shader, added gamma
correction for negative numbers. In particular, this protects
against possible NaN values.Feature improvements:
Bug fixes:
mi_msg_remove_host()
function call for IPv6 addresses.Feature improvements:
Bug fixes:
Shader changes:
mi_metallic_paint_shader_x
work if used as an a single shader or a phenomena root.Feature improvements:
"fine shared", "fine
nosmoothing", and "fine shared nosmoothing".
For the integrators, the
miAPPROX_STYLE_FINE_NO_SMOOTHING_CONT_DISP value has
been added to the miApprox_style enumeration.
The registry _MI_REG_SHARED_DISPLACEMENT which
could be used to enabled the "shared" mode globally for all objects
is deprecated, but could be used in mental ray 3.7
for compatibility reasons.
Bug fixes:
mi_par_aborted() check which prevented application
callback from been called.miState::pri, fixed.Shader changes:
misss_fast_shader_x to follow the same
conventions as multi-output architectural material shader. The
specular and diffuse properties of lights are adhered in the same
way as for the architectural material shader.mi_metallic_paint_x shader
identical to the metallic paint shader, but allowing multiple
outputs following the architectural material conventions.mi_ward_anisglossy function with inconsistent
arguments. The change also lead to a minor performance
improvement.mip_mirrorball and
architectural portal light mia_portal_light shaders,
changed errors to warnings in accordance to the common conventions
for recoverable scene issues.mia_portal_light
shader is made compatible with point-style area lights with no
direction specified.Bug fixes:
Changes affecting compatibility with older versions:
mi::shader_v3 namespace. A namespace alias for
mi::shader is added, so that no changes to the shader
code are required. Shader writers are expected to continue to use
the mi::shader namespace.
This fixes possible crashes (mismatched symbol linkage) if
several debug shader libraries using different versions of
mi::shader::Access_fb / Edit_fb were used
in the same rendering in version 3.7.1.8.
Feature improvements:
mi::shader::Options::get) and accessing of
the framebuffers (mi::shader::Access_fb /
Edit_fb) has been improved significantly. Accessing
string option still includes a hashtable lookup, so for performance
reason it is recommended to access them in the init shader
once.Map containers, avoid rebuilding of the
internal lookup acceleration structure when this is not
necessary.Bug fixes:
{_MI_REG_SHARED_DISPLACEMENT} registry.$ifeq preprocessor instructions of the .mi
parser for the environment variables.Changes affecting compatibility with older versions:
mi::shader::Interface version has been
increased to 3. Shaders compiled for mental ray 3.7 alpha versions
need to be recompiled. Shaders compiled for mental ray 3.6/3.6+
keep the limited binary compatibility with mental ray 3.7 over the
mi::shader::Interface version 2.Maps, fixed some const
qualifiers.mip_binaryproxy shader).Shader changes:
mip_binaryproxy shader compatible
with mental ray 3.7.mia_roundcorner shader, fixed possible crash
if the shader attached to the bump parameter returned struct
consisting of several outputs.mia_envblur, improved the behavior of the shader in
the erroneous situation of the parameter environment not set
(meaning usage of the camera/material environment shader), and the
share itself being set as such shader, which has caused recursive
shader calls.Changes affecting compatibility with older versions:
Type to miUint to avoid
possible incompatibilities on sizeof(enum).Map containers, adjusted signatures of
get and set methods using
miMatrix. This is required to as miMatrix
is is typedef to float[16] and compiler cannot
distinguish between reference to it and pointers for scalars on
function calls.Feature improvements:
Bug fixes:
"::1") into IPv4 addresses.Tutorial on usage of irradiance particles has been added.
New features:
triangle estimate
<int>" to the .mi syntax, and the new member field
miObject::tri_est. If specified this field may be set
by a translator or exporter and give approximate number of
triangles expected for the given object. CAD application frequently
would know the precise number, but even if it is know only up to an
order of magnitude it is advisable to provide it. In the future
versions, mental ray will use it as a hint for optimizing
performance and memory usage.mi_api_rename(char *target, char *source)
and corresponding .mi syntax
rename "target" "source"
This function may be used to rename existing scene entities without recreating them, in particular this may be used by application interface to follow user interaction.
The function has following limitations:
Feature improvements:
Bug fixes:
shader.lib
proxy for shaders calling to mi_scene_recreate on
miSCENE_NBOX type.The manual for this version has been improved.
New features:
Syntax and application API has been added for the Map containers introduced in version 3.7.1.2.
The syntax is similar to user data elements. The layout of the map can be declared with
declare map "name"
[ dim int , ]
paremeter1,
...
paremeterN
end declare
with each of parameters being one of
integer "parname"
scalar "parname"
vector "parname"
color "parname"
transform "parname"
array int integer "parname"
array int scalar "parname"
The allowed parameter types are 32-bit integers, single precision floats, float 3d vectors, 4 component float colors and 4x4 float matrices, as well as fixed size arrays of integers and floats.
For a declared layout, a map content may be specified as
map "mapname" "layout"
(
["mapfile1", ... "mapfileN"] |
{ <rec1field1>, ... , <rec1fieldM> },
....,
{ <recKfield1>, ... , <recKfieldM> }
)
end map
i.e., either a list of file names containing binary map data is specified, or the list of fields for each particles in the map.
Each recSfieldT entry should consist of the proper number of space separated float or integer values. The first record in each row should be N floats corresponding to the position of a particle in the N-dimensional map.
The Map type has been added to the list of legal shader parameter types, following usual conventions. A Map cannot be an output of a shader.
The equivalent API functionality is provided with the
mi_api_map_* functions family.
Additional documentations and tutorials will be added in upcoming releases.
Feature improvements:
Bug fixes:
finalgather fastlookup option has been
enabled.New features:
In the current version, mental ray supports Lambert, Phong and Ashikhmin BRDFs, which are built into the kernel. Built-in shaders implementing these BSDFs are pre-registered in the mental ray API as:
declare shader color "builtin_bsdf_phong" (
color "diffuse",
color "glossy",
scalar "exponent",
array light "lights",
integer "mode" )
version 1
end declare
declare shader color "builtin_bsdf_lambert" (
color "diffuse",
array light "lights",
integer "mode" )
version 1
end declare
declare shader color "builtin_bsdf_ashikhmin" (
color "diffuse",
color "glossy",
scalar "exp_u",
scalar "exp_v",
array light "lights",
integer "mode" )
version 1
end declare
Further standard BSDFs will follow.
An instance of a BSDF shader with given parameters may be
specified with the usual syntax. Input parameters of a BSDF shader
can be specified as the result of other shaders, allowing
conventional shading trees and phenomena to be used. The
miMaterial structure has been extended with a
bsdf slot, which may specify an instance for one of
the BSDF shaders listed above. The .mi syntax is extended with the
bsdf keyword, allowing to specify the BSDF shader in
the material.
A material shader may access the BSDF attached to the current
shading state by using mi::shader::Access_bsdf class.
The API for interaction with BSDFs is declared in the new
shader_bsdf.h header file. It is described in the
doxygen documentation in the manual.
BSDFs may be split into up to 6 components (reflection and
refraction, with diffuse, glossy, and specular components each).
The eval function evaluates all BSDF components, or a
subset thereof, for a pair of incoming and outgoing directions. The
Bsdf interface also provides a sample
function, which allows importance sampling of outgoing directions
for a given incoming direction. In addition, this function provides
information about the sampled component and the sample weight. The
latter can easily be combined with Russian roulette for absorption,
which could be used e.g. for writing photon shaders.
A BSDF shader may be attached as material shader into
miMaterial. In this case, mental ray takes care of
simulating a material shader based on the BSDF.
With BSDF shaders, it is possible to omit photon shaders. For
materials with a BSDF shader, but no photon shader specified,
mental ray automatically uses the BSDF shader and use its
sample function to simulate photon shader behavior.
For the future version, this fallback into BSDF will be enabled for
other indirect illumination techniques.
Bug fixes:
$ifeq preprocessor instructions of the .mi
parser using registry variables. The
mi_string_substitute function applied to a string
consisting of a single reference to a undefined registry returned
the unchanged string instead of empty string.Feature improvements:
-maxlics. This option
may be usable for renderfarms running multiple mental ray
executables on the same machine. If set on, independently on how
many threads are running by each executable, the maximal number of
licenses applicable for the given machine is allocated and
shared between all mental ray
executables.miState::dot_nd initialized by
intersection code, and the dot_nl parameter returned
by light loop are in the [-1, 1] range. Small deviations were
possible due to precision issues.Bug fixes:
Changes affecting compatibility with older versions:
mi_shader_if.h header file now
include several partial header files according to the features if
the mi::shader::Interface class. Shader writers are
still supposed to include the mi_shader_if.h file into
the shader C++ files.Shader changes:
mia_envblur added a detection of the invalid usage of
the "environment" argument pointing back to itself and
for the similar case when mia_envblur shader is part
of the global environment map, and the "environment"
parameter is not specified, which efficiently resulted in
self-reference. An error message is printed and the environment
shader is disabled now.New features:
mental ray kernel provides functionality creating, accessing and
editing of Maps, as well as loading them from files and saving them
to files. An efficient nearest neighbor lookup functionality is
implemented, utilizing either euclidian distance or arbitrary
distance functor provided by user. The distance functor may
implement rejections by returning the miHUGE_SCALAR
value.
Particle data may be any structure consisting of the common types including scalars, integers, vectors, colors and transforms. All particles in a single map have identical layout.
The position of a particle is an N-dimensional float vector, where N varies in range from 1 to 6 in the current implementation.
In this version, Maps need to be created or loaded by
applications or shaders. API interface and .mi syntax for named
Maps will be added in the next version. Minor modifications for the
lookup interface are still expected. Documentation for the feature
will follow. The interface functions can be found in the
mi_shader_if.h file.
Feature improvements:
mi_rc_run now returns to the application in one second
and does not wait until all rendering threads are blocked. The
rendering threads are still blocked on memory or database
operations, possibly after mi_rc_run returns. Previous
synchronous mode where mi_rc_run returned first after
all threads get blocked was less robust: threads blocked on
internal locks were not counted, which resulted in a possible
application freeze.miBoolean, which is typedefed to int.Bug fixes:
off).'{{' and '}}' escaping for
file name lookups introduced in version 3.6.52.5, fixed possible
failure to apply the unescaping exactly one time.MI_SURF_CCMESH environment variable), fixed broken
motion vectors for multi-segment motion.Changes affecting compatibility with older versions:
0.1 (per
pixel). In combination with photons, the old default value of 1 is
still used.Shader changes:
mip_render_subset production shader, fixed
possible wrong subset of geometry rendered in the finalgather
precomputing mode.mip_motionblur and
mip_motion_vector production shaders used with
orthographic camera.mip_mirrorball and
mip_greyball, fixed possible crash with non-zero blur
and no texture attached.mip_binaryproxy shader, the amount
of displacement has not been taken into account for bounding box
computation, fixed.transmat" shader did not support
segment shadow mode. Fixed.New features:
Especially for curved hair and hair at higher viewing distance, the new approximation criterion allows to have high approximation resolution restricted to the area where needed. The lower number of hair segments result in reduced memory consumption and increase rendering speed.
The approximation can be specified on a hair object with the following syntax:
approximate hair <curve_approx>
with <curve_approx> being any curve
approximation technique, for example:
approximate hair view length 3 distance 0.1 angle 5 0
7
In order to get benefit from curvature-dependent approximations, hair needs to be modelled appropriately with hair degree > 1.
For fast moving objects, images with comparable visual quality may be achieved with fewer displacement tessellation details compared to static or slow moving objects. Though it is also possible to tweak displacement approximation on a per-object basis, this requires a lot of manual efforts and is rarely done in practice. Per-object granularity may also be not fine enough for object having different amount of motion in different parts. The new approximation motion factor provides an automatic way for adjusting the displacement quality according to the amount of motion for a given object part.
For view-dependent fine poky displacement the adaptive subdivision checks motion length in screen space. The measured motion length is used to modify the use of the approximation constant. Geometry is reduced only in areas of the object with strong motion.
The string option"geom displace motion factor" f
can be used to modify the amount of geometry reduction compared to
static case, with float f >= 0. The factor
f=0 turns off the feature. The factor f=1
is currently the default, and gives higher values of f
give more reduction. This default value is
experimental and is rather conservative:
the simplification of geometry will have an effect for motion of
approximately 16 pixels. In order to get effect on slower motion,
higher values should be used. For example, the factor value of 8
would reduce geometry in areas of objects moving at the speed of 2
pixels per frame.
In the current version, it can be enabled by setting the
environment variable
MI_DISTANCE_RATIO and using the
distance approximation technique. Recommended values are of order
0.02, with finer approximations corresponding to smaller
values.
Feature improvements:
If Irradiance Particles interpolation is disabled then only environment presampling map is build and no further precomputation steps are required.
If Irradiance particles Interpolation is enabled, then particles are emitted in the precomputation pass in a usual way, but used as interpolation points only.
In both cases, only the environment map lighting but not diffuse bounces are taken into account.
Bug fixes:
Changes affecting compatibility with older versions:
mi_openexr.dll, a warning message is printed.miGeoBox
structure.miMaterial structure has been extended with bsdf
slot.miHair_list structure has been
extended with approximation. Unused integer approximation has been
removed.mi::shader::Interface class.OpenEXR is a flexible image format designed by Industrial Light & Magic, which has been integrated in mental ray 3.3.0.389 and later versions. OpenEXR comes with the following copyright, which applies only to the OpenEXR portion of mental ray:
Copyright © 2004, Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd. Portions contributed and copyright held by others as indicated. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The ``Pxr24'' compression in OpenEXR comes with the following copyright, which apples only to parts of the OpenEXR portion of mental ray:
Copyright © 2004, Pixar Animation Studios
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Copyright Information
Copyright © 1986-2010 mental images GmbH, Berlin, Germany.
All rights reserved.
This document contains proprietary and confidential information of mental images GmbH and is protected under copyright law. The contents of this document may not be disclosed to third parties, translated, copied or duplicated in any form, in whole or in part, without the express written permission of mental images GmbH.
The information contained in this document is subject to change without notice. Neither mental images GmbH nor its employees shall be responsible for incidental or consequential damages resulting from the use of this material or liable for technical or editorial omissions made herein.
mental images®, mental ray®, mental matter®, mental mill®, mental queue™, mental q™, mental world™, mental map™, mental earth™, mental mesh™, mental™, Reality™, RealityServer®, RealityPlayer®, RealityDesigner®, MetaSL®, Meta™, Meta Shading™, Metanode®, Phenomenon™, Phenomena™, Phenomenon Creator®, Phenomenon Editor™, Phenomill™, Phenograph™, neuray®, iray®, imatter®, Cybernator™, 3D Cybernator™, Shape-By-Shading™, SPM®, NRM™, 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.