NormalMap Material (TGorillaNormalMapMaterialSource)

The TGorillaNormalMapMaterialSource is inherited from TGorillaDefaultMaterialSource, supports multiple light sources and enables normal mapping functionality in vertex- and fragmentshader: GORILLA_GLSL_DEFINE_NORMALMAP

Definition

In 3D computer graphics, normal mapping (or Dot3 bump mapping) is a technique used for faking the lighting of bumps and dents – an implementation of bump mapping. It is used to add details without using more polygons. A common use of this technique is to greatly enhance the appearance and details of a low polygon model by generating a normal map from a high polygon model or height map.

Normal maps are commonly stored as regular RGB images where the RGB components correspond to the X, Y, and Z coordinates, respectively, of the surface normal.

[source: https://en.wikipedia.org/wiki/Normal_mapping]

In General

The shading model configured by default is the Blinn-Phong algorithm.

Using this material source will provide a new published property called NormalMap. It also supplies the optional DisplacementMap property to apply a vertex manipulation texture.

Normal Maps

Using normal maps is quite easy. You can find example textures everywhere and many graphic tools like Photoshop or GIMP are able to build them.

They have a blueish-greenish look, like this example:

400

WARNING: Because Gorilla3D is using OpenGL you have to be careful with the source. NormalMaps are different between OpenGL and DirectX. In a naive way they are flipped. But the result can be very different.

NOTICE: We do only support normal maps for OpenGL. In case you have a DirectX normal map in your texture set, you need to convert it yourself.

For conversion have a closer look at this article: https://help.ambientcg.com/02-Using%20the%20assets/Normal_map_styles.html#:~:text=Editing%20the%20map%20itself,color%20channel%20and%20invert%20it.

Example

uses
  Gorilla.Material.NormalMap;
 
var FNormalMapMaterial : TGorillaNormalMapMaterialSource;
 
FNormalMapMaterial := TGorillaNormalMapMaterialSource.Create(GorillaViewport1);
FNormalMapMaterial.Parent := GorillaViewport1;
FNormalMapMaterial.Texture.LoadFromFile('layingrock-c.jpg');
FNormalMapMaterial.NormalMap.LoadFromFile('layingrock-n.jpg');
 
FNormalMapMaterial.NormalIntensity := 1.0;