SkyrimSE:Grass LOD Guide: Difference between revisions

From Step Mods | Change The Game
mNo edit summary
 
(192 intermediate revisions by 2 users not shown)
Line 2: Line 2:
|logo=skyrimse
|logo=skyrimse
|title=Skyrim Special Edition Grass LOD Guide
|title=Skyrim Special Edition Grass LOD Guide
|subtitle=A guide to grass LOD for Skyrim Special Edition
|subtitle=A guide to configuring a custom grass cache and grass LOD for Skyrim Special Edition
|author=The Step Team
|author=The Step Team
|forumtid=16078}}{{TOC|limit=4}}
|forumtid=16314}}
{{Alert|type=warn|text=At the time of this writing, NGIO only works with SSE 1.5.97 and NOT 1.6.xxx runtime or VR. To use a custom grass cache and grass LOD in 1.6.xxx or VR, the grass cache must be created under SSE 1.5.97 and transferred into an analogous mod list. See [https://stepmodifications.org/forum/topic/16280-howto-reinstall-skyrim-se-1597-if-you-dont-have-a-backup/ this post] to understand how to downgrade to 1.5.97 or concurrently run both 1.5.97 and 1.6.xxx. Alternatively, use the [https://www.nexusmods.com/skyrimspecialedition/mods/31054/ Step SSE AE Guide], which includes a pregenerated grass cache for that mod list.}}
{{TOC|limit=4}}


{{Alert
== Guide scope ==
|type=construction
The primary purpose of this guide is to explain the process by which grass LOD can be generated for Skyrim Special Edition with [[SkyrimSE:No_Grass_In_Objects|NGIO]] support.
|text=This guide is under construction and is incomplete.}}
 
Secondarily, this guide explains how to generate a custom grass cache, which is required by No Grass In Objects (NGIO), regardless of grass LOD. In other words, cached grass offers two distinct benefits:
# No grass will be placed within objects like rocks, walls, stairs, planks, etc.
# Pre-cached grass improves performance by removing the strain on the CPU of creating the grass upon each cell load.


== Guide scope ==
If grass LOD is not desired, simply omit the DynDOLOD 'required' tools and Step 8 in the following instructions.
This guide intends to explain the process by which grass LOD can be generated via the grass cache files for Skyrim Special Edition. It may include some general recommendations for optimizing appearance and performance, as well as technical information that may prove useful for troubleshooting. A quick start guide is included to generally guide users through this process.


== Quick start ==
== Quick start ==
This is meant to give a condensed walkthrough for creating a custom grass cache and configuring grass LOD in SSE, rendering full grass only up to the uGridsToLoad distance (the fully loaded portion around the player character) with grass LOD stretching out from there up to the LOD4 distance (controlled by <code>[TerrainManager] fBlockLevel0Distance</code> INI setting). Grass LOD can tax performance on some systems and may carry as much as a 20fps penalty.


{{AlertSmall|type=construction|text=Incomplete}}
{{Fc|salmon|''As noted previously, while grass LOD is the main goal for most people, the benefits of having a custom grass cache extend to everyone and not just DynDOLOD users''.}}
This is meant to give a simple walkthrough of setting up grass LOD. It provides a suggested configuration for use with the STEP guide for Skyrim Special Edition that renders full grass only up to the uGridsToLoad distance (the fully loaded portion around the player character) with grass LOD stretching out from there up to the LOD 4 distance (controlled by fBlockLevel0Distance:TerrainManager INI setting). The grass LOD is very performance intensive, and may carry as much as a 20fps penalty, so users on weaker systems may wish to not use the DynDOLOD portion of this walkthrough.
 
Relevant recommended settings for SkyrimPrefs.ini:
<pre>[Grass]
fGrassMaxStartFadeDistance=8192
fGrassMinStartFadeDistance=0
fGrassStartFadeDistance=6144


[TerrainManager]
This guide also assumes that Mod organizer (MO) will be used, but the process is similar under other mod managers. Refer to NGIO documentation on the Nexus for alternative mod managers.
fBlockLevel0Distance=53248
fBlockLevel1Distance=159744
fBlockMaximumDistance=331776
fSplitDistanceMult=1.000</pre>


=== Step 1: Install required mods ===
=== Step 1: Install required mods ===
The following mods must be installed and setup correctly to use this quick start walkthrough:
The following apps and mods should be installed and setup correctly to use this quick start walkthrough:
*[https://stepmodifications.org/forum/topic/15606-dyndolod-300-alpha-39/ DynDOLOD 3 alpha]
*[https://stepmodifications.org/wiki/SkyrimSE:SSEEdit xEdit] - This is an app. DO NOT install into MO as a mod!
*[https://stepmodifications.org/wiki/SkyrimSE:SSEEdit SSEEdit]
*[https://stepmodifications.org/wiki/SkyrimSE:Worldspaces_with_Grass_SSEEdit_Script Worldspaces with Grass SSEEdit Script for No Grass In Objects] (optional)
*[https://stepmodifications.org/wiki/SkyrimSE:NET_Script_Framework .NET Script Framework]
*[https://stepmodifications.org/forum/topic/15606-dyndolod-300-alpha-39/ DynDOLOD 3 alpha] - This is an app. DO NOT install into MO as a mod!
*[https://stepmodifications.org/wiki/SkyrimSE:No_Grass_In_Objects No Grass In Objects]
*[https://stepmodifications.org/wiki/SkyrimSE:DynDOLOD_Resources_SE_3 DynDOLOD Resources SE 3]
*[https://stepmodifications.org/wiki/SkyrimSE:DynDOLOD_Resources_SE_3 DynDOLOD Resources SE 3]
*[https://stepmodifications.org/wiki/SkyrimSE:Worldspaces_with_Grass_SSEEdit_Script Worldspaces with Grass SSEEdit Script for No Grass In Objects]
*[https://stepmodifications.org/wiki/SkyrimSE:Backported_Extended_ESL_Support Backported Extended ESL Support] - Required to load newer version plugins.
*[https://stepmodifications.org/wiki/SkyrimSE:NET_Script_Framework .NET Script Framework] - This is required by NGIO.
*[https://stepmodifications.org/wiki/SkyrimSE:No_Grass_In_Objects No Grass In Objects (NGIO)] - Used to generate the grass cache.
*[https://stepmodifications.org/wiki/SkyrimSE:Grass_Cache_Helper_NG Grass Cache Helper NG] - Makes multiple quality of life fixes that streamlines the process of using the grass cache on all game versions.
 
=== Step 2 (optional): Take Steps to Speed Up Grass Pregeneration ===
All of the following are optional, but taking a few minutes to implement them all will potentially cut grass pregeneration time by up to half the time it would take otherwise (cutting something like 10-60 minutes off the total, depending on the mod list and the system).
 
{{Fc|salmon|'''NOTE:''' ''Enable all desired mods and sort plugins with [https://stepmodifications.org/wiki/SkyrimSE:LOOT LOOT] before beginning.''}}


=== Step 2: Generate a list of worldspaces containing grass ===
==== Exclude Irrelevant Worldspaces ====
{{AlertSmall|text=If you haven't already sorted your plugins with [https://stepmodifications.org/wiki/SkyrimSE:LOOT LOOT], now would be a good time to do so.}}
This step is recommended to speed up grass cache pregeneration by reducing the number of worldspaces that NGIO impacts.
This step is recommended to reduce the amount of worldspaces traversed by NGIO during grass cache generation.
#Open xEdit and load all plugins.
#Open SSEdit and load all your plugins.
#Once the ''Background Loader: Finished'' message appears, right click anywhere in the left pane and select ''Apply Script...''.
#Once the ''Background Loader: Finished'' message appears, right click anywhere in the left pane and select ''Apply Script...''.
#In the window that appears, in the Script dropdown, select ''List worldspaces with grass'' and click ''OK''.
#In the window that appears in the Script dropdown, select ''List worldspaces with grass'' and click {{Ui|OK}} (this may take a minute or two).
#Wait for it to finish processing. This may take a minute or two, depending on how many mods you have.
#When the ''Worldspaces with grass'' window appears, right-click the highlighted text and select {{Ui|Copy}}.
#When the ''Worldspaces with grass'' window appears, right-click the highlighted text and select ''Copy''.
#Click {{Ui|OK}} and exit xEdit.
#Click OK and exit SSEdit.
#Paste the output into the NGIO configuration file (GrassControl.config.txt) under <code>OnlyPregenerateWorldSpaces</code>.
#Open GrassControl.config.txt from NGIO (it's under Text Files in the mod information window in Mod Organizer) and paste the contents between the quotation marks of the OnlyPregenerateWorldSpaces setting.  
# Keep this file open.
#Save GrassControl.config.txt
 
==== Disable ENB ====
ENB adds an extra 10-30 seconds to game load time. During grass pregeneration, the game is loaded by the pregeneration process and usually crashes multiple times while it executes. This is normal, and the governing process gracefully restarts the game without user input. But having ENB enabled can add several minutes to the overall pregeneration time.
 
==== Lower Game Resolution ====
Lowering the game resolution while pregenerating grass is recommended to speed up the process a bit more, which can take 25 minutes to 3 hours otherwise (mileage may vary). Set game resolution to 800x600. Use [https://stepmodifications.org/wiki/SkyrimSE:SSE_Display_Tweaks SSE Display Tweaks] if installed. Otherwise set this using [https://stepmodifications.org/wiki/SkyrimSE:BethINI_SE BethINI], or set directly in SkyrimPrefs.ini.
 
=== Step 3: Configure NGIO INI ===
Ensure the following settings are set in <code>GrassControl.config.txt</code>:
<pre>UseGrassCache = True
ExtendGrassDistance = True
OnlyLoadFromCache = True</pre>
 
It is recommended to ensure these settings are false. Utilizing them dramatically increases precaching time (from minutes to many hours).
<pre>SuperDenseGrass = False
ExtendGrassCount = False</pre>
 
Consider modifying the following INI settings as necessary for the desired effect with your grass mod. These settings are baked into the grass cache and can only be changed prior to precaching grass. The corresponding Skyrim.ini settings have zero effect following grass cache generation.
<pre>EnsureMaxGrassTypesPerTextureSetting = 15 &nbsp;&nbsp;&nbsp;;set to max count of grass types for the grass mod. This is for Cathedral Landscapes.
OverwriteMinGrassSize = 67 &nbsp;&nbsp;&nbsp;;This overrides Skyrim.ini. This is for Cathedral Landscapes
GlobalGrassScale = 1.15 &nbsp;&nbsp;&nbsp;;Grass-size multiplier. A slight increase will make grass a bit slightly taller.</pre>
 
Save and close <code>GrassControl.config.txt</code>.
 
=== Step 4: {{Fc|salmon|AE users only}} - Temporarily downgrade the game to runtime 1.5.97.0 ===
The game downgrade procedure only applies to those that are creating a grass cache for use with the 1.6.xxx game runtime version.
 
{{Fc|salmon|See the WARNING at the top of this guide for references on downgrading the game files.}} Create backups of the 1.6.xxx game directory, the mod list/priority, and the plugins and load order (LO). These should be identical for both 1.5.97 and 1.6.xxx environments with the exception of a handful of mods that are game-version dependent (e.g., SKSE, Address Library, SSE Engine Fixes, etc.). More details follow.
 
:The following mods must be disabled under 1.6.xxx but ''enabled'' under v1.5.97 runtime:
:* NGIO
:* .NET Script Framework
:Additionally, the following must be installed and compatible with the 1.5.97 runtime:
:* '''''Skyrim - Interface.bsa''''' (this will be present in the 1.5.97 ..\Data\ directory if installed/downgraded properly)
:* Address Library
:* SSE Engine Fixes


=== Step 3: Configure GrassControl.config.txt ===
:In summary:
Ensure you have the following settings in GrassControl.config.txt:
:#{{Fc|salmon|Everything under ..\Data directory MUST be compatible with the 1.6.xxx game runtime EXCEPT '''Skyrim - Interface.bsa''', which is required for compatibility during cache generation. Using the remaining outdated 1.5.97 vanilla masters and data will not match that of 1.6.xxx ergo, its intended landscape.}}
<pre>RayCast = True
:#{{Fc|salmon|Everything under the game root directory MUST correspond to the 1.5.97 game runtime EXCEPT the contents under ..\Data\ (see #1).}}
SuperDenseGrass = False
ProfilerReport = False
UseGrassCache = True
ExtendGrassDistance = False
ExtendGrassCount = True
EnsureMaxGrassTypesPerTextureSetting = 15
OverwriteGrassDistance = 6144
OverwriteGrassFadeRange = 14128
OverwriteMinGrassSize = 85
GlobalGrassScale = 1.5
OnlyLoadFromCache = True
DynDOLODGrassMode = 1</pre>


=== Step 4: Configure the game ini files to run in a small window ===
Disable various SKSE mods that are incompatible with 1.5.97. {{Fc|salmon|Do not disable any mods that contain plugins unless they are not compatible with 1.5.97 (then try to find a 1.5.97 version if it exists).}}
{{AlertSmall|text=This step is optional but recommended. If you use [https://stepmodifications.org/wiki/SkyrimSE:SSE_Display_Tweaks SSE Display Tweaks] to modify your resolution and/or screen mode, you will need to modify the equivalent settings there instead.}}  
#Launch [https://stepmodifications.org/wiki/SkyrimSE:BethINI_SE BethINI].
#Ensure that you have the correct ''INI Path'' in the ''Setup'' tab.
#Under ''Basic'', set ''Resolution'' to ''800x600''.
#Checkmark ''Windowed Mode''.
#Save and exit.


=== Step 5: Precache Grass ===
=== Step 5: Precache Grass ===
This process will take about 20 minutes to complete, but may vary depending on hardware and installed mods. The game will typically crash during grass generation. This is normal. There is no need to monitor or click 'OK' when restarts occur.
This process can require 25 minutes to 1 hour to complete (longer if the previous step isn't done), depending on hardware and installed mods. The game will typically crash during grass generation. This is normal. There is no need to monitor or click 'OK' when restarts occur. Grab some lunch.
# Click the {{Icon|type=motools}} button in MO, and select ''Precache Grass.''  
# Click the {{Icon|type=motools}} button in MO, and select ''Precache Grass.''  
# Wait until the game displays an error message stating "Grass generation finished successfully!" Click the ''OK'' button when it appears. Also click the ''OK'' button for the duplicate message in Mod Organizer.  
# When the game displays the error "Grass generation finished successfully!", click {{Ui|OK}}.
# Click the {{Ui|OK}} if a similar message is waiting in message in the mod manager (MO in our case).  
# The grass cache should have been generated within Overwrite. Right-click on Overwrite and select ''Create Mod....''   
# The grass cache should have been generated within Overwrite. Right-click on Overwrite and select ''Create Mod....''   
# Name it "Grass Cache - cgid" or something similar and click ''OK''.
# Name it "Grass Cache" or something similar and click ''OK''.
# Revert game resolution to the optimal quality if it was [[SkyrimSE:Grass_LOD_Guide#Lower_Game_Resolution|previously lowered]].


=== Step 6: Configure the game ini files back to the correct resolution and screen mode ===
Now that the grass CGID files have been created and can also be read by the game thanks to [https://www.nexusmods.com/skyrimspecialedition/mods/101095 Grass Cache Helper NG], be certain to keep this mod active during gameplay.
{{AlertSmall|text=This step must be completed if you followed step 4. Skip if you didn't follow step 4. If you use [https://stepmodifications.org/wiki/SkyrimSE:SSE_Display_Tweaks SSE Display Tweaks] to modify your resolution and/or screen mode, you will need to modify the equivalent settings there instead.}}
#Launch [https://stepmodifications.org/wiki/SkyrimSE:BethINI_SE BethINI].
#Set ''Resolution'' back to its correct resolution.
#If you run the game in fullscreen mode instead of borderless windowed mode, uncheck ''Windowed Mode''.
#Save and exit.


=== Step 7: Run TexGen ===
=== Step 6: {{Fc|salmon|AE users only}} - Revert all changes made in Step 4 ===
#Run TexGen from the MO2 executable drop-down list.
* Upgrade Skyrim to 1.6.xxx runtime by restoring the game directory backup created in Step 4.
#Ensure that you have all options checkmarked and set to the appropriate resolution. TexGen should automatically detect the correct resolution settings, so if you haven't changed them, they should be correct.
* Restore the MO mod list and load order backups created in Step 4.
#Optionally tweak Direct and Ambient settings to change lighting on the generated Billboards. Default values should be used unless it is found that the billboards require additional lighting tweaks.
#Ensure that all texture settings are set to ''Default (BC7 Quick)''.
#Click ''Start''.
#Once the completed message has appeared (typically 15-30 minutes, depending on the PC), click ''Zip & Exit''.
#Navigate to the DynDOLOD ''TexGen_Output'' folder location (e.g. <code>../Modding/Tools/DynDOLOD/TexGen_Output</code>).
#Drag and drop the TexGen_Outputzip.zip into Mod Organizer 2 near the bottom of the left pane to install it. Name it in a way that you can recognize to which profile it belongs. Don't forget to checkmark it.


=== Step 8: Configure DynDOLOD_SSE.ini ===
=== Step 7: Generate LOD ===
#Navigate to your DynDOLOD installation and open the DynDOLOD_SSE.ini file within the Edit Scripts\DynDOLOD folder.
Use the most updated settings recommended for LOD generation by consulting the [https://stepmodifications.org/wiki/SkyrimSE:{{#show:STEP:Main/GuideVersioning|?{{NAMESPACE}}CurrentRelease#}}#DynDOLOD Step Guide LODGen instructions]. This process applies to almost every SSE mod list, but do ignore any references to specific mods, patches, or mesh rules that may not apply.
#Change the following settings if you haven't already:
<pre>; set to 1 for expert LODGen options in advanced mode, disables wizard automatically
Expert=1
; grass LOD brightness multipliers
GrassBrightnessTopR=0.36
GrassBrightnessTopG=0.365
GrassBrightnessTopB=0.35
; make bottom darker to fake shadowing
GrassBrightnessBottomR=0.200
GrassBrightnessBottomG=0.203
GrassBrightnessBottomB=0.195</pre>


=== Step 9: Run DynDOLOD ===
{{Fc|salmon|'''A few considerations:'''}}
#Run DynDOLOD from the MO2 executable drop-down list to open the GUI configuration in 'expert' mode (if the DynDOLOD INI modification was set as described previously).
# xLODGen gamma values referenced are slightly increased to optimize terrain LOD for Cathedral Landscapes. Consider setting to default of '1.00' at each LOD level if for other landscape mods.
#Ensure that all worldspaces are ticked.
# TexGen GUI settings can be altered to lighten or darken billboard textures used by DynDOLOD grass, trees, or rendered tree trunks, but the defaults are optimized for most mods.
#Tweak your rules and settings to your preference.
# Likewise, the DynDOLOD GUI settings include some brightness settings that should be used. See the current [[SkyrimSE:Grass_LOD_Guide#DynDOLOD_3|DynDOLOD 3 section]] below for recommended settings.
#Checkmark ''Grass LOD'', set ''Density'' for grass to ''35'', and set ''Mode'' to ''1''.
#Once the configuration is finalized, click ''OK''. DynDOLOD generation will start processing. This step will take some time, typically around a half hour, but may vary depending on your settings/hardware/mods.
#When the completed message has appeared, click ''Save & Zip & Exit''.
#Navigate to the DynDOLOD ''DynDOLOD_Output'' folder location (e.g. <code>../Modding/Tools/DynDOLOD/DynDOLOD_Output</code>).
#Drag and drop the DynDOLOD_Outputzip.zip into Mod Organizer 2 near the bottom of the left pane to install it. Name it in a way that you can recognize to which profile it belongs. Don't forget to checkmark it.


== No Grass In Objects==
=== Step 8: Enjoy the Game ===
[https://stepmodifications.org/wiki/SkyrimSE:No_Grass_In_Objects No Grass In Objects] is required to create the grass cache files necessary to generate the LOD for grass. It also can stop grass from growing inside rocks and other objects, and it can increase the grass draw distance beyond the loaded cells.
Further information follows for those interested. Otherwise, do enjoy the game, or post questions/comments using the forum link at the top of this article.


===Settings===
== Additional Information ==
This section will cover the different settings and make suggestions on usage.
=== NGIO ===
[https://stepmodifications.org/wiki/SkyrimSE:No_Grass_In_Objects No Grass In Objects] is required to create the grass cache files necessary to generate the LOD for grass under SSE 1.5.97. NGIO should be ''disabled'' if using the grass cache in AE. In SSE 1.5.97, it also can stop grass from growing inside rocks and other objects, and it can increase the grass draw distance beyond the loaded cells.


==== Raycasting ====
==== Raycasting ====
Line 147: Line 140:
UseGrassCache = True</pre>
UseGrassCache = True</pre>


==== Extended grass features ====
==== Extended grass distance ====
ExtendGrassDistance and ExtendGrassCount are to be set to true if you want to show grass beyond a uGridsToLoad of 5 (i.e., LOD grass). Otherwise, these can be set to false and vanilla limits will apply.
ExtendGrassDistance should be set to true if you want to show grass beyond a uGridsToLoad of 5 (i.e., LOD grass). Otherwise, it can be set to false and vanilla limits will apply.
<pre>ExtendGrassDistance = False
<pre>ExtendGrassDistance = False</pre>
ExtendGrassCount = False</pre>
 
==== Extended grass count ====
ExtendGrassCount fixes an issue where if you have very dense grass, especially using SuperDenseGrass, grass will go over the 64kb gpu buffer limit and not be created. This fix checks after each patch of grass, that if 32kb is reached, it creates a separate mesh. Under most circumstances, this is only necessary if you set very large grass densities. It can significantly increase grass cache generation time, so it is recommended to be disabled if possible.
 
<pre>ExtendGrassCount = False</pre>
 
==== Grass Scale ====
GlobalGrassScale allows you to set a multiplier to increase the size of grass. This can be raised to make grass taller, which may allow you to lower your grass density in OverwriteMinGrassSize to increase performance with similar visuals.
 
<pre>GlobalGrassScale = 1.15</pre>


==== Vanilla INI setting overrides ====
==== Vanilla INI overrides ====
Setting any of these to -1 will revert the setting to what it is set to within the game INI files. There are many of these settings that authors like to force on the user via plugin INIs, so it is generally advised to set most of these settings here.
Setting any of these to -1 will revert the setting to what it is set to within the game INI files. There are many of these settings that authors like to force on the user via plugin INIs, so it is generally advised to set most of these settings here.
* <code>EnsureMaxGrassTypesPerTextureSetting</code> overrides <code>iMaxGrassTypesPerTexure:Grass</code> in Skyrim.ini
* <code>EnsureMaxGrassTypesPerTextureSetting</code> overrides <code>iMaxGrassTypesPerTexure:Grass</code> in Skyrim.ini
Line 168: Line 170:


==== Grass cache pregeneration settings ====
==== Grass cache pregeneration settings ====
SkipPregenerateWorldSpaces allows you to set worldspaces where it will not attempt to make grass cache files. Conversely, OnlyPregenerateWorldSpaces can be used to limit grass cache generation to a specific set of worldspaces.
SkipPregenerateWorldSpaces allows you to set worldspaces where it will not attempt to make grass cache files. Conversely, OnlyPregenerateWorldSpaces can be used to limit grass cache generation to a specific set of worldspaces. [https://stepmodifications.org/wiki/SkyrimSE:Worldspaces_with_Grass_SSEEdit_Script Worldspaces with Grass SSEEdit Script for No Grass In Objects] can be used to populate OnlyPregenerateWorldSpaces based on your load order.
<pre>SkipPregenerateWorldSpaces = "DLC2ApocryphaWorld;DLC01Boneyard;WindhelmPitWorldspace"
<pre>SkipPregenerateWorldSpaces = "DLC2ApocryphaWorld;DLC01Boneyard;WindhelmPitWorldspace"
OnlyPregenerateWorldSpaces = ""</pre>
OnlyPregenerateWorldSpaces = ""</pre>


==== DynDOLODGrassMode ====
==== DynDOLODGrassMode ====
{{Fc|salmon|Read the setting descriptions below, but the following setting is now deprecated. Use the DynDOLOD 3 GUI to set 'Mode' to either 1 or 2.}}
DynDOLODGrassMode can be used to quickly set settings to conform to the method chosen. If set to 1, OverwriteGrassDistance will be set to 999999, OverwriteGrassFadeRange will be set to 0, and ExtendGrassDistance will be set to false. If set to 2, OverwriteGrassDistance will be set to 999999, OverwriteGrassFadeRange will be set to 0, and ExtendGrassDistance will be set to true. Also, the ChosenGrassGridRadius (similar to iGrassCellRadius:Grass in Skyrim.ini) will be determined based off this value.
DynDOLODGrassMode can be used to quickly set settings to conform to the method chosen. If set to 1, OverwriteGrassDistance will be set to 999999, OverwriteGrassFadeRange will be set to 0, and ExtendGrassDistance will be set to false. If set to 2, OverwriteGrassDistance will be set to 999999, OverwriteGrassFadeRange will be set to 0, and ExtendGrassDistance will be set to true. Also, the ChosenGrassGridRadius (similar to iGrassCellRadius:Grass in Skyrim.ini) will be determined based off this value.
<pre>DynDOLODGrassMode = 1</pre>
<pre>DynDOLODGrassMode = 1</pre>


=== Pregenerating the grass cache ===
==== Pregenerating the grass cache ====
In order to improve performance, it is highly recommended to pregenerate the grass cache. Mod Organizer users can simply use the provided plugin, which will handle this automatically. Other users will need to create a PrecacheGrass.txt file in the game directory and launch the game. Precaching can take hours in some cases, especially if using grass beyond the uGridsToLoad. Crashing during this operation is expected and normal behavior; however, if it continues to crash repeatedly at a location, a problem likely exists in the modded setup that will cause a crash at that area and the precaching process will not be able to complete. The user will have to identify and fix the problem before precaching can be successfully performed.
In order to improve performance, it is highly recommended to pregenerate the grass cache. Mod Organizer users can simply use the provided plugin, which will handle this automatically. Other users will need to create a PrecacheGrass.txt file in the game directory and launch the game. Precaching can take hours in some cases, especially if using grass beyond the uGridsToLoad. Crashing during this operation is expected and normal behavior; however, if it continues to crash repeatedly at a location, a problem likely exists in the modded setup that will cause a crash at that area and the precaching process will not be able to complete. The user will have to identify and fix the problem before precaching can be successfully performed.


After the grass cache pregeneration process is finished, the game will display an error message that says the process completed successfully. Grass cache files will be created in a grass folder either in Overwrite for Mod Organizer users or in Data. Mod Organizer users can create a mod from the output and enable it to keep it organized. If, after the process is complete, there are no cache files, something likely is wrong with the settings utilized.
After the grass cache pregeneration process is finished, the game will display an error message that says the process completed successfully. Grass cache files will be created in a grass folder either in Overwrite for Mod Organizer users or in Data. Mod Organizer users can create a mod from the output and enable it to keep it organized. If, after the process is complete, there are no cache files, something likely is wrong with the settings utilized.


== DynDOLOD ==
=== DynDOLOD 3 ===
[https://stepmodifications.org/wiki/SkyrimSE:DynDOLOD_SE DynDOLOD] 3 is required to generate grass billboards and grass LOD. This section will cover the different settings and make suggestions on usage.
[https://stepmodifications.org/wiki/SkyrimSE:DynDOLOD_SE DynDOLOD 3] is uses to generate object LOD and is required to generate grass billboards and trees in object LOD.


=== TexGen ===
==== TexGen ====
TexGen is included within the DynDOLOD installation and must be used to create grass LOD billboards. This can be done by simply checking the Grass in the main TexGen Options window before TexGen generation. Users can also modify the settings for "Direct" (light from the sun) and "Ambient" (general lighting) for the textures. Defaults are fine to start. [[File:texgen grass billboards.png|400px]]
TexGen is included within the DynDOLOD installation and must be used to generate the grass LOD billboards. This can be done by simply ticking the '''Grass''' option in the TexGen GUI. The settings for "Direct" (light from the sun) and "Ambient" (general lighting) can be adjusted to affect the lighting on the rendered grass from which the flat billboard texture is created. The recommended settings are indicated below. Use the settings corresponding to rendered game [https://www.windowscentral.com/1080p-vs-1440p-vs-4k-which-should-gamers-go resolution]: 1080p = HD, 1440p = QHD, 2160p = 4k
{{GallerySimple|id=TexGen|width=150|img=File:TexGen_2.1.0_HD.jpg|caption=HD}}{{GallerySimple|id=TexGen|width=150|img=File:TexGen_2.1.0_QHD.jpg|caption=QHD}}{{GallerySimple|id=TexGen|width=150|img=File:TexGen_2.1.0_4k.jpg|caption=4k}}{{clear}}


=== DynDOLOD grass LOD settings ===
==== DynDOLOD grass LOD settings ====
DynDOLOD does not generate grass LOD by default. In order to enable it, \Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini must be modified. The following settings pertain to grass LOD generation:
<pre>; set to 1 to enable grass LOD for the nearest object LOD level 4, requires *.cgid grass files in data\grass\ folder from Grass Control and grass LOD billboards generated by TexGen
Grass=0


; 0 to 100%; 0 = no grass - unlike Grass=0, the grass LOD billboards will still be added to the object LOD texture atlas
DynDOLOD allows changing grass brightness settings for the object LOD texture atlas using brightness modifiers for the bottom and top of the textures in <code>..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini</code>. The grass brightness modifiers can be modified to tint grass LOD to match the loaded grass in certain situations where post-processing mods like ENB or ReShade might be affecting color. RGB modifiers allow control of tints in both the top and base of the grass meshes to enhance the 3D appearance of distant grass. Adjust all values equally by a constant (0.05-0.10) to effectively alter brightness, and adjust each independently to control tint.
GrassDensity=100


; set to 1 to flag grass LOD as LargeReference, so that it unloads at the distance of uLargeRefLODGridSize instead of the usual uGridsToLoad distance
In most situations, it is suggested to control brightness using TexGen Ambient/Direct GUI settings and setting DynDOLOD's grass tints to a uniform 1.000 to keep things simple and repeatable. Barring specific post-processing effects impacting color in certain presets, this is the best way to match LOD grass to full grass whether or not using ENB Complex Grass.
GrassLargeReference=0
 
{{Fc|salmon|'''''NOTE:''' DynDOLOD defaults correspond to the vanilla game and the vanilla game using "Vanilla Complex Grass for ENB" mod with default ENB 0.475.''}}
 
For generating grass without ENB Complex Grass:
<pre>
ForceComplexGrass=0


; grass LOD brightness multipliers
; grass LOD brightness multipliers
GrassBrightnessTopR=0.400
GrassBrightnessTopR=0.500
GrassBrightnessTopG=0.445
GrassBrightnessTopG=0.500
GrassBrightnessTopB=0.450
GrassBrightnessTopB=0.500
; make bottom darker to fake shadowing
; make bottom darker to fake shadowing
GrassBrightnessBottomR=0.200
GrassBrightnessBottomR=0.500
GrassBrightnessBottomG=0.223
GrassBrightnessBottomG=0.500
GrassBrightnessBottomB=0.225</pre>
GrassBrightnessBottomB=0.500</pre>


To enable grass LOD generation, set '''Grass=1'''. The grass cache pregenerated by using NGIO as explained above is necessary for DynDOLOD to know where to place grass.
For generating grass with ENB Complex Grass:
<pre>
ForceComplexGrass=1


GrassDensity works opposite the way OverwriteMinGrassSize (NGIO's iMinGrassSize equivalent) does to set the grass density of grass LODs. For instance, the higher OverwriteMinGrassSize is set, the less dense the grass is and the more performance friendly. Conversely, the lower GrassDensity is set, the less dense the grass LOD is and the more performance friendly. Obviously, keeping this as low as possible is best for maximizing performance. In many cases, using a setting of '''GrassDensity=35''' is not at all too low and does not make the grass appear uneven in height.
; grass LOD brightness multipliers
ComplexGrassBrightnessTopR=0.500
ComplexGrassBrightnessTopG=0.500
ComplexGrassBrightnessTopB=0.500
; make bottom darker to fake shadowing
ComplexGrassBrightnessBottomR=0.500
ComplexGrassBrightnessBottomG=0.500
ComplexGrassBrightnessBottomB=0.500</pre>
Unfortunately, the only reliable way to check the result is to run DynDOLOD repeatedlly. To minimize LOD regeneration time while testing, do this only for the Tamriel worldspace and without a terrain underside or occlusion, which both add significant time to object-LOD generation. Once 'good' values are found, the following settings are recommended for the final run (depending on game resolution as indicated).
::: {{GallerySimple|id=DynDOLODsettings|width=150|img=File:DynDOLOD_2.1.0_QHD.jpg|caption=HD / QHD}}{{GallerySimple|id=DynDOLODsettings|width=150|img=File:DynDOLOD_2.1.0_4k.jpg|caption=4K}}
:* {{Fc|orange|ONLY generate Occlusion data on the first run. If DynDOLOD is run again for some reason, leave Occlusion '''UN'''ticked to speed up generation.}}
:* {{Fc|red|Tick ''Grass LOD'' to generate grass LOD. Otherwise, leave this '''UN'''ticked.}}
:* '''{{Fc|highlight|Recommended rules for trees}}:'''
:** To increase performance with minimal quality loss, consider changing the <u>tree</u> rule's <u>LOD4</u> to '''Billboard4'''.


It is recommended to leave '''GrassLargeReference=0.''' GrassLargeReference=1 should only be used if extending the full grass range through NGIO beyond the uGridsToLoad distance. As a quick setup feature, NGIO DynDOLODGrassMode setting of 2 can be used to ensure proper grass cache setup in this mode. If using NGIO DynDOLODGrassMode of 0 or 1 (with 1 being the quick setup setting), this should remain set to 0. It is much more performance friendly to only render full grass to uGridsToLoad distance, and since we will have grass in LODs, grass will still stretch as far as we can see. Therefore, it is recommended to leave GrassLargeReference set to 0 and only render full grass up to the uGridsToLoad distance by not utilizing the ExtendGrassDistance NGIO feature.
To enable grass LOD generation, checkmark ''Grass LOD'' in the Expert GUI (to see the Expert GUI, change Expert=1 in <code>..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini</code>). The grass cache pregenerated by using NGIO as explained above is necessary for DynDOLOD to know where to place grass. DynDOLOD will analyze the grass cache and create LOD for it in object LOD level 4.


The grass brightness modifiers are important to be tweaked so that the grass in LOD approximately matches the appearance of the full grass, providing as seamless a transition as possible. These modifiers are in RGB colors, so instead of altering the brightness of the entire grass the same, it allows for more control over the brightness of the individual color variations. It is easiest to lower these in tandem at first to get the overall brightness down to where it needs to be, and then tweaking the individual colors one way or the other to achieve a much closer result. Ideally, grass mod authors would test these settings and provide recommendations. However, ENB can affect the results as well, as it adds additional shadowing to grasses, which typically require a lower grass brightness in LOD to compensate. Most issues with too bright grass LOD can be resolved by lowering these modifiers here rather than attempting to lower the Direct and Ambient light of the textures themselves in Texgen.
The ''Density'' setting works opposite the way OverwriteMinGrassSize (NGIO's iMinGrassSize equivalent) does to set the grass density of grass LODs. For instance, the higher OverwriteMinGrassSize is set, the less dense the grass is and the more performance friendly. Conversely, the lower Density for Grass LOD is set, the less dense the grass LOD is and the more performance friendly. Obviously, keeping this as low as possible is best for maximizing performance. In many cases, using a setting as low as '''35''' yields very good results at significant performance savings.


No additional GUI settings are required when running DynDOLOD to generate grass LOD at this time.
The ''Mode'' setting should correspond to the NGIO DynDOLODGrassMode setting. Mode 1 will cause grass LOD to start after uGridsToLoad. Mode 2 flags grass as large reference, so it will only show grass LOD after uLargeRefLODGridSize, and should be paired with DynDOLODGrassMode=2. It is much more performance friendly to only render full grass to uGridsToLoad distance, and since we will have grass in LODs, grass will still stretch as far as we can see. Therefore, it is recommended to leave ''Mode'' set to 1 and only render full grass up to the uGridsToLoad distance by using NGIO DynDOLODGrassMode=1.


== Grass cache files ==
== Appendix: Grass cache files ==
{{Alert|text=The information presented here is technical information that is not necessary to understand to successfully use the grass cache and grass LODs. It is provided for informative purposes only.}}
Grass cache files are actually an unused feature of Skyrim, Skyrim Special Edition, and Fallout 4. Bethesda did have it working in original Skyrim using pre-generated grass cache files located in Skyrim - Misc.bsa, but they turned it off by default (INI setting bAllowLoadGrass:Grass) and instead forced the game to create grass every time the user loads the cell (INI setting bAllowCreateGrass:Grass). Grass cache can be generated via the CreateGrassAt console command presumably. Alternately, the grass cache can be generated by setting bGenerateGrassDataFiles:Grass to 1 in Skyrim.ini, which will create the grass cache files within a grass folder within the data directory.
Grass cache files are actually an unused feature of Skyrim, Skyrim Special Edition, and Fallout 4. Bethesda did have it working in original Skyrim using pre-generated grass cache files located in Skyrim - Misc.bsa, but they turned it off by default (INI setting bAllowLoadGrass:Grass) and instead forced the game to create grass every time the user loads the cell (INI setting bAllowCreateGrass:Grass). Grass cache can be generated via the CreateGrassAt console command presumably. Alternately, the grass cache can be generated by setting bGenerateGrassDataFiles:Grass to 1 in Skyrim.ini, which will create the grass cache files within a grass folder within the data directory.



Latest revision as of 02:41, January 18, 2024

Skyrimse flare.png

Skyrim Special Edition Grass LOD Guide

A guide to configuring a custom grass cache and grass LOD for Skyrim Special Edition

by: The Step Team  | Forum Topic

Warning-Logo.png

WARNING

At the time of this writing, NGIO only works with SSE 1.5.97 and NOT 1.6.xxx runtime or VR. To use a custom grass cache and grass LOD in 1.6.xxx or VR, the grass cache must be created under SSE 1.5.97 and transferred into an analogous mod list. See this post to understand how to downgrade to 1.5.97 or concurrently run both 1.5.97 and 1.6.xxx. Alternatively, use the Step SSE AE Guide, which includes a pregenerated grass cache for that mod list.

Guide scope[edit | edit source]

The primary purpose of this guide is to explain the process by which grass LOD can be generated for Skyrim Special Edition with NGIO support.

Secondarily, this guide explains how to generate a custom grass cache, which is required by No Grass In Objects (NGIO), regardless of grass LOD. In other words, cached grass offers two distinct benefits:

  1. No grass will be placed within objects like rocks, walls, stairs, planks, etc.
  2. Pre-cached grass improves performance by removing the strain on the CPU of creating the grass upon each cell load.

If grass LOD is not desired, simply omit the DynDOLOD 'required' tools and Step 8 in the following instructions.

Quick start[edit | edit source]

This is meant to give a condensed walkthrough for creating a custom grass cache and configuring grass LOD in SSE, rendering full grass only up to the uGridsToLoad distance (the fully loaded portion around the player character) with grass LOD stretching out from there up to the LOD4 distance (controlled by [TerrainManager] fBlockLevel0Distance INI setting). Grass LOD can tax performance on some systems and may carry as much as a 20fps penalty.

As noted previously, while grass LOD is the main goal for most people, the benefits of having a custom grass cache extend to everyone and not just DynDOLOD users.

This guide also assumes that Mod organizer (MO) will be used, but the process is similar under other mod managers. Refer to NGIO documentation on the Nexus for alternative mod managers.

Step 1: Install required mods[edit | edit source]

The following apps and mods should be installed and setup correctly to use this quick start walkthrough:

Step 2 (optional): Take Steps to Speed Up Grass Pregeneration[edit | edit source]

All of the following are optional, but taking a few minutes to implement them all will potentially cut grass pregeneration time by up to half the time it would take otherwise (cutting something like 10-60 minutes off the total, depending on the mod list and the system).

NOTE: Enable all desired mods and sort plugins with LOOT before beginning.

Exclude Irrelevant Worldspaces[edit | edit source]

This step is recommended to speed up grass cache pregeneration by reducing the number of worldspaces that NGIO impacts.

  1. Open xEdit and load all plugins.
  2. Once the Background Loader: Finished message appears, right click anywhere in the left pane and select Apply Script....
  3. In the window that appears in the Script dropdown, select List worldspaces with grass and click [OK] (this may take a minute or two).
  4. When the Worldspaces with grass window appears, right-click the highlighted text and select [Copy].
  5. Click [OK] and exit xEdit.
  6. Paste the output into the NGIO configuration file (GrassControl.config.txt) under OnlyPregenerateWorldSpaces.
  7. Keep this file open.

Disable ENB[edit | edit source]

ENB adds an extra 10-30 seconds to game load time. During grass pregeneration, the game is loaded by the pregeneration process and usually crashes multiple times while it executes. This is normal, and the governing process gracefully restarts the game without user input. But having ENB enabled can add several minutes to the overall pregeneration time.

Lower Game Resolution[edit | edit source]

Lowering the game resolution while pregenerating grass is recommended to speed up the process a bit more, which can take 25 minutes to 3 hours otherwise (mileage may vary). Set game resolution to 800x600. Use SSE Display Tweaks if installed. Otherwise set this using BethINI, or set directly in SkyrimPrefs.ini.

Step 3: Configure NGIO INI[edit | edit source]

Ensure the following settings are set in GrassControl.config.txt:

UseGrassCache = True
ExtendGrassDistance = True
OnlyLoadFromCache = True

It is recommended to ensure these settings are false. Utilizing them dramatically increases precaching time (from minutes to many hours).

SuperDenseGrass = False
ExtendGrassCount = False

Consider modifying the following INI settings as necessary for the desired effect with your grass mod. These settings are baked into the grass cache and can only be changed prior to precaching grass. The corresponding Skyrim.ini settings have zero effect following grass cache generation.

EnsureMaxGrassTypesPerTextureSetting = 15    ;set to max count of grass types for the grass mod. This is for Cathedral Landscapes.
OverwriteMinGrassSize = 67    ;This overrides Skyrim.ini. This is for Cathedral Landscapes
GlobalGrassScale = 1.15    ;Grass-size multiplier. A slight increase will make grass a bit slightly taller.

Save and close GrassControl.config.txt.

Step 4: AE users only - Temporarily downgrade the game to runtime 1.5.97.0[edit | edit source]

The game downgrade procedure only applies to those that are creating a grass cache for use with the 1.6.xxx game runtime version.

See the WARNING at the top of this guide for references on downgrading the game files. Create backups of the 1.6.xxx game directory, the mod list/priority, and the plugins and load order (LO). These should be identical for both 1.5.97 and 1.6.xxx environments with the exception of a handful of mods that are game-version dependent (e.g., SKSE, Address Library, SSE Engine Fixes, etc.). More details follow.

The following mods must be disabled under 1.6.xxx but enabled under v1.5.97 runtime:
  • NGIO
  • .NET Script Framework
Additionally, the following must be installed and compatible with the 1.5.97 runtime:
  • Skyrim - Interface.bsa (this will be present in the 1.5.97 ..\Data\ directory if installed/downgraded properly)
  • Address Library
  • SSE Engine Fixes
In summary:
  1. Everything under ..\Data directory MUST be compatible with the 1.6.xxx game runtime EXCEPT Skyrim - Interface.bsa, which is required for compatibility during cache generation. Using the remaining outdated 1.5.97 vanilla masters and data will not match that of 1.6.xxx ergo, its intended landscape.
  2. Everything under the game root directory MUST correspond to the 1.5.97 game runtime EXCEPT the contents under ..\Data\ (see #1).

Disable various SKSE mods that are incompatible with 1.5.97. Do not disable any mods that contain plugins unless they are not compatible with 1.5.97 (then try to find a 1.5.97 version if it exists).

Step 5: Precache Grass[edit | edit source]

This process can require 25 minutes to 1 hour to complete (longer if the previous step isn't done), depending on hardware and installed mods. The game will typically crash during grass generation. This is normal. There is no need to monitor or click 'OK' when restarts occur. Grab some lunch.

  1. Click the Puzzle mo.png button in MO, and select Precache Grass.
  2. When the game displays the error "Grass generation finished successfully!", click [OK].
  3. Click the [OK] if a similar message is waiting in message in the mod manager (MO in our case).
  4. The grass cache should have been generated within Overwrite. Right-click on Overwrite and select Create Mod....
  5. Name it "Grass Cache" or something similar and click OK.
  6. Revert game resolution to the optimal quality if it was previously lowered.

Now that the grass CGID files have been created and can also be read by the game thanks to Grass Cache Helper NG, be certain to keep this mod active during gameplay.

Step 6: AE users only - Revert all changes made in Step 4[edit | edit source]

  • Upgrade Skyrim to 1.6.xxx runtime by restoring the game directory backup created in Step 4.
  • Restore the MO mod list and load order backups created in Step 4.

Step 7: Generate LOD[edit | edit source]

Use the most updated settings recommended for LOD generation by consulting the Step Guide LODGen instructions. This process applies to almost every SSE mod list, but do ignore any references to specific mods, patches, or mesh rules that may not apply.

A few considerations:

  1. xLODGen gamma values referenced are slightly increased to optimize terrain LOD for Cathedral Landscapes. Consider setting to default of '1.00' at each LOD level if for other landscape mods.
  2. TexGen GUI settings can be altered to lighten or darken billboard textures used by DynDOLOD grass, trees, or rendered tree trunks, but the defaults are optimized for most mods.
  3. Likewise, the DynDOLOD GUI settings include some brightness settings that should be used. See the current DynDOLOD 3 section below for recommended settings.

Step 8: Enjoy the Game[edit | edit source]

Further information follows for those interested. Otherwise, do enjoy the game, or post questions/comments using the forum link at the top of this article.

Additional Information[edit | edit source]

NGIO[edit | edit source]

No Grass In Objects is required to create the grass cache files necessary to generate the LOD for grass under SSE 1.5.97. NGIO should be disabled if using the grass cache in AE. In SSE 1.5.97, it also can stop grass from growing inside rocks and other objects, and it can increase the grass draw distance beyond the loaded cells.

Raycasting[edit | edit source]

This feature is the original feature that made this tool popular, and it is the reason for the name of the mod. RayCast is recommended to be enabled to utilize this feature to eliminate grass being drawn through stones and other objects that it should not grow through. RayCastIgnoreForms setting can be used to exclude base forms that you want grass to still grow through.

RayCast = True
RayCastHeight = 150
RayCastDepth = 5
RayCastCollisionLayers = "1 2 13 20 31"
RayCastIgnoreForms = ""

Super dense grass[edit | edit source]

Super dense grass settings allow the game to produce significantly more grass without changing other settings. It is recommended not to use this feature if you can help it. Instead, it is recommended to decrease OverwriteMinGrassSize to produce dense grass if at all possible, or use a grass mod that is setup to allow for very dense grass in a more optimal manner.

SuperDenseGrass = False
SuperDenseMode = 8

Grass cache settings[edit | edit source]

It is recommended to use the grass cache by setting UseGrassCache to True. ProfilerReport can be used to see how much time is taken to generate the grass cache files.

ProfilerReport = False
UseGrassCache = True

Extended grass distance[edit | edit source]

ExtendGrassDistance should be set to true if you want to show grass beyond a uGridsToLoad of 5 (i.e., LOD grass). Otherwise, it can be set to false and vanilla limits will apply.

ExtendGrassDistance = False

Extended grass count[edit | edit source]

ExtendGrassCount fixes an issue where if you have very dense grass, especially using SuperDenseGrass, grass will go over the 64kb gpu buffer limit and not be created. This fix checks after each patch of grass, that if 32kb is reached, it creates a separate mesh. Under most circumstances, this is only necessary if you set very large grass densities. It can significantly increase grass cache generation time, so it is recommended to be disabled if possible.

ExtendGrassCount = False

Grass Scale[edit | edit source]

GlobalGrassScale allows you to set a multiplier to increase the size of grass. This can be raised to make grass taller, which may allow you to lower your grass density in OverwriteMinGrassSize to increase performance with similar visuals.

GlobalGrassScale = 1.15

Vanilla INI overrides[edit | edit source]

Setting any of these to -1 will revert the setting to what it is set to within the game INI files. There are many of these settings that authors like to force on the user via plugin INIs, so it is generally advised to set most of these settings here.

  • EnsureMaxGrassTypesPerTextureSetting overrides iMaxGrassTypesPerTexure:Grass in Skyrim.ini
  • OverwriteGrassDistance overrides fGrassStartFadeDistance:Grass in SkyrimPrefs.ini
  • OverwriteGrassFadeRange overrides fGrassFadeRange:Grass in Skyrim.ini
  • OverwriteMinGrassSize overrides iMinGrassSize:Grass in Skyrim.ini
EnsureMaxGrassTypesPerTextureSetting=15
OverwriteGrassDistance=6144
OverwriteGrassFadeRange=14128
OverwriteMinGrassSize=60

OnlyLoadFromCache[edit | edit source]

OnlyLoadFromCache means that the game will only display grass for which it has generated grass cache files. If you find a location that is missing grass, disabling this and loading up the location should cause the game to generate the necessary grass cache file for the location. Alternatively, if you are finding an issue with floating grass or other problems with the grass in the cell, you can delete the relevant grass cache file and regenerate it by setting this to False and loading the area. For normal gameplay, set this to True.

OnlyLoadFromCache = True

Grass cache pregeneration settings[edit | edit source]

SkipPregenerateWorldSpaces allows you to set worldspaces where it will not attempt to make grass cache files. Conversely, OnlyPregenerateWorldSpaces can be used to limit grass cache generation to a specific set of worldspaces. Worldspaces with Grass SSEEdit Script for No Grass In Objects can be used to populate OnlyPregenerateWorldSpaces based on your load order.

SkipPregenerateWorldSpaces = "DLC2ApocryphaWorld;DLC01Boneyard;WindhelmPitWorldspace"
OnlyPregenerateWorldSpaces = ""

DynDOLODGrassMode[edit | edit source]

Read the setting descriptions below, but the following setting is now deprecated. Use the DynDOLOD 3 GUI to set 'Mode' to either 1 or 2.

DynDOLODGrassMode can be used to quickly set settings to conform to the method chosen. If set to 1, OverwriteGrassDistance will be set to 999999, OverwriteGrassFadeRange will be set to 0, and ExtendGrassDistance will be set to false. If set to 2, OverwriteGrassDistance will be set to 999999, OverwriteGrassFadeRange will be set to 0, and ExtendGrassDistance will be set to true. Also, the ChosenGrassGridRadius (similar to iGrassCellRadius:Grass in Skyrim.ini) will be determined based off this value.

DynDOLODGrassMode = 1

Pregenerating the grass cache[edit | edit source]

In order to improve performance, it is highly recommended to pregenerate the grass cache. Mod Organizer users can simply use the provided plugin, which will handle this automatically. Other users will need to create a PrecacheGrass.txt file in the game directory and launch the game. Precaching can take hours in some cases, especially if using grass beyond the uGridsToLoad. Crashing during this operation is expected and normal behavior; however, if it continues to crash repeatedly at a location, a problem likely exists in the modded setup that will cause a crash at that area and the precaching process will not be able to complete. The user will have to identify and fix the problem before precaching can be successfully performed.

After the grass cache pregeneration process is finished, the game will display an error message that says the process completed successfully. Grass cache files will be created in a grass folder either in Overwrite for Mod Organizer users or in Data. Mod Organizer users can create a mod from the output and enable it to keep it organized. If, after the process is complete, there are no cache files, something likely is wrong with the settings utilized.

DynDOLOD 3[edit | edit source]

DynDOLOD 3 is uses to generate object LOD and is required to generate grass billboards and trees in object LOD.

TexGen[edit | edit source]

TexGen is included within the DynDOLOD installation and must be used to generate the grass LOD billboards. This can be done by simply ticking the Grass option in the TexGen GUI. The settings for "Direct" (light from the sun) and "Ambient" (general lighting) can be adjusted to affect the lighting on the rendered grass from which the flat billboard texture is created. The recommended settings are indicated below. Use the settings corresponding to rendered game resolution: 1080p = HD, 1440p = QHD, 2160p = 4k

DynDOLOD grass LOD settings[edit | edit source]

DynDOLOD allows changing grass brightness settings for the object LOD texture atlas using brightness modifiers for the bottom and top of the textures in ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini. The grass brightness modifiers can be modified to tint grass LOD to match the loaded grass in certain situations where post-processing mods like ENB or ReShade might be affecting color. RGB modifiers allow control of tints in both the top and base of the grass meshes to enhance the 3D appearance of distant grass. Adjust all values equally by a constant (0.05-0.10) to effectively alter brightness, and adjust each independently to control tint.

In most situations, it is suggested to control brightness using TexGen Ambient/Direct GUI settings and setting DynDOLOD's grass tints to a uniform 1.000 to keep things simple and repeatable. Barring specific post-processing effects impacting color in certain presets, this is the best way to match LOD grass to full grass whether or not using ENB Complex Grass.

NOTE: DynDOLOD defaults correspond to the vanilla game and the vanilla game using "Vanilla Complex Grass for ENB" mod with default ENB 0.475.

For generating grass without ENB Complex Grass:

ForceComplexGrass=0

; grass LOD brightness multipliers
GrassBrightnessTopR=0.500
GrassBrightnessTopG=0.500
GrassBrightnessTopB=0.500
; make bottom darker to fake shadowing
GrassBrightnessBottomR=0.500
GrassBrightnessBottomG=0.500
GrassBrightnessBottomB=0.500

For generating grass with ENB Complex Grass:

ForceComplexGrass=1

; grass LOD brightness multipliers
ComplexGrassBrightnessTopR=0.500
ComplexGrassBrightnessTopG=0.500
ComplexGrassBrightnessTopB=0.500
; make bottom darker to fake shadowing
ComplexGrassBrightnessBottomR=0.500
ComplexGrassBrightnessBottomG=0.500
ComplexGrassBrightnessBottomB=0.500

Unfortunately, the only reliable way to check the result is to run DynDOLOD repeatedlly. To minimize LOD regeneration time while testing, do this only for the Tamriel worldspace and without a terrain underside or occlusion, which both add significant time to object-LOD generation. Once 'good' values are found, the following settings are recommended for the final run (depending on game resolution as indicated).

  • ONLY generate Occlusion data on the first run. If DynDOLOD is run again for some reason, leave Occlusion UNticked to speed up generation.
  • Tick Grass LOD to generate grass LOD. Otherwise, leave this UNticked.
  • Recommended rules for trees:
    • To increase performance with minimal quality loss, consider changing the tree rule's LOD4 to Billboard4.

To enable grass LOD generation, checkmark Grass LOD in the Expert GUI (to see the Expert GUI, change Expert=1 in ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_SSE.ini). The grass cache pregenerated by using NGIO as explained above is necessary for DynDOLOD to know where to place grass. DynDOLOD will analyze the grass cache and create LOD for it in object LOD level 4.

The Density setting works opposite the way OverwriteMinGrassSize (NGIO's iMinGrassSize equivalent) does to set the grass density of grass LODs. For instance, the higher OverwriteMinGrassSize is set, the less dense the grass is and the more performance friendly. Conversely, the lower Density for Grass LOD is set, the less dense the grass LOD is and the more performance friendly. Obviously, keeping this as low as possible is best for maximizing performance. In many cases, using a setting as low as 35 yields very good results at significant performance savings.

The Mode setting should correspond to the NGIO DynDOLODGrassMode setting. Mode 1 will cause grass LOD to start after uGridsToLoad. Mode 2 flags grass as large reference, so it will only show grass LOD after uLargeRefLODGridSize, and should be paired with DynDOLODGrassMode=2. It is much more performance friendly to only render full grass to uGridsToLoad distance, and since we will have grass in LODs, grass will still stretch as far as we can see. Therefore, it is recommended to leave Mode set to 1 and only render full grass up to the uGridsToLoad distance by using NGIO DynDOLODGrassMode=1.

Appendix: Grass cache files[edit | edit source]

Grass cache files are actually an unused feature of Skyrim, Skyrim Special Edition, and Fallout 4. Bethesda did have it working in original Skyrim using pre-generated grass cache files located in Skyrim - Misc.bsa, but they turned it off by default (INI setting bAllowLoadGrass:Grass) and instead forced the game to create grass every time the user loads the cell (INI setting bAllowCreateGrass:Grass). Grass cache can be generated via the CreateGrassAt console command presumably. Alternately, the grass cache can be generated by setting bGenerateGrassDataFiles:Grass to 1 in Skyrim.ini, which will create the grass cache files within a grass folder within the data directory.

Naming convention[edit | edit source]

Grass cache files are named like this: <worldspace>x<x cell coordinates padded to 4 characters with 0>y<y cell coordinates padded to 4 characters with 0>.gid. So if a grass cache file is named tamrielx-047y0038.gid, that means it applies to Tamriel <-47, 38>. No Grass In Objects renames the file extension to .cgid in order to bypass the erroneous grass cache files in Skyrim - Misc.bsa.

Hex file structure[edit | edit source]

Below is a hex file example of a grass cache file that has been stripped of the data required to populate the grass throughout the cell (essentially, it is a blank grass cache file in that it will not show any grass, despite specifying a grass.

01 00 00 00
18 00 00 00
6c 61 6e 64 73 63 61 70 65 5c 47 72 61 73 73 5c 49 76 79 2e 6e 69 66
00 00 00 5c 43 d0 bd d1 8b 00 74
01 01 00
00 00 00 00

01 00 00 00
This is the start of the file. The initial byte (01) tells the hexadecimal number of grass textures/meshes within the cell (1 in this case).

18 00 00 00
The byte at position 4 (18) tells the hexadecimal number of characters that make up the string identifying the grass mesh file location. It always includes an extra byte in its calculation. 18 translates to 24 bytes, so the string will be 23 bytes long.

6c 61 6e 64 73 63 61 70 65 5c 47 72 61 73 73 5c 49 76 79 2e 6e 69 66
This is the string identifying the grass mesh file location (landscape\Grass\Ivy.nif). As noted above, the string is 23 bytes long.

00 00 00 5c 43 d0 bd d1 8b 00 74
This seems to be unique information that relates in some way to describing the grass. It is currently unknown what it means specifically, but it seems to be tied somehow to the name and order within the file.

01 01 00
These bytes are iterated near the beginning of each grass texture/mesh identification prior to the data that tells where to place grass. They seem to serve as a kind of padding.

00 00 00 00
The first byte here needs to be 00 if there is no grass for the mesh/texture. Any other value seems to indicate that there is data following these bytes that tells the game where to place the grass. If, for example, you had it set to 01 with no data following, it will crash the game.