The TGorillaNormalMapMaterialSource is inherited from TGorillaDefaultMaterialSource, supports multiple light sources and enables normal mapping functionality in vertex- and fragmentshader: GORILLA_GLSL_DEFINE_NORMALMAP
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.
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.
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:
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.
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;