Jump to content

Fallout 4 Optimization and Performance Systems Explained


Recommended Posts

How does one go about finding out exactly which mods need Precombined and pre-vis regenerating, Obviously not every mod in my load order will need it but I'm curious if master files need this process done too, I'm checking for files that break previs by following RRTV's video but I'm not sure what to do with the information I get at the end of it all as some mods will be or have been overwritten by others, so in that sense what does a user do, this is more of a generalized question but for the sake of information I shall say I think I found a couple of broken precombines in Sim Settlements but I know it's a master and gets overwritten by other mods, in such circumstances what should the average user do

 

Any help ?

Link to comment
Share on other sites

  • Replies 589
  • Created
  • Last Reply

Top Posters In This Topic

How does one go about finding out exactly which mods need Precombined and pre-vis regenerating, Obviously not every mod in my load order will need it but I'm curious if master files need this process done too, I'm checking for files that break previs by following RRTV's video but I'm not sure what to do with the information I get at the end of it all as some mods will be or have been overwritten by others, so in that sense what does a user do, this is more of a generalized question but for the sake of information I shall say I think I found a couple of broken precombines in Sim Settlements but I know it's a master and gets overwritten by other mods, in such circumstances what should the average user do

 

Any help ?

On page 21 zilav explains how to filter for broken pre-combines with xEdit. Vlits also says how you can see them in xEdit by looking at them but didn’t see what page it was on. Yes this thread is long but it’s full of good information.

Link to comment
Share on other sites

  • 1 month later...

Warning:

 

This is a long and technical post but I feel it's appropriate given that it's a long and technical thread. If you're wondering what all the funky commands I'm typing are it's because I use Cygwin on all my windows boxes. 25 years of Unix will do that to you.

 

Good news:

 

I have a pretty good idea of how Bethesda's "automated process" is utilized for batch precombine/previs generation and the CK we use has access to this functionality. We can use this functionality to regenerate PC/PV for only the altered cells in a single master, single plugin, or even multiple plugins (with a little bit of work) without clicking on a single thing. It can also be used to regenerate PC/PV for the base masters based on loose file overrides or associated archives (with a bit of gaming of the system). On top of that it can also generate said precombine data at the same small filesizes the vanilla precombines have.

 

Bad news:

 

I can't get any of the output it generates to actually work in the game (sans previs which technically should work) even though the approach I'm using appears sound.

 

Background:

 

For a while now I've been playing around with various flora mods like Rustbelt but with a completely empty esp so as not to introduce any PC/PV breakage into my game but still use some of the swapped textures. Related to this I also started looking into regenerating precombines/previs with CK for all my mods that modify the world in some way (not even really worrying about any conflicts, just trying to get it work) using various ways to try and game the system (uGrids=11 or higher). No matter how I skinned it the approach was always very tedious (less so with precombines) and in certain aspects it simply felt unreliable. Even after regenerating PC/PV for 200-300 cells I'd still see random issues like the resultant saved plugins missing either XCRI or XPRI data seemingly at random and it was obvious it would not scale. This was in addition to the extremely annoying way CK interfaces with previs generation such that if you touched anything the interface would basically lose it's mind and play focus games with other windows, outright stall, or otherwise turn into an event loop blocking mess. As an OG unix hacker who does automation for a living this was something that I could not stand and set out to look for better ways.

 

Goals:

  • The ability to generate PC/PV for an entire load order with the least amount of hassle.
  • The ability to generate PC/PV for a specific plugin or set of plugins with the least amount of hassle.
  • The ability to generate PC/PV at filesizes similar to the vanilla game files.
  • The possibility of making it all work in a way that people could pragmatically do it as an infrequent multi-hour batch job after they make major changes to their load order (for things involving cells only).

 

Issues:

 

As it is, generating PC/PV for an entire worldspace on an existing load order isn't actually all that difficult. While there are unfortunate issues with CK outright crashing during it (which is quite painful given that it usually takes a few hours to do), the main dealbreaker is previs generation. CK simply just does not offer any kind of reasonable way to regenerate previs for those same precombines with the provided UI. Sure one can play uGrid tricks or write elaborate autohotkey stuff but in the end it's one giant unreliable hack of an approach. On top of that anything involving a mod that alters multiple cells in various parts of a worldspace (but not the entire worldspace) places a huge amount of load on the mod author to keep track of all their altered cells (something CK could easily do) and a ton of extremely tedious manual labor just to generate the resultant data (and this is ignoring the future conflicts with other worldspace mods). We all know there is no way BGS or any other commercial entity would put their own people through this process for something so mechanically trivial, yet here we are.

 

Approach:

 

One of the things I noticed with the various BGS documentaries out there now is just how much CK is used for their in house development and also just how much functionality is in the tool that's released to modders. I knew in the back of my mind that it was unlikely they would have a totally different CK just for independent individuals to use and the more I used it the more I started to suspect that it had more functionality that wasn't exposed. So the first thing I had to do was start looking at the binaries for things like command line options or INI settings that weren't otherwise documented. That's where strings comes in. For those not familiar, when you're working with a binary you suspect has command line functionality that's not documented the first thing you do is run it with -?, /?, -help, /help, etc. If it's uncooperative or otherwise doesn't have default usage output, there's no need to break out IDA Pro and start disassembling it, you simply run strings on it to extract anything interesting out of the .data segment of the binary. Which leads us to...

 

Undocumented options:

-OptimizeMasterFile
-ExportDialogue
-GenerateLips
-ExportFaceGenData
-TagifyMasterfile
-ExportText
-CompileTextExport
-DelocalizeMasterfile
-SaveDefaultPlugin
-CheckInPlugin
-DumpNeededFiles
-OptimizeDLC
-GenerateSEQ
-GenerateWarnings
-GenerateAnimInfo
-GenerateSingleLip
-GenerateStaticCollections
-GeneratePreCombined
-GeneratePreVisData
-DepersistRefs
-MapMaker
-MapInfo
-OutputAreaArt
-UpdateModelData
-ExportDismemberData
-ConvertMaterials
-ImportScalingData
-CompressPSG
-BuildCDX
-ConvertToESL
Usage error strings:
Unrecognized generation target '%s'. Should be XB1, X64, PS4 or W32.
Could not parse command line properly.  Should be -ExportFaceGenData:<ESMFilename> <XB1|X64|PS4|W32>
Attempting to Tagify the live ESM, aborting. (need to remap sNetworkMasterPath)
Command-line parse error.  Usage: %s:<ESMFilename> <Language> <PathToTextExport> [PathToBackupTextExport]
Attempting to Delocalize the live ESM, aborting.  (need to remap sNetworkMasterPath)
Command-line parse error.  Usage: %s:<ESMFilename> <OutputFilepath>
--speed
--stance
--forceAll
Could not parse command line properly.  Should be -DepersistRefs:<ESMFilename>
Could not parse command line properly.  Should be -ImportScalingData:<ESMFilename>
Could not parse command line properly.  Should be -UpdateModelData:<ESMFilename>
Could not parse command line properly.  Should be -GeneratePreCombined:<ESMFilename> [clean,filtered] [all,main,ints,other] [currentset(1-totalsetcount)] [totalsetcount]
Could not parse command line properly.  Should be -GeneratePreVisData:<ESMFilename> [clean,filtered] [all,main,ints,other] [currentset(1-totalsetcount)] [totalsetcount]
Could not parse command line properly.  Should be -OutputAreaArt:<ESMFilename> <AreasFilename> <OutputFilename>
Could not parse command line properly.  Should be -GenerateAnimInfo:<ESMFilename> <DataFilepath> <OutputFilepath> [%s] [%s] [%s]
Could not parse command line properly.  Should be -MapMaker:<ESMFilename> <Worldspace|Interior>
Could not parse command line properly.  Should be -MapInfo:<ESMFilename> <Worldspace|Interior> <[%s]>
Could not parse command line properly.  Should be -ExportDismemberData:<ESMFilename> <XB1|X64|PS4|W32>
Could not parse command line properly.  Should be -ExportFaceGenData:<ESMFilename> <XB1|X64|PS4|W32>
Could not parse command line properly.  Should be -GenerateStaticCollections:<ESMFilename> <XB1|X64|PS4|W32>
Could not parse command line properly.  Should be -CheckInPlugin:<PluginFilename> <ESMFilename>
Could not parse command line properly.  Should be -SaveDefaultPlugin:<PluginFilename><MasterFilename>

As I suspected, clearly the functionality is there (atleast on the surface). Let's see if we can make it work.

 

Precombines:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ./CreationKit.exe -GeneratePrecombined:Fallout4.esm

(in another terminal):

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ tail -10000f EditorWarnings.txt | grep 'for.*cell'
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -39)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -30)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -29)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -28)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -25)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -24)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -23)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -22)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -21)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -20)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -19)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -18)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -17)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -15)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -13)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -12)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -11)...
DEFAULT:                                Generating for cell Wilderness Commonwealth (-35, -10)...
[..]

So let's check the filesizes compared to vanilla:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls -l Data/Meshes/PreCombined | head -10
total 106628
-rwxrwx---+ 1 clayne None   26414 Aug  9 00:38 0000B89E_02BE5E11_OC.NIF
-rwxrwx---+ 1 clayne None   12699 Aug  9 00:38 0000B89E_935B94FB_OC.NIF
-rwxrwx---+ 1 clayne None    2485 Aug  9 00:38 0000B89E_Physics.NIF
-rwxrwx---+ 1 clayne None   12807 Aug  9 00:38 0000B89F_AAEB2D4D_OC.NIF
-rwxrwx---+ 1 clayne None   18530 Aug  9 00:38 0000B8A0_04F09B23_OC.NIF
-rwxrwx---+ 1 clayne None    2645 Aug  9 00:38 0000B8A0_Physics.NIF
-rwxrwx---+ 1 clayne None   26414 Aug  9 00:38 0000B8BD_04F09B23_OC.NIF
-rwxrwx---+ 1 clayne None   18530 Aug  9 00:38 0000B8BD_2855735C_OC.NIF
-rwxrwx---+ 1 clayne None    3077 Aug  9 00:38 0000B8BD_Physics.NIF
 
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls Data/Meshes/PreCombined | head -10 | (cd ../Fallout\ 4.extract/Fallout4\ -\ MeshesExtra/Meshes/PreCombined && xargs ls -l)
-rwxr-xr-x+ 1 clayne None 1148 Jul 17 18:13 0000B89E_02BE5E11_OC.NIF
-rwxr-xr-x+ 1 clayne None 5053 Jul 17 18:13 0000B89E_935B94FB_OC.NIF
-rwxr-xr-x+ 1 clayne None 2643 Jul 17 18:13 0000B89E_Physics.NIF
-rwxr-xr-x+ 1 clayne None 5053 Jul 17 18:13 0000B89F_AAEB2D4D_OC.NIF
-rwxr-xr-x+ 1 clayne None 1148 Jul 17 18:13 0000B8A0_04F09B23_OC.NIF
-rwxr-xr-x+ 1 clayne None 2803 Jul 17 18:13 0000B8A0_Physics.NIF
-rwxr-xr-x+ 1 clayne None 1148 Jul 17 18:13 0000B8BD_04F09B23_OC.NIF
-rwxr-xr-x+ 1 clayne None 1148 Jul 17 18:13 0000B8BD_2855735C_OC.NIF
-rwxr-xr-x+ 1 clayne None 3235 Jul 17 18:13 0000B8BD_Physics.NIF
-rwxr-xr-x+ 1 clayne None 1148 Jul 17 18:13 0000B8BE_04F09B23_OC.NIF

