LightmapGI

Inherits:VisualInstance3D<Node3D<Node<Object

Computes and stores baked lightmaps for fast global illumination.

Description

TheLightmapGI node is used to compute and store baked lightmaps. Lightmaps are used to provide high-quality indirect lighting with very little light leaking.LightmapGI can also provide rough reflections using spherical harmonics ifdirectional is enabled. Dynamic objects can receive indirect lighting thanks tolight probes, which can be automatically placed by settinggenerate_probes_subdiv to a value other thanGENERATE_PROBES_DISABLED. Additional lightmap probes can also be added by creatingLightmapProbe nodes. The downside is that lightmaps are fully static and cannot be baked in an exported project. Baking aLightmapGI node is also slower compared toVoxelGI.

Procedural generation: Lightmap baking functionality is only available in the editor. This meansLightmapGI is not suited to procedurally generated or user-built levels. For procedurally generated or user-built levels, useVoxelGI or SDFGI instead (seeEnvironment.sdfgi_enabled).

Performance:LightmapGI provides the best possible run-time performance for global illumination. It is suitable for low-end hardware including integrated graphics and mobile devices.

Note: Due to how lightmaps work, most properties only have a visible effect once lightmaps are baked again.

Note: Lightmap baking onCSGShape3Ds andPrimitiveMeshes is not supported, as these cannot store UV2 data required for baking.

Note: If no custom lightmappers are installed,LightmapGI can only be baked from devices that support the Forward+ or Mobile renderers.

Note: TheLightmapGI node only bakes light data for child nodes of its parent. Nodes further up the hierarchy of the scene will not be baked.

Tutorials

Properties

float

bias

0.0005

float

bounce_indirect_energy

1.0

int

bounces

3

CameraAttributes

camera_attributes

int

denoiser_range

10

float

denoiser_strength

0.1

bool

directional

false

Color

environment_custom_color

Color(1,1,1,1)

float

environment_custom_energy

1.0

Sky

environment_custom_sky

EnvironmentMode

environment_mode

1

GenerateProbes

generate_probes_subdiv

2

bool

interior

false

LightmapGIData

light_data

int

max_texture_size

16384

BakeQuality

quality

1

ShadowmaskMode

shadowmask_mode

0

bool

supersampling

false

float

supersampling_factor

2.0

float

texel_scale

1.0

bool

use_denoiser

true

bool

use_texture_for_bounces

true


Enumerations

enumBakeQuality:🔗

BakeQualityBAKE_QUALITY_LOW =0

Low bake quality (fastest bake times). The quality of this preset can be adjusted by changingProjectSettings.rendering/lightmapping/bake_quality/low_quality_ray_count andProjectSettings.rendering/lightmapping/bake_quality/low_quality_probe_ray_count.

BakeQualityBAKE_QUALITY_MEDIUM =1

Medium bake quality (fast bake times). The quality of this preset can be adjusted by changingProjectSettings.rendering/lightmapping/bake_quality/medium_quality_ray_count andProjectSettings.rendering/lightmapping/bake_quality/medium_quality_probe_ray_count.

BakeQualityBAKE_QUALITY_HIGH =2

High bake quality (slow bake times). The quality of this preset can be adjusted by changingProjectSettings.rendering/lightmapping/bake_quality/high_quality_ray_count andProjectSettings.rendering/lightmapping/bake_quality/high_quality_probe_ray_count.

BakeQualityBAKE_QUALITY_ULTRA =3

Highest bake quality (slowest bake times). The quality of this preset can be adjusted by changingProjectSettings.rendering/lightmapping/bake_quality/ultra_quality_ray_count andProjectSettings.rendering/lightmapping/bake_quality/ultra_quality_probe_ray_count.


enumGenerateProbes:🔗

GenerateProbesGENERATE_PROBES_DISABLED =0

Don't generate lightmap probes for lighting dynamic objects.

GenerateProbesGENERATE_PROBES_SUBDIV_4 =1

Lowest level of subdivision (fastest bake times, smallest file sizes).

GenerateProbesGENERATE_PROBES_SUBDIV_8 =2

Low level of subdivision (fast bake times, small file sizes).

GenerateProbesGENERATE_PROBES_SUBDIV_16 =3

High level of subdivision (slow bake times, large file sizes).

GenerateProbesGENERATE_PROBES_SUBDIV_32 =4

Highest level of subdivision (slowest bake times, largest file sizes).


enumBakeError:🔗

BakeErrorBAKE_ERROR_OK =0

Lightmap baking was successful.

BakeErrorBAKE_ERROR_NO_SCENE_ROOT =1

Lightmap baking failed because the root node for the edited scene could not be accessed.

BakeErrorBAKE_ERROR_FOREIGN_DATA =2

