Material Definition Language API nvidia_logo_transpbg.gif Up
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
mi::neuraylib::IMdl_distiller_api Class Referenceabstract

Provides access to various functionality related to MDL distilling. More...

Inheritance diagram for mi::neuraylib::IMdl_distiller_api:
mi::base::Interface_declare< 0x074709ef, 0x11b0, 0x4196, 0x82, 0x1c, 0xab, 0x64, 0x1a, 0xa2, 0x50, 0xdb > mi::base::IInterface

Public Member Functions

virtual Size get_target_count () const =0
 Returns the number of targets supported for distilling. More...
 
virtual const char * get_target_name (Size index) const =0
 Returns the index -th target name supported for distilling, or NULL if index is out of bounds. More...
 
virtual const ICompiled_materialdistill_material (const ICompiled_material *material, const char *target, const IMap *distiller_options=0, Sint32 *errors=0) const =0
 Distills a material. More...
 
virtual const IBakercreate_baker (const ICompiled_material *material, const char *path, Baker_resource resource=BAKE_ON_CPU, Uint32 gpu_device_id=0) const =0
 Creates a baker for texture baking. More...
 

Additional Inherited Members

- Public Types inherited from mi::base::Interface_declare< 0x074709ef, 0x11b0, 0x4196, 0x82, 0x1c, 0xab, 0x64, 0x1a, 0xa2, 0x50, 0xdb >
typedef Interface_declare< id1,
id2, id3, id4, id5, id6, id7,
id8, id9, id10, id11,
IInterface
Self
 Own type. More...
 
typedef Uuid_t< id1, id2, id3,
id4, id5, id6, id7, id8, id9,
id10, id11 > 
IID
 Declares the interface ID (IID) of this interface. More...
 
- Static Public Member Functions inherited from mi::base::Interface_declare< 0x074709ef, 0x11b0, 0x4196, 0x82, 0x1c, 0xab, 0x64, 0x1a, 0xa2, 0x50, 0xdb >
static bool compare_iid (const Uuid &iid)
 Compares the interface ID iid against the interface ID of this interface and of its ancestors. More...
 

Detailed Description

Provides access to various functionality related to MDL distilling.

Member Function Documentation

virtual const IBaker* mi::neuraylib::IMdl_distiller_api::create_baker ( const ICompiled_material material,
const char *  path,
Baker_resource  resource = BAKE_ON_CPU,
Uint32  gpu_device_id = 0 
) const
pure virtual

Creates a baker for texture baking.

Parameters
materialThe material of which a subexpression is to be baked.
pathThe path from the material root to the expression that should be baked, e.g., "surface.scattering.tint".
resourceThe resource to be used for baking.
gpu_device_idThe device ID of the GPU to be used for baking (as identified by the CUDA runtime or driver API). Ignored if resource is BAKE_ON_CPU.
Returns
A baker for the expression of the given material identified by path, or NULL in case of failure. Note that returned baker depends on the transaction that was used to access the material.
virtual const ICompiled_material* mi::neuraylib::IMdl_distiller_api::distill_material ( const ICompiled_material material,
const char *  target,
const IMap distiller_options = 0,
Sint32 errors = 0 
) const
pure virtual

Distills a material.

Material distilling refers to the translation of an arbitrary input material to a predefined target model. Supported target models are

  • diffuse
  • diffuse_glossy
  • specular_glossy
  • ue4
  • transmissive_pbr

Depending on the structure of the input material and the complexity of the target model the resulting material can be as simple as a single bsdf or a set of bsdfs combined using layerers and mixes as illustrated in the table below using a pseudo-mdl notation.

diffuse surface.scattering = diffuse_reflection_bsdf
geometry.normal = ()
diffuse_glossy surface.scattering = fresnel_layer(layer: simple_glossy_bsdf, base: diffuse_reflection_bsdf)
geometry.normal = ()
surface.scattering = diffuse_reflection_bsdf
geometry.normal = ()
surface.scattering = simple_glossy_bsdf
geometry.normal = ()
specular_glossy surface.scattering = custom_curve_layer(layer: bsdf_glossy_ggx_vcavities, base: diffuse_reflection_bsdf)
geometry.normal = ()
Any subset of the above construct, see diffuse_glossy.
ue4 surface.scattering = custom_curve_layer( // clearcoat
  layer: bsdf_glossy_ggx_vcavities,
  base: weighted_layer(
    layer: normalized_mix(
      bsdf_glossy_ggx_vcavities,
      custom_curve_layer(
        layer: bsdf_glossy_ggx_vcavities,
        base: diffuse_reflection_bsdf
      ),
    ),
    normal: () // under-clearcoat normal
  ),
  normal: () // clearcoat normal
)
A weighted_layer of any subset of the above construct with an optional clearcoat on top.
transmissive_pbr surface.scattering = custom_curve_layer( // clearcoat
  layer: bsdf_glossy_ggx_vcavities,
  base: weighted_layer(
    layer: normalized_mix(
      bsdf_glossy_ggx_vcavities,
      custom_curve_layer(
        layer: bsdf_glossy_ggx_vcavities,
        base: normalized_mix(
           bsdf_glossy_ggx_vcavities(scatter_transmit)
           diffuse_reflection_bsdf
        ),
      ),
    ),
    normal: () // under-clearcoat normal
  ),
  normal: () // clearcoat normal
)
A weighted_layer of any subset of the above construct with an optional clearcoat on top.
Parameters
materialThe material to be distilled.
targetThe target model. See get_target_count() and get_target_name().
distiller_optionsOptions for the distiller. Supported options are:
  • "top_layer_weight" of type mi::IFloat32. This weight is given to the top layer if a Fresnel layered BSDF is simplified to a single diffuse BSDF in the 'diffuse' distilling target. The base layer uses one minus this weight. Default: 0.04.
  • "layer_normal" of type mi::IBoolean. If true, it enables the aggregation of the local normal maps of BSDF layerers to combine them with the global normal map. Default: true.
errorsAn optional pointer to an mi::Sint32 to which an error code will be written. The error codes have the following meaning:
  • 0: Success.
  • -1: Invalid parameters (NULL pointer).
  • -2: Invalid target model.
  • -3: Unspecified failure.
Returns
The distilled material, or NULL in case of failure.
virtual Size mi::neuraylib::IMdl_distiller_api::get_target_count ( ) const
pure virtual

Returns the number of targets supported for distilling.

virtual const char* mi::neuraylib::IMdl_distiller_api::get_target_name ( Size  index) const
pure virtual

Returns the index -th target name supported for distilling, or NULL if index is out of bounds.