This page has been translated automatically.
UnigineEditor
Interface Overview
Assets Workflow
Settings and Preferences
Working With Projects
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Landscape Tool
Using Editor Tools for Specific Tasks
Extending Editor Functionality
Programming
Fundamentals
Setting Up Development Environment
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine Tools
GUI
Double Precision Coordinates
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
Warning! This version of documentation is OUTDATED, as it describes an older SDK version! Please switch to the documentation for the latest SDK version.
Warning! This version of documentation describes an old SDK version which is no longer supported! Please upgrade to the latest SDK version.

Materials

A material is a set of properties (states, options, parameters) and assets (2D, 3D textures), described in a text file and associated with a particular object surface.

UNIGINE has its own material system that includes:

  • Base materials implemented by programmers.
  • User materials inherited from the base materials and adjusted via Materials Editor by 3D artists.
Notice
As UNIGINE uses its own material system, you cannot use a material provided by any third-party application.

Base Materials#

A base material stores a set of material properties and refers to fragment, vertex and geometry shaders, describing how the material will look like.

Shaders are written in GLSL and HLSL shading languages. In UNIGINE, there is also the Unified UNIGINE shader language (UUSL) that also can be used to write shaders: it allows creating a single shader file for both 3D graphics APIs: OpenGL and Direct3D11.

The base material is stored in the *.basemat file. It cannot be edited via Materials Editor: to customize the base material, you should directly edit the text file. Or you can create a brand new one.

Notice
It is possible to make the base material editable for research purposes. However, changes made to such material via the Materials Editor won't be saved to the *.basemat file.

The base materials cannot form materials hierarchy: no base material can be inherited from another base material. The base material is always on the top of the hierarchy: user materials are inherited from it.

Notice
In the *.basemat file, a name of the base material is stored. A child *.mat file store a name-based reference to the base material. A GUID is generated for the base material in run-time.

A set of built-in base materials is quite big and contains most of the frequently asked materials.

User Materials#

A user material overrides properties sent to shaders used by the base material from which the user material (or its parent) is inherited. The user material itself cannot refer to a shader.

The user material is stored in the *.mat file that contains references to the parent and the base materials. Such file is usually created when inheriting a new material from the base one or the other user material via Materials Editor. The user material cannot be customized: a set of user material properties cannot differ from properties of the referred base material. However, you can edit the user material via Materials Editor.

Notice
In the *.mat file, the user material GUID is stored. The child *.mat files usually store the GUID-based reference to the parent user material.

Unlike base materials, user materials can form materials hierarchy.

Manual and Internal Materials#

In UNIGINE, there are also manual materials. Such materials are created and edited manually: changes made via Materials Editor at run-time cannot be saved. All base materials (both the built-in and the custom ones) are manual. However, not every manual material is the base one: the user materials can be manual too.

Notice
You can use the same name for the base (*.basemat), user (*.mat) and manual (*.basemat or *.mat) materials within one project: it won't raise any conflicts.

In the *.mat file, the manual user material name is stored. The child *.mat files can store name-based or GUID-based reference to the parent manual material.

Notice
Only the manual material can refer to the parent manual material by the name.

The manual material is implemented by programmers when it is necessary to create a material without using Materials Editor.

An internal material is a material without a name. When cloning or inheriting a material, each new material becomes internal until a name is assigned to it.

Scriptable Materials#

A scriptable material is a base material with expressions (fragments of code written in UnigineScript) executed at certain stages of rendering sequence offering you an exceptional flexibility. For example, you can use them to create your own custom post effects such as DoF or Bloom.

A single or multiple scriptable materials can be applied globally or attached to a certain camera. Expressions assigned to a scriptable material are executed only if the material is enabled. The order of execution is defined by the material's number in the list of appllied scriptable materials (either global or camera-specific). The order can be changed if necessary.

Notice
Scriptable materials applied globally have their expressions executed before the corresponding expressions of the ones that are applied per-camera.

Scriptable materials represent an ideal instrument for fast prototyping of any custom effects, as they allow you to:

  • write any logic in UnigineScript,
  • apply them globally or per-camera,
  • have all necessary parameters added to UI automatically.

As base materials, scriptable ones are created and edited manually.

See Also#

Last update: 2020-07-31
Build: ()