Still on the large side compared to vanilla. But what about those clean vs filtered options? Let's regenerate:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ./CreationKit.exe -GeneratePrecombined:Fallout4.esm clean all
^C
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls -l Data/Meshes/PreCombined | head -10
total 7544
-rwxrwx---+ 1 clayne None  4873 Aug  9 00:46 0000B89F_AAEB2D4D_OC.NIF
-rwxrwx---+ 1 clayne None  1096 Aug  9 00:46 0000B8A0_04F09B23_OC.NIF
-rwxrwx---+ 1 clayne None  2645 Aug  9 00:46 0000B8A0_Physics.NIF
-rwxrwx---+ 1 clayne None  1096 Aug  9 00:46 0000B8BE_04F09B23_OC.NIF
-rwxrwx---+ 1 clayne None  1220 Aug  9 00:46 0000B8BE_3A310FC0_OC.NIF
-rwxrwx---+ 1 clayne None  1096 Aug  9 00:46 0000B8BE_3C7FCAF2_OC.NIF
-rwxrwx---+ 1 clayne None  4873 Aug  9 00:46 0000B8BE_935B94FB_OC.NIF
-rwxrwx---+ 1 clayne None  4873 Aug  9 00:46 0000B8BE_A1987E4E_OC.NIF
-rwxrwx---+ 1 clayne None  4345 Aug  9 00:46 0000B8BE_BA0A7711_OC.NIF
 
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls Data/Meshes/PreCombined | head -10 | (cd ../Fallout\ 4.extract/Fallout4\ -\ MeshesExtra/Meshes/PreCombined && xargs ls -lad)
-rwxr-xr-x+ 1 clayne None 5053 Jul 17 18:13 0000B89F_AAEB2D4D_OC.NIF
-rwxr-xr-x+ 1 clayne None 1148 Jul 17 18:13 0000B8A0_04F09B23_OC.NIF
-rwxr-xr-x+ 1 clayne None 2803 Jul 17 18:13 0000B8A0_Physics.NIF
-rwxr-xr-x+ 1 clayne None 1148 Jul 17 18:13 0000B8BE_04F09B23_OC.NIF
-rwxr-xr-x+ 1 clayne None 1272 Jul 17 18:13 0000B8BE_3A310FC0_OC.NIF
-rwxr-xr-x+ 1 clayne None 1148 Jul 17 18:13 0000B8BE_3C7FCAF2_OC.NIF
-rwxr-xr-x+ 1 clayne None 5053 Jul 17 18:13 0000B8BE_935B94FB_OC.NIF
-rwxr-xr-x+ 1 clayne None 5053 Jul 17 18:13 0000B8BE_A1987E4E_OC.NIF
-rwxr-xr-x+ 1 clayne None 4493 Jul 17 18:13 0000B8BE_BA0A7711_OC.NIF
-rwxr-xr-x+ 1 clayne None 4115 Jul 17 18:13 0000B8BE_Physics.NIF
 
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls Data/Meshes/PreCombined/* | head -10 | xargs file
Data/Meshes/PreCombined/0000B89F_AAEB2D4D_OC.NIF: Gamebryo game engine file, version 20.2.0.7
Data/Meshes/PreCombined/0000B8A0_04F09B23_OC.NIF: Gamebryo game engine file, version 20.2.0.7
Data/Meshes/PreCombined/0000B8A0_Physics.NIF:     Gamebryo game engine file, version 20.2.0.7
Data/Meshes/PreCombined/0000B8BE_04F09B23_OC.NIF: Gamebryo game engine file, version 20.2.0.7
Data/Meshes/PreCombined/0000B8BE_3A310FC0_OC.NIF: Gamebryo game engine file, version 20.2.0.7
Data/Meshes/PreCombined/0000B8BE_3C7FCAF2_OC.NIF: Gamebryo game engine file, version 20.2.0.7
Data/Meshes/PreCombined/0000B8BE_935B94FB_OC.NIF: Gamebryo game engine file, version 20.2.0.7
Data/Meshes/PreCombined/0000B8BE_A1987E4E_OC.NIF: Gamebryo game engine file, version 20.2.0.7
Data/Meshes/PreCombined/0000B8BE_BA0A7711_OC.NIF: Gamebryo game engine file, version 20.2.0.7
Data/Meshes/PreCombined/0000B8BE_Physics.NIF:     Gamebryo game engine file, version 20.2.0.7

That's more like it. But how was it that the vanilla files were even so small in the first place? Clearly if they're not baking in all of the mesh information into each precombined NIF (the equivalent of inlining if you will) they've got to either be doing more work at runtime or storing that information elsewhere (time vs space). One thing I noticed that was on completion of -GeneratePrecombined two files are created:

  1. CombinedObjects.esp (the actual XCRI data for the run).
  2. "<esm> - Geometry.psg" (a binary data file).

Recognizing the '- Geometry' fragment as being part of an INI value I've seen before, I go back it:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ egrep '- Geometry' Fallout4_Default.ini
SGeometryPackageList=Fallout4 - Geometry.csg

But how does one get from "Fallout4 - Geometry.psg" to "Fallout4 - Geometry.csg"? Simple, the -CompressPSG option. Here's an example with DLCworkshop01.esm because it's small:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ./CreationKit.exe -GeneratePrecombined:DLCworkshop01.esm clean all
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls -la Data/DLCworkshop01*.{csg,psg}
-rwxrwx---+ 1 clayne None  5824 Aug  2 14:21 'Data/DLCworkshop01 - Geometry.csg'
-rwxrwx---+ 1 clayne None 23240 Aug  9 01:06 'Data/DLCworkshop01 - Geometry.psg'
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ mv 'Data/DLCworkshop01 - Geometry.csg' 'Data/DLCworkshop01 - Geometry.csg.orig'
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ./CreationKit.exe -CompressPSG:DLCworkshop01.esm
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls -la Data/DLCworkshop01*.{csg,psg}
-rwxrwx---+ 1 clayne None  5820 Aug  9 01:08 'Data/DLCworkshop01 - Geometry.csg'
-rwxrwx---+ 1 clayne None 23240 Aug  9 01:06 'Data/DLCworkshop01 - Geometry.psg'

And there you go, a csg file, just like all the others:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls -l Data/*.csg
-rwxrwx---+ 1 clayne None 100938421 Aug  2 11:49 'Data/DLCCoast - Geometry.csg'
-rwxrwx---+ 1 clayne None 104296054 Aug  2 11:49 'Data/DLCNukaWorld - Geometry.csg'
-rwxrwx---+ 1 clayne None  32496988 Aug  2 11:49 'Data/DLCRobot - Geometry.csg'
-rwxrwx---+ 1 clayne None      5820 Aug  9 01:08 'Data/DLCworkshop01 - Geometry.csg'
-rwxrwx---+ 1 clayne None  22562982 Aug  2 11:49 'Data/DLCworkshop03 - Geometry.csg'
-rwxrwx---+ 1 clayne None 240043177 Aug  2 11:49 'Data/Fallout4 - Geometry.csg'

Starting to become more clear now. But what are psg, csg, or even "SGeometryPackageList" for that matter? Well a bit of brain-storming based on the fact that we're dealing with geometry and NIF files that seemingly get away with being much smaller than what we're used to seeing, plus a tool which generates psg files for us, and it becomes clear that 'sg' has to be about shared geometry.

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ strings -f Fallout4.exe CreationKit.exe | egrep -i 'shared.*geom'
Fallout4.exe: Shared Portal Geometry
Fallout4.exe: Portal Shared Geometry <--- at first I thought this, but I don't think it's related
Fallout4.exe: BSPackedCombinedSharedGeomDataExtra <--- this one right here
Fallout4.exe: .?AVBSPackedSharedGeometryBuilder@@ <--- and this
Fallout4.exe: .?AVBSPackedCombinedSharedGeomDataExtra@@ <--- and this
CreationKit.exe: ..\Shared\TESForms\World\BGSCombinedCellGeometryDB.cpp <--- and this (but for different reasons I'll get to later)
CreationKit.exe: Shared Portal Geometry
CreationKit.exe: e:\_f4\code\gamesln\shared\tesforms\world\BGSShaderParticleGeometryData.h
CreationKit.exe: ..\Shared\TESForms\World\BGSShaderParticleGeometryData.cpp
CreationKit.exe: e:\_F4\Code\GameSln\Shared/TESForms/World/BGSShaderParticleGeometryData.h
CreationKit.exe: Portal Shared Geometry
CreationKit.exe: e:\_f4\code\gamesln\shared\sky\../TESForms/World/BGSShaderParticleGeometryData.h
CreationKit.exe: ..\Shared\TempEffects\BSTempEffectGeometryDecal.cpp
CreationKit.exe: e:\_f4\code\gamesln\shared\tempeffects\../TESForms/World/BGSShaderParticleGeometryData.h
CreationKit.exe: BSPackedCombinedSharedGeomDataExtra
CreationKit.exe: .?AVBSPackedSharedGeometryBuilder@@
CreationKit.exe: .?AVBSPackedCombinedSharedGeomDataExtra@@
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4 $ strings -f Fallout4.exe CreationKit.exe | grep -i csg
[false strings nuked]
Fallout4.exe:  - Geometry.csg
Fallout4.exe: Fallout4 - Geometry.csg >--- clearly related
Fallout4.exe: .csg
Fallout4.exe: hkcdPlanarCsgOperandGeomSource
Fallout4.exe: !hkcdPlanarCsgOperand::GeomSource
Fallout4.exe: hkcdPlanarCsgOperand
Fallout4.exe: !hkcdPlanarCsgOperand
Fallout4.exe: .?AVCsgStream@BSStaticTriShapeDB@@ <--- definitely this one
Fallout4.exe: .?AVhkcdPlanarCsgOperand@@
CreationKit.exe: bcsg
CreationKit.exe: =CSGD
CreationKit.exe: CSGDA
CreationKit.exe: bcsg <--- file signature of csg files
CreationKit.exe: Fallout4 - Geometry.csg
CreationKit.exe:  - Geometry.csg
CreationKit.exe: StatisticsGrp
CreationKit.exe: StatisticsGrp
CreationKit.exe: hkcdPlanarCsgOperandGeomSource
CreationKit.exe: !hkcdPlanarCsgOperand::GeomSource
CreationKit.exe: hkcdPlanarCsgOperand
CreationKit.exe: !hkcdPlanarCsgOperand
CreationKit.exe: .csg
CreationKit.exe: .?AVhkcdPlanarCsgOperand@@
CreationKit.exe: .?AVCsgStream@BSStaticTriShapeDB@@
 
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4 $ strings -fn8 Fallout4.exe CreationKit.exe | grep -i psg
Fallout4.exe: BG8psgt*
Fallout4.exe: i^7-GgPSG
Fallout4.exe:  - Geometry.psg
Fallout4.exe: ParallaxOcclusion_ScaleR_MaxStepsG
Fallout4.exe: .?AV?$BSTEventSink@UPSGRegisteredEvent@BSStaticTriShapeDB@@@@
Fallout4.exe: .?AUPSGRegistrationListener@TESDataHandler@@
Fallout4.exe: .?AVPsgBatchIter@CDX@BGSCombinedCellGeometryDB@@
CreationKit.exe: -CompressPSG
CreationKit.exe: %s - Geometry.psg
CreationKit.exe:  - Geometry.psg
CreationKit.exe: ParallaxOcclusion_ScaleR_MaxStepsG
CreationKit.exe: .?AVCompressPSGProcess@?A0x57cc9c45@@
CreationKit.exe: .?AV?$BSTEventSink@UPSGRegisteredEvent@BSStaticTriShapeDB@@@@
CreationKit.exe: .?AUPSGRegistrationListener@TESDataHandler@@

BSPackedCombinedSharedGeomDataExtra, BSStaticTriShapeDB, CsgStream@BSStaticTriShapeDB. It seems pretty clear to me that 'psg' (and the compressed counterpart 'csg') files are a shared database of triangle meshes that the game is able to use with the "clean" NIFs that the vanilla game ships with and which -GeneratePrecombined:<esm> clean also generates. The reason CK doesn't generate these smaller NIFs by default is because it would require modifications to the shared geometry database for each esp which overrides XCRI data for a given master's cells and has it's own precombines. Clearly it would be unreasonable to modify the game's shipped files for most people and there might not have been code in place to handle per-plugin csg's (although that facility exists per-master) in the same way precombined NIFs are with loose files or archives (as the filesystem or archive acts as a DB itself).

 

Aside from the csg file there's also that CombinebObjects.esp file. Obviously this file is important as even though one generated new precombine meshes they still have to tell the actual game to use them correctly. As one would expect it's purely XCRI overrides which are meant to be merged back into the master (although technically that's not strictly required) via version control, i.e. the way BGS does it in house. The way I approached it for my testing was creating an xEdit script based off one of the existing ones to simply merge PCMB/XCRI changes back into masters (I also created a similar script for VISI/XPRI/RVIS).

 

Previs:

 

Okay, so what about previs? How does that get handled? Easy:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ./CreationKit.exe -GeneratePreVisData:DLCworkshop01.esm clean all
[09:56:52] INFO: Umbra 3 Optimizer version 3.3.22  (build: 58bc48d2405823a0d92fca7d7a5dac9d02e0a94b)
[09:56:52] INFO: T: 512 O: 128 H: 16 B: 100
[09:56:52] INFO: Tile grid 240x84x100 (at -48,0,-60) created for scene: 182 tiles (0 empties not included) in 0.002 seconds
[09:56:52] INFO: Using 16 threads to compute 182 tiles, cache -1 MB
[09:56:52] INFO: Tile processing complete, computed 182 tiles
[09:56:52] INFO: Strict view volumes: no
[09:56:52] INFO: Filtered 0/1 inside clusters
[09:56:52] INFO: Filtered 0/1 global clusters
[09:56:52] INFO: 225/225 cells reachable after global analysis
[09:56:52] INFO: collapsed leaf tiles 182 => 1
[09:56:52] INFO: Generating LOD tiles using 16 threads
[09:56:52] INFO: Connecting LOD tiles
[09:56:52] INFO: Compressing lists
[09:56:52] INFO: Average index range size: 5.41
[09:56:52] INFO: object list: 36 B, cluster list: 0 B
[09:56:52] INFO: created tome with 1 tiles, 15 targets and 0 gates
[09:56:52] INFO: Umbra 3 Optimizer version 3.3.22  (build: 58bc48d2405823a0d92fca7d7a5dac9d02e0a94b)
[09:56:52] INFO: T: 512 O: 128 H: 16 B: 100
[09:56:52] INFO: Tile grid 180x20x92 (at 12,0,-52) created for scene: 102 tiles (0 empties not included) in 0.001 seconds
[09:56:52] INFO: Using 16 threads to compute 102 tiles, cache -1 MB
[09:56:52] INFO: Tile processing complete, computed 102 tiles
[09:56:52] INFO: Strict view volumes: no
[09:56:52] INFO: Filtered 0/2 inside clusters
[09:56:52] INFO: Filtered 0/2 global clusters
[09:56:52] INFO: 134/134 cells reachable after global analysis
[09:56:52] INFO: collapsed leaf tiles 102 => 1
[09:56:52] INFO: Generating LOD tiles using 16 threads
[09:56:52] INFO: Connecting LOD tiles
[09:56:52] INFO: Compressing lists
[09:56:52] INFO: Average index range size: 6.14
[09:56:52] INFO: object list: 24 B, cluster list: 0 B
[09:56:52] INFO: created tome with 1 tiles, 18 targets and 0 gates
[09:56:53] INFO: Umbra 3 Optimizer version 3.3.22  (build: 58bc48d2405823a0d92fca7d7a5dac9d02e0a94b)
[09:56:53] INFO: T: 512 O: 128 H: 16 B: 100
[09:56:53] INFO: Tile grid 184x28x92 (at 12,-8,-52) created for scene: 110 tiles (0 empties not included) in 0.001 seconds
[09:56:53] INFO: Using 16 threads to compute 110 tiles, cache -1 MB
[09:56:53] INFO: Tile processing complete, computed 110 tiles
[09:56:53] INFO: Strict view volumes: no
[09:56:53] INFO: Filtered 0/1 inside clusters
[09:56:53] INFO: Filtered 0/1 global clusters
[09:56:53] INFO: 181/181 cells reachable after global analysis
[09:56:53] INFO: collapsed leaf tiles 110 => 1
[09:56:53] INFO: Generating LOD tiles using 16 threads
[09:56:53] INFO: Connecting LOD tiles
[09:56:53] INFO: Compressing lists
[09:56:53] INFO: Average index range size: 10.81
[09:56:53] INFO: object list: 124 B, cluster list: 0 B
[09:56:53] INFO: created tome with 1 tiles, 35 targets and 0 gates
 
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ cat EditorWarnings.txt | grep 'for.*cell'
DEFAULT:                                GeneratingVisibility for Interior cell 'CTESTCOPY0000' (0100091F)
DEFAULT:                                GeneratingVisibility for Interior cell 'DLC02HoldingCell' (01000BE3)
DEFAULT:                                GeneratingVisibility for Interior cell 'DLC02TestTraps' (01000C10)

Or, in the case of exterior cells (I'll use DLCRobot as it has some but is still on the small side):

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ./CreationKit.exe -GeneratePreVisData:DLCRobot.esm clean all    [09:58:35] INFO: Umbra 3 Optimizer version 3.3.22  (build: 58bc48d2405823a0d92fca7d7a5dac9d02e0a94b)
[09:58:35] INFO: T: 512 O: 128 H: 16 B: 100
[09:58:36] INFO: Tile grid 96x96x47 (at -896,-128,48) created for scene: 2650 tiles (0 empties not included) in 0.367 seconds
[09:58:36] INFO: Using 16 threads to compute 2650 tiles, cache -1 MB
[09:58:38] INFO: Tile processing complete, computed 2650 tiles
[09:58:38] INFO: Strict view volumes: no
[09:58:38] INFO: Filtered 723/760 inside clusters
[09:58:38] INFO: Filtered 723/760 global clusters
[09:58:38] INFO: 6880/8479 cells reachable after global analysis
[09:58:40] INFO: collapsed leaf tiles 2650 => 96
[09:58:41] INFO: Generating LOD tiles using 16 threads
[09:58:41] INFO: Connecting LOD tiles
[09:58:41] INFO: Compressing lists
[09:58:41] INFO: Average index range size: 85.56
[09:58:41] INFO: object list: 6 kB 248 B, cluster list: 448 B
[09:58:41] INFO: created tome with 191 tiles, 520 targets and 0 gates
[09:58:43] INFO: Umbra 3 Optimizer version 3.3.22  (build: 58bc48d2405823a0d92fca7d7a5dac9d02e0a94b)
[09:58:43] INFO: T: 512 O: 128 H: 16 B: 100
[09:58:43] INFO: Tile grid 96x96x58 (at -896,-32,31) created for scene: 2585 tiles (0 empties not included) in 0.222 seconds
[09:58:43] INFO: Using 16 threads to compute 2585 tiles, cache -1 MB
[09:58:45] INFO: Tile processing complete, computed 2585 tiles
[09:58:45] INFO: Strict view volumes: no
[09:58:45] INFO: Filtered 331/364 inside clusters
[09:58:45] INFO: Filtered 331/364 global clusters
[09:58:45] INFO: 7043/7918 cells reachable after global analysis
[09:58:48] INFO: collapsed leaf tiles 2585 => 105
[09:58:48] INFO: Generating LOD tiles using 16 threads
[09:58:48] INFO: Connecting LOD tiles
[09:58:49] INFO: Compressing lists
[09:58:49] INFO: Average index range size: 111.27
[09:58:49] INFO: object list: 7 kB 872 B, cluster list: 480 B
[09:58:49] INFO: created tome with 209 tiles, 672 targets and 0 gates
[.. various similar umbra output clipped]
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ cat EditorWarnings.txt | grep 'for.*cell'
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-27, 0) for cell Wilderness (-25, 0)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-24, 0) for cell Wilderness (-25, 0)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-24, -3) for cell Wilderness (-24, -2)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-24, 0) for cell Wilderness (-24, -2)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-24, -3) for cell FortHagenSatelliteArrayExt02 (-24, -1)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-24, 0) for cell FortHagenSatelliteArrayExt02 (-24, -1)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (9, 0) for cell Wilderness (10, 1)
DEFAULT:                                        GENERATING!! ROOTCELL DNPrimeBridge01 (9, 3) for cell Wilderness (10, 1)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (12, 0) for cell Wilderness (10, 1)
DEFAULT:                                        GENERATING!! ROOTCELL EasyCityDownsExt (12, 3) for cell Wilderness (10, 1)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-3, 3) for cell DLC01Caravan (-1, 5)
DEFAULT:                                        GENERATING!! ROOTCELL POIMilitaryBB06 (-3, 6) for cell DLC01Caravan (-1, 5)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (0, 3) for cell DLC01Caravan (-1, 5)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (0, 6) for cell DLC01Caravan (-1, 5)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-3, 3) for cell WattzExt01 (-2, 5)
DEFAULT:                                        GENERATING!! ROOTCELL POIMilitaryBB06 (-3, 6) for cell WattzExt01 (-2, 5)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (0, 3) for cell WattzExt01 (-2, 5)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (0, 6) for cell WattzExt01 (-2, 5)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-27, -3) for cell FortHagenSatelliteArrayExt (-25, -1)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-27, 0) for cell FortHagenSatelliteArrayExt (-25, -1)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-24, -3) for cell FortHagenSatelliteArrayExt (-25, -1)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-24, 0) for cell FortHagenSatelliteArrayExt (-25, -1)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (9, 0) for cell Wilderness (9, 0)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (9, 0) for cell DLC01LairExt (10, 0)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (12, 0) for cell DLC01LairExt (10, 0)
DEFAULT:                                        GENERATING!! ROOTCELL DNPrimeBridge01 (9, 3) for cell EastBostonPrepSchoolExt (10, 3)
DEFAULT:                                        GENERATING!! ROOTCELL EasyCityDownsExt (12, 3) for cell EastBostonPrepSchoolExt (10, 3)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-27, -3) for cell Wilderness (-25, -2)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-27, 0) for cell Wilderness (-25, -2)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-24, -3) for cell Wilderness (-25, -2)
DEFAULT:                                        GENERATING!! ROOTCELL Wilderness (-24, 0) for cell Wilderness (-25, -2)
DEFAULT:                                GeneratingVisibility for cell 'Wilderness' (0000E47E), (-27, -3)
DEFAULT:                                GeneratingVisibility for cell 'Wilderness' (0000E41B), (-27, 0)
DEFAULT:                                GeneratingVisibility for cell 'Wilderness' (0000E47B), (-24, -3)
DEFAULT:                                GeneratingVisibility for cell 'Wilderness' (0000E418), (-24, 0)
DEFAULT:                                GeneratingVisibility for cell 'Wilderness' (0000DFA1), (-3, 3)
DEFAULT:                                GeneratingVisibility for cell 'POIMilitaryBB06' (0000DF3E), (-3, 6)
DEFAULT:                                GeneratingVisibility for cell 'Wilderness' (0000DF9E), (0, 3)
DEFAULT:                                GeneratingVisibility for cell 'Wilderness' (0000DF3B), (0, 6)
DEFAULT:                                GeneratingVisibility for cell 'Wilderness' (0000F6B7), (9, 0)
DEFAULT:                                GeneratingVisibility for cell 'DNPrimeBridge01' (0000DBBC), (9, 3)
DEFAULT:                                GeneratingVisibility for cell 'Wilderness' (0000E015), (12, 0)
DEFAULT:                                GeneratingVisibility for cell 'EasyCityDownsExt' (0000DBB9), (12, 3)
DEFAULT:                                GeneratingVisibility for Interior cell 'DLC01FortHagenSatelliteArray01' (010044DF)
DEFAULT:                                GeneratingVisibility for Interior cell 'DLC01Lair01' (010008A3)
DEFAULT:                                GeneratingVisibility for Interior cell 'GeneralAtomicsFactory01' (0004280D)

You'll notice above how log output also indicates which root cell previs data is being generated for (remember, they're 3x3 grids). There's 31 exterior cells above, but only 12 calls to GeneratingVisibility for each unique root cell.

 

What about file sizes compared to vanilla?

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls -l Data/Vis/{DLCRobot.esm,Fallout4.esm}
Data/Vis/DLCRobot.esm:
total 4356
-rwxrwx---+ 1 clayne None 3558816 Aug  9 02:05 000008A3.uvd
-rwxrwx---+ 1 clayne None  900592 Aug  9 02:03 000044DF.uvd
Data/Vis/Fallout4.esm:
total 21940
-rwxrwx---+ 1 clayne None 1834496 Aug  9 02:03 0000DBB9.uvd
-rwxrwx---+ 1 clayne None 2110496 Aug  9 02:02 0000DBBC.uvd
-rwxrwx---+ 1 clayne None 1875808 Aug  9 02:01 0000DF3B.uvd
-rwxrwx---+ 1 clayne None 1059760 Aug  9 02:00 0000DF3E.uvd
-rwxrwx---+ 1 clayne None 3240720 Aug  9 02:00 0000DF9E.uvd
-rwxrwx---+ 1 clayne None 2491360 Aug  9 01:59 0000DFA1.uvd
-rwxrwx---+ 1 clayne None 1208352 Aug  9 02:03 0000E015.uvd
-rwxrwx---+ 1 clayne None 1538464 Aug  9 01:59 0000E418.uvd
-rwxrwx---+ 1 clayne None 1747728 Aug  9 01:58 0000E41B.uvd
-rwxrwx---+ 1 clayne None 1593952 Aug  9 01:59 0000E47B.uvd
-rwxrwx---+ 1 clayne None 1560768 Aug  9 01:58 0000E47E.uvd
-rwxrwx---+ 1 clayne None 1610032 Aug  9 02:01 0000F6B7.uvd
-rwxrwx---+ 1 clayne None  563984 Aug  9 02:05 0004280D.uvd
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.pctest $ ls -l ../Fallout\ 4.extract/DLCRobot\ -\ Main/Vis/*
'../Fallout 4.extract/DLCRobot - Main/Vis/DLCRobot.esm':
total 4356
-rwxr-xr-x+ 1 clayne None 3558912 Jul 17 18:22 000008A3.uvd
-rwxr-xr-x+ 1 clayne None  900592 Jul 17 18:22 000044DF.uvd
'../Fallout 4.extract/DLCRobot - Main/Vis/Fallout4.esm':
total 21836
-rwxr-xr-x+ 1 clayne None 1834544 Jul 17 18:22 0000DBB9.uvd
-rwxr-xr-x+ 1 clayne None 2110528 Jul 17 18:22 0000DBBC.uvd
-rwxr-xr-x+ 1 clayne None 1875808 Jul 17 18:22 0000DF3B.uvd
-rwxr-xr-x+ 1 clayne None 1059760 Jul 17 18:22 0000DF3E.uvd
-rwxr-xr-x+ 1 clayne None 3240096 Jul 17 18:22 0000DF9E.uvd
-rwxr-xr-x+ 1 clayne None 2386960 Jul 17 18:22 0000DFA1.uvd
-rwxr-xr-x+ 1 clayne None 1208384 Jul 17 18:22 0000E015.uvd
-rwxr-xr-x+ 1 clayne None 1538480 Jul 17 18:22 0000E418.uvd
-rwxr-xr-x+ 1 clayne None 1747728 Jul 17 18:22 0000E41B.uvd
-rwxr-xr-x+ 1 clayne None 1593920 Jul 17 18:22 0000E47B.uvd
-rwxr-xr-x+ 1 clayne None 1560768 Jul 17 18:22 0000E47E.uvd
-rwxr-xr-x+ 1 clayne None 1610048 Jul 17 18:22 0000F6B7.uvd
-rwxr-xr-x+ 1 clayne None  564288 Jul 17 18:22 0004280D.uvd

After UVD files are genearted a PreVis.esp plugin is generated. This contains VISI/XPRI data, similar to how CombinedObjects.esp provided PCMB/XCRI data and is meant to be merged into the associated master or otherwise combined into a plugin with the XCRI data.

 

There's also cdx files and -BuildCDX:<esm> which as far as I can tell appears to be dependent on XCRI data. However, I can't tell if it's an index for the shared geometry databases or if it's a more general cell index used for preloading resources of some sort. I've left some speculation in my notes as I just don't know enough about them yet.

 

 

Major Issues:

 

Okay, everything's great right? We can now just merge a bunch of worldspace mods, write a bunch of bat files, hack up some xEdit scripts (or enable version control and use plugin merging), and we're good to optimize entire load orders overnight right? Wrong (well, kinda, previs will probably work). Many of the NIFs generated by -GeneratePrecombined result in a CTD upon loading a save. Simply even having the NIFs in Meshes/Precombines will cause the issue, a plugin doesn't even need to be involved. I ran fo4 in a debugger and the backtrace I got was:

(be8.35ec): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
*** WARNING: Unable to verify checksum for C:\Program Files (x86)\Steam\steamapps\common\Fallout 4\Fallout4.exe
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Program Files (x86)\Steam\steamapps\common\Fallout 4\Fallout4.exe -
Fallout4!flexMakeShapeFlags+0x1b2a121:
00007ff6`bfd3f351 48899888000000  mov     qword ptr [rax+88h],rbx ds:00000000`00000088=????????????????
0:022> kp n
# Child-SP          RetAddr           Call Site
00 0000002c`b682e790 00007ff6`bfd31bf9 Fallout4!flexMakeShapeFlags+0x1b2a121
01 0000002c`b682e800 00007ff6`be3c23ad Fallout4!flexMakeShapeFlags+0x1b1c9c9
02 0000002c`b682e840 00007ff6`bfd31abf Fallout4!flexMakeShapeFlags+0x1ad17d
03 0000002c`b682e870 00007ff6`bfd31b06 Fallout4!flexMakeShapeFlags+0x1b1c88f
04 0000002c`b682e8a0 00007ff6`bfd31b06 Fallout4!flexMakeShapeFlags+0x1b1c8d6
05 0000002c`b682e8d0 00007ff6`bfd309e4 Fallout4!flexMakeShapeFlags+0x1b1c8d6
06 0000002c`b682e900 00007ff6`be37400b Fallout4!flexMakeShapeFlags+0x1b1b7b4
07 0000002c`b682e970 00007ff6`be3316fc Fallout4!flexMakeShapeFlags+0x15eddb
08 0000002c`b682eaa0 00007ff6`be32ca6e Fallout4!flexMakeShapeFlags+0x11c4cc
09 0000002c`b682ead0 00007ff6`bfc637a2 Fallout4!flexMakeShapeFlags+0x11783e
0a 0000002c`b682eb00 00007ff6`bfc63afc Fallout4!flexMakeShapeFlags+0x1a4e572
0b 0000002c`b682eb60 00007ff6`bec9c2cc Fallout4!flexMakeShapeFlags+0x1a4e8cc
0c 0000002c`b682ebc0 00007ff6`bec9f356 Fallout4!flexMakeShapeFlags+0xa8709c
0d 0000002c`b682ec60 00007ff6`becad95d Fallout4!flexMakeShapeFlags+0xa8a126
0e 0000002c`b682f0a0 00007ff6`becb392d Fallout4!flexMakeShapeFlags+0xa9872d
0f 0000002c`b682f710 00007ff6`bfb10e06 Fallout4!flexMakeShapeFlags+0xa9e6fd
10 0000002c`b682f750 00007ff6`bfb11312 Fallout4!flexMakeShapeFlags+0x18fbbd6
11 0000002c`b682f7a0 00007ff6`bfb13e47 Fallout4!flexMakeShapeFlags+0x18fc0e2
12 0000002c`b682f7e0 00007ff6`bfadcecd Fallout4!flexMakeShapeFlags+0x18fec17
13 0000002c`b682f810 00007ff9`36623034 Fallout4!flexMakeShapeFlags+0x18c7c9d
14 0000002c`b682f850 00007ff9`36e51431 KERNEL32!BaseThreadInitThunk+0x14
15 0000002c`b682f880 00000000`00000000 ntdll!RtlUserThreadStart+0x21

A useful reference I found on flex that references this function: http://www.simoncoenen.com/downloads/flex_paper.pdf:

 

 

The last parameter except for the amount of shapes and the FlexMemory, is an array of shape flags. Since the FlexCollisionGeometry has the flexibilty to be different kinds of meshes, the flag tells the solver what kind of shape the user intends to use. A flag can be created with the helper method flexMakeShapeFlags(). It takes in an extra bool telling if the shape will be dynamic or not. In the case of a triangle mesh, the method looks like this:

int flag = flexMakeShapeFlags(eFlexShapeTriangleMesh, false)

At this point, all the data is obtained and can be passed to the solver and used in the simulation.

 

Honestly, I'm not even certain flexMakeShapeFlags is really the issue (given that I don't have a debug build, a real symbol table, or any of the source), but one would be unwise to ignore the correlation with triangle mesh involvement which this function has.

 

On top of that, no matter how many incantations of -GeneratePrecombined I did, either with clean or filtered, I could not get NIFs that were exactly the same for every single precombined mesh. I could get *some* that were the same, but most of the files had md5sum differences and hexdump examination showed header strings (things like embedded export paths), but I kept seeing minor block differences when checking vanilla data against the generated NIFs. Sizes would be very similar but there would always be some sort of minor difference that looked innocuous on the surface but never the less, CTD at save load every time. This goes for precombined meshes generated with CK vs -GeneratePrecombined filtered (i.e. both "full size") or extracted vanilla precombined meshes vs -GeneratePrecombined clean. Related to this, anytime I tried to use -BuildCDX to generate the CDX database I would always see Havok related errors like:

HAVOK:                          Binary Packfile has the wrong endiannes or pointer size. Predicates won't be read.
HAVOK:                          bhkPhysicsSystem::LoadBinary - nullptr system data found.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.

If I simply nuked my generated precombines entirely (so that the archived versions would be used) and ran -BuildCDX again I would *not* get these errors. For smaller CDX files where I didn't start running into issues with cached file limits (CK was emitting these) the CDX files would be nearly the same size. But this makes me weary. Another thing I noticed were that the vast majority of vanilla NIF files have export paths with suffixes of .hkt, e.g.: 'g:\_F4\DLC01\Art\Raw\CombinedMeshes\PreCombined\0004280D_D495E0D3_OC.hkt'

Clearly there's some kind of havoktools involvement in play here and it makes me think there could be a connection to the Havok errors I see when using -BuildCDX and meshes from -GeneratePrecombined files. I can certainly understand why havoktools would be involved with the normal meshes that makeup a combined mesh but I'm not certain why they would be involved with seemingly already generated precombined data that originated as hkt files.

 

What's particularly maddening here is that generating precombines from *within the UI* doesn't present the CTD issue. There's absolutely no way the codepaths used for generating the precombine data is different for the BGSAutomatedProcesses route vs the interactive UI route. Developers would have to go out of their way to do that and it wouldn't benefit anyone. There has to be something else going on as I've isolated problematic precombine generations to just a single NIF file which if placed in Meshes/Precombines will CTD the game. Said NIF file looks normal in NifSkope (for a precombined one atleast) but I really need a NIF expert to look at it (said expert being @jonwd7).

 

 

Assorted Notes and Speculation:

 

  • Running in a debugger produces additional debugging output during -GeneratePrecombined and -GeneratePreVisData (CK, unknown for fo4). You see this particularly with BSMeshCombiner output. This happens because CK does a check for IsDebuggerPresent().
  • On my 8700k w/ 32GB of RAM I can generate precombines for all of Fallout4.esm in under 2 hours. Previs is probably around 5-6h, but I never made it that far after getting obsessed with the precombined NIF CTD issues. Unless you have 64GB of RAM a pagefile is highly recommended as CK shoots up to ~48GB virtual near the end of a precombine run (actual resident usage isn't even close to that).
  • Use of -GeneratePrecombined does not create a PS4 subdirectory like it does when using CK (said subdir contains basically the same data as Meshes/Precombines).
  • -GeneratePrecombine and -GeneratePreVisData will generate data *only* for cells that having static meshes that could be combined. This is a big deal because it means one can simply pass a plugin arg (and I absolutely tested that esp files also work with these modes) and only cells within that plugin will be generated. Doing this in CK is an utter hassle - especially when it comes to previs.
  • CreationKit.ini settings which matter:

iMaxUmbraBakeThreads=<n> (default: 4 - I use 16 as 4 wasn't fully utilizing the cpu).


bExportSceneOnUmbraGenerate=0|1 (default: 0): Instructs the previs generator to export .scene files into Vis/Scenes (scene files are what are provided to Umbra. Related: https://support.umbra3d.com/hc/en-us/articles/213893645-1-7-Exporting-your-scene-into-the-Umbra-3-Scene-format


bExportTomeOnUmbraGenerate=0|1 (default: 0): Instructs the previs generator to export .tome files into Vis/Scenes (tome files are what Umbra produces - and as far as I can tell what UVD files actually are). Related: https://support.umbra3d.com/hc/en-us/articles/213899805-5-7-Computation


bGeneratePreCombinedGeometryPreVis=0|1 (default: 1): Fairly certain this instructs -GeneratePreVisData to force use of precombined rather than normal meshes for previs (i.e. "generate visibility vs generate precombined visibility"). I've also done A/B testing which verified different debug output from Umbra.

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4/Data $ md5sum Vis/Scenes/*.tome Vis/Fallout4.esm/*.uvd | sort -k1,1n
da50caa1d364111fa62a30241989a7e2 *Vis/Fallout4.esm/0000DDC1.uvd
da50caa1d364111fa62a30241989a7e2 *Vis/Scenes/Commonwealth_POICC07_-18_+18.tome
dcc990f3dec67567543faf3bcceb24ba *Vis/Fallout4.esm/0000DDC4.uvd
dcc990f3dec67567543faf3bcceb24ba *Vis/Scenes/Commonwealth_Wilderness_-21_+18.tome
dd16e06575e8a920dc7d39d158821604 *Vis/Fallout4.esm/0000DD61.uvd
dd16e06575e8a920dc7d39d158821604 *Vis/Scenes/Commonwealth_SanctuaryExt03_-21_+21.tome
2dffcc58c852c0ed26c0fbf2f5c52ab9 *Vis/Fallout4.esm/0000DD5E.uvd
2dffcc58c852c0ed26c0fbf2f5c52ab9 *Vis/Scenes/Commonwealth_SanctuaryExt09_-18_+21.tome

bForcePreCombinedObject32bitExport=0|1 (i'm not sure if this makes a difference, nor do I know the default [but I'd think a safe bet is 0])

  • Use of -GeneratePrecombined:<esm> with the filtered option produces "full size" combined meshes *unless* a PSG is already present then it seems to behave similar to clean. I also believe 'filtered' is the default because if one attempts to use -GeneratePrecombined:<esm> all they'll get a usage error - which leaves only clean and filtered as viable options. Without any options -GeneratePrecombined:<esm> produces the full size non-shared NIFs.
  • -GeneratePrecombined's currentset and totalset appear to be some kind of sharing/batching options. Haven't experiemented with them much and I'm not sure how they'd work with the clean option given a single psg file output.
  • fAccurateOcclusionThreshold (default=768?) and fSmallObjectSize? (default=100?) -> https://support.umbra3d.com/hc/en-us/articles/115001763033--Accurate-occlusion-threshold-and-visibility-data-LOD-in-depth
  • 3x3 uvd/vis cell grids also related to this? https://support.umbra3d.com/hc/en-us/articles/214115985-Introduction-to-Streaming
  • At one point (due to debugging output for BSMeshCombiner being similar when using -GeneratePrecombined and -GeneratePreVisData) I thought that -GeneratePreVisData was computing precombines on the fly and that existing XCRI or NIF data didn't matter, but after nuking them entirely (even archive files) and trying a -GeneratePreVisData run I saw:
MODELS:                         Could not find model PreCombined\DLCworkshop03.esm\00000F31_BC12197D_OC.NIF
MODELS:                         Could not find model PreCombined\DLCworkshop03.esm\00000F31_BCB768B5_OC.NIF
MODELS:                         Could not find model PreCombined\DLCworkshop03.esm\00000F31_BD9C0265_OC.NIF
MODELS:                         Could not find model PreCombined\DLCworkshop03.esm\00000F31_BDDEE9F2_OC.NIF
MODELS:                         Could not find model PreCombined\DLCworkshop03.esm\00000F31_BF536538_OC.NIF

Which indicates that there is a dependency on these meshes being present and that precombine computation (within the context of generating previs data to hand off to Umbra) still requires the precombined NIFs. Somewhat surprising because in a way it makes sense for the previs side to simply recompute the data at generation time for a small efficiency hit but without the dependence on XCRI data being accurate. What's still odd though is that the debugging output clearly shows BSMeshCombiner combining even when -GeneratePreVisData is being used.

  • -BuildCDX/cdx files appear to be dependent on psg/csg data, XCRI, and/or precombines in general. The main ini also references them as:
  SCellResourceIndexFileList=Fallout4.cdx
  • CDX appears to be a database index for cells (computed via -BuildCDX:<esm>) for which precombined/XCRI data is referenced by. This appears to be related to preloading cell data but could also be an actual index for the csg/psg shared geometry databases. A class which seems to line up with this is BGSCombinedCellGeometryDB::CDX::PsgBatchIter which implies the CDX file is involved with the packed shared geometry file (<x> - Geometry.psg [compressed via -CompressPSG:<esm> into a .csg file]). Related classes: BGSCombinedCellGeometryDB::ModelDB, namespace for the functionality seems to be BGSCombinedCellGeometryDB.
  • CSG is definitely some kind of compressed packed shared geometry (.psg) database which class names like BSStaticTriShapeDB::CsgStream line up with. On completion of precombine generation with -GeneratePrecombined:<esm> clean all CK will write an "<esm> - Geometry.psg" file (which is later compressed to .csg with -CompressPSG:<esm>). Other related classes: BSStaticTriShapeDB::Builder, BSPackedSharedGeometryBuilder, BSStaticTriShapeDB::IBatchRequestIter, BGSCombinedCellGeometryDB::CDX::PsgBatchIter.
  • To compress PSG to CSG, use -CompressPSG:<ESMFilename> (must use -GeneratePreCombined with clean option).
  • Notes on tree branches, shrubs, and other semi-transparent occluders when it comes to previs: https://support.umbra3d.com/hc/en-us/articles/213893645-1-7-Exporting-your-scene-into-the-Umbra-3-Scene-format
  • Umbra divides scene objects into occluders, which can hide other geometry, and targets, which can be hidden by occluders. Any object can be an occluder, target or both. ‘Bad’ occluders, such as fences, grates and other objects that do not generate good occlusion, as well as transparent objects should not be set as occluders, but as targets only. A good rule-of-thumb is to set everything as both occluder and target by default and then remove the occluder flag on a per-need-basis.

 

  • Implied reference to precombining objects from Umbra:
  • Small objects that are cheap to render – such as props – and that are typically visible at the same time can be grouped together. An example of such grouping is a table with all the small items on top and the chairs around it. In the below picture there is an example where every pillar in a room is grouped together as a single object because they are almost always seen together.

 

 

bGeneratePreCombinedGeometryPreVis=0:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.clean5 $ '/c/Program Files (x86)/Windows Kits/10/Debuggers/x64/windbg.exe' -o -pb -pr ./CreationKit.exe -GeneratePreVisData:treetest.esm clean all
[05:12:29] INFO: Umbra 3 Optimizer version 3.3.22  (build: 58bc48d2405823a0d92fca7d7a5dac9d02e0a94b)
[05:12:29] INFO: T: 512 O: 128 H: 16 B: 100
[05:12:29] INFO: Tile grid 96x96x43 (at -704,544,50) created for scene: 1953 tiles (0 empties not included) in 0.417 seconds
[05:12:29] INFO: Using 16 threads to compute 1953 tiles, cache -1 MB
[05:12:33] INFO: Tile processing complete, computed 1953 tiles
[05:12:33] INFO: Strict view volumes: no
[05:12:35] INFO: Filtered 313/331 inside clusters
[05:12:35] INFO: Filtered 313/331 global clusters
[05:12:35] INFO: 3977/4512 cells reachable after global analysis
[05:12:41] INFO: collapsed leaf tiles 1953 => 44
[05:12:42] INFO: Generating LOD tiles using 16 threads
[05:12:42] INFO: Connecting LOD tiles
[05:12:42] INFO: Compressing lists
[05:12:42] INFO: Average index range size: 239.72
[05:12:42] INFO: object list: 7 kB 784 B, cluster list: 124 B
[05:12:42] INFO: created tome with 87 tiles, 962 targets and 0 gates
[...]

(debug console during -GeneratePreVisdata):

BSMeshCombiner: TreeCluster03 - 31 inputs => 8 outputs, 1 editor markers.  Total this session: 31 inputs, 8 outputs, 1 calls.
BSMeshCombiner: Ref TreeCluster03 took 1 ms to combine. Total time this session: 1.
BSMeshCombiner: TreeCluster01 - 20 inputs => 2 outputs, 1 editor markers.  Total this session: 51 inputs, 10 outputs, 2 calls.
BSMeshCombiner: Ref TreeCluster01 took 1 ms to combine. Total time this session: 2.
BSMeshCombiner: TreeCluster08 - 12 inputs => 2 outputs, 1 editor markers.  Total this session: 63 inputs, 12 outputs, 3 calls.
BSMeshCombiner: Ref TreeCluster08 took 0 ms to combine. Total time this session: 2.
BSMeshCombiner: ElectricalTowerVines02 - 5 inputs => 1 outputs, 1 editor markers.  Total this session: 68 inputs, 13 outputs, 4 calls.
BSMeshCombiner: Ref ElectricalTowerVines02 took 0 ms to combine. Total time this session: 2.
BSMeshCombiner: ElectricalTowerVines01 - 6 inputs => 1 outputs, 1 editor markers.  Total this session: 74 inputs, 14 outputs, 5 calls.
BSMeshCombiner: Ref ElectricalTowerVines01 took 1 ms to combine. Total time this session: 3.
BSMeshCombiner: ElectricalTowerVines03 - 10 inputs => 1 outputs, 1 editor markers.  Total this session: 84 inputs, 15 outputs, 6 calls.
BSMeshCombiner: Ref ElectricalTowerVines03 took 0 ms to combine. Total time this session: 3.
BSMeshCombiner: TreeCluster05 - 12 inputs => 2 outputs, 1 editor markers.  Total this session: 96 inputs, 17 outputs, 7 calls.
BSMeshCombiner: Ref TreeCluster05 took 0 ms to combine. Total time this session: 3.
BSMeshCombiner: TreeCluster02 - 20 inputs => 2 outputs, 1 editor markers.  Total this session: 116 inputs, 19 outputs, 8 calls.
BSMeshCombiner: Ref TreeCluster02 took 1 ms to combine. Total time this session: 4.
BSMeshCombiner: TreeLeanScrub06 - 12 inputs => 3 outputs, 1 editor markers.  Total this session: 128 inputs, 22 outputs, 9 calls.
BSMeshCombiner: Ref TreeLeanScrub06 took 1 ms to combine. Total time this session: 5.
BSMeshCombiner: TreeLeanDead01 - 8 inputs => 3 outputs, 1 editor markers.  Total this session: 136 inputs, 25 outputs, 10 calls.
BSMeshCombiner: Ref TreeLeanDead01 took 0 ms to combine. Total time this session: 5.
BSMeshCombiner: TreeLeanCluster02 - 29 inputs => 4 outputs, 1 editor markers.  Total this session: 165 inputs, 29 outputs, 11 calls.
BSMeshCombiner: Ref TreeLeanCluster02 took 0 ms to combine. Total time this session: 5.
BSMeshCombiner: BranchPileStump01 - 28 inputs => 3 outputs, 0 editor markers.  Total this session: 193 inputs, 32 outputs, 12 calls.
BSMeshCombiner: Ref BranchPileStump01 took 1 ms to combine. Total time this session: 6.
BSMeshCombiner: TreeClusterDead04 - 16 inputs => 4 outputs, 1 editor markers.  Total this session: 209 inputs, 36 outputs, 13 calls.
BSMeshCombiner: Ref TreeClusterDead04 took 0 ms to combine. Total time this session: 6.
BSMeshCombiner: TreeClusterDead01 - 11 inputs => 3 outputs, 1 editor markers.  Total this session: 220 inputs, 39 outputs, 14 calls.
BSMeshCombiner: Ref TreeClusterDead01 took 1 ms to combine. Total time this session: 7.
BSMeshCombiner: TreeScrubVines02 - 24 inputs => 3 outputs, 0 editor markers.  Total this session: 244 inputs, 42 outputs, 15 calls.
BSMeshCombiner: Ref TreeScrubVines02 took 0 ms to combine. Total time this session: 7.
BSMeshCombiner: TreeCluster06 - 12 inputs => 2 outputs, 1 editor markers.  Total this session: 256 inputs, 44 outputs, 16 calls.
BSMeshCombiner: Ref TreeCluster06 took 0 ms to combine. Total time this session: 7.
BSMeshCombiner: TreeCluster04 - 24 inputs => 2 outputs, 1 editor markers.  Total this session: 280 inputs, 46 outputs, 17 calls.
BSMeshCombiner: Ref TreeCluster04 took 0 ms to combine. Total time this session: 7.
BSMeshCombiner: TreeLeanDead03 - 13 inputs => 4 outputs, 1 editor markers.  Total this session: 293 inputs, 50 outputs, 18 calls.
BSMeshCombiner: Ref TreeLeanDead03 took 0 ms to combine. Total time this session: 7.
BSMeshCombiner: TreeCluster09 - 20 inputs => 2 outputs, 1 editor markers.  Total this session: 313 inputs, 52 outputs, 19 calls.
BSMeshCombiner: Ref TreeCluster09 took 0 ms to combine. Total time this session: 7.
BSMeshCombiner: TreeClusterTall01 - 16 inputs => 2 outputs, 1 editor markers.  Total this session: 329 inputs, 54 outputs, 20 calls.
BSMeshCombiner: Ref TreeClusterTall01 took 0 ms to combine. Total time this session: 7.
BSMeshCombiner: TreeCluster07 - 24 inputs => 2 outputs, 1 editor markers.  Total this session: 353 inputs, 56 outputs, 21 calls.
BSMeshCombiner: Ref TreeCluster07 took 1 ms to combine. Total time this session: 8.
BSMeshCombiner: TreeLeanDead06 - 12 inputs => 3 outputs, 1 editor markers.  Total this session: 365 inputs, 59 outputs, 22 calls.
BSMeshCombiner: Ref TreeLeanDead06 took 1 ms to combine. Total time this session: 9.
BSMeshCombiner: BranchPile02 - 30 inputs => 2 outputs, 1 editor markers.  Total this session: 395 inputs, 61 outputs, 23 calls.
BSMeshCombiner: Ref BranchPile02 took 1 ms to combine. Total time this session: 10.
BSMeshCombiner: TreeClusterDead02 - 19 inputs => 6 outputs, 1 editor markers.  Total this session: 414 inputs, 67 outputs, 24 calls.
BSMeshCombiner: Ref TreeClusterDead02 took 0 ms to combine. Total time this session: 10.
BSMeshCombiner: TreeLeanScrub08 - 15 inputs => 6 outputs, 1 editor markers.  Total this session: 429 inputs, 73 outputs, 25 calls.
BSMeshCombiner: Ref TreeLeanScrub08 took 0 ms to combine. Total time this session: 10.
BSMeshCombiner: TreeScrubVines03 - 14 inputs => 3 outputs, 1 editor markers.  Total this session: 443 inputs, 76 outputs, 26 calls.
BSMeshCombiner: Ref TreeScrubVines03 took 1 ms to combine. Total time this session: 11.
BSMeshCombiner: TreeClusterDead03 - 18 inputs => 4 outputs, 1 editor markers.  Total this session: 461 inputs, 80 outputs, 27 calls.
BSMeshCombiner: Ref TreeClusterDead03 took 0 ms to combine. Total time this session: 11.
BSMeshCombiner: TreeScrubVines04 - 25 inputs => 5 outputs, 1 editor markers.  Total this session: 486 inputs, 85 outputs, 28 calls.
BSMeshCombiner: Ref TreeScrubVines04 took 1 ms to combine. Total time this session: 12.
BSMeshCombiner: TreeLeanScrub05 - 14 inputs => 5 outputs, 0 editor markers.  Total this session: 500 inputs, 90 outputs, 29 calls.
BSMeshCombiner: Ref TreeLeanScrub05 took 0 ms to combine. Total time this session: 12.
BSMeshCombiner: TreeLeanScrub03 - 29 inputs => 4 outputs, 1 editor markers.  Total this session: 529 inputs, 94 outputs, 30 calls.
BSMeshCombiner: Ref TreeLeanScrub03 took 0 ms to combine. Total time this session: 12.
BSMeshCombiner: TreeScrubVines01 - 17 inputs => 5 outputs, 0 editor markers.  Total this session: 546 inputs, 99 outputs, 31 calls.
BSMeshCombiner: Ref TreeScrubVines01 took 0 ms to combine. Total time this session: 12.
BSMeshCombiner: BranchPileStumpVines01 - 10 inputs => 5 outputs, 0 editor markers.  Total this session: 556 inputs, 104 outputs, 32 calls.
BSMeshCombiner: Ref BranchPileStumpVines01 took 0 ms to combine. Total time this session: 12.
BSMeshCombiner: TreeLeanScrub07 - 12 inputs => 5 outputs, 1 editor markers.  Total this session: 568 inputs, 109 outputs, 33 calls.
BSMeshCombiner: Ref TreeLeanScrub07 took 1 ms to combine. Total time this session: 13.
BSMeshCombiner: TreeLeanDead02 - 14 inputs => 5 outputs, 1 editor markers.  Total this session: 582 inputs, 114 outputs, 34 calls.
BSMeshCombiner: Ref TreeLeanDead02 took 1 ms to combine. Total time this session: 14.
BSMeshCombiner: TreeLeanDead05 - 9 inputs => 3 outputs, 1 editor markers.  Total this session: 591 inputs, 117 outputs, 35 calls.
BSMeshCombiner: Ref TreeLeanDead05 took 0 ms to combine. Total time this session: 14.
BSMeshCombiner: MetalShelf02Debris01 - 10 inputs => 3 outputs, 0 editor markers.  Total this session: 601 inputs, 120 outputs, 36 calls.
BSMeshCombiner: Ref MetalShelf02Debris01 took 1 ms to combine. Total time this session: 15.
BSMeshCombiner: MetalShelf01Debris02 - 8 inputs => 3 outputs, 0 editor markers.  Total this session: 609 inputs, 123 outputs, 37 calls.
BSMeshCombiner: Ref MetalShelf01Debris02 took 1 ms to combine. Total time this session: 16.
BSMeshCombiner: MetalShelf01Debris01 - 13 inputs => 4 outputs, 0 editor markers.  Total this session: 622 inputs, 127 outputs, 38 calls.
BSMeshCombiner: Ref MetalShelf01Debris01 took 1 ms to combine. Total time this session: 17.
BSMeshCombiner: TreeLeanScrub04 - 17 inputs => 3 outputs, 1 editor markers.  Total this session: 639 inputs, 130 outputs, 39 calls.
BSMeshCombiner: Ref TreeLeanScrub04 took 1 ms to combine. Total time this session: 18.
BSMeshCombiner: TreeLeanDead04 - 13 inputs => 4 outputs, 1 editor markers.  Total this session: 652 inputs, 134 outputs, 40 calls.
BSMeshCombiner: Ref TreeLeanDead04 took 0 ms to combine. Total time this session: 18.
BSMeshCombiner: TreeLeanCluster01 - 21 inputs => 5 outputs, 1 editor markers.  Total this session: 673 inputs, 139 outputs, 41 calls.
BSMeshCombiner: Ref TreeLeanCluster01 took 0 ms to combine. Total time this session: 18.
BSMeshCombiner: TreeLeanScrub01 - 20 inputs => 7 outputs, 1 editor markers.  Total this session: 693 inputs, 146 outputs, 42 calls.
BSMeshCombiner: Ref TreeLeanScrub01 took 0 ms to combine. Total time this session: 18.
BSMeshCombiner: TreeClusterVines01 - 17 inputs => 7 outputs, 1 editor markers.  Total this session: 710 inputs, 153 outputs, 43 calls.
BSMeshCombiner: Ref TreeClusterVines01 took 0 ms to combine. Total time this session: 18.
BSMeshCombiner: GravemarkerRural - 2 inputs => 1 outputs, 0 editor markers.  Total this session: 712 inputs, 154 outputs, 44 calls.
BSMeshCombiner: Ref GravemarkerRural took 0 ms to combine. Total time this session: 18.
BSMeshCombiner: TreeLeanScrub02 - 18 inputs => 6 outputs, 1 editor markers.  Total this session: 730 inputs, 160 outputs, 45 calls.
BSMeshCombiner: Ref TreeLeanScrub02 took 1 ms to combine. Total time this session: 19.
BSMeshCombiner: BranchPileStumpRocks01 - 14 inputs => 5 outputs, 0 editor markers.  Total this session: 744 inputs, 165 outputs, 46 calls.
BSMeshCombiner: Ref BranchPileStumpRocks01 took 0 ms to combine. Total time this session: 19.
BSMeshCombiner: RockClusterL01 - 11 inputs => 1 outputs, 1 editor markers.  Total this session: 755 inputs, 166 outputs, 47 calls.
BSMeshCombiner: Ref RockClusterL01 took 1 ms to combine. Total time this session: 20.
BSMeshCombiner: Tree_NF_Cluster02 - 44 inputs => 10 outputs, 1 editor markers.  Total this session: 799 inputs, 176 outputs, 48 calls.
BSMeshCombiner: Ref Tree_NF_Cluster02 took 1 ms to combine. Total time this session: 21.
BSMeshCombiner: TreeForestCluster02 - 28 inputs => 7 outputs, 1 editor markers.  Total this session: 827 inputs, 183 outputs, 49 calls.
BSMeshCombiner: Ref TreeForestCluster02 took 1 ms to combine. Total time this session: 22.
BSMeshCombiner: TreeForestCluster03 - 17 inputs => 3 outputs, 1 editor markers.  Total this session: 844 inputs, 186 outputs, 50 calls.
BSMeshCombiner: Ref TreeForestCluster03 took 1 ms to combine. Total time this session: 23.
BSMeshCombiner: DirtSlope01RootsStumps_ForestFloor - 44 inputs => 7 outputs, 0 editor markers.  Total this session: 888 inputs, 193 outputs, 51 calls.
BSMeshCombiner: Ref DirtSlope01RootsStumps_ForestFloor took 2 ms to combine. Total time this session: 25.
BSMeshCombiner: TreeForestCluster01 - 26 inputs => 7 outputs, 1 editor markers.  Total this session: 914 inputs, 200 outputs, 52 calls.
BSMeshCombiner: Ref TreeForestCluster01 took 1 ms to combine. Total time this session: 26.
BSMeshCombiner: BranchPile03 - 27 inputs => 2 outputs, 1 editor markers.  Total this session: 941 inputs, 202 outputs, 53 calls.
BSMeshCombiner: Ref BranchPile03 took 1 ms to combine. Total time this session: 27.
BSMeshCombiner: MetalShelf01Debris03 - 7 inputs => 3 outputs, 0 editor markers.  Total this session: 948 inputs, 205 outputs, 54 calls.
BSMeshCombiner: Ref MetalShelf01Debris03 took 0 ms to combine. Total time this session: 27.
BSMeshCombiner: MetalShelf03Debris02 - 5 inputs => 3 outputs, 0 editor markers.  Total this session: 953 inputs, 208 outputs, 55 calls.
BSMeshCombiner: Ref MetalShelf03Debris02 took 0 ms to combine. Total time this session: 27.
BSMeshCombiner: Tree_NF_Cluster01 - 37 inputs => 8 outputs, 1 editor markers.  Total this session: 990 inputs, 216 outputs, 56 calls.
BSMeshCombiner: Ref Tree_NF_Cluster01 took 1 ms to combine. Total time this session: 28.
BSMeshCombiner: TreeBlastedForestCluster03 - 13 inputs => 3 outputs, 0 editor markers.  Total this session: 1003 inputs, 219 outputs, 57 calls.
BSMeshCombiner: Ref TreeBlastedForestCluster03 took 2 ms to combine. Total time this session: 30.
BSMeshCombiner: TreeBlastedForestCluster02 - 16 inputs => 3 outputs, 0 editor markers.  Total this session: 1019 inputs, 222 outputs, 58 calls.
BSMeshCombiner: Ref TreeBlastedForestCluster02 took 1 ms to combine. Total time this session: 31.
BSMeshCombiner: DirtSlope01RootsStumps_RootsEroded01 - 35 inputs => 7 outputs, 0 editor markers.  Total this session: 1054 inputs, 229 outputs, 59 calls.
BSMeshCombiner: Ref DirtSlope01RootsStumps_RootsEroded01 took 2 ms to combine. Total time this session: 33.
BSMeshCombiner: Halloween_PumpkinPoster02 - 9 inputs => 2 outputs, 0 editor markers.  Total this session: 1063 inputs, 231 outputs, 60 calls.
BSMeshCombiner: Ref Halloween_PumpkinPoster02 took 0 ms to combine. Total time this session: 33.
BSMeshCombiner: Halloween_Banner_Halloween - 11 inputs => 1 outputs, 0 editor markers.  Total this session: 1074 inputs, 232 outputs, 61 calls.
BSMeshCombiner: Ref Halloween_Banner_Halloween took 0 ms to combine. Total time this session: 33.
BSMeshCombiner: FederalistBookcaseStack_Broken01Debris01 - 8 inputs => 2 outputs, 0 editor markers.  Total this session: 1082 inputs, 234 outputs, 62 calls.
BSMeshCombiner: Ref FederalistBookcaseStack_Broken01Debris01 took 1 ms to combine. Total time this session: 34.
DEFAULT:    GeneratingVisibility for cell 'Wilderness' (0000DDC4), (-21, 18)

bGeneratePreCombinedGeometryPreVis=0:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.clean5 $ '/c/Program Files (x86)/Windows Kits/10/Debuggers/x64/windbg.exe' -o -pb -pr ./CreationKit.exe -GeneratePrecombined:treetest.esm clean all

(debug console during -GeneratePrecombined which is needed before -GeneratePreVisData):

DEFAULT:    Generating for cell Wilderness Commonwealth (-19, 18)...
BSMeshCombiner: unnamed object - 20 inputs => 2 outputs, 0 editor markers.  Total this session: 20 inputs, 2 outputs, 1 calls.
BSMeshCombiner: Ref (null) took 0 ms to combine. Total time this session: 0.
BSMeshCombiner: unnamed object - 15 inputs => 5 outputs, 0 editor markers.  Total this session: 35 inputs, 7 outputs, 2 calls.
BSMeshCombiner: Ref (null) took 2 ms to combine. Total time this session: 2.
BSMeshCombiner: unnamed object - 13 inputs => 6 outputs, 0 editor markers.  Total this session: 48 inputs, 13 outputs, 3 calls.
BSMeshCombiner: Ref (null) took 3 ms to combine. Total time this session: 5.
BSMeshCombiner: unnamed object - 65 inputs => 6 outputs, 0 editor markers.  Total this session: 113 inputs, 19 outputs, 4 calls.
BSMeshCombiner: Ref (null) took 1 ms to combine. Total time this session: 6.
BSMeshCombiner: unnamed object - 8 inputs => 8 outputs, 0 editor markers.  Total this session: 121 inputs, 27 outputs, 5 calls.
BSMeshCombiner: Ref (null) took 2 ms to combine. Total time this session: 8.
BSMeshCombiner: unnamed object - 32 inputs => 7 outputs, 0 editor markers.  Total this session: 153 inputs, 34 outputs, 6 calls.
BSMeshCombiner: Ref (null) took 3 ms to combine. Total time this session: 11.
BSMeshCombiner: unnamed object - 10 inputs => 3 outputs, 0 editor markers.  Total this session: 163 inputs, 37 outputs, 7 calls.
BSMeshCombiner: Ref (null) took 2 ms to combine. Total time this session: 13.
BSMeshCombiner: unnamed object - 44 inputs => 10 outputs, 0 editor markers.  Total this session: 207 inputs, 47 outputs, 8 calls.
BSMeshCombiner: Ref (null) took 3 ms to combine. Total time this session: 16.
BSMeshCombiner: unnamed object - 3 inputs => 3 outputs, 0 editor markers.  Total this session: 210 inputs, 50 outputs, 9 calls.
BSMeshCombiner: Ref (null) took 2 ms to combine. Total time this session: 18.
BSMeshCombiner: unnamed object - 7 inputs => 3 outputs, 0 editor markers.  Total this session: 217 inputs, 53 outputs, 10 calls.
BSMeshCombiner: Ref (null) took 1 ms to combine. Total time this session: 19.
BSMeshCombiner: unnamed object - 10 inputs => 8 outputs, 0 editor markers.  Total this session: 227 inputs, 61 outputs, 11 calls.
BSMeshCombiner: Ref (null) took 7 ms to combine. Total time this session: 26.
BSMeshCombiner: unnamed object - 66 inputs => 8 outputs, 0 editor markers.  Total this session: 293 inputs, 69 outputs, 12 calls.
BSMeshCombiner: Ref (null) took 6 ms to combine. Total time this session: 32.
BSMeshCombiner: unnamed object - 5 inputs => 5 outputs, 0 editor markers.  Total this session: 298 inputs, 74 outputs, 13 calls.
BSMeshCombiner: Ref (null) took 3 ms to combine. Total time this session: 35.
BSMeshCombiner: unnamed object - 3 inputs => 3 outputs, 0 editor markers.  Total this session: 301 inputs, 77 outputs, 14 calls.
BSMeshCombiner: Ref (null) took 0 ms to combine. Total time this session: 35.
BSMeshCombiner: unnamed object - 3 inputs => 1 outputs, 0 editor markers.  Total this session: 304 inputs, 78 outputs, 15 calls.
BSMeshCombiner: Ref (null) took 1 ms to combine. Total time this session: 36.
BSMeshCombiner: unnamed object - 1 inputs => 1 outputs, 0 editor markers.  Total this session: 305 inputs, 79 outputs, 16 calls.
BSMeshCombiner: Ref (null) took 1 ms to combine. Total time this session: 37.
BSMeshCombiner: unnamed object - 4 inputs => 2 outputs, 0 editor markers.  Total this session: 309 inputs, 81 outputs, 17 calls.
BSMeshCombiner: Ref (null) took 1 ms to combine. Total time this session: 38.
BSMeshCombiner: unnamed object - 8 inputs => 2 outputs, 0 editor markers.  Total this session: 317 inputs, 83 outputs, 18 calls.
BSMeshCombiner: Ref (null) took 1 ms to combine. Total time this session: 39.
BSMeshCombiner: unnamed object - 10 inputs => 4 outputs, 0 editor markers.  Total this session: 327 inputs, 87 outputs, 19 calls.
BSMeshCombiner: Ref (null) took 1 ms to combine. Total time this session: 40.
BSMeshCombiner: unnamed object - 12 inputs => 2 outputs, 0 editor markers.  Total this session: 339 inputs, 89 outputs, 20 calls.
BSMeshCombiner: Ref (null) took 0 ms to combine. Total time this session: 40.
BSMeshCombiner: unnamed object - 14 inputs => 6 outputs, 0 editor markers.  Total this session: 353 inputs, 95 outputs, 21 calls.
BSMeshCombiner: Ref (null) took 4 ms to combine. Total time this session: 44.
BSMeshCombiner: unnamed object - 9 inputs => 4 outputs, 0 editor markers.  Total this session: 362 inputs, 99 outputs, 22 calls.
BSMeshCombiner: Ref (null) took 2 ms to combine. Total time this session: 46.
BSMeshCombiner: unnamed object - 3 inputs => 3 outputs, 0 editor markers.  Total this session: 365 inputs, 102 outputs, 23 calls.
BSMeshCombiner: Ref (null) took 2 ms to combine. Total time this session: 48.
BSMeshCombiner: unnamed object - 16 inputs => 4 outputs, 0 editor markers.  Total this session: 381 inputs, 106 outputs, 24 calls.
BSMeshCombiner: Ref (null) took 1 ms to combine. Total time this session: 49.
BSMeshCombiner: unnamed object - 2 inputs => 1 outputs, 0 editor markers.  Total this session: 383 inputs, 107 outputs, 25 calls.
BSMeshCombiner: Ref (null) took 0 ms to combine. Total time this session: 49.
BSMeshCombiner: unnamed object - 2 inputs => 1 outputs, 0 editor markers.  Total this session: 385 inputs, 108 outputs, 26 calls.
BSMeshCombiner: Ref (null) took 1 ms to combine. Total time this session: 50.

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.clean5 $ '/c/Program Files (x86)/Windows Kits/10/Debuggers/x64/windbg.exe' -o -pb -pr ./CreationKit.exe -GeneratePreVisData:treetest.esm clean all
[05:32:29] INFO: Umbra 3 Optimizer version 3.3.22  (build: 58bc48d2405823a0d92fca7d7a5dac9d02e0a94b)
[05:32:30] INFO: T: 512 O: 128 H: 16 B: 100
[05:32:30] INFO: Tile grid 96x96x43 (at -704,544,50) created for scene: 1953 tiles (0 empties not included) in 0.456 seconds
[05:32:30] INFO: Using 16 threads to compute 1953 tiles, cache -1 MB
[05:32:34] INFO: Tile processing complete, computed 1953 tiles
[05:32:34] INFO: Strict view volumes: no
[05:32:36] INFO: Filtered 331/349 inside clusters
[05:32:36] INFO: Filtered 331/349 global clusters
[05:32:36] INFO: 3985/4541 cells reachable after global analysis
[05:32:43] INFO: collapsed leaf tiles 1953 => 45
[05:32:43] INFO: Generating LOD tiles using 16 threads
[05:32:43] INFO: Connecting LOD tiles
[05:32:43] INFO: Compressing lists
[05:32:43] INFO: Average index range size: 267.31
[05:32:44] INFO: object list: 11 kB 68 B, cluster list: 124 B
[05:32:44] INFO: created tome with 89 tiles, 1172 targets and 0 gates

(debug console during -GeneratePreVisdata):

BSMeshCombiner: BranchPile02 - 30 inputs => 2 outputs, 1 editor markers.  Total this session: 30 inputs, 2 outputs, 1 calls.
BSMeshCombiner: Ref BranchPile02 took 1 ms to combine. Total time this session: 1.
BSMeshCombiner: TreeScrubVines03 - 14 inputs => 3 outputs, 1 editor markers.  Total this session: 44 inputs, 5 outputs, 2 calls.
BSMeshCombiner: Ref TreeScrubVines03 took 0 ms to combine. Total time this session: 1.
BSMeshCombiner: FederalistBookcaseStack_Broken01Debris01 - 8 inputs => 2 outputs, 0 editor markers.  Total this session: 52 inputs, 7 outputs, 3 calls.
BSMeshCombiner: Ref FederalistBookcaseStack_Broken01Debris01 took 1 ms to combine. Total time this session: 2.
BSMeshCombiner: TreeLeanDead01 - 8 inputs => 3 outputs, 1 editor markers.  Total this session: 60 inputs, 10 outputs, 4 calls.
BSMeshCombiner: Ref TreeLeanDead01 took 0 ms to combine. Total time this session: 2.
BSMeshCombiner: TreeCluster06 - 12 inputs => 2 outputs, 1 editor markers.  Total this session: 72 inputs, 12 outputs, 5 calls.
BSMeshCombiner: Ref TreeCluster06 took 0 ms to combine. Total time this session: 2.
BSMeshCombiner: TreeScrubVines01 - 17 inputs => 5 outputs, 0 editor markers.  Total this session: 89 inputs, 17 outputs, 6 calls.
BSMeshCombiner: Ref TreeScrubVines01 took 1 ms to combine. Total time this session: 3.
BSMeshCombiner: TreeScrubVines02 - 24 inputs => 3 outputs, 0 editor markers.  Total this session: 113 inputs, 20 outputs, 7 calls.
BSMeshCombiner: Ref TreeScrubVines02 took 0 ms to combine. Total time this session: 3.
BSMeshCombiner: BranchPileStumpRocks01 - 14 inputs => 5 outputs, 0 editor markers.  Total this session: 127 inputs, 25 outputs, 8 calls.
BSMeshCombiner: Ref BranchPileStumpRocks01 took 1 ms to combine. Total time this session: 4.
BSMeshCombiner: TreeCluster04 - 24 inputs => 2 outputs, 1 editor markers.  Total this session: 151 inputs, 27 outputs, 9 calls.
BSMeshCombiner: Ref TreeCluster04 took 0 ms to combine. Total time this session: 4.
BSMeshCombiner: TreeCluster08 - 12 inputs => 2 outputs, 1 editor markers.  Total this session: 163 inputs, 29 outputs, 10 calls.
BSMeshCombiner: Ref TreeCluster08 took 0 ms to combine. Total time this session: 4.
DEFAULT:    GeneratingVisibility for cell 'Wilderness' (0000DDC4), (-21, 18)
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4 $ ./CreationKit.exe -DumpNeededFiles:treetest.esm tmp
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4 $ cat tmp
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_04F09B23_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_12E3F195_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_1959CED1_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_1B92095F_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_1F475F65_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_21987E4E_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_2776F5AC_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_2AEB2D4D_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_32B39DA3_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_32C3EAB5_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_34AD0C17_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_3831AAC9_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_388F51D1_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_5959CED1_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_7831AAC9_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_7E2F3B7D_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_84F09B23_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_8971F8CA_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_9B92095F_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_A1987E4E_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_A776F5AC_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_AE1BB66E_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_B2B39DA3_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_B2C3EAB5_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_BE2F3B7D_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_FE2F3B7D_OC.NIF
CELL Wilderness (0000DDC2) Meshes\PreCombined\0000DDC2_Physics.NIF
CELL Wilderness (0000DDC2) Vis\Fallout4.esm\0000DDC1.uvd
WRLD Commonwealth (0000003C) Textures\Interface\Pip-Boy\WorldMap_d.DDS
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_01B8656E_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_0971F8CA_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_0A82376A_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_1959CED1_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_1B92095F_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_21987E4E_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_2776F5AC_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_2BEA5372_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_32B39DA3_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_32C3EAB5_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_3831AAC9_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_3A0A7711_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_3A310FC0_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_3BB2127F_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_4A82376A_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_5959CED1_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_6776F5AC_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_72B39DA3_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_7831AAC9_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_81B8656E_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_8971F8CA_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_935B94FB_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_9959CED1_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_9B92095F_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_B2C3EAB5_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_B831AAC9_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_BA0A7711_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_BBB2127F_OC.NIF
CELL Wilderness (0000DDA1) Meshes\PreCombined\0000DDA1_Physics.NIF
CELL Wilderness (0000DDA1) Vis\Fallout4.esm\0000DDC1.uvd
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_01B8656E_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_0971F8CA_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_0A722D3C_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_12E3F195_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_135B94FB_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_17959980_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_1861C6FF_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_1CC4E7D3_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_21987E4E_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_21E80958_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_254D2874_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_2855735C_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_2B9A2464_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_32C3EAB5_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_34365878_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_3989CFA7_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_3A0A7711_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_3BB2127F_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_3C7FCAF2_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_41B8656E_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_5861C6FF_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_5CC4E7D3_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_61E80958_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_654D2874_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_7989CFA7_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_7A0A7711_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_7BB2127F_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_81B8656E_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_8971F8CA_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_92E3F195_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_942AB9AE_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_97959980_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_9861C6FF_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_A1E80958_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_A855735C_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_AE1BB66E_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_B2C3EAB5_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_B75EC3B7_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_B989CFA7_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_BBB2127F_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_BC7FCAF2_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_C1B8656E_OC.NIF
CELL RedRocketExt02 (0000DDA0) Meshes\PreCombined\0000DDA0_Physics.NIF
CELL RedRocketExt02 (0000DDA0) Vis\Fallout4.esm\0000DDC1.uvd

Other interesting ini settings, but not all strictly related to PC/PV:

bCullingBatch:General
bDoMultithreadedVisQuery:General
bGeneratePreCombinedGeometryPreVis:General
bForcePreCombinedObject32bitExport:General
bNoRenderer:General
bOnlyLoadCombinable3D:General
bOnlyLoadPreVis3D:General
bPreCulledObjectsEnabled:General
bOutputCombinedGeomDataWhenTinting:General
bDisableComputeShaderOnCombinations:General
bCombinedObjectsAvailableForPicking:Display
bMeshCombinerMaterialComparison:Display
bWarnOnMaterialCollisions:General
bShowEventHandlingOutput:General
bAllowPluginPreCalcDataWipe:General
bAllowPreCalcCheckIn:General
bPreCalcSaveOnly:General
bForbidNifErrorMarkers:General

bShowLoadingAreaMessage:General
bQueueWarnings:General
bAllowResourceReloading:General
bThrowProcessCompleteExceptions:General

bUpdateCellViewToMatchRenderWindow:General
bUseMenuLoadCellPreload:General
iMaxJobThreads:General
iMaxUmbraBakeThreads:General
bExportSceneOnUmbraGenerate:General
bExportTomeOnUmbraGenerate:General
iNumHWThreads:General
bWriteTACOutputToFile:Debug
uiWaitAtStart:Debug
bSelectWorldspaceForRecentCell:General
bAllowMultipleEditors:General
bMaximize Editor:General
bKeepPluginWhenMerging:General

bCurrentCellOnly:Landscape
bDrawQuadBorders:Landscape

bAllowYesToAll:MESSAGES
iFileLogging:MESSAGES

bBackgroundCellLoads:BackgroundLoad
bUseBackgroundFileLoader:BackgroundLoad
bUseMultiThreadedTrees:BackgroundLoad

Various string dumps:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4 $ strings -f Fallout4.exe CreationKit.exe | grep -i csg
Fallout4.exe: QCsG
Fallout4.exe: nCsg
Fallout4.exe: CSghg6
Fallout4.exe: N!cSg
Fallout4.exe: CsgF
Fallout4.exe: CSGo
Fallout4.exe: VCsg
Fallout4.exe: w\CsG
Fallout4.exe: ucSG
Fallout4.exe: csGk
Fallout4.exe: eQBacsG
Fallout4.exe: csGn
Fallout4.exe: CsGG\
Fallout4.exe:  - Geometry.csg
Fallout4.exe: Fallout4 - Geometry.csg
Fallout4.exe: .csg
Fallout4.exe: hkcdPlanarCsgOperandGeomSource
Fallout4.exe: !hkcdPlanarCsgOperand::GeomSource
Fallout4.exe: hkcdPlanarCsgOperand
Fallout4.exe: !hkcdPlanarCsgOperand
Fallout4.exe: .?AVCsgStream@BSStaticTriShapeDB@@
Fallout4.exe: .?AVhkcdPlanarCsgOperand@@
CreationKit.exe: bcsg
CreationKit.exe: =CSGD
CreationKit.exe: CSGDA
CreationKit.exe: bcsg
CreationKit.exe: Fallout4 - Geometry.csg
CreationKit.exe:  - Geometry.csg
CreationKit.exe: StatisticsGrp
CreationKit.exe: StatisticsGrp
CreationKit.exe: hkcdPlanarCsgOperandGeomSource
CreationKit.exe: !hkcdPlanarCsgOperand::GeomSource
CreationKit.exe: hkcdPlanarCsgOperand
CreationKit.exe: !hkcdPlanarCsgOperand
CreationKit.exe: .csg
CreationKit.exe: .?AVhkcdPlanarCsgOperand@@
CreationKit.exe: .?AVCsgStream@BSStaticTriShapeDB@@
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4 $ strings -fn8 Fallout4.exe CreationKit.exe | grep -i psg
Fallout4.exe: BG8psgt*
Fallout4.exe: i^7-GgPSG
Fallout4.exe:  - Geometry.psg
Fallout4.exe: ParallaxOcclusion_ScaleR_MaxStepsG
Fallout4.exe: .?AV?$BSTEventSink@UPSGRegisteredEvent@BSStaticTriShapeDB@@@@
Fallout4.exe: .?AUPSGRegistrationListener@TESDataHandler@@
Fallout4.exe: .?AVPsgBatchIter@CDX@BGSCombinedCellGeometryDB@@
CreationKit.exe: -CompressPSG
CreationKit.exe: %s - Geometry.psg
CreationKit.exe:  - Geometry.psg
CreationKit.exe: ParallaxOcclusion_ScaleR_MaxStepsG
CreationKit.exe: .?AVCompressPSGProcess@?A0x57cc9c45@@
CreationKit.exe: .?AV?$BSTEventSink@UPSGRegisteredEvent@BSStaticTriShapeDB@@@@
CreationKit.exe: .?AUPSGRegistrationListener@TESDataHandler@@
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4 $ strings -fn8 Fallout4.exe CreationKit.exe | grep -i cdx
Fallout4.exe: b&h&CDXc,
Fallout4.exe: Fallout4.cdx
Fallout4.exe: .?AVCDX@BGSCombinedCellGeometryDB@@
Fallout4.exe: .?AU?$BSTSingletonSDM@VCDX@BGSCombinedCellGeometryDB@@UBSTSingletonSDMOpStaticBuffer@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMBase@U?$BSTSDMTraits@VCDX@BGSCombinedCellGeometryDB@@U?$BSTSingletonSDMOpStaticBuffer@VCDX@BGSCombinedCellGeometryDB@@@@@@@@
Fallout4.exe: .?AU?$BSTSDMTraits@VCDX@BGSCombinedCellGeometryDB@@U?$BSTSingletonSDMOpStaticBuffer@VCDX@BGSCombinedCellGeometryDB@@@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMOpStaticBuffer@VCDX@BGSCombinedCellGeometryDB@@@@
Fallout4.exe: .?AVPsgBatchIter@CDX@BGSCombinedCellGeometryDB@@
CreationKit.exe: -BuildCDX
CreationKit.exe: data\cdxtmp
CreationKit.exe: .?AVBuildCDX@?A0x57cc9c45@@
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4 $ strings -fn8 Fallout4.exe CreationKit.exe | grep -i CombinedCellGeometry
Fallout4.exe: .?AVLoadTask@BGSCombinedCellGeometryDB@@
Fallout4.exe: .?AVQueuedHandles@ModelDB@BGSCombinedCellGeometryDB@@
Fallout4.exe: .?AV?$BSQueuedResourceCollection@V?$EntryDB@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@@BSResource@@$01@@
Fallout4.exe: .?AV?$EntryDB@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@@BSResource@@
Fallout4.exe: .?AU?$EntryDBBase@U?$EntryDBTraits@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@V?$EntryDB@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@@BSResource@@@BSResource@@@BSResource@@
Fallout4.exe: .?AUDBTraits@ModelDB@BGSCombinedCellGeometryDB@@
Fallout4.exe: .?AU?$BSTSingletonSDM@V?$EntryDB@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@@BSResource@@UBSTSingletonSDMOpStaticBuffer@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMBase@U?$BSTSDMTraits@V?$EntryDB@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@@BSResource@@U?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@@BSResource@@@@@@@@
Fallout4.exe: .?AU?$BSTSDMTraits@V?$EntryDB@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@@BSResource@@U?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@@BSResource@@@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@ModelDB@BGSCombinedCellGeometryDB@@@BSResource@@@@
Fallout4.exe: .?AV?$EntryDB@UDBTraits@BGSCombinedCellGeometryDB@@@BSResource@@
Fallout4.exe: .?AU?$EntryDBBase@U?$EntryDBTraits@UDBTraits@BGSCombinedCellGeometryDB@@V?$EntryDB@UDBTraits@BGSCombinedCellGeometryDB@@@BSResource@@@BSResource@@@BSResource@@
Fallout4.exe: .?AUDBTraits@BGSCombinedCellGeometryDB@@
Fallout4.exe: .?AU?$BSTSingletonSDM@V?$EntryDB@UDBTraits@BGSCombinedCellGeometryDB@@@BSResource@@UBSTSingletonSDMOpStaticBuffer@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMBase@U?$BSTSDMTraits@V?$EntryDB@UDBTraits@BGSCombinedCellGeometryDB@@@BSResource@@U?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@BGSCombinedCellGeometryDB@@@BSResource@@@@@@@@
Fallout4.exe: .?AU?$BSTSDMTraits@V?$EntryDB@UDBTraits@BGSCombinedCellGeometryDB@@@BSResource@@U?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@BGSCombinedCellGeometryDB@@@BSResource@@@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@BGSCombinedCellGeometryDB@@@BSResource@@@@
Fallout4.exe: .?AVCDX@BGSCombinedCellGeometryDB@@
Fallout4.exe: .?AU?$BSTSingletonSDM@VCDX@BGSCombinedCellGeometryDB@@UBSTSingletonSDMOpStaticBuffer@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMBase@U?$BSTSDMTraits@VCDX@BGSCombinedCellGeometryDB@@U?$BSTSingletonSDMOpStaticBuffer@VCDX@BGSCombinedCellGeometryDB@@@@@@@@
Fallout4.exe: .?AU?$BSTSDMTraits@VCDX@BGSCombinedCellGeometryDB@@U?$BSTSingletonSDMOpStaticBuffer@VCDX@BGSCombinedCellGeometryDB@@@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMOpStaticBuffer@VCDX@BGSCombinedCellGeometryDB@@@@
Fallout4.exe: .?AVPsgBatchIter@CDX@BGSCombinedCellGeometryDB@@
Fallout4.exe: .?AVPreloadTask@BGSCombinedCellGeometryDB@@
Fallout4.exe: .?AV?$BSTCommonStaticMessageQueue@UPreloadRequest@PreloadTask@BGSCombinedCellGeometryDB@@$0EAA@@@
Fallout4.exe: .?AV?$BSTMessageQueue@UPreloadRequest@PreloadTask@BGSCombinedCellGeometryDB@@@@
Fallout4.exe: .?AV?$BSTCommonStaticMessageQueue@UStorageType@DBTraits@ModelDB@BGSCombinedCellGeometryDB@@$0CAAA@@@
Fallout4.exe: .?AV?$BSTMessageQueue@UStorageType@DBTraits@ModelDB@BGSCombinedCellGeometryDB@@@@
Fallout4.exe: .?AVThread@Unpacker@BGSCombinedCellGeometryDB@@
CreationKit.exe: ..\Shared\TESForms\World\BGSCombinedCellGeometryDB.cpp
clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4 $ strings -fn8 Fallout4.exe CreationKit.exe | grep -i StaticTriShapeDB
Fallout4.exe: .?AV?$BSTEventSink@UPSGRegisteredEvent@BSStaticTriShapeDB@@@@
Fallout4.exe: .?AVIBatchRequestIter@BSStaticTriShapeDB@@
Fallout4.exe: .?AVQueuedHandles@BSStaticTriShapeDB@@
Fallout4.exe: .?AV?$BSQueuedResourceCollection@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@$01@@
Fallout4.exe: .?AV?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@
Fallout4.exe: .?AU?$EntryDBBase@U?$EntryDBTraits@UDBTraits@BSStaticTriShapeDB@@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@@BSResource@@@BSResource@@
Fallout4.exe: .?AUDBTraits@BSStaticTriShapeDB@@
Fallout4.exe: .?AU?$BSTSingletonSDM@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@UBSTSingletonSDMOpStaticBuffer@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMBase@U?$BSTSDMTraits@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@U?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@@@@@@@
Fallout4.exe: .?AU?$BSTSDMTraits@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@U?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@@@
Fallout4.exe: .?AVBuilder@BSStaticTriShapeDB@@
Fallout4.exe: .?AVManager@BSStaticTriShapeDB@@
Fallout4.exe: .?AU?$BSTSingletonSDM@VManager@BSStaticTriShapeDB@@UBSTSingletonSDMOpStaticBuffer@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMBase@U?$BSTSDMTraits@VManager@BSStaticTriShapeDB@@U?$BSTSingletonSDMOpStaticBuffer@VManager@BSStaticTriShapeDB@@@@@@@@
Fallout4.exe: .?AU?$BSTSDMTraits@VManager@BSStaticTriShapeDB@@U?$BSTSingletonSDMOpStaticBuffer@VManager@BSStaticTriShapeDB@@@@@@
Fallout4.exe: .?AU?$BSTSingletonSDMOpStaticBuffer@VManager@BSStaticTriShapeDB@@@@
Fallout4.exe: .?AVCsgStream@BSStaticTriShapeDB@@
CreationKit.exe: BSStaticTriShapeDB.cpp
CreationKit.exe: .?AV?$BSTEventSink@UPSGRegisteredEvent@BSStaticTriShapeDB@@@@
CreationKit.exe: .?AVQueuedHandles@BSStaticTriShapeDB@@
CreationKit.exe: .?AV?$BSQueuedResourceCollection@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@$01@@
CreationKit.exe: .?AV?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@
CreationKit.exe: .?AU?$EntryDBBase@U?$EntryDBTraits@UDBTraits@BSStaticTriShapeDB@@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@@BSResource@@@BSResource@@
CreationKit.exe: .?AUDBTraits@BSStaticTriShapeDB@@
CreationKit.exe: .?AU?$BSTSingletonSDM@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@UBSTSingletonSDMOpStaticBuffer@@@@
CreationKit.exe: .?AU?$BSTSingletonSDMBase@U?$BSTSDMTraits@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@U?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@@@@@@@
CreationKit.exe: .?AU?$BSTSDMTraits@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@U?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@@@@@
CreationKit.exe: .?AU?$BSTSingletonSDMOpStaticBuffer@V?$EntryDB@UDBTraits@BSStaticTriShapeDB@@@BSResource@@@@
CreationKit.exe: .?AVBuilder@BSStaticTriShapeDB@@
CreationKit.exe: .?AVManager@BSStaticTriShapeDB@@
CreationKit.exe: .?AU?$BSTSingletonSDM@VManager@BSStaticTriShapeDB@@UBSTSingletonSDMOpStaticBuffer@@@@
CreationKit.exe: .?AU?$BSTSingletonSDMBase@U?$BSTSDMTraits@VManager@BSStaticTriShapeDB@@U?$BSTSingletonSDMOpStaticBuffer@VManager@BSStaticTriShapeDB@@@@@@@@
CreationKit.exe: .?AU?$BSTSDMTraits@VManager@BSStaticTriShapeDB@@U?$BSTSingletonSDMOpStaticBuffer@VManager@BSStaticTriShapeDB@@@@@@
CreationKit.exe: .?AU?$BSTSingletonSDMOpStaticBuffer@VManager@BSStaticTriShapeDB@@@@
CreationKit.exe: .?AVCsgStream@BSStaticTriShapeDB@@
Link to comment
Share on other sites

Regarding the CTD when generating "clean" precombines:

 

Did you monitor file accesses with procmon while doing that? I have a sneaking suspicion that this might depend on the Havok toolkit being present given how it spews Havok-related "stuff's missing, yo!" errors when put to the test while generating CDX. Theory would be that this process changes how the _Physics.nif is baked and that this relies on Havok toolkit to fill the bhkPhysicsWhatever node in the NIF file.

 

Another experiment would be generating with the "clean" parameter, tossing the _Physics.nif of that generation run and instead using the archived _Physics.nif for CDX generation. In practice, this would only be useful for mods like Boston FPS Fix that don't change placed refs. But it might tell us something about how CDX and precombination interlock.

 

Sounds a little convoluted reading it again but I think you get what I mean.

 

In addition, this was a surprisingly interesting read. Do you by chance write technical documentation for a living? If not you should consider it. ;-)

Edited by payl0ad
Link to comment
Share on other sites

Regarding the CTD when generating "clean" precombines:

 

Did you monitor file accesses with procmon while doing that? I have a sneaking suspicion that this might depend on the Havok toolkit being present given how it spews Havok-related "stuff's missing, yo!" errors when put to the test while generating CDX. Theory would be that this process changes how the _Physics.nif is baked and that this relies on Havok toolkit to fill the bhkPhysicsWhatever node in the NIF file.

 

I just did a -GeneratePrecombined and -GeneratePreVisData run with a test esm (adds a few trees to a couple of cells) where I looked for anything havok or hkt related in procmon and didn't see anything, although I did see the Havok related endianness and pointer errors again with both -GeneratePreVisData and -BuildCDX. It seems once the generated precombined NIFs get utilized by the engine during cell processing the errors come up (it's not actually BuildCDX specific as I thought before).

 

I then cleaned everything up, did per-cell precombines from within CK, exited, and did a -GeneratePreVisData:treetest.esm clean all and absolutely none of those havok related errors. From a logical standpoint clearly CK knows how to generate things correctly, but something is missing here with -GeneratePrecombined, specifically. I even did the non-'clean' versions of precombines (i.e. the equivalent to what CK does from the UI) and they still result in the same havok related errors when generating PreVis, whereas the CK generated ones do not.

HAVOK:                          Binary Packfile has the wrong endiannes or pointer size. Predicates won't be read.
HAVOK:                          bhkPhysicsSystem::LoadBinary - nullptr system data found.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.
HAVOK:                          bhkNPCollisionObject::LinkObject : invalid system data found - pruning object from scenegraph.

Also, here's the md5sum and file sizes for every file in common between the two sets:

clayne@a4-sfx:/cygdrive/c/Program Files (x86)/Steam/steamapps/common/Fallout 4.clean5/Data/Meshes $ for i in $(ls PreCombined.*|sort|uniq -d); do for j in PreCombined.*; do s=( $(md5sum $j/$i) ); l=$(ls -ld $j/$i); echo ${s[0]} $l; done; echo; done
fe58cb934f67933b8068554415fb3fb3 -rwxrwx---+ 1 clayne None 176617 Aug 9 20:05 PreCombined.ck.full/0000DDA0_01B8656E_OC.NIF
f985c65fe3798bc1ef0c766252d6b9fe -rwxrwx---+ 1 clayne None 176617 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_01B8656E_OC.NIF

e316c38559e87e79a3cc2a693c132bc8 -rwxrwx---+ 1 clayne None 60000 Aug 9 20:05 PreCombined.ck.full/0000DDA0_0971F8CA_OC.NIF
e316c38559e87e79a3cc2a693c132bc8 -rwxrwx---+ 1 clayne None 60000 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_0971F8CA_OC.NIF

37943938dba0a590068f97c7ff08b20d -rwxrwx---+ 1 clayne None 29366 Aug 9 20:05 PreCombined.ck.full/0000DDA0_0A722D3C_OC.NIF
37943938dba0a590068f97c7ff08b20d -rwxrwx---+ 1 clayne None 29366 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_0A722D3C_OC.NIF

223560e3ba1704ef20ea095081e72b38 -rwxrwx---+ 1 clayne None 87240 Aug 9 20:05 PreCombined.ck.full/0000DDA0_12E3F195_OC.NIF
e94618ea7c615e08d97e6823c978d558 -rwxrwx---+ 1 clayne None 87240 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_12E3F195_OC.NIF

e9f0ec162dd8d31d6ede1387c415220d -rwxrwx---+ 1 clayne None 188451 Aug 9 20:05 PreCombined.ck.full/0000DDA0_135B94FB_OC.NIF
c64bcf109e3a79035d4cdc7a9c689cd1 -rwxrwx---+ 1 clayne None 188451 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_135B94FB_OC.NIF

6f358bfe72fcbdbbc950810c4177a5f1 -rwxrwx---+ 1 clayne None 41075 Aug 9 20:05 PreCombined.ck.full/0000DDA0_17959980_OC.NIF
f5b2e8e3032959a9280845d7dab465b9 -rwxrwx---+ 1 clayne None 40307 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_17959980_OC.NIF

f77f6b6faffe5d5de698a52b67ceda53 -rwxrwx---+ 1 clayne None 79293 Aug 9 20:05 PreCombined.ck.full/0000DDA0_1861C6FF_OC.NIF
f77f6b6faffe5d5de698a52b67ceda53 -rwxrwx---+ 1 clayne None 79293 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_1861C6FF_OC.NIF

da6dca8ad4dc73b2fd30d70bc5a4d570 -rwxrwx---+ 1 clayne None 52164 Aug 9 20:05 PreCombined.ck.full/0000DDA0_1CC4E7D3_OC.NIF
213e310dc66bc326b53a6aee9d08ed9c -rwxrwx---+ 1 clayne None 52164 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_1CC4E7D3_OC.NIF

5f1eef6300b59bd38f4a1fd50e93017b -rwxrwx---+ 1 clayne None 280512 Aug 9 20:05 PreCombined.ck.full/0000DDA0_21987E4E_OC.NIF
a7184b29960942f70d98f0f44d35aba4 -rwxrwx---+ 1 clayne None 280514 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_21987E4E_OC.NIF

3fae13a6eb807d11e47361036cf0545f -rwxrwx---+ 1 clayne None 484018 Aug 9 20:05 PreCombined.ck.full/0000DDA0_21E80958_OC.NIF
95ea6ef9797914e8564ca505501249b8 -rwxrwx---+ 1 clayne None 484018 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_21E80958_OC.NIF

15f1820328fa1211ef29680f291c4092 -rwxrwx---+ 1 clayne None 5890 Aug 9 20:05 PreCombined.ck.full/0000DDA0_254D2874_OC.NIF
15f1820328fa1211ef29680f291c4092 -rwxrwx---+ 1 clayne None 5890 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_254D2874_OC.NIF

eae7c206cc572925a53309fba063fd12 -rwxrwx---+ 1 clayne None 87850 Aug 9 20:05 PreCombined.ck.full/0000DDA0_2855735C_OC.NIF
caddf1414ea93141633fe02818928a99 -rwxrwx---+ 1 clayne None 87850 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_2855735C_OC.NIF

96e5358fcc5bc184c5f667ecbfe342c6 -rwxrwx---+ 1 clayne None 60614 Aug 9 20:05 PreCombined.ck.full/0000DDA0_2B9A2464_OC.NIF
96e5358fcc5bc184c5f667ecbfe342c6 -rwxrwx---+ 1 clayne None 60614 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_2B9A2464_OC.NIF

880b4082c299941d4fd3203c66754e45 -rwxrwx---+ 1 clayne None 146874 Aug 9 20:05 PreCombined.ck.full/0000DDA0_32C3EAB5_OC.NIF
880b4082c299941d4fd3203c66754e45 -rwxrwx---+ 1 clayne None 146874 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_32C3EAB5_OC.NIF

8362f3d74fa93c863b88af0450919f46 -rwxrwx---+ 1 clayne None 98004 Aug 9 20:05 PreCombined.ck.full/0000DDA0_3989CFA7_OC.NIF
a12110405e0e87ac3b1030bae100ffb1 -rwxrwx---+ 1 clayne None 98004 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_3989CFA7_OC.NIF

0310cd7465d583e5fe86b6b5658d1b7c -rwxrwx---+ 1 clayne None 34818 Aug 9 20:05 PreCombined.ck.full/0000DDA0_3A0A7711_OC.NIF
5229dfb2a699407a51d12ada5f193044 -rwxrwx---+ 1 clayne None 34818 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_3A0A7711_OC.NIF

9431a802d4b098941f08aa37438aeb61 -rwxrwx---+ 1 clayne None 237250 Aug 9 20:05 PreCombined.ck.full/0000DDA0_3BB2127F_OC.NIF
0b36b0aa0c04d14962c6647952c8c0c5 -rwxrwx---+ 1 clayne None 237260 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_3BB2127F_OC.NIF

e0524d5f534dcc44d99ee75808ce63a3 -rwxrwx---+ 1 clayne None 133262 Aug 9 20:05 PreCombined.ck.full/0000DDA0_3C7FCAF2_OC.NIF
571a664f85b2965ccfaa99bde8d58b1d -rwxrwx---+ 1 clayne None 133134 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_3C7FCAF2_OC.NIF

031e4222dc7afdc352399045fb6fd63b -rwxrwx---+ 1 clayne None 64321 Aug 9 20:05 PreCombined.ck.full/0000DDA0_41B8656E_OC.NIF
31861a4c727acd204d9fa9cda56c8c8b -rwxrwx---+ 1 clayne None 64321 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_41B8656E_OC.NIF

322573340c6368b36f8a3e73dca3aaec -rwxrwx---+ 1 clayne None 1810 Aug 9 20:05 PreCombined.ck.full/0000DDA0_5861C6FF_OC.NIF
322573340c6368b36f8a3e73dca3aaec -rwxrwx---+ 1 clayne None 1810 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_5861C6FF_OC.NIF

0945f2355d6515f141fb7b990a93e61d -rwxrwx---+ 1 clayne None 65631 Aug 9 20:05 PreCombined.ck.full/0000DDA0_5CC4E7D3_OC.NIF
8cd3de1f87dd125d7e17e48aea899904 -rwxrwx---+ 1 clayne None 65631 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_5CC4E7D3_OC.NIF

1ab6b55923cbbad0391fc58a59d625e1 -rwxrwx---+ 1 clayne None 73905 Aug 9 20:05 PreCombined.ck.full/0000DDA0_61E80958_OC.NIF
d978134d75c07ef14fe2144e70e6787b -rwxrwx---+ 1 clayne None 73905 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_61E80958_OC.NIF

6ad4096bbfbe588c4e662a704b85fc8f -rwxrwx---+ 1 clayne None 1692 Aug 9 20:05 PreCombined.ck.full/0000DDA0_654D2874_OC.NIF
6ad4096bbfbe588c4e662a704b85fc8f -rwxrwx---+ 1 clayne None 1692 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_654D2874_OC.NIF

c396a62c8bda6a822f845f959af3d503 -rwxrwx---+ 1 clayne None 67844 Aug 9 20:05 PreCombined.ck.full/0000DDA0_7989CFA7_OC.NIF
a655d1b923cd977497c04e32af1e4aa9 -rwxrwx---+ 1 clayne None 67844 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_7989CFA7_OC.NIF

74d897831e74ae4d2e1d3cd741210764 -rwxrwx---+ 1 clayne None 16230 Aug 9 20:05 PreCombined.ck.full/0000DDA0_7A0A7711_OC.NIF
74d897831e74ae4d2e1d3cd741210764 -rwxrwx---+ 1 clayne None 16230 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_7A0A7711_OC.NIF

ba643629891c57cbf1c70f9f213ad44b -rwxrwx---+ 1 clayne None 40529 Aug 9 20:05 PreCombined.ck.full/0000DDA0_7BB2127F_OC.NIF
c0b15f24d0578725767b931f813f8121 -rwxrwx---+ 1 clayne None 40529 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_7BB2127F_OC.NIF

42b89032cf436b5fe12c8a5f2b139ec6 -rwxrwx---+ 1 clayne None 229822 Aug 9 20:05 PreCombined.ck.full/0000DDA0_81B8656E_OC.NIF
42b89032cf436b5fe12c8a5f2b139ec6 -rwxrwx---+ 1 clayne None 229822 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_81B8656E_OC.NIF

c087a9e57c30aa141c688f9bcde0e00c -rwxrwx---+ 1 clayne None 24511 Aug 9 20:05 PreCombined.ck.full/0000DDA0_8971F8CA_OC.NIF
5ddad4894a9dda39d28a20fb6f0fe7a2 -rwxrwx---+ 1 clayne None 24383 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_8971F8CA_OC.NIF

6463676daa7338474edd6362e3123414 -rwxrwx---+ 1 clayne None 210639 Aug 9 20:05 PreCombined.ck.full/0000DDA0_92E3F195_OC.NIF
6463676daa7338474edd6362e3123414 -rwxrwx---+ 1 clayne None 210639 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_92E3F195_OC.NIF

7d26a4ec93873077db193e737b9a6e77 -rwxrwx---+ 1 clayne None 10133 Aug 9 20:05 PreCombined.ck.full/0000DDA0_942AB9AE_OC.NIF
4eadb1ec3252c05fd0faf20fc93c1990 -rwxrwx---+ 1 clayne None 10005 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_942AB9AE_OC.NIF

e0e2b3429d891e700932269e5b5946e6 -rwxrwx---+ 1 clayne None 11898 Aug 9 20:05 PreCombined.ck.full/0000DDA0_97959980_OC.NIF
e0e2b3429d891e700932269e5b5946e6 -rwxrwx---+ 1 clayne None 11898 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_97959980_OC.NIF

ae5d7ee95870fd238a6cafa7fff2d35d -rwxrwx---+ 1 clayne None 22152 Aug 9 20:05 PreCombined.ck.full/0000DDA0_9861C6FF_OC.NIF
ae5d7ee95870fd238a6cafa7fff2d35d -rwxrwx---+ 1 clayne None 22152 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_9861C6FF_OC.NIF

6e85c8a81cd7050d4e6984b0d52b3b76 -rwxrwx---+ 1 clayne None 1564 Aug 9 20:05 PreCombined.ck.full/0000DDA0_A1E80958_OC.NIF
6e85c8a81cd7050d4e6984b0d52b3b76 -rwxrwx---+ 1 clayne None 1564 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_A1E80958_OC.NIF

fa00b3890f0217c9ae14ef20beb1a9e5 -rwxrwx---+ 1 clayne None 10133 Aug 9 20:05 PreCombined.ck.full/0000DDA0_A855735C_OC.NIF
5a90feba4c0e6c13f4c6abb2ffadb169 -rwxrwx---+ 1 clayne None 10005 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_A855735C_OC.NIF

205c525ef72262b97d5a1d83142a462c -rwxrwx---+ 1 clayne None 14025 Aug 9 20:05 PreCombined.ck.full/0000DDA0_AE1BB66E_OC.NIF
b115a9e1836d452194e5f4f24b23409e -rwxrwx---+ 1 clayne None 13897 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_AE1BB66E_OC.NIF

c9e7e439f08250d06be8f5d5a58b2c02 -rwxrwx---+ 1 clayne None 8035 Aug 9 20:05 PreCombined.ck.full/0000DDA0_B2C3EAB5_OC.NIF
c9e7e439f08250d06be8f5d5a58b2c02 -rwxrwx---+ 1 clayne None 8035 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_B2C3EAB5_OC.NIF

e5c443998aeb8c4fa76bd96e2c884f04 -rwxrwx---+ 1 clayne None 8827 Aug 9 20:05 PreCombined.ck.full/0000DDA0_B75EC3B7_OC.NIF
b5c69f8c5e65a66d6ba62ffdcd213fff -rwxrwx---+ 1 clayne None 8699 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_B75EC3B7_OC.NIF

501ab0b24530e9b72c44686da173991e -rwxrwx---+ 1 clayne None 38173 Aug 9 20:05 PreCombined.ck.full/0000DDA0_B989CFA7_OC.NIF
501ab0b24530e9b72c44686da173991e -rwxrwx---+ 1 clayne None 38173 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_B989CFA7_OC.NIF

15a86a87ebf3eeb7f5a2141a750ecc49 -rwxrwx---+ 1 clayne None 25796 Aug 9 20:05 PreCombined.ck.full/0000DDA0_BBB2127F_OC.NIF
1041b61cfdb025711ad7874e64f41cef -rwxrwx---+ 1 clayne None 25668 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_BBB2127F_OC.NIF

a8f341ad965f7462b06da1d534eb1b32 -rwxrwx---+ 1 clayne None 10133 Aug 9 20:05 PreCombined.ck.full/0000DDA0_BC7FCAF2_OC.NIF
b5306401186add8a709aa05ba6deb0b1 -rwxrwx---+ 1 clayne None 10005 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_BC7FCAF2_OC.NIF

2e290ef76d88ba5e6ef86af50ef40a7f -rwxrwx---+ 1 clayne None 10061 Aug 9 20:05 PreCombined.ck.full/0000DDA0_C1B8656E_OC.NIF
2e290ef76d88ba5e6ef86af50ef40a7f -rwxrwx---+ 1 clayne None 10061 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_C1B8656E_OC.NIF

053fe915cc3c0a391690dced12afdbab -rwxrwx---+ 1 clayne None 119269 Aug 9 20:05 PreCombined.ck.full/0000DDA0_Physics.NIF
2d397f3832b2c62701ef9ebce97a373e -rwxrwx---+ 1 clayne None 119061 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA0_Physics.NIF

e3c0ea9cc253ab54ab9196f0795374bc -rwxrwx---+ 1 clayne None 25212 Aug 9 20:05 PreCombined.ck.full/0000DDA1_01B8656E_OC.NIF
e3c0ea9cc253ab54ab9196f0795374bc -rwxrwx---+ 1 clayne None 25212 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_01B8656E_OC.NIF

0a5ee2c5ef7b6142e1ed8b16da9907fe -rwxrwx---+ 1 clayne None 19514 Aug 9 20:05 PreCombined.ck.full/0000DDA1_0971F8CA_OC.NIF
0a5ee2c5ef7b6142e1ed8b16da9907fe -rwxrwx---+ 1 clayne None 19514 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_0971F8CA_OC.NIF

c779fadf7a5371c2fc4c670abcba14f1 -rwxrwx---+ 1 clayne None 58401 Aug 9 20:05 PreCombined.ck.full/0000DDA1_0A82376A_OC.NIF
c779fadf7a5371c2fc4c670abcba14f1 -rwxrwx---+ 1 clayne None 58401 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_0A82376A_OC.NIF

4365d85ac75e142ddd8d4c752c1abf4c -rwxrwx---+ 1 clayne None 25384 Aug 9 20:05 PreCombined.ck.full/0000DDA1_1959CED1_OC.NIF
4365d85ac75e142ddd8d4c752c1abf4c -rwxrwx---+ 1 clayne None 25384 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_1959CED1_OC.NIF

963dec440ad2964867d9e0ba12dc9afc -rwxrwx---+ 1 clayne None 190813 Aug 9 20:05 PreCombined.ck.full/0000DDA1_1B92095F_OC.NIF
93effc8fad1db0b5e0140b5fcbc213da -rwxrwx---+ 1 clayne None 190333 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_1B92095F_OC.NIF

66f050d8447f15dd369fff591b171e89 -rwxrwx---+ 1 clayne None 133620 Aug 9 20:05 PreCombined.ck.full/0000DDA1_21987E4E_OC.NIF
e88d5525b1321c9f578e212a7e89ec4c -rwxrwx---+ 1 clayne None 132564 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_21987E4E_OC.NIF

5a4d2f9dbfbe13b3ba493856af9bbf24 -rwxrwx---+ 1 clayne None 190905 Aug 9 20:05 PreCombined.ck.full/0000DDA1_2776F5AC_OC.NIF
708aedaa52dcca2628f9025e614cee19 -rwxrwx---+ 1 clayne None 190910 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_2776F5AC_OC.NIF

d738e67782da95539c2f655fb3239a02 -rwxrwx---+ 1 clayne None 41835 Aug 9 20:05 PreCombined.ck.full/0000DDA1_2BEA5372_OC.NIF
86ccdd62c77a76021ea20b13d45ed9c9 -rwxrwx---+ 1 clayne None 41835 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_2BEA5372_OC.NIF

0e1f5e265048d3a196bd5c88ae490404 -rwxrwx---+ 1 clayne None 247224 Aug 9 20:05 PreCombined.ck.full/0000DDA1_32B39DA3_OC.NIF
815cb826ef5878adde30f8d8a89e7e8a -rwxrwx---+ 1 clayne None 247231 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_32B39DA3_OC.NIF

e1784e365e230cecef4e5431112ee528 -rwxrwx---+ 1 clayne None 97537 Aug 9 20:05 PreCombined.ck.full/0000DDA1_32C3EAB5_OC.NIF
79667ff7129208b7a58d301f121addc5 -rwxrwx---+ 1 clayne None 97537 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_32C3EAB5_OC.NIF

bd2d3e5d8a1a3f9a436d2ca42a6302d6 -rwxrwx---+ 1 clayne None 424358 Aug 9 20:05 PreCombined.ck.full/0000DDA1_3831AAC9_OC.NIF
6c4cb5d0ac13d5689ef8c7e845aeb263 -rwxrwx---+ 1 clayne None 424418 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_3831AAC9_OC.NIF

1f2ab73677ddae58a83ad813da730ba1 -rwxrwx---+ 1 clayne None 9246 Aug 9 20:05 PreCombined.ck.full/0000DDA1_3A0A7711_OC.NIF
1f2ab73677ddae58a83ad813da730ba1 -rwxrwx---+ 1 clayne None 9246 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_3A0A7711_OC.NIF

0b2d57d5f587fd207083a1dbc466ea71 -rwxrwx---+ 1 clayne None 130347 Aug 9 20:05 PreCombined.ck.full/0000DDA1_3A310FC0_OC.NIF
bc9a22e470cf9a93652046c51a279431 -rwxrwx---+ 1 clayne None 130347 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_3A310FC0_OC.NIF

1a8c753018259e82dbfbb2d5349c5104 -rwxrwx---+ 1 clayne None 16738 Aug 9 20:05 PreCombined.ck.full/0000DDA1_3BB2127F_OC.NIF
1a8c753018259e82dbfbb2d5349c5104 -rwxrwx---+ 1 clayne None 16738 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_3BB2127F_OC.NIF

4e681d5386cfbe828c74ef7e8f1c6563 -rwxrwx---+ 1 clayne None 16251 Aug 9 20:05 PreCombined.ck.full/0000DDA1_4A82376A_OC.NIF
4e681d5386cfbe828c74ef7e8f1c6563 -rwxrwx---+ 1 clayne None 16251 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_4A82376A_OC.NIF

cc133c56479d68812b291f6f37c4221f -rwxrwx---+ 1 clayne None 35024 Aug 9 20:05 PreCombined.ck.full/0000DDA1_5959CED1_OC.NIF
40781f53b9be015eb828a9a72ef54154 -rwxrwx---+ 1 clayne None 34992 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_5959CED1_OC.NIF

a755d0308ae4f953224255e7e832d44c -rwxrwx---+ 1 clayne None 137884 Aug 9 20:05 PreCombined.ck.full/0000DDA1_6776F5AC_OC.NIF
2b37daaef8ca7b6266cede34b4eb5c53 -rwxrwx---+ 1 clayne None 137884 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_6776F5AC_OC.NIF

7402b8d5f397d8c5b8965761bf27c1c2 -rwxrwx---+ 1 clayne None 16251 Aug 9 20:05 PreCombined.ck.full/0000DDA1_72B39DA3_OC.NIF
7402b8d5f397d8c5b8965761bf27c1c2 -rwxrwx---+ 1 clayne None 16251 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_72B39DA3_OC.NIF

c16aaa3c5d3e4eb565a87721cc14b6db -rwxrwx---+ 1 clayne None 79554 Aug 9 20:05 PreCombined.ck.full/0000DDA1_7831AAC9_OC.NIF
c16aaa3c5d3e4eb565a87721cc14b6db -rwxrwx---+ 1 clayne None 79554 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_7831AAC9_OC.NIF

8399105efe93856389cf8868ea3e9576 -rwxrwx---+ 1 clayne None 13881 Aug 9 20:05 PreCombined.ck.full/0000DDA1_81B8656E_OC.NIF
d3bf5c7da47897e2de05d4e8385bfb33 -rwxrwx---+ 1 clayne None 13753 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_81B8656E_OC.NIF

de93f823fcc088c7a96c6dc8240b41de -rwxrwx---+ 1 clayne None 44689 Aug 9 20:05 PreCombined.ck.full/0000DDA1_8971F8CA_OC.NIF
eca5030924c9c2062137af532cbcd9e6 -rwxrwx---+ 1 clayne None 44689 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_8971F8CA_OC.NIF

8681953c8b18ba82e474c0f39aa81083 -rwxrwx---+ 1 clayne None 12827 Aug 9 20:05 PreCombined.ck.full/0000DDA1_935B94FB_OC.NIF
254cc3dc4624e6fe187ea37670d4e514 -rwxrwx---+ 1 clayne None 12699 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_935B94FB_OC.NIF

1d693cb48b821b69a4dea31cd2da70b1 -rwxrwx---+ 1 clayne None 14682 Aug 9 20:05 PreCombined.ck.full/0000DDA1_9959CED1_OC.NIF
1d693cb48b821b69a4dea31cd2da70b1 -rwxrwx---+ 1 clayne None 14682 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_9959CED1_OC.NIF

3668a843a008883653ffc58984fdce0d -rwxrwx---+ 1 clayne None 27009 Aug 9 20:05 PreCombined.ck.full/0000DDA1_9B92095F_OC.NIF
3668a843a008883653ffc58984fdce0d -rwxrwx---+ 1 clayne None 27009 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_9B92095F_OC.NIF

ed6cdce9d602dcfb2744919e83202354 -rwxrwx---+ 1 clayne None 27929 Aug 9 20:05 PreCombined.ck.full/0000DDA1_B2C3EAB5_OC.NIF
0b153a399fcd3b9209b72a82f752206e -rwxrwx---+ 1 clayne None 27673 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_B2C3EAB5_OC.NIF

8a991358ea158b2be12501d7d2b1fe88 -rwxrwx---+ 1 clayne None 24244 Aug 9 20:05 PreCombined.ck.full/0000DDA1_B831AAC9_OC.NIF
8a991358ea158b2be12501d7d2b1fe88 -rwxrwx---+ 1 clayne None 24244 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_B831AAC9_OC.NIF

ed527b6cb79ebc5eddd639a586279a6d -rwxrwx---+ 1 clayne None 22296 Aug 9 20:05 PreCombined.ck.full/0000DDA1_BA0A7711_OC.NIF
ed527b6cb79ebc5eddd639a586279a6d -rwxrwx---+ 1 clayne None 22296 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_BA0A7711_OC.NIF

cefe353beeca47f166fe659a63e774af -rwxrwx---+ 1 clayne None 53286 Aug 9 20:05 PreCombined.ck.full/0000DDA1_BBB2127F_OC.NIF
cefe353beeca47f166fe659a63e774af -rwxrwx---+ 1 clayne None 53286 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_BBB2127F_OC.NIF

1a201d5341c040ed0d351019b3480c31 -rwxrwx---+ 1 clayne None 108757 Aug 9 20:05 PreCombined.ck.full/0000DDA1_Physics.NIF
da627dcbd09d1939bcb13ee65b817393 -rwxrwx---+ 1 clayne None 108533 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDA1_Physics.NIF

691a6ab93c3854641f041cecd68915c0 -rwxrwx---+ 1 clayne None 32673 Aug 9 20:04 PreCombined.ck.full/0000DDC2_04F09B23_OC.NIF
9dfa59d193b597738447277b3038d202 -rwxrwx---+ 1 clayne None 32033 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_04F09B23_OC.NIF

b1c9e4e7b428658a53c7769a5269967f -rwxrwx---+ 1 clayne None 152965 Aug 9 20:04 PreCombined.ck.full/0000DDC2_12E3F195_OC.NIF
7cb959223e2892c4d90e2871b5f54a71 -rwxrwx---+ 1 clayne None 161345 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_12E3F195_OC.NIF

e421adb66d9c844fd84e1083989941e4 -rwxrwx---+ 1 clayne None 175576 Aug 9 20:04 PreCombined.ck.full/0000DDC2_1959CED1_OC.NIF
e421adb66d9c844fd84e1083989941e4 -rwxrwx---+ 1 clayne None 175576 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_1959CED1_OC.NIF

bf5689c600b03cd59a48ed041c3ee308 -rwxrwx---+ 1 clayne None 119533 Aug 9 20:04 PreCombined.ck.full/0000DDC2_1B92095F_OC.NIF
34f699d3a352594061e1f60c35df1a9b -rwxrwx---+ 1 clayne None 108753 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_1B92095F_OC.NIF

59a4cb59a3fa9871e921536e62b87e46 -rwxrwx---+ 1 clayne None 142475 Aug 9 20:04 PreCombined.ck.full/0000DDC2_1F475F65_OC.NIF
5c1318d897607b5274c861cb094eae4f -rwxrwx---+ 1 clayne None 142486 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_1F475F65_OC.NIF

b4748d4fcadfd2235ec0c94f10c3f748 -rwxrwx---+ 1 clayne None 228470 Aug 9 20:04 PreCombined.ck.full/0000DDC2_21987E4E_OC.NIF
37e47d9d5cd61e3b74937c0eb4737c3b -rwxrwx---+ 1 clayne None 227542 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_21987E4E_OC.NIF

5f8b7ed61e490650a1dbad0439d338b3 -rwxrwx---+ 1 clayne None 109305 Aug 9 20:04 PreCombined.ck.full/0000DDC2_2776F5AC_OC.NIF
6b2b2f8f901fac2da9f868f4c9d089be -rwxrwx---+ 1 clayne None 109305 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_2776F5AC_OC.NIF

281aa2864c2cbfd800351c5fb2d7cea8 -rwxrwx---+ 1 clayne None 152218 Aug 9 20:04 PreCombined.ck.full/0000DDC2_2AEB2D4D_OC.NIF
a7ed023edc10fc702762e0114be393b3 -rwxrwx---+ 1 clayne None 152218 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_2AEB2D4D_OC.NIF

298c3e61f2d99ff2543e634fe2d9bf05 -rwxrwx---+ 1 clayne None 115725 Aug 9 20:04 PreCombined.ck.full/0000DDC2_32B39DA3_OC.NIF
298c3e61f2d99ff2543e634fe2d9bf05 -rwxrwx---+ 1 clayne None 115725 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_32B39DA3_OC.NIF

ccf6aaa404f7d6415873064e1a951064 -rwxrwx---+ 1 clayne None 53050 Aug 9 20:04 PreCombined.ck.full/0000DDC2_32C3EAB5_OC.NIF
ccf6aaa404f7d6415873064e1a951064 -rwxrwx---+ 1 clayne None 53050 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_32C3EAB5_OC.NIF

cfadd467fe8f3e3ffb74e9b254d10bfd -rwxrwx---+ 1 clayne None 125455 Aug 9 20:04 PreCombined.ck.full/0000DDC2_34AD0C17_OC.NIF
57402c4654dd59eb62d2acd1b6bbb605 -rwxrwx---+ 1 clayne None 125464 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_34AD0C17_OC.NIF

dcb22892f0ba1aab7fea100417091c13 -rwxrwx---+ 1 clayne None 446739 Aug 9 20:04 PreCombined.ck.full/0000DDC2_3831AAC9_OC.NIF
9ded430e900041de4dfdfd7e23dc11e8 -rwxrwx---+ 1 clayne None 445683 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_3831AAC9_OC.NIF

ca93edcc31d4ad6a27e3fdd5b951b551 -rwxrwx---+ 1 clayne None 210708 Aug 9 20:04 PreCombined.ck.full/0000DDC2_388F51D1_OC.NIF
ca93edcc31d4ad6a27e3fdd5b951b551 -rwxrwx---+ 1 clayne None 210708 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_388F51D1_OC.NIF

e1a31ce5854d4e3f0e5d5fd98dea7e05 -rwxrwx---+ 1 clayne None 16251 Aug 9 20:04 PreCombined.ck.full/0000DDC2_5959CED1_OC.NIF
e1a31ce5854d4e3f0e5d5fd98dea7e05 -rwxrwx---+ 1 clayne None 16251 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_5959CED1_OC.NIF

9d36697e3fbbdfbed5271603e331d5e2 -rwxrwx---+ 1 clayne None 11053 Aug 9 20:04 PreCombined.ck.full/0000DDC2_7831AAC9_OC.NIF
9d36697e3fbbdfbed5271603e331d5e2 -rwxrwx---+ 1 clayne None 11053 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_7831AAC9_OC.NIF

8d91eec3e06b7e39624713e2122259a9 -rwxrwx---+ 1 clayne None 20185 Aug 9 20:04 PreCombined.ck.full/0000DDC2_7E2F3B7D_OC.NIF
e537322a8fbcba256de35e9040ffb194 -rwxrwx---+ 1 clayne None 20153 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_7E2F3B7D_OC.NIF

75b65040d2e5b68d5dc9f69f3141ff21 -rwxrwx---+ 1 clayne None 12827 Aug 9 20:04 PreCombined.ck.full/0000DDC2_84F09B23_OC.NIF
6a6a91944abbe4096f3699b0a56b7efc -rwxrwx---+ 1 clayne None 12699 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_84F09B23_OC.NIF

ead4b65fa742fc11726bd84741ef0702 -rwxrwx---+ 1 clayne None 17235 Aug 9 20:04 PreCombined.ck.full/0000DDC2_8971F8CA_OC.NIF
c65de0a707ac3752c09730349a828cd2 -rwxrwx---+ 1 clayne None 16979 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_8971F8CA_OC.NIF

d6c87d2db42cffb7ec028095842cd12c -rwxrwx---+ 1 clayne None 20072 Aug 9 20:04 PreCombined.ck.full/0000DDC2_9B92095F_OC.NIF
d1ec9e58cb140dcea35de0d0feea7254 -rwxrwx---+ 1 clayne None 19944 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_9B92095F_OC.NIF

61b437b792b598c453a87f3a0c472bff -rwxrwx---+ 1 clayne None 18345 Aug 9 20:04 PreCombined.ck.full/0000DDC2_A1987E4E_OC.NIF
49e51f9f2bf67739fe03ddda6b197593 -rwxrwx---+ 1 clayne None 18089 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_A1987E4E_OC.NIF

604aeb98e5d2f8ccc107d30658e64de1 -rwxrwx---+ 1 clayne None 244191 Aug 9 20:04 PreCombined.ck.full/0000DDC2_A776F5AC_OC.NIF
a62d2cb748f97a4d15e435fbca30e8e9 -rwxrwx---+ 1 clayne None 244063 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_A776F5AC_OC.NIF

1ced97dec8229c8dc6fcbd3cab3acf87 -rwxrwx---+ 1 clayne None 180062 Aug 9 20:04 PreCombined.ck.full/0000DDC2_AE1BB66E_OC.NIF
1ced97dec8229c8dc6fcbd3cab3acf87 -rwxrwx---+ 1 clayne None 180062 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_AE1BB66E_OC.NIF

d6b9b095a756001f659ed05522d6154f -rwxrwx---+ 1 clayne None 198321 Aug 9 20:04 PreCombined.ck.full/0000DDC2_B2B39DA3_OC.NIF
d6b9b095a756001f659ed05522d6154f -rwxrwx---+ 1 clayne None 198321 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_B2B39DA3_OC.NIF

bb5c0752f9164cf2e76a254458a01b09 -rwxrwx---+ 1 clayne None 50280 Aug 9 20:04 PreCombined.ck.full/0000DDC2_B2C3EAB5_OC.NIF
d2e3519eeadfdc711bae3a6c939650f9 -rwxrwx---+ 1 clayne None 50152 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_B2C3EAB5_OC.NIF

a51ee1394844edf5bb71287117a986e6 -rwxrwx---+ 1 clayne None 12048 Aug 9 20:04 PreCombined.ck.full/0000DDC2_BE2F3B7D_OC.NIF
a51ee1394844edf5bb71287117a986e6 -rwxrwx---+ 1 clayne None 12048 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_BE2F3B7D_OC.NIF

80eee991e59b6e208e40381793234f0a -rwxrwx---+ 1 clayne None 2554 Aug 9 20:04 PreCombined.ck.full/0000DDC2_FE2F3B7D_OC.NIF
80eee991e59b6e208e40381793234f0a -rwxrwx---+ 1 clayne None 2554 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_FE2F3B7D_OC.NIF

5b6153ce9254fab569132c09db9c6d48 -rwxrwx---+ 1 clayne None 60517 Aug 9 20:04 PreCombined.ck.full/0000DDC2_Physics.NIF
38d5925d29bd2c1d1dbb0aa89907a175 -rwxrwx---+ 1 clayne None 60357 Aug 9 19:58 PreCombined.generateprecombined.full/0000DDC2_Physics.NIF

I spot checked a few of the files with mismatching sums but same sizes and they appear to just be ordering differences of different blocks within the file. As far as the physics files go, from the surface level it's not like the sizes are terribly different and I see similar data patterns in the actual files so I have to presume the same ability to orient or produce the data is present in both methods but something is clearly acting differently here. I've uploaded these generated files to this location:

 

http://www.anodized.com/~clayne/fallout4/pcpv/

 

There's also a precombined NIF in there from an earlier generation which was isolated down to a single file that CTDs the game if placed in Meshes/Precombines.

 

Another experiment would be generating with the "clean" parameter, tossing the _Physics.nif of that generation run and instead using the archived _Physics.nif for CDX generation. In practice, this would only be useful for mods like Boston FPS Fix that don't change placed refs. But it might tell us something about how CDX and precombination interlock.

 

Heck one could actually use the CK generated _Physics.nif file as well and achieve the same effect (remember those ones don't throw havok related errors). There's still the instant CTD on savegame load issue with some of the non-Physics NIFs though. That seems like a more dire issue.

 

In addition, this was a surprisingly interesting read. Do you by chance write technical documentation for a living? If not you should consider it. ;-)

 

Thanks. I don't do technical writing specifically, but I've done enough profiling, debugging, and troubleshooting of convoluted situations in a professional capacity over the years to know what information is valuable and what isn't I guess. With these types of problems one also has to maintain a certain adherence to scientific method so as not to muddy the results as well.

 

BTW: That tip of the hat to stdio and sysctl in PIRAD's holotape didn't go unnoticed. :thumbsup:

Link to comment
Share on other sites

Try to regenerate with enabled Version Control, who knows. CK does some things differently when VC is enabled.

 

 

Tried that and didn't see any significant difference. Even all the generated NIFs were exactly the same size with bUseVersionControl=0 vs 1. Currently sanity checking loose files vs archives but I'm pretty sure I did that a while ago and it doesn't seem like it'd really make a difference.

Link to comment
Share on other sites

On my 8700k w/ 32GB of RAM I can generate precombines for all of Fallout4.esm in under 2 hours. Previs is probably around 5-6h, but I never made it that far after getting obsessed with the precombined NIF CTD issues. Unless you have 64GB of RAM a pagefile is highly recommended as CK shoots up to ~48GB virtual near the end of a precombine run (actual resident usage isn't even close to that).

 

Finally got around to doing this with CK UI generated precombines (still haven't resolved the other issue with -GeneratePrecombined ones). First and last lines of U3D output from -GeneratePreVisData:Fallout4.esm clean all:

[05:04:48] INFO: Umbra 3 Optimizer version 3.3.22  (build: 58bc48d2405823a0d92fca7d7a5dac9d02e0a94b)
[..]
[08:27:55] INFO: created tome with 1 tiles, 42 targets and 0 gates

So about 3.5 hrs, give or take, for around 1000 3x3 cells or 964 uvd files (not all cells produce output) on my box (w/ a little under 2h for the world precombines). This host has 32GB of RAM and whilst not all physical RAM ended up being used there were definite periods of near 100%. However that was just physical; don't underestimate the need for a significant pagefile as there's some kind of leak present (or something else going on) that really cranks up when the run gets to the interior cells. At peak usage CreationKit.exe was around 85GB commit size (i.e. virtual rather than resident) and if you don't have a large enough pagefile the run will simply crash about 80% of the way through. A 64-96GB pagefile should cover it depending on your RAM.

 

 

 

Getting the output to actually work in the game requires merging in the produced PreVis.esp to a master. In my case since I'm working with a copy of Fallout4.esm for experimental purposes, I simply merge it in via CreationKit.exe -checkinplugin:PreVis.esp Fallout4.esm in my dev directory. Also, don't try this with the all the generated precombines as loose files as CK has an internal 32k handle limit (you'll see the warnings) that will crap out the run about 25% of the way in.

Link to comment
Share on other sites

So, I am wondering if you are updating the Timestamp for the Precombine, and previs files you are generating with this process inside the plugin? The game will ignore any precombine and previs file if the timestamps don't match with the plugin. I might have missed where you explained that.

Link to comment
Share on other sites

So, I am wondering if you are updating the Timestamp for the Precombine, and previs files you are generating with this process inside the plugin? The game will ignore any precombine and previs file if the timestamps don't match with the plugin. I might have missed where you explained that.

 

 

The automated process handles that. Both the CombinedObjects.esp and PreVis.esp files produced by -GeneratePrecombined and -GeneratePreVisData include data updates for (PCMB, XCRI) and (VISI, XPRI, RVIS) respectively. In a nutshell, for the full-size non-shared precombines (the one CK produces now) the process looks like this with version control:

  1. CreationKit.exe -GeneratePrecombined:<esm> filtered all
  2. CreationKit.exe -CheckinPlugin:<CombinedObjects.esp> <esm>
  3. CreationKit.exe -GeneratePreVisData:<esm> filtered all
  4. CreationKit.exe -CheckinPlugin:<PreVis.esp> <esm>

 

When using the 'clean' or shared precombines (the ones that BGS generated):

  1. CreationKit.exe -GeneratePrecombined:<esm> clean all
  2. CreationKit.exe -CheckinPlugin:<CombinedObjects.esp> <esm>
  3. CreationKit.exe -CompressPSG:<esm>
  4. CreationKit.exe -BuildCDX:<esm>
  5. CreationKit.exe -GeneratePreVisData:<esm> clean all
  6. CreationKit.exe -CheckinPlugin:<PreVis.esp> <esm>

 

It's possible that in the 2nd form steps 3-4 can occur at the end, but I know -BuildCDX uses cell data and acts in concert with the <esm> - Geometry.csg (uncompressed: psg) file produced by the first step.

 

Note: There's an issue where -GeneratePrecombined with either clean or filtered options produces NIFs that aren't compatible with the game due to 32-bit Havok data being used. This is a major issue that's still unresolved but IMO solvable as CK already knows how to do the right thing from the UI. -GeneratePreVisData should be unaffected as it's basically a wrapper around BGSAutomatedProcess which calls the Umbra3d optimizer. The latter part is still beneficial as easily the most tedious part of working with this data is regenerating previs from within the CK UI. However, if you're working with a long list of specific cells (e.g. @chucksteel and BTI), then generating precombines from within the UI is also quite tedious. When you use the automated commands they look at cell data of the passed in esm or esp files and only process cells that contain statics - which is way less tedious then attempting to do the same thing for 50 cells in CK's UI (as there's no way to filter by plugin owner plus too much menu/mouse/human involvement).

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...