Jump to content

DynDOLOD 3.00 Alpha 180


sheson

Recommended Posts

25 minutes ago, heheloveer said:

Quick question: what do fMeshLODFadeBoundDefault and fMeshLODFadePercentDefault actually do? Is there any merit in adjusting them? All the information I could find comes from https://stepmodifications.org/wiki/Guide:SkyrimPrefs_INI/Display and the page doesn't really tell us much.

All fMeshLOD* settings apply to full models. Typically they control fade behavior of BSLODTriShape (and maybe others) blocks

  • Thanks 1
Link to comment
Share on other sites

28 minutes ago, godescalcus said:

Thanks. For trunks, I "painstakingly" removed crowns from each tree full model individually, before rendering. Considering the trunks are only meant to be used to render billboards, I didn't do any further tweaks there.

For crowns, I deleted every branch pertaining to the trunk. Then I've been able to use Sniff to 

- convert root node from BSFLeafAnimNode to BSFadeNode

- remove node BSXFlags

- remove unused nodes (for good measure - no changes resulted from this step)

Still trying to find a quick way to automatically remove all rigging/skinning in meshes that may have them, without going through them 1 by 1.

BSFadeNode does seem to have a scale that is not 1.0 - and in some models, child nodes also. Do I need to manually scale the mesh (somehow), or is it enough to set the scale to 1 in all nodes? And perhaps I should have done this to the full mesh before splitting it into crown and trunk, to save having to edit double the amount of meshes?

Regarding optimization, it seems important in this case since some crowns have over 10000 triangles, but maybe I should tackle one problem at a time... I understand that vertex manipulation requires a full fledged 3d app. Maybe it's time to start with Blender?

 

You only would need change the scale of the root BSFadeNode to 1 and typically leave other transformation alone unless you flatten the hierarchy.

For example if there are NiNode with transformation in the full model and you end up with copying a BSTriShape out of it directly under the root BSFadeNode, the NiNode transformation should be applied to the BSTriShape first. As I just mentioned in the other post, in NifSkope, right click, Transformation, Apply.

While I typically would suggest to address these things in full models to make things easier for everybody, such changes should only be done by the original tree mod, since it will change the CRC32 of the full model...

Link to comment
Share on other sites

5 minutes ago, sheson said:

You only would need change the scale of the root BSFadeNode to 1 and typically leave other transformation alone unless you flatten the hierarchy.

Would it harm if I had already set the scale in the child nodes to 1 as well? Here's a sample of my crowns and trunks https://ufile.io/f/rd2uo would further tweaking be necessary - other than optimisation of the absurdly high number of vertices in the case of crowns?

Link to comment
Share on other sites

37 minutes ago, sheson said:

What I mean is the separated crown into its own input NIF for LODGen is not used by TexGen in this process. https://dyndolod.info/Help/3D-Tree-LOD-Model#Crowns-Leaves-and-Branches
The trunk billboard texture/text is rendered by TexGen from the separated trunk NIF. https://dyndolod.info/Help/3D-Tree-LOD-Model#Trunks
LODGen then combines the two for the 3D tree LOD model. https://dyndolod.info/Help/3D-Tree-LOD-Model

Translation from NiNodes can be applied to child blocks and then also to vertices from The NiTriShape/BSTriShape in NifSkope with a right click, Transform, Apply.
That would be similar to the "Zero Transforms" from the 3DSMax NIF import/export plugin.

That's a real time saver, and I never discovered or tried it. Will do so next time.

54 minutes ago, godescalcus said:

Thanks. For trunks, I "painstakingly" removed crowns from each tree full model individually, before rendering. Considering the trunks are only meant to be used to render billboards, I didn't do any further tweaks there.

For crowns, I deleted every branch pertaining to the trunk. Then I've been able to use Sniff to 

- convert root node from BSFLeafAnimNode to BSFadeNode

- remove node BSXFlags

- remove unused nodes (for good measure - no changes resulted from this step)

Still trying to find a quick way to automatically remove all rigging/skinning in meshes that may have them, without going through them 1 by 1.

BSFadeNode does seem to have a scale that is not 1.0 - and in some models, child nodes also. Do I need to manually scale the mesh (somehow), or is it enough to set the scale to 1 in all nodes? And perhaps I should have done this to the full mesh before splitting it into crown and trunk, to save having to edit double the amount of meshes?

