In Unity’s Precomputed Realtime GI, a Chart is an area of a lightmap texture to which we map the lightmap UVs of a given Scene object. We can think of this as a small tile containing an image of the lighting affecting that object. A Chart is made up of two parts: irradiance (lighting) and directionality (encoding the dominant light direction).
When the Precomputed Realtime GI is generated, lighting is calculated for every texel that is included in a Chart. Large numbers of Charts in a Scene can be one of the biggest detriments to precompute times so it is important to understand how Charts work and how we can manage them in order to optimize lighting precompute times.
Illustration showing a UV Chart of a minimum 4x4 texel size. Lightmap UVs are always clamped to within half a texel of the outside of the Chart in order to prevent bleed caused by texture filtering.
By default, each Chart is a minimum of 4x4 texels. A Chart therefore requires a minimum of 16 texels regardless of the scale of the object within the world or the size of the corresponding UV shell. So, for example, if an object is 1x1 meter, the object has 1 Chart and our indirect resolution is 1, 16 texels are required for the object. This minimum size enables Unity to stitch Charts together for seamless lighting across geometry edges. Unity requires at least 4 texels along a Chart edge in order to uniquely identify it before the corresponding partner can be found and stitched.
Note that no padding is needed for realtime GI because Unity clamps the lightmap UVs to give a half texel border inside the Chart during the packing stage of the mesh import pipeline. This means that Charts can be right next to each other and still be bilinearly interpolated without cross bleeding, saving valuable lightmap space.
Imagine the same 1x1 meter object we discussed earlier had 50 Charts. Unity would create 800 texels for the object, despite it being relatively small. This demonstrates how having a large number of Charts can quickly drive up the number of texels. More texels means more lighting calculations and more data to compute, compress and store. All of this adds up in complex Scenes and can result in lengthy precomputes and reduced performance at run time.
Inappropriate Charting is the major culprit for lighting precomputes not completing or taking too long. With this in mind, many of our obvious strategies for reducing precompute times are to reduce the number of Charts we have in our Scene.