Skip to main content
DynDOLOD - Dynamic Distant Objects LOD
Finally I can see my house from here!
Support me on Ko-fi

Occlusion Data

Left holes in the ocean. Right no holes in the ocean.

The game uses several different optimizations methods, like manually placed occlusion planes/boxes or view frustum culling.

In addition to those methods, each exterior cell record has a field (TVDT - Occlusion data) that keeps track if LOD is visible or occluded by terrain. For example a big mountain hides any LOD behind it. Occluded LOD is disabled, which helps performance.

The vanilla game only includes this occlusion data for the Tamriel worldspace. It is famously wrong for several cells resulting in visible rectangular holes in the LOD, especially in the sea of ghosts.

TVDT - Occlusion Data can be generated as part of the LOD generation process. Since the occlusion data has to be generated for many exterior cell records, it means a lot of them need to be overwritten, which can result in more plugins being required as masters by the plugin that contains the overwritten cell records.

So, unless maybe generating for Enderal, it seems overall more convenient to generate a separate Occlusion.esp plugin. Having the data in a separate plugin makes it easier to deal with overwrite orders or load order updates.

DynDOLOD offers both options - generate the occlusion data into the DynDOLOD.esp or a separate Occlusion.esp (which is equivalent to using xLODGen) - in the advanced mode options.

In case of questions or feedback, check the Skyrim TVDT - Occlusion Culling Data thread on the official DynDOLOD support forum.


By default the occlusion data generation is always checked and a separate Occlusion.esp will be generated unless Enderal is detected, in which case the occlusion data is generated into the DynDOLOD.esp. This can be changed in the advanced mode.

It also possible to only update an existing or generate a new Occlusion.esp with xLODGen or DynDOLOD at any time. The process is the same, however DynDOLOD uses some pre-defined settings from ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_[GAME MODE].ini as explained below.

In case of updating an existing DynDOLOD installation with a separate Occlusion.esp, also keep Occlusion.esp activated and make sure it loads last right after DynDOLOD.esp. The Occlusion data and Plugin checkboxes will be checked automatically.

In case of updating an existing DynDOLOD installation without a separate Occlusion.esp, check the Occlusion data and Plugin checkboxes and uncheck Object LOD, Tree LOD, Dynamic LOD and Terrain Underside. It should then generate an Occlusion.esp only, just like xLODGen would.

Optional Configuration

Quality - the more samples are used the more distant cells are potentially disabled. Generally use 2 for a quick update. Use 3 if time permits - it typically results in a few more areas that are disabled. Total time depends on selected mode (number of cells that need to be updated) and hardware. Quality 2 is reasonable quick with a large worldspace may be taking a minute or two. Quality 3 can easily be a couple magnitudes slower than quality 2. It may have to compare up to 256 (16 x 16) samples between two cells instead of 16 (4 x 4).

Plugin - check to generate a separate Occlusion.esp, which is equivalent to using xLODGen.

For the settings below, edit ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_[GAME MODE].ini:

OcclusionHeight - the algorithm uses the highest point of the heightmap or object LOD between two samples points. Since the player itself could be standing on the highest point, this can add a bit of additional height if required. There is no need to change the height unless holes can still be seen in the distance from a vantage point.

OcclusionRadius - the engine renders about a 100 cells into the distance. There is no need to show or calculate the visibility of cells beyond that limit.

OcclusionMode - helps to limit the amount of CELL records that need to be processed. CELL records without terrain height data are always skipped. -Flat means to skip cells with terrain height data that is perfectly flat - it typically means the cell is way outside the playable area. +Border means to only process cells if they are linked to a region that has the Border Region flag set - since the player is normally restricted to cells inside the border region. +TVDT will update cells that already have TVDT data and -TVDT will update cells that do not already have TVDT data. +Border is ignored for child worldspaces that use the selected worldspace for LOD.

By appending _[Worldspace name] to any of the settings, the default can be overwritten for a specific worldspace. DynDOLOD automatically filters out small worldspaces. Specific worldspaces can be enabled/disabled by setting Occlusion_[Worldspace name]=1/0. See the existing settings for defaults and examples how to set specific options for a worldspace.

The default setting -TVDT is used to ensure less work and less overwrites are being copied into the plugin for new land mods, in case they already include the occlusion data themselves.

Out of Memory while Generating Occlusion Data

Set OcclusionMaxThreadsObjectLOD=1 in ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini in case the parallel reading of large object LOD meshes consumes too much memory.