neuray API Programmer's Manual

mi::neuraylib::IMdl_distiller_api Class Reference

[Miscellaneous MDL-related Interfaces]

Description

Provides access to various functionality related to MDL distilling.

Public Member Functions

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...
virtual 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 char* get_required_module_code( const char* target, Size index) const =0
Returns the MDL source code of the required MDL module with the given index for the given target. More...
virtual Size get_required_module_count( const char* target) const =0
Returns the number of required MDL modules for the given target. More...
virtual const char* get_required_module_name( const char* target, Size index) const =0
Returns the MDL name of the required MDL module with the given index for the given target. More...
virtual Size get_target_count() const =0
Returns the number of targets supported for distilling.
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.

Member Functions

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

material
The material of which a subexpression is to be baked.
path
The path from the material root to the expression that should be baked, e.g., "surface.scattering.tint".
resource
The resource to be used for baking.
gpu_device_id
The 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 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

  • 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 = ()

specular_glossy

surface.scattering = custom_curve_layer(layer: bsdf_glossy_ggx_vcavities, base: diffuse_reflection_bsdf)

geometry.normal = ()

surface.scattering = bsdf_glossy_ggx_vcavities

geometry.normal = ()

surface.scattering = diffuse_reflection_bsdf

geometry.normal = ()

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

material
The material to be distilled.
target
The target model. See get_target_count() and get_target_name().
distiller_options
Options 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.
errors
An 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 const char* mi::​neuraylib::​IMdl_distiller_api::get_required_module_code( const char* target, Size index) const [pure virtual]

Returns the MDL source code of the required MDL module with the given index for the given target.

See also:

get_required_module_count()

Parameters

target
The target material model to distill to.
index
The index of the required module for the given target.

Returns

The MDL source code of the required module.

virtual Size mi::​neuraylib::​IMdl_distiller_api::get_required_module_count( const char* target) const [pure virtual]

Returns the number of required MDL modules for the given target. If a target reports any required modules, the integrating application must query the name and MDL code for each of them using get_required_module_name() and get_required_module_code() and load them using mi::neuraylib::IMdl_impexp_api::load_module_from_string() before distilling any material to that target, otherwise distilling will fail.

Parameters

target
The target material model to distill to.

Returns

The number of required MDL modules for that target.

virtual const char* mi::​neuraylib::​IMdl_distiller_api::get_required_module_name( const char* target, Size index) const [pure virtual]

Returns the MDL name of the required MDL module with the given index for the given target.

See also:

get_required_module_count()

Parameters

target
The target material model to distill to.
index
The index of the required module for the given target.

Returns

The MDL name of the required module.

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.