Regarding optimization, it seems important in this case since some crowns have over 10000 triangles, but maybe I should tackle one problem at a time... I understand that vertex manipulation requires a full fledged 3d app. Maybe it's time to start with Blender?

 

I also use Sniff for this work. Note that you don't need to alter the root node: BsLeafAnimNode is fine, for example.

Just ignore nodes with skinning. There is always a non-skinned corresponding node you can use (but sometimes the skinning node has info that I want on the unskinned node, but I'm not sure how to add it to the corresponding node).

As sheson mentioned just previous, I now use Sniff to set root node scaling to 1.0 after separating the crown.

So based on what he said above, my new workflow will be:

  1. Get all relevant tree CRC values into the file names using DynDOLOD_CRC32Gen.pas
    1. This yields the "WIP LOD Crown NIFs" and helps to sort out NIFs under meshes/landscape/trees/ that don't have LOD in addition to adding the CRC32
  2. Use Sniff to set all root node scales to 1.0 (I've only seen this issue on about 5 of hundreds/thousands? of trees I've done)
  3. Use this principle: "Translation from NiNodes can be applied to child blocks and then also to vertices from The NiTriShape/BSTriShape in NifSkope with a right click, Transform, Apply" on all WIP files.
    1. Maybe Sniff can help, IDK
  4. Copy these to 'trunks' folder under \DynDOLOD\Render\Billboards\DynDOLOD\lod\trees\ in the WIP tree LOD mod and strip them down to just the trunks
    1. Might be able to simply remove the crowns only, since they are rendered, but full stripping reduces file sizes a tad.
    2. Sniff helps
  5. Strip all but crowns in the crowns WIP
    1. Sniff helps
  6. Optimize the crowns using SSE NIF Optimizer
  7. Manually optimize crowns larger than ~500 Kb using a 3D app
    1. # triangles is a better cutoff reference (≥ 15,000 tris), but file size seems to be a good-enough indicator.
  8. Run TexGen Render mode
  9. Construct hybrids using hybrid.bat/txt

I will also experiment with "Flatten Hierarchy" for skinned trees or those having nesting. Maybe Sniff can help.

Question: I always convert BSLODTriShape to BsTrishape in the full model before making hybrids. Is this advised or even necessary?

Link to comment
Share on other sites

14 minutes ago, z929669 said:

I also use Sniff for this work. Note that you don't need to alter the root node: BsLeafAnimNode is fine, for example.

 

I think we agree that Sniff is a jewel, and zilav is a scholar :P I'm feeling like starting from scratch and trying out your workflow, because even with Sniff, processing crowns and trunks separately as I did on my "learn as you go" process "might" lead to unexpected results...

Link to comment
Share on other sites

https://imgur.com/a/CFRsXq8 this is from my test modlist, not the problem right now but im on the way to another modlist, i think this is because i didn't know how to tweak the snowdrift settings in dyndolod settings but i could be wrong, because in my old modlist(2022), i can click the snowdrift to remove it since the place i only have that problem is in immersive fort dawnguard, i have since remove IFD temporarily since i don't know how to tweak the snowdrift. and secondly, how do i tweak the LODGenThreadSplit? i want generating to be fast but i don't want my pc freezing when generating dyndolod, i have it now at 3 and its not freezing but not really fast either, i have a big load order so i wanna keep testing first before i start playing. my specs are r5 3600, 3070 16gb and playing at 1080p. thanks

Link to comment
Share on other sites

2 hours ago, z929669 said:
  1. Manually optimize crowns larger than ~500 Kb using a 3D app
    1. # triangles is a better cutoff reference (≥ 15,000 tris), but file size seems to be a good-enough indicator.

This is my attempt at reducing file size (and polygon count) in Blender. Brings it down from 22000 triangles to 8000, and I reckon it shows the difference. I didn't remove triangles, instead applied the decimate modifier twice, first pass unsubdividing triangles, second pass uniting triangles with a common side and angle under 15º. Probably the second step is the destructive one? Anyways, would you say the edited crown would be acceptable for a lod? What would you consider to be the optimal compromise between limiting pop-ins, and performance?

File size is still over 500Mb but since the polygon count was so drastically reduced by almost 2/3, I'm willing to suggest it's a good compromise - but I can also use this as a rule for now, check in game, and adjust...

NECEhQ6.png

Link to comment
Share on other sites

4 minutes ago, godescalcus said:

This is my attempt at reducing file size (and polygon count) in Blender. Brings it down from 22000 triangles to 8000, and I reckon it shows the difference. I didn't remove triangles, instead applied the decimate modifier twice, first pass unsubdividing triangles, second pass uniting triangles with a common side and angle under 15º. Probably the second step is the destructive one? Anyways, would you say the edited crown would be acceptable for a lod? What would you consider to be the optimal compromise between limiting pop-ins, and performance?

File size is still over 500Mb but since the polygon count was so drastically reduced by almost 2/3, I'm willing to suggest it's a good compromise - but I can also use this as a rule for now, check in game, and adjust...

NECEhQ6.png

That should be fine for LOD. Just check in game to verify. Both are more/less destructive, but that is the point.

You can also look at the UV map and delete tris not used commonly or if associated with inner branches. You can also delete the polys that may not show much like those lower ones near the trunk or anything underground, etc.

Link to comment
Share on other sites

2 hours ago, z929669 said:

Question: I always convert BSLODTriShape to BsTrishape in the full model before making hybrids. Is this advised or even necessary?

The tools will always use all triangles of a BSLODTriShape. Converting them does the same and makes it clear for whoever might look at the NIF.

Link to comment
Share on other sites

2 hours ago, zer0haiku2077 said:

https://imgur.com/a/CFRsXq8 this is from my test modlist, not the problem right now but im on the way to another modlist, i think this is because i didn't know how to tweak the snowdrift settings in dyndolod settings but i could be wrong, because in my old modlist(2022), i can click the snowdrift to remove it since the place i only have that problem is in immersive fort dawnguard, i have since remove IFD temporarily since i don't know how to tweak the snowdrift. and secondly, how do i tweak the LODGenThreadSplit? i want generating to be fast but i don't want my pc freezing when generating dyndolod, i have it now at 3 and its not freezing but not really fast either, i have a big load order so i wanna keep testing first before i start playing. my specs are r5 3600, 3070 16gb and playing at 1080p. thanks

Read the first post which log and debug log to upload when making posts. https://dyndolod.info/Official-DynDOLOD-Support-Forum#Post-Logs

Read https://dyndolod.info/Official-DynDOLOD-Support-Forum#In-Game-Screenshots how to make meaningful screenshots.

Read the explanations in the INI above the LODGenThreadSplit setting. You will have to experiment with settings yourself to see what works best in your case while keeping an eye on max memory consumption of LODGen to make sure everything currently running doesn't consume all available physical memory.

Link to comment
Share on other sites

I'm failing to get DynDOLOD_CRC32Gen.pas to work.

I copied it to xEdit\Edit scripts, open the mod in xEdit and run the script on its tree base records. Set the origin and output folders as such:

const
  source = 'H:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\meshes\';
  output = 'C:\modding_tools\DynDOLOD\docs\trees.ultra\tools\hybrids\input\ulvenwald\';

(on a previous run I set the source to 'C:\modding_tools\DynDOLOD\docs\trees.ultra\tools\hybrids\input\ulvenwald_origin\' - which is a folder where I copied the entire set of tree meshes contained in the mod).

Clearly this isn't how it's used, but I'm guessing since I can't find instructions anywhere. Searched this forum, googled, looked into documentation for the older DynDOLOD, seems like if there were instructions, they're gone now? Last night I spent 4 hours using 7zip to get the CRC32, then manually add it to hundreds of filenames, it would be great to avoid having to do that again...

Also found re-uv.bat and merge.bat that could help make it quicker to process the original mesh into a static mesh, before further processing and splitting - but also can't find instructions on how to use them. Are these in older DynDOLOD files that have not been included in the most recent versions? Any way to reach?

Link to comment
Share on other sites

1 hour ago, godescalcus said:

I'm failing to get DynDOLOD_CRC32Gen.pas to work.

I copied it to xEdit\Edit scripts, open the mod in xEdit and run the script on its tree base records. Set the origin and output folders as such:

const
  source = 'H:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\meshes\';
  output = 'C:\modding_tools\DynDOLOD\docs\trees.ultra\tools\hybrids\input\ulvenwald\';

(on a previous run I set the source to 'C:\modding_tools\DynDOLOD\docs\trees.ultra\tools\hybrids\input\ulvenwald_origin\' - which is a folder where I copied the entire set of tree meshes contained in the mod).

Clearly this isn't how it's used, but I'm guessing since I can't find instructions anywhere. Searched this forum, googled, looked into documentation for the older DynDOLOD, seems like if there were instructions, they're gone now? Last night I spent 4 hours using 7zip to get the CRC32, then manually add it to hundreds of filenames, it would be great to avoid having to do that again...

Also found re-uv.bat and merge.bat that could help make it quicker to process the original mesh into a static mesh, before further processing and splitting - but also can't find instructions on how to use them. Are these in older DynDOLOD files that have not been included in the most recent versions? Any way to reach?

This is how I set it up. I just use the folder structure expected by the script and run xEdit via MO. The output will be a meshes folder in the xEdit Output adjacent to DynDOLOD-Source.

image.png

Right click the Tree node in xEdit for each relevant plugin, and the renamed tree NIF will all be generated. If your tree mod replaces vanilla trees and those trees don't have references in the mod plugin, you need to be certain full tree meshes from your mod exist under DynDOLOD-Source folder "as-is" but renamed like "TreeFile01_passthru_lod.nif" and you will need to also run this on the vanilla Tree nodes for each vanilla plugin (Skyrim, Hearthfires, Dawnguard, Dragonborn, TreeModPlugin ... all of them to be sure).

When finished, all trees with LOD from your mod will have the CRC32 under the meshes output folder. These are the only ones that need to be made into hybrids, and the file names are accurate. Be certain all of the base models are 'final' before you do it or the CRC will be wrong later after edit of the base NIFs.

Link to comment
Share on other sites

Got an Assertion Failure message in Alpha-127.


Assertion failure (C:\Delphi\Projects\DynDOLOD3\Core\wbImplementation.pas, line 17505) while processing Glenmoril.esm [REFR:1C00DE69] (places NorTempleExterior01Base [STAT:00026FDE] in GRUP Cell Temporary Children of GHKyneTemple02 [CELL:1C00DE64] (in zGHWitchForestWorld "Vahdin Holt" [WRLD:1C00DE4D] at 0,2))
Error: Assertion failure (C:\Delphi\Projects\DynDOLOD3\Core\wbImplementation.pas, line 17505) while processing Glenmoril.esm [REFR:1C00DE69] (places NorTempleExterior01Base [STAT:00026FDE] in GRUP Cell Temporary Children of GHKyneTemple02 [CELL:1C00DE64] (in zGHWitchForestWorld "Vahdin Holt" [WRLD:1C00DE4D] at 0,2))
User says "Exit DynDOLOD"

 

log and bugreport attached.


Debug log (it's big): https://mega.nz/file/F1NChSxb#HZkBC1X-UVLWwNiNBgEgMhH5aG8wAZ0CbKi8ezQqesA

 

 

I also found the following in my Event Log:

Description: A .NET application failed.
Application: LODGenx64Win.exe
Path: E:\Dyndolod\Edit Scripts\LODGenx64Win.exe
Message: You must install or update .NET to run this application.

App: E:\Dyndolod\Edit Scripts\LODGenx64Win.exe
Architecture: x64
Framework: 'Microsoft.NETCore.App', version '6.0.0' (x64)
.NET location: C:\Program Files\dotnet\

The following frameworks were found:
  7.0.4 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]


If this is the same issue, does that mean LodGen doesn't work with .Net 7? I always thought .Net 6 onward was backward compatible (actually doesn't installing 7 remove 6?) but if not I'll roll back to .net 6 and try again. (I'm certain I've used DynDoLod/LodGen with .Net 7 before with no issues though, as recently as two months ago, which is odd. Maybe the two errors are unrelated?)

bugreport.txt DynDOLOD_SSE_log.txt

Edited by DarthVitrial
Link to comment
Share on other sites

7 hours ago, godescalcus said:

I'm failing to get DynDOLOD_CRC32Gen.pas to work.

I copied it to xEdit\Edit scripts, open the mod in xEdit and run the script on its tree base records. Set the origin and output folders as such:

const
  source = 'H:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\meshes\';
  output = 'C:\modding_tools\DynDOLOD\docs\trees.ultra\tools\hybrids\input\ulvenwald\';

(on a previous run I set the source to 'C:\modding_tools\DynDOLOD\docs\trees.ultra\tools\hybrids\input\ulvenwald_origin\' - which is a folder where I copied the entire set of tree meshes contained in the mod).

Clearly this isn't how it's used, but I'm guessing since I can't find instructions anywhere. Searched this forum, googled, looked into documentation for the older DynDOLOD, seems like if there were instructions, they're gone now? Last night I spent 4 hours using 7zip to get the CRC32, then manually add it to hundreds of filenames, it would be great to avoid having to do that again...

Also found re-uv.bat and merge.bat that could help make it quicker to process the original mesh into a static mesh, before further processing and splitting - but also can't find instructions on how to use them. Are these in older DynDOLOD files that have not been included in the most recent versions? Any way to reach?

You can find instructions for DynDOLOD_CRC32Gen.pas in the DynDOLOD 2 download archive ..\DynDOLOD\Docs\trees.ultra\tools\DynDOLOD_CreateStaticTree.html

To make creating CRC32 filenames easier, copy DynDOLOD_CRC32Gen.pas to xEdit\Edit Scripts and use it to generate the LOD filename for a full model tree. It expects a *_passthru_lod.nif in ..\SteamLibrary\SteamApps\common\skyrim\Data\DynDOLOD-Source\*_passthru_lod.nif and will copy it to -o:OUTPUT Path + \meshes\DynDOLOD\lod\trees\*_XXXXXXXXpassthru_lod.nif.

Start xEdit.exe, unfold TREEs, mark trees you want to work on and then apply script DynDOLOD_CRC32Gen.pas. It will either log source file not found for a desitnation or print a line when it copies from source -> destination. If copying files is not required just copy the CRC32 filename from the log to rename a file manually.

I suggest to use 3D tools / Simplygon to re-uv for stitched object LOD textures created by TexGen. 

As usual, with xEdit/xLODGen/DynDOLOD or any other tool, always set a dedicated outputput folder outside Steam, game, mod manager folders etc. Otherwise there will be issues with existing files being replaced in their mod folder or potentially file access issues.

Link to comment
Share on other sites

2 hours ago, DarthVitrial said:

Got an Assertion Failure message in Alpha-127.


Assertion failure (C:\Delphi\Projects\DynDOLOD3\Core\wbImplementation.pas, line 17505) while processing Glenmoril.esm [REFR:1C00DE69] (places NorTempleExterior01Base [STAT:00026FDE] in GRUP Cell Temporary Children of GHKyneTemple02 [CELL:1C00DE64] (in zGHWitchForestWorld "Vahdin Holt" [WRLD:1C00DE4D] at 0,2))
Error: Assertion failure (C:\Delphi\Projects\DynDOLOD3\Core\wbImplementation.pas, line 17505) while processing Glenmoril.esm [REFR:1C00DE69] (places NorTempleExterior01Base [STAT:00026FDE] in GRUP Cell Temporary Children of GHKyneTemple02 [CELL:1C00DE64] (in zGHWitchForestWorld "Vahdin Holt" [WRLD:1C00DE4D] at 0,2))
User says "Exit DynDOLOD"

 

log and bugreport attached.


Debug log (it's big): https://mega.nz/file/F1NChSxb#HZkBC1X-UVLWwNiNBgEgMhH5aG8wAZ0CbKi8ezQqesA

 

 

I also found the following in my Event Log:

Description: A .NET application failed.
Application: LODGenx64Win.exe
Path: E:\Dyndolod\Edit Scripts\LODGenx64Win.exe
Message: You must install or update .NET to run this application.

App: E:\Dyndolod\Edit Scripts\LODGenx64Win.exe
Architecture: x64
Framework: 'Microsoft.NETCore.App', version '6.0.0' (x64)
.NET location: C:\Program Files\dotnet\

The following frameworks were found:
  7.0.4 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]


If this is the same issue, does that mean LodGen doesn't work with .Net 7? I always thought .Net 6 onward was backward compatible (actually doesn't installing 7 remove 6?) but if not I'll roll back to .net 6 and try again. (I'm certain I've used DynDoLod/LodGen with .Net 7 before with no issues though, as recently as two months ago, which is odd. Maybe the two errors are unrelated?)

bugreport.txt 302.72 kB · 0 downloads DynDOLOD_SSE_log.txt 383.65 kB · 0 downloads

I take it the assertion is not repeatable?

The x64 version of .NET Runtime 7 works for me (it is also included in the .NET Desktop Runtime)

Link to comment
Share on other sites

Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

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