Lightmap baking failed as the lightmap data resource is embedded in a foreign resource.

BakeErrorBAKE_ERROR_NO_LIGHTMAPPER =3

Lightmap baking failed as there is no lightmapper available in this Godot build.

BakeErrorBAKE_ERROR_NO_SAVE_PATH =4

Lightmap baking failed as theLightmapGIData save path isn't configured in the resource.

BakeErrorBAKE_ERROR_NO_MESHES =5

Lightmap baking failed as there are no meshes whoseGeometryInstance3D.gi_mode isGeometryInstance3D.GI_MODE_STATIC and with valid UV2 mapping in the current scene. You may need to select 3D scenes in the Import dock and change their global illumination mode accordingly.

BakeErrorBAKE_ERROR_MESHES_INVALID =6

Lightmap baking failed as the lightmapper failed to analyze some of the meshes marked as static for baking.

BakeErrorBAKE_ERROR_CANT_CREATE_IMAGE =7

Lightmap baking failed as the resulting image couldn't be saved or imported by Godot after it was saved.

BakeErrorBAKE_ERROR_USER_ABORTED =8

The user aborted the lightmap baking operation (typically by clicking theCancel button in the progress dialog).

BakeErrorBAKE_ERROR_TEXTURE_SIZE_TOO_SMALL =9

Lightmap baking failed as the maximum texture size is too small to fit some of the meshes marked for baking.

BakeErrorBAKE_ERROR_LIGHTMAP_TOO_SMALL =10

Lightmap baking failed as the lightmap is too small.

BakeErrorBAKE_ERROR_ATLAS_TOO_SMALL =11

Lightmap baking failed as the lightmap was unable to fit into an atlas.


enumEnvironmentMode:🔗

EnvironmentModeENVIRONMENT_MODE_DISABLED =0

Ignore environment lighting when baking lightmaps.

EnvironmentModeENVIRONMENT_MODE_SCENE =1

Use the scene's environment lighting when baking lightmaps.

Note: If baking lightmaps in a scene with noWorldEnvironment node, this will act likeENVIRONMENT_MODE_DISABLED. The editor's preview sky and sun isnot taken into account byLightmapGI when baking lightmaps.

EnvironmentModeENVIRONMENT_MODE_CUSTOM_SKY =2

Useenvironment_custom_sky as a source of environment lighting when baking lightmaps.

EnvironmentModeENVIRONMENT_MODE_CUSTOM_COLOR =3

Useenvironment_custom_color multiplied byenvironment_custom_energy as a constant source of environment lighting when baking lightmaps.


Property Descriptions

floatbias =0.0005🔗

The bias to use when computing shadows. Increasingbias can fix shadow acne on the resulting baked lightmap, but can introduce peter-panning (shadows not connecting to their casters). Real-timeLight3D shadows are not affected by thisbias property.


floatbounce_indirect_energy =1.0🔗

The energy multiplier for each bounce. Higher values will make indirect lighting brighter. A value of1.0 represents physically accurate behavior, but higher values can be used to make indirect lighting propagate more visibly when using a low number of bounces. This can be used to speed up bake times by lowering the number ofbounces then increasingbounce_indirect_energy.

Note:bounce_indirect_energy only has an effect ifbounces is set to a value greater than or equal to1.


intbounces =3🔗

Number of light bounces that are taken into account during baking. Higher values result in brighter, more realistic lighting, at the cost of longer bake times. If set to0, only environment lighting, direct light and emissive lighting is baked.


CameraAttributescamera_attributes🔗

TheCameraAttributes resource that specifies exposure levels to bake at. Auto-exposure and non exposure properties will be ignored. Exposure settings should be used to reduce the dynamic range present when baking. If exposure is too high, theLightmapGI will have banding artifacts or may have over-exposure artifacts.


intdenoiser_range =10🔗

The distance in pixels from which the denoiser samples. Lower values preserve more details, but may give blotchy results if the lightmap quality is not high enough. Only effective ifuse_denoiser istrue andProjectSettings.rendering/lightmapping/denoising/denoiser is set to JNLM.


floatdenoiser_strength =0.1🔗

The strength of denoising step applied to the generated lightmaps. Only effective ifuse_denoiser istrue andProjectSettings.rendering/lightmapping/denoising/denoiser is set to JNLM.


booldirectional =false🔗

Iftrue, bakes lightmaps to contain directional information as spherical harmonics. This results in more realistic lighting appearance, especially with normal mapped materials and for lights that have their direct light baked (Light3D.light_bake_mode set toLight3D.BAKE_STATIC and withLight3D.editor_only set tofalse). The directional information is also used to provide rough reflections for static and dynamic objects. This has a small run-time performance cost as the shader has to perform more work to interpret the direction information from the lightmap. Directional lightmaps also take longer to bake and result in larger file sizes.

