If you use baked Global Illumination (GI), troubleshoot baked lighting quality issues such as flat normal maps, visible texture coordinate (UV) seams, blurry lightmapsA pre-rendered texture that contains the effects of light sources on static objects in the scene. Lightmaps are overlaid on top of scene geometry to create the effect of lighting. More info
See in Glossary, and aliasing. These issues make surfaces appear flat, disrupt texture continuity, or cause shadows to lose detail.
This issue occurs if you use non-directional lightmaps with baked lighting. Non-directional lightmaps don’t capture the directionality of incoming light, which affects the appearance of surface detail when a GameObjectThe fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it. More info
See in Glossary has a normal mapA type of Bump Map texture that allows you to add surface detail such as bumps, grooves, and scratches to a model which catch the light as if they are represented by real geometry.
See in Glossary.
For more information about directional lightmaps, refer to Store light direction with Directional Mode.
Note: Non-directional lightmaps store the intensity of light at various points but don’t account for the direction from which the light is coming, which means they don’t work with normal maps. As a result, details that help give an illusion of relief might be missing.
When you bake in non-directional mode, Unity doesn’t generate a secondary texture to store the dominant light direction.
To troubleshoot flat normal maps, do the following.
Visible seams can appear in lightmaps due to GPU limitations when blending color values between separate UV islands, especially with high filtering or low lightmap resolution. Seams between objects are more pronounced in modular meshes.
By default, GPUs don’t blend color values between separate UV islands, leading to visible seams in baked lightmaps. Filtering and low lightmap resolution can further exacerbate the issue by bleeding texel color values into adjacent UV islands.
To troubleshoot lightmap UV seams, do the following.
Enable Stitch Seams to blend color values between UV islands that share a stitchable common edge.
Note: Stitch Seams only works for single GameObjects and doesn’t support multiple GameObjects.
To join overlapping vertices, do the following:
Use Mesh.CombineMeshes to merge multiple meshes into one, achieving a similar result as in a DCC tool.
Convert meshes to ProBuilder using the ProBuilderize option. Use the Merge Objects option to combine multiple objects.
Disable filtering and denoising. This prevents blurring and dilation issues but can require increasing sample counts for cleaner results.
Adjust Lightmap Padding to increase spacing between UV atlases, reducing texel bleeding.
For low-end platforms, use Light Probe GroupsA component that enables you to add Light Probes to GameObjects in your scene. More info
See in Glossary.
For per-pixel lighting with streamlined placement, use Adaptive Probe Volumes (APV).
If possible, use trim meshes to hide seams between objects.
Low lightmap resolution results in blurry lighting effects due to insufficient texel density.
Lightmaps require a sufficient resolution to accurately capture lighting information. Too few texels per unit can result in a loss of detail, while non-uniform UV scaling can distort the baked lighting output.
To troubleshoot blurry lightmaps, do the following:
To adjust lightmap resolution globally, adjust the Lightmap Resolution property in the Lighting window. This changes the resolution for all objects in the sceneA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary.
To adjust lightmap resolution per object, modify the Scale in Lightmap parameter in the Mesh RendererA mesh component that takes the geometry from the Mesh Filter and renders it at the position defined by the object’s Transform component. More info
See in Glossary component. This acts as a multiplier of the Lightmap Resolution setting.
Note: Increasing lightmap resolution significantly increases baking times and memory usage.
Recommended lightmap resolution settings:
The Max Lightmap Size property limits the final resolution of the lightmap. Increase this setting if:
To prevent stretched or distorted lightmaps, do the following:
A stair-stepping effect can appear around edges, especially in high-contrast areas with baked direct lighting.
To address lightmap aliasing, do the following:
Uneven lighting and artifacts can appear due to improper scaling of UV charts, leading to lower resolution in certain areas.
Example:
In the image below, two spotlights with the same parameters light the sides of a cylinder. The right-hand side has a higher Area Error value, in the MeshThe main graphics primitive of Unity. Meshes make up a large part of your 3D worlds. Unity supports triangulated or Quadrangulated polygon meshes. Nurbs, Nurms, Subdiv surfaces must be converted to polygons. More info
See in Glossary Import and Generate Lightmap UVs settings, which distorts the triangles and leads to a lower resolution, creating artifacts in the light.
Area distortion occurs when UV charts are scaled improperly, leading to uneven texel distribution. This can happen when:
To minimize area distortion, do the following:
Lighting artifacts can appear due to improperly shaped UV charts, leading to skewed or stretched textures in the baked lightmap.
Example:
The first image has a high Angle Error, resulting in artifacts. The second image has the default Angle Error (8%). Meshes with more triangles can experience significant angle distortion.
Angle distortion occurs when the automatic UV unwrapping process fails to maintain correct angles between triangles. This can happen when:
To reduce angle distortion, do the following:
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.