Skip to content

04 ‐ Texture Maps

Andrea Pizzetti edited this page Apr 29, 2026 · 1 revision

Albedo

Albedo maps provide the local reflection coefficient at each longitude and latitude coordinate. Albedo maps can be monochromatic (same albedo value across the entire spectrum) or hyperspectral (different values for each channel).

The albedo maps must be stored in the inputs/maps/albedo folder of the main ABRAM directory.

chromatic_aberration_lateral chromatic_aberration_lateral

ABRAM can process albedo maps in different formats (tiff, png, jpg...) and bit depth (single, uint8, uint16, uint32). Some pre-processing operations can be applied to the raw data if needed, such as:

  • mean: rescale the albedo values so that the mean is the one provided.
  • domain: rescale the albedo values so that they remain confined between the domain limits provided.
  • shift: add to all the albedo values the provided shift.
  • scale: multiply all the albedo values by the provided scale.
  • gamma: raise the albedo values to the power of the provided coefficient.

The albedo is a number typically between 0 and 1, but in most cases the data points of the raw map will be comprised between 0 and 2^Nb - 1, being Nb the bit depth, to cover the entire depth domain of the image with information. So the bit depth of the map must be provided to ABRAM to allow the correct conversion to physical values.

The following ABRAM syntax will load the specified albedo map, converting the domain from [0, 255] to [0, 1] and rescaling the data so that the mean albedo will be 0.12:

albedo: {filename: moon/lroc_cgi/lroc_color_poles_2k.tif, depth: 8.0, mean: 0.12}   

The following ABRAM syntax will load the specified albedo map, converting the domain from [0, 255] to [0, 1], raising to the power of 2.8 all the data points, and rescaling the data so that the domain will be [0.16 0.4]:

albedo: {filename: moon/lroc_cgi/lroc_color_poles_2k.tif, depth: 8.0, gamma: 2.8, domain: [0.16 0.4]}                       

The operations that have been applied on the original data to produce the map are usually declared by the map providers. A list of good scientific sources to retrieve the albedo maps are:

Displacement

Displacement maps are essential to model craters, cliffs, mountains and elevation changes across the surface of the body.

The displacement maps must be stored in the inputs/maps/displacement folder of the main ABRAM directory.

These maps are usually provided in tiff format and they refer to changes in radius with respect to a reference sphere or ellipsoid. Make sure to use the same radii values in the ABRAM body model. Each map also comes with a scaling factor associated. Provide in the ABRAM inputs the correct scaling factor to convert to meters the displacement map data value.

The bit depth of displacement maps must be most often set to 1 as their values already refer to the physical unit (the domain of the displacement is not between 0 and 1). However, this may not be the case for some maps. Always check the documentation attached with the map you are using.

The following ABRAM syntax will load the specified displacement map, multiplying all the values for 1000 to return the value in meters:

displacement: {filename: moon/ldem_4.tif, depth: 1, scale: 1000.0}

A list of good scientific sources to retrieve the displacement maps are:

Note that displacement maps can also be produced synthetically to model artificial bodies, carving out portions of a sphere to retrieve cubes, disks and other shapes.

cube0000033

Normal

Normal maps provide the local orientation of the surface, allowing to model effectively shadows caused by viewing conditions. Normal maps are stored as RGB images with a component of the vector for each channel.

The normal maps must be stored in the inputs/maps/normal folder of the main ABRAM directory.

A normal map must have a frame of definition of the normals attached with it. Two frames may be used in ABRAM, the body-fixed or the local one. The former is more efficient for ABRAM operations but it is less common than the latter. A Normal Body Map (NBM) of the Moon on the left is compared with a Normal Local Map (NLM) on the right.

The following ABRAM syntax will load the normal map in the specified frame, converting the domain from [0, 2^32-1] to [0, 1]:

normal: {filename: moon/Moon_LRO_LOLA_NBM_Global_4ppd_pizzetti2025.tif, depth: 32.0, frame: body}

Normal maps are rarely found online, and when they are, they are available in very low resolution. Normal maps can be generated from displacement maps using plane fitting or mean normals algorithms. High-resolution high-depth normal maps of different planets and moons of the solar system have been generated as a byproduct of ABRAM development and are available at the following link.

Horizon

Horizon maps provide the critical elevation angle over which there is no possibility to have occluding elements in the scene. This map can reduce greatly the computational time of the rendering when occlusions check are activated as the check is skipped for those points whose elevation with respect to observer and light source are over the critical value.

The normal maps must be stored in the inputs/maps/horizon folder of the main ABRAM directory.

Examples of the horizon map for the Moon and a zoomed portion are:

Horizon maps are saved in single format and must be loaded setting to 1 the bit depth:

horizon: {filename: moon/Moon_LRO_LOLA_HM_Global_4ppd_pizzetti2025.tif, depth: 1}

Horizon maps are not available open-source and must be produced by the user depending on the needs. Horizon maps for different planets and moons of the solary system will be made available open-source soon by the author.

Tiled & Hyperspectral Maps

By default, each map is treated as global. If the user wants to use a tile, they must provide the new cropped map and specify the limits in longitude and latitude.

By default, each map is treated as monochromatic. In case an hyperspectral map is provided, ABRAM will take the mean of every channel. If the user wants to treat each channel separately, the dimension parameter of the map must be set to hyperspectral. In this case, the user can also provide the waveband for each channel and separate processing parameters for each channel.

The following ABRAM syntax will load the hyperspectral WAC 3-band RGB (R=689 nm, G=415 nm, and B=321 nm) mosaic tile of the Moon between 0 and 90 deg longitude and between 0 and 70 deg latitude, setting the correct map limits, specifying the waveband limits for each channel, the general bandwidth of observation equal to the camera bandwidth, and remapping the domain differently for each channel:

rend.body.maps.albedo.filename = 'moon\lroc_rgb\WAC_HAPKE_3BAND_E350N0450.tiff';
rend.body.maps.albedo.limits = deg2rad([0, 90.0131579; 0, 70.0131579]);
rend.body.maps.albedo.dimension = 'hyperspectral';
rend.body.maps.albedo.lambda_min = [321 + ((321 + 415)/2 - 415), (321 + 415)/2, (689 + 415)/2]*1e-9;
rend.body.maps.albedo.lambda_max = [(321 + 415)/2, (689 + 415)/2, 689 + ((689 + 415)/2 - 415)]*1e-9;
rend.body.maps.albedo.bandwidth = [rend.camera.QExT.lambda_min(1), rend.camera.QExT.lambda_max(end)];
rend.body.maps.albedo.domain = [0.08, 0.2; 0.12, 0.28; 0.24, 0.48];

Shape Models

ABRAM only accepts maps in equirectangular projection (longitude/latitude map). If only a shape model in .OBJ format is available, the shape can be transformed to a displacement map using the tmt toolbox. An example of rendering using Bennu shape model is shown:

Clone this wiki locally