Announcement: MDL SDK 2018.1.2 released

This has some major new features like support for automatic derivatives.

Get the update on https://developer.nvidia.com/mdl-sdk or the sourcecode directly at https://github.com/NVIDIA/MDL-SDK

Changes compared to previous version (excerpt from the full release notes shipped with the SDK):

MDL SDK 2018.1.2, build 312200.1292

Added and Changed Features
MDL 1.5 Language Specification

  • A first pre-release draft of the NVIDIA Material Definition Language 1.5: Appendix E - Internationalization has been added to the documentation set.

General

  • Support for the internationalization of MDL string annotations has been added. See the MDL 1.5 Language Specification for details.
  • A new API component mi::neuraylib::IMdl i18n configuration has been added, which can be used to query and change MDL internationalization settings.
  • A new standalone tool to create XLIFF files has been added. See i18n.
  • Calling mi::neuraylib::ITransaction::remove()on an MDL module will cause the module and all its definitions and other dependencies to be removed from the database as soon as it is no longer referenced by another module, material instance or function call. The actual removal is triggered by calling mi::neuraylib::ITransaction::commit().
  • A new API component mi::neuraylib::Mdl compatibility api has been added which allows to test archives and modules for compatibility.
  • A new standalone tool to manage MDL archives has been added. See mdlm.
  • A new API class mi::neuraylib::IMdl execution context intended to pass options to and receive messages from the MDL compiler has been added.
  • A new API class mi::neuraylib::IMessage intended to propagate MDL compiler and SDK messages has been added.
  • A new API function mi::neuraylib::IMdl factory::create execution context has been added.
  • The signatures of the API functions { mi::neuraylib::IMaterial instance::create compiled material() { mi::neuraylib::IMdl compiler::load module() { mi::neuraylib::IMdl compiler::load module from string() { mi::neuraylib::IMdl compiler::export module() { mi::neuraylib::IMdl compiler::export module to string() { mi::neuraylib::IMdl backend::translate environment() { mi::neuraylib::IMdl backend::translate material expression() { mi::neuraylib::IMdl backend::translate material df() { mi::neuraylib::IMdl backend::translate material() { mi::neuraylib::IMdl backend::create link unit() { mi::neuraylib::IMdl backend::translate link unit() { mi::neuraylib::ILink unit::add environment() { mi::neuraylib::ILink unit::add material expression() { mi::neuraylib::ILink unit::add material df() { mi::neuraylib::ILink unit::add material() have been changed to use the new class mi::neuraylib::IMdl execution context. The old versions have been deprecated and prefixed with deprecated . They can be restored to their original names by setting the preprocessor define MI NEURAYLIB DEPRECATED 9 1.
  • The API functions { mi::neuraylib::IMdl backend::translate material expression uniform state() { mi::neuraylib::IMdl backend::translate material expressions() have been deprecated and prefixed with deprecated . They can be restored to their original names by setting the preprocessor define MI NEURAYLIB DEPRECATED 9 1.
  • The utility classes { mi::neuraylib::Definition wrapper and { mi::neuraylib::Argument editor have been extended to provide member access functions. MDL Compiler and Backends
  • Support for automatic derivatives for 2D texture lookups has been added to the PTX, Native x86 and LLVM IR backends. This feature can be enabled via the new backend option "texture runtime with derivs". Please refer to the "Example for Texture Filtering with Automatic Derivatives" documentation for more details.
  • Measured EDFs and BSDFs can now be translated to PTX, Native x86 and LLVM IR. Note that the texture runtime needs to be extended with utility functions that enable runtime access to the data.
  • Spot EDFs can now be translated to PTX, Native x86 and LLVM IR.

MDL Distiller and Baker

  • Distilling speed has been improved by disabling extra error checking in release builds.

MDL SDK examples

  • Support for automatic derivatives has been added to the example execution native, example execution cuda and example df cuda examples, which can be enabled via a command line option.
  • The example execution native example has been extended to allow to specify materials on the command line. It is now also possible to enable the user-defined texture runtime via a command line switch.
  • The CUDA example texture runtime has been extended with support for measured EDF and BSDF data.
  • The MDL Browser is now available as a QT QML Module which can also be integrated in non-qt based applications.
  • Initial support for class compiled parameters of type texture, light profile, and bsdf measurement has been added to example df cuda. So far, it is only possible to switch between all loaded resources, new resources cannot be added.

Fixed Bugs
General

  • An error when exporting presets where MDL definitions used in the arguments require a different version than the prototype definition has been fixed.

MDL Compiler and Backends

  • A missing check for validity of refracted directions has been added to the generated code for the evaluation of microfacet BSDFs.
  • Incorrect code generation for math::length() with the atomic types float and double has been fixed.
  • The computation of the minimum correction pattern in the MDL compiler has been fixed.
  • The compilation of || and && inside DAG IR has been fixed.
  • Pre and post increment/decrement operators when inlined into DAG-IR have been fixed.
  • Previously missing mixed vector/atomic versions of math::min() and math::max() have been added.
  • The handling of (wrong) function references inside array constructor and init constructor has been fixed, producing better MDL compiler error messages.
  • The hash computation of lambda functions with parameters has been fixed.
  • If an absolute file url is given for a module to be resolved AND this module exists in the module cache, the module cache is used to determine its file name. This can speed up file resolution and allows the creation of presets even if the original module is not in the module path anymore.
  • A memory leak in the JIT backend has been fixed.
  • The generated names of passed expressions for code generation have been fixed.

MDL Distiller and Baker

  • A memory leak in the distiller component has been fixed.

Known Restrictions

  • When generating code for distribution functions, the parameter global distribution on spot and measured EDFs is currently ignored and assumed to be false.