Jump to content

Recommended Posts

Posted
  On 7/17/2021 at 6:28 PM, DoubleYou said:

I just looked into this a bit. It seems that with the new Grass LOD loaded into Object LOD, some systems will not be able to quite keep up with the generally accepted TerrainManager settings used by most people. These settings can be tweaked within the DynDOLOD MCM menu, and the most important one is the first block distance.

[TerrainManager]
fBlockLevel0Distance=35000
fBlockLevel1Distance=70000
fBlockMaximumDistance=250000
fSplitDistanceMult=1.5

Tweaking these settings, especially the first one, will help users the most with their new Grass LOD performance.

Just some quick tweaking on my setup, I changed mine to the following, and I'm getting much better performance. I'll be playing with this more to see what kind of balance I can strike up.

image.png

Expand  

But this also affects all object LOD4 like trees. I personally think LOD trees look much better at a min of fBlockLevel0Distance=50000 (or as high as your system can handle it). I also personally think tree object LOD is much more important and noticeable than grass object LOD, so 'dumbing' down tree LOD to accommodate the relatively unimportant grass LOD performance is an undesirable trade-off, IMO.

In other words, I don't think grass LOD is important enough unless the system can handle it without throttling fBlockLevel0Distance (so "optimal, no grass" DynDOLOD settings are what I recommend for most systems).

Posted

Yeah, I was getting some huge frame drops from NGIO today. I normally stay very close to 72fps, but it would suddenly dip down to 35 for a second because of loading all the extra LOD, which is not okay. I'd rather not even have grass LOD if I have to endure that kind of issue. I was able to tweak my INIs down to where the dip would only hit 50 fps every once in a blue moon, which is somewhat acceptable, but I'm not even on an ENB and having that kind of issues on rather good hardware.

  • 2 weeks later...
Posted (edited)
  On 7/18/2021 at 3:26 AM, DoubleYou said:

Yeah, I was getting some huge frame drops from NGIO today. I normally stay very close to 72fps, but it would suddenly dip down to 35 for a second because of loading all the extra LOD, which is not okay. I'd rather not even have grass LOD if I have to endure that kind of issue. I was able to tweak my INIs down to where the dip would only hit 50 fps every once in a blue moon, which is somewhat acceptable, but I'm not even on an ENB and having that kind of issues on rather good hardware.

Expand  

