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

Grass LOD

Left vanilla no grass LOD. Right DynDOLOD with grass LOD.

Grass LOD is currently only supported for Skyrim Special Edition and Enderal SE.

Grass LOD uses grass LOD billboards in object LOD, similar to ultra tree LOD. TexGen can be used to automatically generate the grass LOD billboards.

Grass LOD generation requires a warmed precache from No Grass In Objects for the current load order. It uses the *.CGID files found in the ..\Data\Grass\ folder. Check out Worldspaces with Grass SSEEdit Script for No Grass In Objects, it helps speeding up the grass cache generation.

Settings

Use version 6 or higher of No Grass In Objects.

Set UseGrassCache = True and OnlyLoadFromCache = True in ..\NetScriptFramework\Plugins\GrassControl.config.txt.

Grass LOD can either start right beyond the active exterior cells (uGridsToLoad) which equals to Mode/DynDOLODGrassMode = 1 or beyond the large reference distance (uLargeRefLODGridSize) which equals to Mode/DynDOLODGrassMode = 2.

Set the desired Mode in the advanced mode of DynDOLOD under the Grass LOD checkbox and for DynDOLODGrassMode in ..\NetScriptFramework\Plugins\GrassControl.config.txt. While the DynDOLODGrassMode can be changed at any time, the Mode used to generate grass LOD is baked into the object LOD meshes. See Updating below how to update the object LOD meshes.

In case the grass LOD brightness or color seems off (it might depend on weathers or ENB settings), change the GrassBrightnessTop* and GrassBrightnessBottom* settings in ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini. Especially the image based lighting effect from ENB has a big impact on the brightness and color tone of the grass LOD.

Change the Density dropdown to a lower value in the advanced mode of DynDOLOD under the Grass LOD checkbox to thin out grass LOD for better performance.

In case the grass pre-cache was generated with SuperDenseGrass = True, expect really long object LOD generation times. Lower the density to 33% or less.

Generating

Generate or update the grass cache of No Grass In Objects according to is instructions.

Generate grass LOD billboards with TexGen and install the TexGen output as usual.

To enable grass LOD generation, check the Grass LOD checkbox in the advanced mode of DynDOLOD.

The option is disabled if its requirements are not met. Hover the mouse pointer to see a tooltip with the number of found *.CGID grass cache files and grass LOD billboards.

Generate LOD with DynDOLOD as usual.

Updating

In case only the grass placements in the precache have changed, start DynDOLOD in expert mode, select the desired worldpace and click the Execute LODGen button. Then merge the new output with the existing output, overwriting all older files.

In case only the grass textures have been changed or different settings in TexGen are used, update the grass LOD billboards with TexGen, install the TexGen output, then start start DynDOLOD in expert mode, select the desired worldpace and click the Rebuild Atlas button. Then merge the new output with the existing output, overwriting all older files.

To only switch the GrassLargeReference setting, change GrassLargeReference to True or False in ..\DynDOLOD\Edit Scripts\Export\LODGen_SSE_Export_[WORLDSPACE].txt, start DynDOLOD in expert mode, select the desired worldpace and click the Execute LODGen button. Then merge the new output with the existing output, overwriting all older files. Remember to also change the setting in the ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini for future LOD generation.

To test different GrassBrightnessTop* or GrassBrightnessBottom* settings, change them in ..\DynDOLOD\Edit Scripts\Export\LODGen_SSE_Export_[WORLDSPACE].txt, start DynDOLOD in expert mode, select the desired worldpace and click the Execute LODGen button. Then merge the new output with the existing output, overwriting all older files. Remember to also change the settings in the ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini for future LOD generation.

To test different grass LOD densities, change the GrassDensity setting in ..\DynDOLOD\Edit Scripts\Export\LODGen_SSE_Export_[WORLDSPACE].txt, start DynDOLOD in expert mode, select the desired worldpace and click the Execute LODGen button. Then merge the new output with the existing output, overwriting all older files. Remember to also change the setting in the ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini for future LOD generation.

To speed things up, limit generation to LOD Level 4 by using the Specific Chunk dropdowns. Use the West/South coordinates to generate and test with a specific BTO file until the desired results are found.

Performance

Unsurprisingly showing millions of grass LOD billboards on screen can require a lot of resources. If the generated LOD data becomes to much for the engine to handle, there can be infinite loading screen (ILS). Test if the experimental memory manager from SSE Engine Fixes can help with this issue.

