Quick answer: Enable Stitch Seams on affected MeshRenderers, increase Pack Margin in mesh import settings to 4–8, raise Lightmap Resolution for the affected objects, and re-bake. Visible seams are almost always a combination of these three settings.

Here is how to fix Unity baked GI seams between objects. You bake lighting, and two walls that share a corner have a visible bright or dark line where they meet. A tabletop shows a thin darker stripe where it joins the table legs. A modular level kit shows stair-step lighting differences on adjacent tiles. The seams are not texture seams — they appear only after baking. Different objects get different lightmap samples at their shared edges, and without stitching, the differences are visible as a line.

The Symptom

Baked lighting shows visible lines or stripes along the edges where two meshes meet. Common locations: corners where walls meet, wall/floor junctions, modular kit boundaries, seams on a combined skybox, rooftop/wall transitions on buildings. The seam is typically 1–2 pixels wide and either brighter or darker than the surrounding lighting. Away from edges, the lighting looks fine.

A related symptom: lightmap charts showing visible rectangular boundaries within a single object, caused by UV2 island edges during baking.

What Causes This

Discontinuous lighting at mesh boundaries. Lightmap baking samples lighting at discrete UV2 texel positions. Two neighboring meshes use independent UV2 layouts, so the samples taken near their shared edge differ slightly — different positions, different neighboring geometry, different direct/indirect contribution. The difference manifests as a seam.

Insufficient chart padding. When UV2 islands are packed too tightly, bilinear filtering at runtime samples pixels from adjacent islands. This produces color bleed at island boundaries, visible as thin lines. Unity’s default Pack Margin is usually sufficient but can be too low on high-density atlases.

Stitch Seams disabled. The Stitch Seams option on MeshRenderer tells Unity to average lighting across connected UV edges during bake. Disabled by default. Enabling it per-object adds bake time but fixes most cross-object seams.

Different lightmap resolutions. If one wall is at 40 texels/m and the adjacent wall is at 10 texels/m, the edge between them has a hard resolution change. The low-res object’s coarser sampling produces a visibly different result than the high-res object.

Mesh normal mismatch. Two meshes at the same position but with slightly different vertex normals produce different bounced lighting calculations. Most common when hand-built modular kits have slightly rotated versions of the same base piece.

The Fix

Step 1: Enable Stitch Seams. Select both meshes sharing a seam. In the Inspector, find Mesh Renderer > Lightmapping section. Check “Stitch Seams.” This only helps if the meshes share geometry or their UV2 islands share a boundary with matching positions.

For modular kits, select all pieces and stitch. Re-bake.

Step 2: Raise Pack Margin. Select the mesh asset in Project window. In the Inspector, find “Generate Lightmap UVs” section — expand it. Set:

Apply. Re-bake. Higher Pack Margin reduces island edge bleed at the cost of slightly less efficient atlas packing.

Step 3: Match lightmap resolutions. Select all objects in the room or modular set. In Mesh Renderer > Lightmapping, set Scale In Lightmap to the same value (typically 1). Check the “Baked Lightmap” preview at the bottom of the Inspector — objects should show similar texel densities. If one looks much lower-res, increase its Scale In Lightmap.

For large flat surfaces, raising Scale In Lightmap to 2 or 3 dramatically improves quality at higher memory cost.

Step 4: Unify normals on modular edges. If modular kit pieces have hand-authored normals, ensure the edge vertices have identical normal vectors where pieces meet. In Blender, select the shared edge and use “Shade Smooth” or average normals manually. Import with “Calculate Normals” set to “Calculate” and a matching Smoothing Angle across all pieces.

Using Lightmap Parameters

For fine control, create a Lightmap Parameters asset (Assets > Create > Lightmap Parameters). Tune values like “AntiAliasing Samples” (higher = smoother edges), “Pushoff” (distance to push sample points away from surfaces, prevents self-shadowing artifacts), and “Edge Stitching” (enables chart stitching at bake level).

Assign the Lightmap Parameters asset to specific MeshRenderers via Mesh Renderer > Lightmapping > Lightmap Parameters. Gives per-object control without affecting global settings.

Using Probuilder

Probuilder-generated geometry often has poor lightmap UVs by default. Select the Probuilder mesh, click “Generate Lightmap UVs” in the Probuilder window. This creates proper UV2 with appropriate padding. Without it, Probuilder meshes bake with visible seams regardless of renderer settings.

When Seams Cannot Be Eliminated

Some seams are physically unavoidable — for example, between a static-baked wall and a dynamic prop using light probes. The baked side has sharp GI; the probe side has smoother, lower-resolution lighting. The boundary between them shows a subtle lighting difference. Mitigate by placing light probes densely around the prop and matching ambient intensity between baked and probe-lit regions.

“Seams are where baked lighting honesty meets runtime approximation. Stitching hides most of it; the rest is a tradeoff between quality and bake time.”

Related Issues

For lightmap errors generally, see Unity Baked Lightmap Looks Wrong. For light probe flickering on moving objects, Light Probe Flickering covers the dynamic-object side of the same system.

Stitch Seams + Pack Margin 4 + matched resolution. Three checkboxes, no seams.