Sorry to resurrect this "old" thread, but would you mind sharing what ini settings are relevant to this outside of the ones mentioned before in the DynDOLOD settings (since the consensus appears to be that tweaking those for grass LOD isn't actually worth it), as I'm still getting stuttering after trying a lot of different things? If my hardware is good enough, I'm not sure what else could be affecting this, as I've tested in different profiles with just this mod, Display Tweaks, engine fixes, and with the inis set to BethINI low and am still getting the stutter on cell change.

EDIT: Oh, just realized I already mentioned I did this in my initial post, sorry for redundant info.

Thanks for any help!

Edited by S-Matrix
Posted
  On 7/31/2021 at 2:58 PM, S-Matrix said:

Sorry to resurrect this "old" thread, but would you mind sharing what ini settings are relevant to this outside of the ones mentioned before in the DynDOLOD settings (since the consensus appears to be that tweaking those for grass LOD isn't actually worth it), as I'm still getting stuttering after trying a lot of different things? If my hardware is good enough, I'm not sure what else could be affecting this, as I've tested in different profiles with just this mod, Display Tweaks, engine fixes, and with the inis set to BethINI low and am still getting the stutter on cell change.

EDIT: Oh, just realized I already mentioned I did this in my initial post, sorry for redundant info.

Thanks for any help!

Expand  

Also, I don't know if it helps "narrow it down" at all, but the problems only arise when the Grass Control part is enabled in MO2, the grass cache+DynDOLOD don't cause stuttering by themselves, leading me to believe it MIGHT have something to do with the raycasting? No clue for certain, though.

Posted

I'm still working on getting the best solution to this. Currently tweaking DynDOLOD generation to a lower standard from high, as the entire reason this stuttering exists is because the grass lods in lod4 are just so dang expensive. Sacrificing some firstborn lods in lod4 and tweaking down the density of grass lod is my plan, but I need to do a lot of experimenting to figure out and understand exactly how this all works. Another thing I might try is making lod4's primary existence be for grass lod, and turning down the TerrainManager setting (fBlockLevel0Distance) for it low, maybe just 9 cells ~36864, and making lod8 higher quality to make up for the loss of lod4 distance.

Posted (edited)
  On 7/31/2021 at 3:37 PM, DoubleYou said:

I'm still working on getting the best solution to this. Currently tweaking DynDOLOD generation to a lower standard from high, as the entire reason this stuttering exists is because the grass lods in lod4 is just so dang expensive. Sacrificing some firstborn lods in lod4 and tweaking down the density of grass lod is my plan, but I need to do a lot of experimenting to figure out and understand exactly how this all works. Another thing I might try is making lod4's primary existence be for grass lod, and turning down the TerrainManager setting (fBlockLevel0Distance) for it low, maybe just 9 cells ~36864, and making lod8 higher quality to make up for the loss of lod4 distance.

Expand  

Ah, good luck, and please, if you make any discoveries, relay them here if it's not too much trouble! I'm sure it will be kind of slow-going since it requires tweaking cache generation AND LOD generation, so I commend your dedication. Anyway, I'm currently using DynDOLOD with the medium preset, and will try regenerating with the low preset. Should I be tweaking anything in DynDOLOD's Edit Scripts in order to appropriately tune the density of grass lod? I'll also try lowering the fBlockLevel0Distance again to the level you've prescribed, thanks for the tips!

EDIT: Nvm, found the density setting and adjusted it from 50 to 30 to try and help performance.

Edited by S-Matrix
Posted

Basically, grass LOD costs more than it's worth, IMO. Cutting back on render % and LOD distances essentially obviates using it on my system, which is pretty beefy. I think that only those with the top-performing GPUs can afford to run it with reasonable settings without any stutter.

The screens toward bottom of this link show differences with and wo grass LOD, so judge for yourself. Toggle last two screens (Optimal vs Optimal (no grass)):

https://stepmodifications.org/wiki/SkyrimSE:2.0.0#Grass_LOD_Configuration

Posted
  On 7/31/2021 at 3:37 PM, DoubleYou said:

I'm still working on getting the best solution to this. Currently tweaking DynDOLOD generation to a lower standard from high, as the entire reason this stuttering exists is because the grass lods in lod4 are just so dang expensive. Sacrificing some firstborn lods in lod4 and tweaking down the density of grass lod is my plan, but I need to do a lot of experimenting to figure out and understand exactly how this all works. Another thing I might try is making lod4's primary existence be for grass lod, and turning down the TerrainManager setting (fBlockLevel0Distance) for it low, maybe just 9 cells ~36864, and making lod8 higher quality to make up for the loss of lod4 distance.

Expand  

Alas, no luck. I didn't tweak any INI settings, but I tried DynDOLOD generation on Low quality and turned the fBlockLevel0Distance to around 12000, but still found my game stuttering. Let me know if there's anything else I can try, if you know.

 

  On 7/31/2021 at 4:46 PM, z929669 said:

Basically, grass LOD costs more than it's worth, IMO. Cutting back on render % and LOD distances essentially obviates using it on my system, which is pretty beefy. I think that only those with the top-performing GPUs can afford to run it with reasonable settings without any stutter.

The screens toward bottom of this link show differences with and wo grass LOD, so judge for yourself. Toggle last two screens (Optimal vs Optimal (no grass)):

https://stepmodifications.org/wiki/SkyrimSE:2.0.0#Grass_LOD_Configuration

Expand  

That makes sense, but I'm still left confused by how many people seem to be getting really solid results with NGIO precaching, it's odd to me. Either way, it's pretty unfortunate.

Posted

NGIO precaching works great without grass LOD, even at 24000 distance on my system. Also, some people don't mind a little lag in loading cells outdoors.

  • 2 weeks later...
Posted (edited)
  On 8/1/2021 at 1:42 AM, z929669 said:

NGIO precaching works great without grass LOD, even at 24000 distance on my system. Also, some people don't mind a little lag in loading cells outdoors.

Expand  

So if this is the case, I may have discovered something interesting, pertaining to my own problems at least. I re-generated DynDOLOD after editing the scripts in order to not generate grass LOD, and even with just NGIO and my precache active (16000 overwritegrassdistance and 8000 overwritegrassfade) and no grass LOD from DynDOLOD, I'm actually STILL getting stuttering upon changing cells. I'm wondering now if the problem is specifically with NGIO then, or maybe I simply have to re-cache grass again with DynDOLOD mode set to 0 in grasscontrolconfig.txt?

Edited by S-Matrix
Posted

I think the problem is a fundamental misunderstanding of the settings for NGIO and what they actually do. I need to find out if I can see what some of them do myself, as my impression from reading the descriptions appears to have been fundamentally flawed. That plus I see that there are a lot of mods (read Cathedral - insert name here) that provide plugin INIs that strive to overwrite the grass settings, that I think might be causing the game to create grass and load grass at the same time, doubling the amount of grass loaded.

Some of my testing that I need to expand upon that I am just rambling on for now (I need sleep and this is getting confusing):

  1. Create grass cache like normal, but use the non-large ref version
  2. Generate grass LOD -- grass lod should start at end of ugrids
  3. Disable all grass in every INI file and plugin INI in each and every possible way.
  4. Disable NGIO
  5. Run game on god mode and sprint around Whiterun (most grass intensive area for me).
  6. Watch FPS for frame drops. Any big -15fps or more drops?
  7. Enable grass via NGIO
  8. Run game on god mode and sprint around Whiterun (most grass intensive area for me).
  9. Watch FPS for frame drops. Any big -15fps or more drops?
  10. Rename grass .cgid files to .gid files
  11. Disable NGIO
  12. Set bAllowCreateGrass to 0 and bAllowLoadGrass to 1 to load from the grass gid files.
  13. Run game on god mode and sprint around Whiterun (most grass intensive area for me).
  14. Watch FPS for frame drops. Any big -15fps or more drops?

I need to look at the source code probably when I get a chance.

Pardon me if this doesn't make any sense. Kinda trying to document my state of mind after testing this out for a bit.

Posted

My current setup seems to be working better than it has been before, so I will document my progress here.

GrassControl.config.txt

  Reveal hidden contents

Skyrim.ini

[Grass]
bAllowCreateGrass=1
bAllowLoadGrass=0
bDrawShaderGrass=1
bEnableGrassFade=0
bGrassPointLighting=0

SkyrimPrefs.ini

[TerrainManager]
fBlockLevel0Distance=56472.0000
fBlockLevel1Distance=152040.0000
fBlockMaximumDistance=343900.0000
fSplitDistanceMult=1.0000
fTreeLoadDistance=0.0000

DynDOLOD_SSE.ini

  Reveal hidden contents

Other notable change was the Cathedral 3d Pine Grass mod was installed.

Over the course of a 7.5 minute period while sprinting from coc Whiterun past Rorikstead, I experienced 7 big frame drops, where big frame drop is defined as a drop of 10fps or more. I think about 4 of these were rather noticeable below 60fps, where the worst two were down to 38fps and 48fps. This is actually significantly better than it was, and I wasn't sprinting before. Sprinting is basically the stress test I'm using to quantify these stutters. This seems almost acceptable to me at this point, but I want to tweak it further. I need to tweak the grass lighting settings a bit brighter, as I noticed they were too bright, so I went for big changes to see how much they affected it. Got rather close to what I want, but it needs a bit more brightness. 

 

Posted

@DoubleYou
I only noted three drops (0:39, 3:15, 5:09). The only thing I could discern was you're not having issues from grass crossing/loading cells. You're running through cells fine. 0:39 isn't even discernible unless you're watching the counter. There is no hitch in the video. There isn't enough onscreen to see anything at 3:15, however, I noted at 5:09 the background pops into focus directly before the drop.

The only thing all have in common is there is some sort of AI running around you while you're in these spots (combat event at Whiterun with giant, rabbits/deer running and wolves attacking). You might turn off the AI to see if this stuff still happens (TAI & TCAI).

EDIT
I did your run on my system and it actually drops in the exact some places.

Posted (edited)

Well, I think I have the answer, and it's a rather hacky fix. It seems that NGIO is causing these stutters, which I have now been able to repeat several times.

Here is the repeatable sequence that I employed to find a stutter location that always happens:

  1. Use the settings as I posted above for successful grass cache/lod generation
  2. Get to the bridge in front of Robber's Gorge traveling down from Rorikstead and make a save. This will be your start location.
  3. Travel toward the Gorge. A bandit will greet you and try to extort a toll. Rocks will fall down. All will be good so far, except for the mean old bandits. Tell them to get out of your way.
  4. Continue running along the road underneath the bridge at the Gorge. Here you will experience the big stutter.

Video (stutters at 25-26 second mark):

Now the fix:

This fix involves modifying the game INI settings to load the generated grass cache by the vanilla game without requiring NGIO. This requires fixing the bugs caused by loading the erroneous grass cache files contained within the Skyrim - Misc.bsa.

To remove the erroneous grass cache files from Skyrim - Misc.bsa:

  1. Load Skyrim - Misc.bsa into Bethesda Archive Extractor and extract the scripts and seq folders into a directory, preferably into a new folder on your desktop or somewhere else handy. Do not extract the grass folder. 
  2. Run the official Archive.exe bundles with the SSE Creation Kit (location will be Skyrim Special Edition\Tools\Archive\Archive.exe).
  3. Beside Root Dir, click the 3 dots and select the directory you placed the scripts and seq folders into.
  4. Under Edit menu, choose Add Directory, and select same directory you just did for Root Dir.
  5. Under Edit menu, select Check All Items
  6. Tick Misc and Retain File Names
  7. Under File menu, click Save and use the name Skyrim - Misc.bsa.

You now have a modified Skyrim - Misc.bsa that no longer contains erroneous grass cache files. We will load this file as a mod in Mod Organizer so that it will overwrite the vanilla Skyrim - Misc.bsa so we don't have to remove the original version of the file from the game data directory. Alternatively, you could simply backup the vanilla BSA and replace with the modified file. Or you could name the Skyrim - Misc.bsa to something else and modify the sResourceArchiveList INI setting to point to the new file. I do NOT recommend these methods, as loading it through Mod Organizer is way simpler. To do so:

  1. In the left pane of Mod Organizer, right-click, hover over All Mods, and select Create empty mod above.
  2. Name it Skyrim - Misc BSA without buggy grass cache or something similar.
  3. Right-click your new mod and select Open in Explorer.
  4. Copy your modified Skyrim - Misc.bsa into the new mod. The bsl file is unnecessary.
  5. Checkmark your mod in Mod Organizer. Order shouldn't matter, as all you're doing is overwriting a vanilla bsa.

Great. So now you removed the erroneous grass cache. Now how do you make your NGIO grass cache compatible with the vanilla game? Easy. Just rename all the *.cgid files to the *.gid file extension. My grass cache has over 8000 files. That might take awhile by hand. Let's do this via a batch file:

  1. Open Notepad
  2. Paste the following code: 
    rename *.cgid *.gid
  3. Under File menu, click Save As
  4. Change Save as type dropdown to say All Files (*.*)
  5. Navigate to the directory where you have your grass cache. You will know you are in the right place when you see all the *.cgid files.
  6. In File name, enter the following: 
    1-rename-grass-cache-to-gid.bat
  7. Click Save
  8. Exit Notepad
  9. Navigate to the directory where you have your grass cache. You should now have your fancy-dancy batch file there.
  10. Double-click 1-rename-grass-cache-to-gid.bat to run the batch file.

Now all your grass cache files have the *.gid extension and are able to be read by SSE. How can we load our grass cache with SSE? INI settings! However, since there are many, many mods that like to modify the settings necessary to use the grass cache successfully, we are going to make a plugin INI of our own to override any of their foolishness.

  1. Occlusion.esp is the last plugin you should have loaded in your load order. If it is not, whatever plugin you have in your load order that loads last should be the name you use. In this example, we use Occlusion, but if you have Your-Awesome-Mod, you should use Your-Awesome-Mod instead.
  2. In the left pane of Mod Organizer, right-click, hover over All Mods, and select Create empty mod above.
  3. Name it Force Load Grass Cache.
  4. Right-click your new mod and select Open in Explorer.
  5. Right-click on meta.ini and choose Copy
  6. Right-click inside the directory and choose Paste.
  7. Right-click on meta - Copy.ini and choose Rename
  8. Type Occlusion
  9. Hit enter.
  10. Hit enter. Yes. Do it again.
  11. Delete all the contents of this file in the text editor that opens and instead paste the following: 
    [Grass]
    bAllowCreateGrass=0
    bAllowLoadGrass=1
    bDrawShaderGrass=1
    bEnableGrassFade=0
    iMinGrassSize=60
  12. Save the file.
  13. Enable the mod in the left pane of Mod Organizer.
  14. Any time you wish to modify the grass density, you can modify it in this new INI file within the Mod Information window for the mod under the INI files tab. Alternatively, remove the iMinGrassSize line and modify the value elsewhere.

Okay. So now your grass cache should load using the vanilla game mechanism for loading cached grass files. Be aware that you should modify Grass Fade settings via your INI files to your liking. I find it needless to go beyond the following when you are going only up to the uGridsToLoad distance:

Skyrim.ini

[Grass]
fGrassFadeRange=10596

SkyrimPrefs.ini

[Grass]
fGrassStartFadeDistance=6144

Video at the same spot after these changes. No stutter. This was repeatable. Do happy dance!

Now, why does this fix this stutter? Honestly, I don't know. I disabled ai and combat ai via the console and it still existed. I disabled everything in NGIO except the UseGrassCache and OnlyLoadFromCache line and it persisted. As soon as I remove the NGIO plugin, it's gone. I think there must be some hitch with it that only seems to occur at some locations. Perhaps it is checking for missing cgid grass files?

Can it be fixed? Probably. However, this exercise is good, as this knowledge is useful to potentially be used for the other games that do not currently have the NGIO mod. Generation of the grass cache for those games are tricky at the moment.

Notice: It may be possible for a grass cache file to NOT be generated when pre-caching grass. If you find a place that is missing grass that should have grass, you will need to reenable NGIO to create the necessary cgid file at that location. This file will then need to be renamed gid as mentioned above.

Full test run. Also increased DynDOLOD rules to high from medium, and still no big stutters:

 

Edited by DoubleYou
Added full test run video

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site, you agree to our Guidelines, Privacy Policy, and Terms of Use.