To get an idea about the performance impact of grass LOD before generating it, use the No Grass In Objects ExtendGrassDistance and OverwriteGrassDistance settings to make it load grass to about the same distance as the LOD Level distance (fBlockLevel0Distance). Now fully rendered grass is loaded about as far as grass LOD would. Grass LOD obviously uses less performance than that.

To control the effects on performance, try lowering LOD Level 4 distance (fBlockLevel0Distance) in the DynDOLOD SkyUI MCM Settings page or the SkyrimPrefs.INI.

Visually the object LOD for mountains suffers from the shorter distance especially. Consider adding a mesh rule anywhere before the last '\' rule to compensate:

Mesh maskmountains
LOD Level 4Level0
LOD Level 8Level0
LOD Level 16Level1 or Level2
FlagsVWD
GridFar LOD
ReferenceUnchanged

Remove or disable generation of select grass LOD billboards to generate less grass LOD.

Consider using less dense grass settings when generating the grass cache.

To only generate grass LOD with less density, change the Grass LOD Density setting in the advanced mode.

Troubleshooting

Not all grass types have LOD / grass LOD billboards

Check that TexGen generates grass LOD billboards for all desired grass types. Plugins from mods often forget to set object bounds on base records, which filters them out from automatic tree/grass LOD billboard generation. See TexGen Configuration for further details.

Error reading grass [worldspace] [x,y] / Error processing grass data *.CGID Unable to read beyond the end of the stream. System.IO.EndOfStreamException

Delete the *.CGID file. Load the game, open console and type "cow Tamriel x y" without the quotes and the values for x and y from the *.CGID filename to load directly into the cell. No Objects In Grass should then generate the file anew, which hopefully can then be read next time DynDOLOD is run to generate LOD.

LODGen takes a long time or uses a lot of memory

Unsurprisingly generating millions grass LOD billboards requires time and memory.

Test with a higher value for LODGenThreadSplit= setting in ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini to try to reduce peak memory usage.

In case there are high resolution terrain LOD meshes installed in the load order, temporarily disable them to see if using the vanilla terrain LOD meshes requires less memory.

Use less dense grass for the grass cache and/or lower the GrassDensity in ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini setting so less memory is required to generate grass LOD and to increase performance in game.

Remove or disable generation of select grass LOD billboards to generate less grass LOD.

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 to much memory.

No Grass LOD Check List

Check in the mod manager that there are ..\Data\Grass\[Worldspace]*.CGID grass cache files for the worldspace in the load order.

Make sure TexGen is generating grass LOD billboards for grasses by checking its log ..\DynDOLOD\Logs\TexGen_SSE_log.txt. Pay attention to error messages and fix them. Double-check the object bounds of the GRAS records in the plugins as explained above.

Check the grass LOD billboards textures in the TexGen output with an image viewer show grass and are not fully transparent.

Check the DynDOLOD debug log ..\DynDOLOD\Logs\DynDOLOD_SSE_Debug_log.txt contains <Notice: [Worldspace] Gathering grass data for object LOD>

Check the DynDOLOD log ..\DynDOLOD\Logs\DynDOLOD_SSE_log.txt that there were no errors in the LODGen log and check the LODGen log ..\DynDOLOD\Logs\LODGen_SSE_[Worldspace]_log.txt directly that its last line is Code: 0.

Check the object LOD atlas ..\DynDOLOD_Output\Textures\DynDOLOD\LOD\DynDOLOD_[Worldspace].dds contains some of the grass LOD billboards generated by TexGen.

Check the export file ..\DynDOLOD\Edit Scripts\Export\LODGen_SSE_Export_[Worldspace].txt contains a line like GrassMap=..\DynDOLOD\Edit Scripts\Export\LODGen_SSE_Grass_Map_[Worldspace].txt. Check that GrassDensity is not 0. If it is very low, grass LOD may be very thin to non-existent.

Check that ..\DynDOLOD\Edit Scripts\Export\LODGen_SSE_Grass_Map_[Worldspace].txt contains lines with grass LOD billboard texture names and paths in it.

Open ..\DynDOLOD_Output\Meshes\Terrain\[Worldspace]\Objects\[Worldspace].4.x.y.bto and check visually if there is grass LOD in there. The many tiny X planes will be obvious.

To find a BTO that contains grass LOD, set expert=1 and verbose=1 in the ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini to start DynDOLOD in expert mode. Select the worldspace and click Execute LODGen. Once its done, check the LODGen log ..\DynDOLOD\Logs\LODGen_SSE_[Worldspace]_log.txt for lines like "Found z grass placements for LOD level 4 coord [x, y]". Check the BTO for the mentioned coordinates.