This document describes the DIRSIG material database file.
Summary
All materials used within a scene are defined within a single
database referenced from the scene file. A material
is considered to be a single class of physical substance (such as
healthy grass or concrete) and contains the optical and thermal
properties relevant to performing radiometry calculations associated
with the material. This document describes the general structure
of the material database file (usually denoted with a .mat
extension) and the types of materials that can be defined.
Related Materials
The following demos, manuals and tutorials can provide additional information related to this plugin:
-
Related Demos
-
N/A (all demos use a material database).
-
-
Related Manuals
-
The surface properties manual.
-
The bulk properties manual.
-
The radiometry solvers manual.
-
The temperature solvers manual.
-
The maps manual.
-
-
Related Tutorials
Format Overview
The material database uses an older ASCII/Text "tag+value" format that was introduced in DIRSIG3 (in contrast to the formal XML or JSON formats used in current versions of DIRSIG). Careful attention should be paid to the formatting of each entry. A GUI editor is distributed with DIRSIG to facilitate creation and modification of materials.
A Variable
A variable in a DIRSIG "tag+value" format file is composed of a variable name and an assigned value. A variable can be assigned a string, a number, etc.
ANIMAL = Dog
A Section
A section in a DIRSIG "tag+value" format file is composed of a section name and an open/close pair of curly brackets. A section can contain any number of variables and additional sections (aka "sub-sections"):
MEAL { NAME = Dinner TIME = 5:00 CALORIES = 800 }
The tag section parser expects the opening curly bracket ({ )
on the same line as the section name. The closing bracket (} )
should be on its own line (and preferably at the same indentation
as the start of section for readability).
|
A DIRSIG material database is composed of a series of material sections. A description of the variables and sections that can be used in a material are described in the remainder of this document.
The general format of the material database has not changed significantly since DIRSIG3. However, there has been an evolution to more detailed structure to make the management of newer features easier. The older format of the material entry has a different tag format and has limited component options. It is covered at the end of this document. |
There is no master list of material IDs or conventions for assigning IDs to materials. Two separate scenes might have completely different material databases with overlapping IDs. The material editor contains some tools to facilitate merging material databases and making sure that IDs are unique. |
Material Description
Each material entry is contained in a section named MATERIAL_ENTRY
.
Even though individual materials might describe very different
things (surface versus medium properties), all materials use the
same MATERIAL_ENTRY
tag. Each entry contains a subset of the following:
-
The attributes for the material
-
Name, ID, and editor color associated with the material
-
Double sidedness, back-side medium, thickness, etc…
-
-
The optical properties for the material
-
For a "surface" material, these are surface properties (e.g., reflectance, transmittance, etc.).
-
For a "volume" material, these are bulk properties (e.g., absorption, scattering, etc.).
-
-
The radiometry solver for the material
-
Specific algorithm and inputs used to compute radiometry (only used by DIRSIG4)
-
-
The temperature solver for the material
-
Method and inputs to the temperature calculation at a surface
-
Attributes
Material entries have a set of top-level attribute variables that are used for all material types.
NAME
(required)-
This is the name associated with the material. It will be used when displaying information about the material while the scene is loaded and is usually a short description of what the material represents. It is strongly recommended to make these names as descriptive as possible.
ID
(required)-
Each material has a unique alpha-numeric ID. This ID is used to associate the materials with other components of the scene (most notably geometry). An alpha-numeric ID can contain any characters except whitespace (space, tabs, etc.).
Although many older DIRSIG scenes used numerical IDs exclusively,
it is strongly encouraged that new materials use an alpha-numeric
labels. For example, auto_glass is far more useful than 8088
when looking at the material IDs assigned in an object geometry
file.
|
EDITOR_COLOR
(optional)-
Whenever this material is used in an editor (e.g. bulldozer), this is the RGB color that will be used for the visualization. Usually this is set to something that will be a good reminder of what the material represents (e.g. grass might have a green editor color). The color is represented as an R, G, B (Red, Green, Blue) triplet where the relative weight of each is expressed on a [0,1] scale.
DOUBLE_SIDED
(optional)-
By default, surfaces in DIRSIG4 are only visible from the "front" of the surface (the direction in which the surface normal is facing). This means that we do not need to check for intersections from the backside, saving quite a bit of computation time. This behavior can (and should) be turned off for certain types of materials such as leaves and medium interfaces where we need to see both sides of the surface. This can be achieved by setting
DOUBLE_SIDED = TRUE
(the default value isFALSE
).
Turning on double-sided intersections in DIRSIG4 was also a way of dealing with poorly defined geometry models that might have normals that flip back and forth across the surface of the object (this is a problem that can occur when converting one file format to another and can be difficult to fix in the geometry itself). |
In DIRSIG5, all surfaces are automatically double-sided. |
BACK_MAT_ID
(optional)-
In order to define an interface between two materials, a
BACK_MAT_ID
needs to be assigned to the material definition. Normally when passing through a transmissive surface we assume that we are in the same medium as we were were on the other side. The presence ofBACK_MAT_ID
means that the given material ID defines the new medium on the other side (it should refer to a material with bulk properties defined later on in the material databases). The medium material mechanism can be thought of as a state "stack" in which new mediums are pushed onto the stack when passing through an interface from front to back and popped off of the stack when passing in the opposite direction. Since no assumptions are made about the current medium it is possible to embed mediums inside other ones if desired (e.g. an air bubble inside of water).
In DIRSIG5, backside materials do not exist and are handled by specific plugins rather than via material configurations. |
THICKNESS
(optional)-
The thickness override can be used to set the virtual thickness of the facet, overriding any value that might have been set as part of a thermal property description. This is useful for objects such as leaves which might be modeled as perfectly flat and purely attenuating surfaces (based on the virtual thickness) with no thickness set otherwise.
MATERIAL_ENTRY { NAME = Tree, Bark, Maple ID = 8031 ... }
Surface Properties
Any material that describes a surface (as opposed to a volume) needs
to define surface properties such as the reflectance or emissivity
of the material. Surface properties are defined in a tag section
named SURFACE_PROPERTIES
containing the relevant property
configurations. A DIRSIG surface material is assigned properties
by providing the name of the property to an associated name variable
and then supplying the parameters for that property in an associated
section. In the example below, the Ward
BRDF reflectance property is requested via the REFLECTANCE_PROP_NAME
variable and the inputs for that property are supplied in the
REFLECTANCE_PROP
section:
MATERIAL_ENTRY { ... SURFACE_PROPERTIES { REFLECTANCE_PROP_NAME = WardBRDF REFLECTANCE_PROP { DS_WEIGHTS = 0.00 0.37 XY_SIGMAS = 0.13 0.13 } } }
DIRSIG supports three difference classes of surface properties. The DIRSIG Surface Properties Manual describes all of the properties available.
-
Emissivity (provided via the
EMISSIVITY_PROP
)-
This is the property used to define the emissivity (related to the absorption of the material) which describes how well the material emits energy relative the a blackbody at the same temperature. Note that the emissivity is often assumed to be directionally uniform, though the model may change that.
-
A list of available emissivity properties is available here.
-
-
Reflectance (provided via the
REFLECTANCE_PROP
)-
This is the property used to define the spectral reflectance of the surface, both the total reflectance off of the surface, as well as the bi-directional distribution of that reflectance.
-
A list of available reflectance properties is available here.
-
-
Transmittance (provided via the
TRANSMITTANCE_PROP
)-
This is the property used to define the spectral transmittance of the surface, both the total transmittance through the surface, as well as the bi-directional distribution of that transmittance.
-
A list of available transmittance properties is available here.
-
It is not necessary to provide all three properties for a surface. For non-transmissive surfaces it is usually sufficient to provide either a emissivity properties or a reflectance properties (the other will be derived, see below). For transmissive surfaces, at least two of the three properties should be present.
Bulk (Volume) Properties
Any material that describes a volume or medium (as opposed to a
surface) needs to define bulk properties such as the absorption or
scattering of the material. Bulk properties are defined in a tag
section named BULK_PROPERTIES
containing the relevant property
configurations. A DIRSIG volume material is assigned properties
by providing the name of the property to an associated name variable
and then supplying the parameters for that property in an associated
section.
In the example below,
the ClassicAbsorption property
is requested via the ABSORPTION_PROP_NAME
variable and the
inputs for that property are supplied in the ABSORPTION_PROP
section:
MATERIAL_ENTRY { ... BULK_PROPERTIES { ABSORPTION_PROP_NAME = ClassicAbsorption ABSORPTION_PROP { FILENAME = example.abs } } }
DIRSIG supports three difference classes of bulk properties. The DIRSIG Bulk Properties Manual describes all of the properties available.
-
Absorption Coefficient (provided via the
ABSORPTION_PROP
)-
This is the property used to define the spectral absorption coefficient of the medium at any point.
-
A list of available absorption properties is available here.
-
-
Scattering Coefficient (provided via the
SCATTERING_PROP
)-
This is the property used to define the spectral scattering coefficient of the medium at any point.
-
The scattering coefficient property only defines the total scattering at a point, but nothing about the directional distribution of the scattering (it must be combined with the
PHASE_FUNCTION_PROP
). -
A list of available scattering coefficient properties is available here.
-
-
Phase Function (provided via the
PHASE_FUNCTION_PROP
)-
This is the property that defines the directional distribution of the scattering. (must be combined with the
SCATTERING_PROP
). -
A list of available scattering phase function properties is available here.
-
Each of the individual bulk properties are optional and DIRSIG will only use properties that are given, assuming zero for absorption and scattering otherwise and uniform scattering for the phase function. This method of defining the bulk properties is mostly intended for use with the gas/cloud models that produce a concentration based on ray traversal through primitives (such as voxels or plume "puffs").
The IOP (Inherent Optical Property) model is a special type of bulk property definition that facilitates setting up a large number of interdependent optical properties in a medium. This is often the case in water modeling and it is based on the interface to Hydrolight (a separate radiative transfer code from Sequoia Scientific). As such is can support multiple absorption, scattering and phase function models varying dependently and independently within the medium (usually associated with different constituent particles, such as chlorophyll or suspended solids). All of the individual models are collected at a point to compute the sum of the local properties. For more details on setting up the IOP model, see the IOP manual.
MATERIAL_ENTRY { ... BULK_PROPERTIES { IOP_MODEL { ... } } ... }
Radiometry Solvers
Radiometry solvers do not describe properties of the materials, but rather how the properties are used to do radiometric calculations at the materials surface or within their volume. These solvers are assigned and setup on a per-material basis in recognition of the fact that different types of materials require different strategies and amounts of work.
Radiometry solvers were a key component of DIRSIG4 and its Whitted-style ray tracing approach. A material that will be run with DIRSIG4 must contain a radiometry solver configuration. However, DIRSIG5 uses the unified path tracing approach and the radiometry solver configuration is ignored. |
The structure of the radiometry solver configuration looks like:
MATERIAL_ENTRY { ... RAD_SOLVER_NAME = ... RAD_SOLVER { ... } ... }
The RAD_SOLVER
section is used for providing parameters to the
temperature solver given by the RAD_SOLVER_NAME
variable and is
required even if no parameters are necessary. Only one radiometry
solver can be assigned to a given material. The list of available
temperature solvers and their respective inputs is provided in the
Radiometry Solvers Manual.
Internal radiometry solvers will be automatically added to materials to support additional calculations (e.g., contributions from user-defined sources, LIDAR returns, etc.). |
Temperature Solvers
In order to know the temperature of a material in a scene (for thermal emission), a temperature solver should be assigned to the material. This defines the model that will be used to predict or assign a temperature and its configuration will look like:
MATERIAL_ENTRY { ... TEMP_SOLVER_NAME = ... TEMP_SOLVER { ... } ... }
The TEMP_SOLVER
section is used for providing parameters to the
temperature solver given by the TEMP_SOLVER_NAME
variable and is
required even if no parameters are necessary. Only one temperature
solver can be assigned to a given material. The list of available
temperature solvers and their respective inputs is provided in the
Temperature Solvers Manual.
Example Standard Materials
A Surface Material
A surface material is used to describe a surface. Surfaces can be either
opaque (e.g., a painted metal) or transmissive (e.g., a leaf). These
materials always contain a surface specific RAD_SOLVER
and a
SURFACE_PROPERTIES
section containing one or more
surface properties.
MATERIAL_ENTRY { ID = steel_1 NAME = Steel, painted EDITOR_COLOR = 1,1,1 DOUBLE_SIDED = TRUE RAD_SOLVER_NAME = Simple RAD_SOLVER { QUALITY = LOW } SURFACE_PROPERTIES { EMISSIVITY_PROP_NAME = ClassicEmissivity EMISSIVITY_PROP { FILENAME = painted_steel.ems SPECULAR_FRACTION = 0 } } }
MATERIAL_ENTRY { ID = leaf NAME = Oak tree, leaf EDITOR_COLOR = 1,1,1 DOUBLE_SIDED = TRUE RAD_SOLVER_NAME = Simple RAD_SOLVER { QUALITY = LOW } SURFACE_PROPERTIES { REFLECTANCE_PROP_NAME = SimpleReflectance REFLECTANCE_PROP { TXT_FILENAME = oak_lead_ref.txt } TRANSMITTANCE_PROP_NAME = SimpleTransmittance TRANSMITTANCE_PROP { TXT_FILENAME = oak_lead_tau.txt } }
A Volume Material
A volume material is used to describe a material such as a cloud.
These materials always contain a volume specific RAD_SOLVER
and
a BULK_PROPERTIES
section containing one or more
bulk/volume properties.
MATERIAL_ENTRY { ID = 2 NAME = Cloud EDITOR_COLOR = 1,1,1 DOUBLE_SIDED = TRUE RAD_SOLVER_NAME = Null RAD_SOLVER { } BULK_PROPERTIES { SCATTERING_PROP_NAME = SimpleScattering SCATTERING_PROP { TXT_FILENAME = cloud_scat.txt } PHASE_FUNCTION_PROP_NAME = HenyeyGreenstein PHASE_FUNCTION_PROP { TXT_FILENAME = cloud_asym.txt } } }
Example Special Materials
Source Materials
A user-defined source has a special
material configuration that will not contain
SURFACE_PROPERTIES
, BULK_PROPERTIES
, RAD_SOLVER
or
TEMPERATURE_SOLVER
sections.
MATERIAL_ENTRY { ID = 50w_hps NAME = 50w High-Pressure Sodium (HPS) Source OPTICAL_DESCRIPTION = SOURCE INTENSITY_FILENAME = 50w_High_Pressure_Sodium.int SOURCE_SHAPE = 2 NORMALIZE_SHAPE = TRUE }
Empty (Proxy) Materials
Certain re-mapping mechanisms in DIRSIG require a material ID that
may never get used directly (such as when a material ID is used to
associate with a material map). In order for these mechanisms to
work they need to be originally assigned a material that is in the
database, even though it won’t be used and don’t need optical/thermal
property definitions. To help clarify this process, it is possible
to define an empty material as a placeholder. The empty material
still needs the NAME
and ID
, but can be left blank otherwise.
Empty materials are only valid in DIRSIG version 4.6.0 and greater. |
MATERIAL_ENTRY { NAME = Terrain (re-mapped) ID = 201 }
Material or Mixture Mapped Materials
Similar to the empty/proxy material described above, a material entry that
includes a material map or
mixture map will not contain
SURFACE_PROPERTIES
, BULK_PROPERTIES
, RAD_SOLVER
or TEMPERATURE_SOLVER
sections since the material only defines a remapping to one (or more) other
materials.
MATERIAL_ENTRY { NAME = Terrain (re-mapped) ID = terrain MATERIAL_MAP { NAME = Terrain Map ENABLED = TRUE IMAGE_FILENAME = materials.png UV_PROJECTOR { ORIGIN = IMAGE FLIPX = FALSE FLIPY = FALSE EXTENDX = MIRROR EXTENDY = MIRROR } LUT { 6:grass 28:asphalt 255:soil } OPTIONS { ENABLE_MIXING = FALSE } } }
Material Variants
Material variants address differences in properties and solvers based on the medium that the material is in. This is useful in cases where a single surface might cross a medium transition (e.g. a sandy slope partially under water). In air (the scene atmosphere) the normal material entry will be used. A material variant is provided by using the same ID, but following it with a comma and the medium material ID it should be used in. For example,
... MATERIAL_ENTRY { ID = 107 NAME = Sandy beach (in air) ... } ... MATERIAL_ENTRY { ID = 107, 500 NAME = Sandy beach (under water) ... } ...
Material variants are only available in DIRSIG4 versions 4.6.0 and greater. They are not supported in earlier versions of DIRSIG4 or in DIRSIG5. |
DIRSIG3-Era Materials
A DIRSIG3-era material format (which can still be found in some older scenes) does not contain and sub sections within the material entry and makes assumptions about the properties and models above. Specifically, it assumes the following:
-
The Classic radiometry solver will be used.
-
The THERM temperature solver will be used.
-
The ClassicEmissivity property will be used.
-
The ClassicExtinction property will be (optionally) used.
The table below lists the variable’s tag name, if it is required, the units for the variable and a description:
Tag | Required | Units | Description |
---|---|---|---|
|
Required |
Material label/ID |
|
|
Required |
Name of material |
|
|
Optional |
(boolean) |
Control double-sided attribute (default |
|
Required |
[cal/g/oC] |
Specific heat |
|
Required |
[gm/cm3] |
Mass density |
|
Required |
[(cm Langley)/hour/oC)] |
The thermal conductivity |
|
Optional |
[cm] |
Characteristic thickness |
|
Optional |
(fraction) |
Mean, broad-band solar absorptivity |
|
Optional |
(fraction) |
Mean, broad-band thermal emissivity |
|
Required |
(fraction) |
Surface exposed area |
|
Optional |
[L/hr] |
Internal (self-generated) power source term (default |
|
Optional |
Controls surface opacity |
|
|
Required |
Name of spectral emissivity file |
|
|
Required |
(fraction) |
Surface specularity |
|
Optional |
Name of spectral extinction file |
MATERIAL_ENTRY { NAME = Arrow ID = 1 SPECIFIC_HEAT = 0.1000 THERMAL_CONDUCTIVITY = 20.0000 MASS_DENSITY = 1.0000 SPECULARITY = 0.10 SOLAR_ABSORPTION = 0.2500 THERMAL_EMISSIVITY = 0.9000 EXPOSED_AREA = 0.4500 EMISSIVITY_FILE = 50.ems THICKNESS = 4.0 }