Note: The property's name has no relationship withDirectionalLight3D.directional works with all light types.


Colorenvironment_custom_color =Color(1,1,1,1)🔗

The color to use for environment lighting. Only effective ifenvironment_mode isENVIRONMENT_MODE_CUSTOM_COLOR.


floatenvironment_custom_energy =1.0🔗

The color multiplier to use for environment lighting. Only effective ifenvironment_mode isENVIRONMENT_MODE_CUSTOM_COLOR.


Skyenvironment_custom_sky🔗

The sky to use as a source of environment lighting. Only effective ifenvironment_mode isENVIRONMENT_MODE_CUSTOM_SKY.


EnvironmentModeenvironment_mode =1🔗

The environment mode to use when baking lightmaps.


GenerateProbesgenerate_probes_subdiv =2🔗

The level of subdivision to use when automatically generatingLightmapProbes for dynamic object lighting. Higher values result in more accurate indirect lighting on dynamic objects, at the cost of longer bake times and larger file sizes.

Note: Automatically generatedLightmapProbes are not visible as nodes in the Scene tree dock, and cannot be modified this way after they are generated.

Note: Regardless ofgenerate_probes_subdiv, direct lighting on dynamic objects is always applied usingLight3D nodes in real-time.


boolinterior =false🔗

Iftrue, ignore environment lighting when baking lightmaps.


LightmapGIDatalight_data🔗

TheLightmapGIData associated to thisLightmapGI node. This resource is automatically created after baking, and is not meant to be created manually.


intmax_texture_size =16384🔗

The maximum texture size for the generated texture atlas. Higher values will result in fewer slices being generated, but may not work on all hardware as a result of hardware limitations on texture sizes. Leavemax_texture_size at its default value of16384 if unsure.


BakeQualityquality =1🔗

The quality preset to use when baking lightmaps. This affects bake times, but output file sizes remain mostly identical across quality levels.

To further speed up bake times, decreasebounces, disableuse_denoiser and/or decreasetexel_scale.

To further increase quality, enablesupersampling and/or increasetexel_scale.


ShadowmaskModeshadowmask_mode =0🔗

Experimental: This property may be changed or removed in future versions.

The shadowmasking policy to use for directional shadows on static objects that are baked with thisLightmapGI instance.

Shadowmasking allowsDirectionalLight3D nodes to cast shadows even outside the range defined by theirDirectionalLight3D.directional_shadow_max_distance property. This is done by baking a texture that contains a shadowmap for the directional light, then using this texture according to the current shadowmask mode.

Note: The shadowmask texture is only created ifshadowmask_mode is notLightmapGIData.SHADOWMASK_MODE_NONE. To see a difference, you need to bake lightmaps again after switching fromLightmapGIData.SHADOWMASK_MODE_NONE to any other mode.


boolsupersampling =false🔗

Iftrue, lightmaps are baked with the texel scale multiplied withsupersampling_factor and downsampled before saving the lightmap (so the effective texel density is identical to having supersampling disabled).

Supersampling provides increased lightmap quality with less noise, smoother shadows and better shadowing of small-scale features in objects. However, it may result in significantly increased bake times and memory usage while baking lightmaps. Padding is automatically adjusted to avoid increasing light leaking.


floatsupersampling_factor =2.0🔗

The factor by which the texel density is multiplied for supersampling. For best results, use an integer value. While fractional values are allowed, they can result in increased light leaking and a blurry lightmap.

Higher values may result in better quality, but also increase bake times and memory usage while baking.

Seesupersampling for more information.


floattexel_scale =1.0🔗

Scales the lightmap texel density of all meshes for the current bake. This is a multiplier that builds upon the existing lightmap texel size defined in each imported 3D scene, along with the per-mesh density multiplier (which is designed to be used when the same mesh is used at different scales). Lower values will result in faster bake times.

For example, doublingtexel_scale doubles the lightmap texture resolution for all objectson each axis, so it willquadruple the texel count.


booluse_denoiser =true🔗

Iftrue, uses a GPU-based denoising algorithm on the generated lightmap. This eliminates most noise within the generated lightmap at the cost of longer bake times. File sizes are generally not impacted significantly by the use of a denoiser, although lossless compression may do a better job at compressing a denoised image.


booluse_texture_for_bounces =true🔗

Iftrue, a texture with the lighting information will be generated to speed up the generation of indirect lighting at the cost of some accuracy. The geometry might exhibit extra light leak artifacts when using low resolution lightmaps or UVs that stretch the lightmap significantly across surfaces. Leaveuse_texture_for_bounces at its default value oftrue if unsure.

Note:use_texture_for_bounces only has an effect ifbounces is set to a value greater than or equal to1.


User-contributed notes

Please read theUser-contributed notes policy before submitting a comment.