Hello, as discussed briefly on Discord, I would like to present a few improvements for xLODGen, for FNV in particular.
For starters, thanks to https://www.nexusmods.com/newvegas/mods/84171, FNV's (and in extension TTW's) LOD capabilties are much higher than they were in vanilla. Many of the things that the game can actually support now are not supported by xLODGen. Me and several other authors have come up with a list of things that we feel like would be a huge improvement for FNV/TTW if implemented in xLODGen.
High priority object LOD improvements. Older Bethesda games do not have support for multiple levels of object LOD. FNV introduced the concept of high priority LOD, which while not used much in vanilla (only for i.e. Lucky 38 and other landmarks), can be used to great effect by modders. The new mod https://www.nexusmods.com/newvegas/mods/88898 aims to generalize this concept and broaden its use, to enable much more optimal LOD memory usage without sacrificing the overall quality. There are two very important improvements I perceive:
Use base form High Priority LOD flag. When xLODGen is generating high priority object LOD blocks, it checks the refs in the cells of the block for the High priority LOD flag. This works fine, but, as is the case with the above linked mod, means that if one wanted to use high priority LOD as a second LOD level (higher distances, less objects), they must go through every reference in every worldspace and properly assign these flags.
This could be massively helped by also using the base form High Priority LOD flag (which is supported by xEdit). I can imagine it working like this - while generating high priority block, go through the refs and use those that are flagged Visible when Distant and either have, or their base form has, the High Priority LOD flag.
This would massively help with any compatibility issues with using high priority LOD as a second LOD level, and thus make it more approachable for everyone.
High priority specific LOD meshes. To really enable high priority LOD to work as a second LOD level, we would also need to use a different set of meshes for it (that would be of less quality, but also much less taxing). As far as I can tell, when generating object LOD, xLODGen takes the Model FileName of a given ref's base form, and looks for <filename without extension>_lod.nif. Using a different suffix for high priority meshes (such as _high_lod.nif) should be easy to support. This combined with good LOD distance settings would mean that far away geometry could be simplified by a lot, saving on resources such as memory.
I can imagine that extending this could look like:
Generating high priority object LOD block
Ref -> base form -> Model FileName -> object.nif
Look for object_high_lod.nif
Found - use it
Not found - continue
Look for object_lod.nif (fallback required, we can assume most forms would not have high priority mesh, definitely not for some time)
Found - use it
Not found - complain that LOD mesh is missing
These two improvements together would bring a true second level of LOD to FNV/TTW, and it would certainly be a complete game changer.
Split meshes / mesh shader properties / animations. The LOD Fixes and Improvements mod linked at the beginning changed the way work with generated LOD blocks - the limits on geometry and textures are removed, and the block meshes can be treated as any other nif - including various shader properties, multiple geometries, or animations.
Unfortunately, due to the way xLODGen works currently for FNV, all the LOD meshes are combined into a single geometry, "culled" by the terrain LOD, and saved. Therefore all of the original properties of the nifs are destroyed in the process. What would be great if we had the option to generate blocks with the original meshes not being combined and retaining their original properties. There are many many use cases for this, several I can think of:
Emissives - lights in LOD
Env mapping - reflections
Animations - currently being used by mods like https://www.nexusmods.com/newvegas/mods/84173 which either means the user replaces theirs block with an edited one, or patch the LODGen output block mesh with the animated blocks themselves
A possible question is whether such a thing would make sense for all the refs in a block, or just those that have a certain property. I can imagine splitting everything could introduce a lot of unnecessary draw calls.