Jump to content

LOD Generation Troubleshooting


Recommended Posts

Blocks and SubBlocks are actual GRUP records stored in plugins, game uses them to quickly find temporary exterior cells when player travels around. Their numbers depend on cell's X,Y coordinates, actually cells are placed into those groups depending on their X,Y.

Blocks and SubBlocks numbers for a cell record are calculated this way, assuming (CellX, CellY) are the cell's coordinates stored in XCLC subrecord.

 

SubBlockX = (int) CellX / 8

if (CellX < 0) and ((CellX % 8 != 0) SubBlockX = SubBlockX - 1

 

BlockX = (int) SubBlockX / 4

if (SubBlockX < 0) and ((SubBlockX % 4) != 0) BlockX = BlockX - 1

 

The same for Y.

So each SubBlock holds a grid of 8x8 cells, and each Block 4x4 SubBlocks, or 32x32 cells.

This is a WastelandNV map with overlayed blocks, subblocks and cell coordinates of bottom left corner of each subblock to give you the overview. You can view it yourself in FNVEdit pressing Alt+F3 for any worldspace, including your own (just select opacity to overlay grid).

 

The only exception is a singe persistent CELL having 0,0 as coordinates which holds all persistent references of worldspace, it is a direct child of WRLD record and game loads all those references regardless the position of player, hence the name "persistent".

 

Interior cells use groups too under top CELL group, but they are determined differently. Cells can be only temporary, they hold both temporary and persistent references.

Hexadecimal FormID number of a CELL record is converted to the integer value excluding the leading byte which is load order and changes dynamically depending on the position of plugin. The last decimal number determines Block number, the previous one is SubBlock.

Lets take this cell as an example NovacMotelRoomTwin2 "Motel Room" [CELL:000CD3E1]

Hex value 0CD3E1 converted to integer is 840673, so the physical locaton of that cell inside a plugin file is FalloutNV.esm \ Cell \ Block 3 \ Sub-Block 7 \ 000CD3E1 <NovacMotelRoomTwin2> (as FNVEdit shows you).

 

You can read more about plugin file format, it is the same since Oblivion (except extra 4 bytes in record's header for Version Control information).

 

p.s. Don't know why I'm writing all of this, was kind of surprised seeing this "The block/Sub-Block format for grouping/displaying cells is just that - a display method. Those numbers don't actually exist in the plugin/Geck/Game" :cool: while they do actually physically exist, though GECK doesn't show them. It is only an internal search optimization method for the game.

Edited by zilav
Link to comment
Share on other sites

 

 

The same for Y.

So each SubBlock holds a grid of 8x8 cells, and each Block 4x4 SubBlocks, or 32x32 cells.

This is a WastelandNV map with overlayed blocks, subblocks and cell coordinates of bottom left corner of each subblock to give you the overview. You can view it yourself in FNVEdit pressing Alt+F3 for any worldspace, including your own (just select opacity to overlay grid).

 

 

 

I never knew FNVEdit had such an ability to see Worldspaces like this! I wish there was a guide I could find for all the various FNVEdit scripts.

However, when selecting my worldspace, I get an error "No LOD Level ## textures for worldspace." I'm guessing this means I need to generate the various terrain textures. Is that correct?

 

What confuses me is why when loading FalloutNV and OldWorldBlues, none of the worldspaces for vanilla of Old World Blues shows up as selectable. Any ideas there?

 

I know that there was a specific method in generating those textures using FNVLODGen, but I could not figure out the correct path to install the files for the life of me. Every variant I try is rejected instantly.

 

BTW Ricker, would it help use only a limited amount of terrain textures? I may have gone a little nuts with the different textures and when I first started this I had a bad habit of "redoing" and area with certain levels of opacity to the point where I had to start deleting textures from the various quads because they were at 0.869%. I remember you or another person showed me an extremely effective way to isolate those quickly and easily when trying to remove master dependancies.

Edited by ManehattanProject
Link to comment
Share on other sites

I highly recommend u go with Oscape to generate LOD

 

I'm having trouble finding a location that has instructions on how to do with New Vegas. In fact, what I'm finding is saying it doesn't normally work. I must be overlooking something. Can you point me in the right direction?

Link to comment
Share on other sites

OldWorldBlues works fine for me, NVDLC03BigMT worldspace. You can right click on a map to quickly navigate to cells instead of browsing blocks and subblocks.

Map is drawn out of landscape LOD images, so landscape LOD must be present together with dlodsettings file for a worldspace. For OldWorldBlues those files are in OldWorldBlues - Main.bsa archive, so you must load OldWorldBlues.esm in FNVEdit so it can also load associated archives. Keep in mind that MO prevents loading BSA archives for FNVEdit if you have "Manage BSA" option in it turned on.

This is actually not a built-in function of xEdit, but external "Worldspace Browser" script hotkeyed to Alt+F3, you can run it using "Apply Script" right click menu too. There are other hotkeyed scripts available like Assets Browser Ctrl+F3 (quick search and preview for files in Data folder and BSA archives, BSA unpacking), bookmarking Ctrl+1..5 restore Alt+1..5 and others.

 

As far as I know, OScape doesn't support Fallouts. So you are probably stuck with dead slow GECK for landscape LOD generation.

Link to comment
Share on other sites

OldWorldBlues works fine for me, NVDLC03BigMT worldspace. You can right click on a map to quickly navigate to cells instead of browsing blocks and subblocks.

Map is drawn out of landscape LOD images, so landscape LOD must be present together with dlodsettings file for a worldspace. For OldWorldBlues those files are in OldWorldBlues - Main.bsa archive, so you must load OldWorldBlues.esm in FNVEdit so it can also load associated archives. Keep in mind that MO prevents loading BSA archives for FNVEdit if you have "Manage BSA" option in it turned on.

This is actually not a built-in function of xEdit, but external "Worldspace Browser" script hotkeyed to Alt+F3, you can run it using "Apply Script" right click menu too. There are other hotkeyed scripts available like Assets Browser Ctrl+F3 (quick search and preview for files in Data folder and BSA archives, BSA unpacking), bookmarking Ctrl+1..5 restore Alt+1..5 and others.

 

As far as I know, OScape doesn't support Fallouts. So you are probably stuck with dead slow GECK for landscape LOD generation.

 

Okay. Thank you, you pointed me in the right direction for at least getting Big MT to show up as proof-of-concept. What I was missing was two things: using FOMM instead of MO and not extracting the OldWorldBlues .BSA (I figured out the second one first.) I've now switched to MO for running the various programs.
So now I'm running into a new problem I cannot figure out for the life of me. It feels like every time I make one step forward, I run into another wall that ends up with me smashing my head against it until I knock myself out.
I'm still getting the errors about "No LOD level 4 Textures for worldspace." This occurs no matter what "level" I select. (I don't even know what level this is talking about). I'm leaving the rest at the default settings, which is what worked for Old World Blues.
I've run the Terrain Meshes LOD generation. I've run the Generate Terrain Textures. (Both through GECK and both were successful, though when I looked in-game, the textures for the distant hills still looked like a mottled purple) Objects is giving me nightmares.
If I attempt to do it through the GECK, I get an error about "Urban BuildsingsLOD.tga" & the normal map for it and it won't proceed any further.
NVLODGen is driving me nuts though (Which is what I think you mean by landscape LOD). I have checked for the dlodsettings file, which does indeed exist for the worldspace and it looks pretty similar to the Old World Blues version. I've also been sure to install the extra package that has the actual resources.
I have used the command line argument to send the files being created to a specific folder outside of the New Vegas file structure. It creates two textures: AAAGoEAppleloosaValleyVB300ObjectsLOD.dds & AAAGoEAppleloosaValleyVB300ObjectsLOD_n.dds before giving the following error. Nothing appears in the Meshes folder aside from empty folders.
And then I get a massive error log. I've looked up the error code and it sent me back to some of the comments you made about similar things, but the argument workarounds you suggested in the past aren't solving the issue.
I constantly feel just inches away from finally solving this problem. If I could actually see the landscape in that form you showed, I'm sure I'd be able to get the rest of the issues fixed.
Oh and one other thing. How critical is the "MNAM Map Data?" When I first loaded it in FNVEdit, all the values there were 0. I manually tweaked them to 1024 x 1024 and copy/pasted the X, Y values below from BigMT (Again, just to test). However, the icon is still blank. I'd prefer to create the map from Worldspace Browser Map...once I get that working.
Here's the entire worldspace summary, as I'm sure I've messed up something that's obvious to someone with as much experience as you or anyone else here.
The error log I've put in the spoiler below the image.
Thank you again for taking the time to help with this. Sadly, for our entire team, I'm the only level designer and I'm still not comfortable with the GECK. But at this point, the only way we can do what we need to do in GoE to have a separate worldspace. I would really like to not start all over and create a new once from scratch.
Thanks yet again.
-Novel
screenshot-2015-08-04-15-58-58.png

[AAAGoEAppleloosaValleyVB300] Generating LOD

[AAAGoEAppleloosaValleyVB300] Building LOD textures atlas: G:\Steam\SteamApps\common\Fallout New Vegas\Data\textures\landscape\lod\AAAGoEAppleloosaValleyVB300\Blocks\AAAGoEAppleloosaValleyVB300ObjectsLOD.dds

[AAAGoEAppleloosaValleyVB300] Saving LODGen data: G:\Steam\SteamApps\common\Fallout New Vegas\Edit Scripts\LODGen.txt

[AAAGoEAppleloosaValleyVB300] Running G:\Steam\SteamApps\common\Fallout New Vegas\Edit Scripts\LODGen.exe "G:\Steam\SteamApps\common\Fallout New Vegas\Edit Scripts\LODGen.txt" --dontFixTangents --removeUnseenFaces --dontGenerateVertexColors

Skyrim Object LOD Generator v0.6

Created by Ehamloptiran and Zilav

Updated by Sheson

 

Log started at 2:39 PM

Fix tangents: True

Generate tangents: True

Generate Vertex Colors: False

Merge meshes: True

Remove Faces under Terrain: True

Remove Faces under Water: True

Use HD LOD: False

Ignore Materials: False

Global scale: 1.00

Specific level: No

Specific quad: No

the file: G:\Steam\SteamApps\common\Fallout New Vegas\Edit Scripts\LODGenAtlasMap.txt

Using UV Atlas: G:\Steam\SteamApps\common\Fallout New Vegas\Edit Scripts\LODGenAtlasMap.txt

Output: G:\Steam\SteamApps\common\Fallout New Vegas\Data\meshes\landscape\lod\AAAGoEAppleloosaValleyVB300\Blocks

Generating LOD for worldspace AAAGoEAppleloosaValleyVB300

 

Unhandled Exception: System.IO.EndOfStreamException: Unable to read beyond the end of the stream.

at System.IO.MemoryStream.InternalReadInt32()

at System.IO.BinaryReader.ReadInt32()

at LODGenerator.NifMain.NiNode.Read(NiHeader header, BinaryReader reader)

at LODGenerator.NifMain.BSFadeNode.Read(NiHeader header, BinaryReader reader)

at LODGenerator.NiFile.Read(String skyrimDir, String fileName, LogFile logFile)

at LODGenerator.LODApp.<>c__DisplayClass4.b__2(Object state)

at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

at System.Threading.ThreadHelper.ThreadStart(Object obj)

Unhandled Exception: System.IO.EndOfStreamException: Unable to read beyond the end of the stream.

at System.IO.MemoryStream.InternalReadInt32()

at System.IO.BinaryReader.ReadInt32()

at LODGenerator.NifMain.NiNode.Read(NiHeader header, BinaryReader reader)

at LODGenerator.NifMain.BSFadeNode.Read(NiHeader header, BinaryReader reader)

at LODGenerator.NiFile.Read(String skyrimDir, String fileName, LogFile logFile)

at LODGenerator.LODApp.<>c__DisplayClass4.b__2(Object state)

at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

at System.Threading.ThreadHelper.ThreadStart(Object obj)

Unhandled Exception:

Unhandled Exception: System.IO.EndOfStreamException: Unable to read beyond the end of the stream.

at System.IO.MemoryStream.InternalReadInt32()

at System.IO.BinaryReader.ReadInt32()

at LODGenerator.NifMain.NiNode.Read(NiHeader header, BinaryReader reader)

at LODGenerator.NifMain.BSFadeNode.Read(NiHeader header, BinaryReader reader)

at LODGenerator.NiFile.Read(String skyrimDir, String fileName, LogFile logFile)

at LODGenerator.LODApp.<>c__DisplayClass4.b__2(Object state)

at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

at System.Threading.ThreadHelper.ThreadStart(Object obj)System.IO.EndOfStreamException: Unable to read beyond the end of the stream.

at System.IO.MemoryStream.InternalReadInt32()

at System.IO.BinaryReader.ReadInt32()

at LODGenerator.NifMain.NiNode.Read(NiHeader header, BinaryReader reader)

at LODGenerator.NifMain.BSFadeNode.Read(NiHeader header, BinaryReader reader)

at LODGenerator.NiFile.Read(String skyrimDir, String fileName, LogFile logFile)

at LODGenerator.LODApp.<>c__DisplayClass4.b__2(Object state)

at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

at System.Threading.ThreadHelper.ThreadStart(Object obj)

 

 

Unhandled Exception:

Unhandled Exception: System.IO.EndOfStreamException: Unable to read beyond the end of the stream.

at System.IO.MemoryStream.InternalReadInt32()

at System.IO.BinaryReader.ReadInt32()

at LODGenerator.NifMain.NiNode.Read(NiHeader header, Bina

ryReader reader)

at LODGenerator.NifMain.BSFadeNode.Read(NiHeader header, BinaryReader reader)

at LODGenerator.NiFile.Read(String skyrimDir, String fileName, LogFile logFile)

at LODGenerator.LODApp.<>c__DisplayClass4.b__2(Object state)

at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

at System.Threading.ThreadHelper.ThreadStart(Object obj)

[AAAGoEAppleloosaValleyVB300] Objects LOD generation error: LODGen process error, exit code -532462766

LOD Generator: finished (you can close this application now)

 

Link to comment
Share on other sites

Missing LOD level 4 textures and other errors mean that something wrong happened during landscape LOD generation in GECK. Hard to tell really without looking at the worldspace in GECK and FNVEdit,

 

Well, to follow up with my own troubleshooting, I decided to go into the heightmap by hand and make nice wavy hills throughout the four quadrants. I verified that I had 16x16 subblocks in each quadrant and then attempted to generate the LOD again. It worked perfectly and took substantially less time. (I remember now a comment that wavy landscapes generate faster than flat for some reason) I also figured out my texture problem...I forgot to move the darn files to the correct location.

 

In regard to Object LOD Generation, I suspect what my issue is now is that I'm using exterior elements from Old World Blues which aren't in the FNVLOD Resource files, so the machine is throwing a fit because it's looking for stuff that isn't there. From what I can tell, I'll need to do these the old fashioned way of converting the .DDS to .TGA files and then, maybe, just maybe, it will generate.

 

There's only one issue that I don't understand. The new LOD seems to work perfectly. There aren't any strange square gaps in the water...however when I approach the water, it vanishes. It's like it's generating ONLY the LOD Water, not the

 

Here's a screenshot of what I'm getting:

 

2015-08-04_00001.jpg

 

 

What's even stranger is I have a couple small pools near a set of railroad tracks. They only show a SLIVER of water...

 

2015-08-04_00003.jpg

 

 

Any ideas?

Link to comment
Share on other sites

Don;t know about pools, but FNVLODGen can use any lod resources at long as they are loaded properly, no need to go old fashioned crappy tga route.

Since those lod meshes are from Old World Blues, make sure it's ESM is loaded when generating lod, then FNVLODGen will load associated BSA file and will be able to locate meshes.

If you use MO, then switch off BSA management there and make sure that vanilla archives are properly listed in the game ini file because MO screws that too.

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...