Emission distribution functions
The way in which light is distributed from an emissive surface is defined in the Material Definition Language (MDL) by an emission distribution function (EDF). An EDF is specified as a field value in an MDL struct.
The material_surface struct defines light emission through its emission field:
struct material_surface { bsdf scattering = bsdf(); material_emission emission = material_emission(); };
The value of the emission field is an instance of the material_emission struct. This struct defines the EDF to use for emission in its edf field:
struct material_emission { edf emission = edf(); color intensity = color(0.0); intensity_mode mode = intensity_radiant_exitance; };
The result of the EDF is also scaled by the intensity field of the material_emission struct, depending upon the value of the mode field, an enum of type intensity_mode that determines the measure used for the emission intensity:
enum intensity_mode { intensity_radiant_exitance, intensity_power };
In general, an EDF complements the distribution function in a material_surface struct that defines how light is reflected from and transmitted through a surface by its scattering field. Taken together, reflected, transmitted, and emitted light account for all illumination perceived on an object.
Types of emission distribution functions
MDL defines three types of emission distribution functions:
- diffuse_edf
-
Light is emitted uniformly in all directions.
- spot_edf
-
Light emission is restricted into a cone into which the hemispherical domain for the distribution is rescaled. By default, the spot light axis is oriented along the surface normal at the emission point. A parameter defines an exponent that modifies the cosine of the angle between the axis and the sample point.
- measured_edf
-
The light distribution is defined by a light profile, a description of the light emittance for real-world lights from a point light source in a particular direction. A light profile is the primary parameter of the measured_edf. It can also be included in the scene as an argument of an MDL function call (see mi::neuraylib::IMdl_function_call) or as the default argument of an MDL function definition (see mi::neuraylib::IMdl_function_definition). The type of such an argument is Attachable<Ref<Lightprofile>> (see mi::IRef and mi::IAttachable).
The IES light profile [IES02] is an industry-standard format for describing real-world lights and is implemented in MDL. These light profiles are datasets supplied by lamp vendors to describe their individual products.