Jump to content

DynDOLOD 3.00 Alpha 182


sheson

Recommended Posts

55 minutes ago, heheloveer said:

https://www.nexusmods.com/skyrimspecialedition/mods/25577

Stumbled upon this mod while trying to write a new LOD generation guide for Chinese players. There's no need to use this mod if Large Reference Bugs Workarounds are applied, right?

https://dyndolod.info/Help/Large-References#Large-Reference-Bugs
Watch the video. That is the bug caused by initial disabled large reference.

A large reference or its enable parent that has the Initially Disabled flag can trigger the bugs. The type of plugin does not matter. It is the cause for the example shown in the video above - the problematic large reference is defined in Skyrim.esm. DynDOLOD can create workarounds for some occurrences, including the vanilla one shown in the video. For all others, a warning message Initially disabled large reference is written to the message log.

This particular bug has been addressed by DynDOLOD since years by making a non large reference copy and hiding the large reference underground. With the the large reference bugs workarounds enabled, it is fixed keeping the actual large reference.

  • Thanks 1
Link to comment
Share on other sites

35 minutes ago, sheson said:

https://dyndolod.info/Help/Large-References#Large-Reference-Bugs
Watch the video. That is the bug caused by initial disabled large reference.

A large reference or its enable parent that has the Initially Disabled flag can trigger the bugs. The type of plugin does not matter. It is the cause for the example shown in the video above - the problematic large reference is defined in Skyrim.esm. DynDOLOD can create workarounds for some occurrences, including the vanilla one shown in the video. For all others, a warning message Initially disabled large reference is written to the message log.

This particular bug has been addressed by DynDOLOD since years by making a non large reference copy and hiding the large reference underground. With the the large reference bugs workarounds enabled, it is fixed keeping the actual large reference.

Ah yes, that makes sense. I knew the mod was trying to address a large reference bug since I saw that video on your website, even though the author seemed to have no idea how the bug came to be exactly. They said in the description that the mod should only be useful for users with a heavily modded game so I automatically assumed this was a overwritten-by-esp type of bug.

Honestly, I think large reference bugs should really get more attention. They can cause some really noticeable visual glitches and the workaround is IMO one of the most important features added by DynDOLOD 3 to date. Hopefully after it gets out of the experimental phase people will have a better understanding of this particular problem and realize its importance.

Edited by heheloveer
Link to comment
Share on other sites

What's the default fallback for LOD4 when you set the rules to level0, for trees where there is no passthru model installed? Is there a way to force LOD4 to fallback to either 4x2 billboards, or even a full tree model, when the preferred rule is not possible due to non-existing assets?

Edited by godescalcus
Link to comment
Share on other sites

25 minutes ago, godescalcus said:

What's the default fallback for LOD4 when you set the rules to level0, for trees where there is no passthru model installed? Is there a way to force LOD4 to fallback to either 4x2 billboards, or even a full tree model, when the preferred rule is not possible due to non-existing assets?

https://dyndolod.info/Help/Ultra-Tree-LOD#Generating
Depending on the mesh mask rules the LOD for such trees will use (hybrid) 3D tree LOD models (if available) or use tree LOD billboards directly or as fallback in case a 3D tree LOD is not found. The default fallback is defined by the TreeFullFallBack=1 setting in ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_[GAME MODE].ini. 1 = Billboard, 2 = Bilboard2 etc.

Link to comment
Share on other sites

3 minutes ago, sheson said:

https://dyndolod.info/Help/Ultra-Tree-LOD#Generating
Depending on the mesh mask rules the LOD for such trees will use (hybrid) 3D tree LOD models (if available) or use tree LOD billboards directly or as fallback in case a 3D tree LOD is not found. The default fallback is defined by the TreeFullFallBack=1 setting in ..\DynDOLOD\Edit Scripts\DynDOLOD\DynDOLOD_[GAME MODE].ini. 1 = Billboard, 2 = Bilboard2 etc.

So, considering your dire warning about setting TreeFullFallBack=0, I might set it to 4 and ensure that any fallback billboards will use the 4x2 model.

As a follow-up question, I noticed my billboard textures were a bit fuzzy, even for large pines... I had texgen units per pixel using the recommended for 1080p (my panel and game resolution are actually 1440p). Would it be absurd to use an even higher density, such as the 5.5 units per pixel recommended for 4k, to ensure the best possible looking LOD4 when I know for starters that most of my trees don't have hybrids? Or are your recommendations already the limit, considering the height of the tree and the closest distance at which LOD4 would be rendered? And would "oversampling" like this have a benefit in alpha channel generation for very finely cut tree models?

Link to comment
Share on other sites

4 minutes ago, godescalcus said:

So, considering your dire warning about setting TreeFullFallBack=0, I might set it to 4 and ensure that any fallback billboards will use the 4x2 model.

As a follow-up question, I noticed my billboard textures were a bit fuzzy, even for large pines... I had texgen units per pixel using the recommended for 1080p (my panel and game resolution are actually 1440p). Would it be absurd to use an even higher density, such as the 5.5 units per pixel recommended for 4k, to ensure the best possible looking LOD4 when I know for starters that most of my trees don't have hybrids? Or are your recommendations already the limit, considering the height of the tree and the closest distance at which LOD4 would be rendered? And would "oversampling" like this have a benefit in alpha channel generation for very finely cut tree models?

See https://dyndolod.info/Help/Texture-Resolution#Determine-Sensible-Texture-Resolutions

LOD is either transparent or opaque with a fixed threshold of 128, e.g. there is no alpha blending only alpha testing.

Link to comment
Share on other sites

When creating trunk and crown meshes, are there any steps you recommend doing in NifSkope to "tidy things up"?

Do we need to remove animations from crown meshes, or sanitize, or remove invalid stuff or any other "spell" - or does LodGEN perform all the necessary steps when combining them into hybrids? I mean, other than what you describe regarding editing UVs.

In the same vein, should we do anything about trunks prior to render with texgen, like removing collision object when present, or simply remove the crown and save, since texgen only takes "snapshots" of the rendered mesh, and lodgen uses the chosen mesh template for trunks?

Edited by godescalcus
Link to comment
Share on other sites

7 hours ago, godescalcus said:

When creating trunk and crown meshes, are there any steps you recommend doing in NifSkope to "tidy things up"?

Do we need to remove animations from crown meshes, or sanitize, or remove invalid stuff or any other "spell" - or does LodGEN perform all the necessary steps when combining them into hybrids? I mean, other than what you describe regarding editing UVs.

In the same vein, should we do anything about trunks prior to render with texgen, like removing collision object when present, or simply remove the crown and save, since texgen only takes "snapshots" of the rendered mesh, and lodgen uses the chosen mesh template for trunks?

https://dyndolod.info/Help/3D-Tree-LOD-Model
The basic idea is to split a full model into two static (collision, animation, skin, bone data etc. removed) files.

See any of the crowns ..\DynDOLOD\docs\trees.ultra\tools\hybrids\input\*passthru_lod.nif and trunks ..\DynDOLOD\Edit Scripts\DynDOLOD\Render\Skyrim\Billboards\DynDOLOD\lod\trees\*_trunk.nif included in the DynDOLOD Standalone download archive. Everything else that is not needed is properly removed to avoid issues or errors.

The separated crowns for the 3D tree LOD model creation is irrelevant for TexGen. It just creates the billboards textures and text files from the trunks.

Link to comment
Share on other sites

I made the separate trunk and crown meshes for 187 of Ulvenwald's 350 tree models (which, by my estimation, correspond to 99% of the trees referenced) and combined them with lodgen, then installed the hybrids as a new mod. Ran texgen and dyndolod and the result is (as expected) much better than before, but ran into an issue where the hybrid models seem to be more then 2x the size of the full model (adding 2 in-game screenshots to illustrate). In no moment did I manually edit anything about the meshes, simply followed instructions to produce the hybrids. Used as tree rules: Lod4=Level0; Lod8=Lod16=Billboard4; Lod32=Billboard6; VWD on; grid=FarLOD. In texgen I used texture sizes and bit density as recommended for 1440p, then ticked both Tree and HD Tree (not Rendered, since I had already built the hybrids).

Do I need additional steps to make the hybrid lods match the full model in scale?

Example screenshots (second screenshot taken past the first small pine, but the ruins are good for scale)

20230510080017_1.thumb.jpg.c6657edfd1530467699b1ca2c7353120.jpg20230510080025_1.thumb.jpg.90822f3f29802a6aaa0fec27d92b5d44.jpg

I also noticed the hybrids seem to react to light differently than the full models (brighter), but I could probably live with that for now, one problem at a time ;) Appreciate your help in getting this far, and would be happy if I could fix the issue with scale.

Edited by godescalcus
Link to comment
Share on other sites

1 hour ago, godescalcus said:

I made the separate trunk and crown meshes for 187 of Ulvenwald's 350 tree models (which, by my estimation, correspond to 99% of the trees referenced) and combined them with lodgen, then installed the hybrids as a new mod. Ran texgen and dyndolod and the result is (as expected) much better than before, but ran into an issue where the hybrid models seem to be more then 2x the size of the full model (adding 2 in-game screenshots to illustrate). In no moment did I manually edit anything about the meshes, simply followed instructions to produce the hybrids. Used as tree rules: Lod4=Level0; Lod8=Lod16=Billboard4; Lod32=Billboard6; VWD on; grid=FarLOD. In texgen I used texture sizes and bit density as recommended for 1440p, then ticked both Tree and HD Tree (not Rendered, since I had already built the hybrids).

Do I need additional steps to make the hybrid lods match the full model in scale?

Example screenshots (second screenshot taken past the first small pine, but the ruins are good for scale)

20230510080017_1.thumb.jpg.c6657edfd1530467699b1ca2c7353120.jpg20230510080025_1.thumb.jpg.90822f3f29802a6aaa0fec27d92b5d44.jpg

I also noticed the hybrids seem to react to light differently than the full models (brighter), but I could probably live with that for now, one problem at a time ;) Appreciate your help in getting this far, and would be happy if I could fix the issue with scale.

https://stepmodifications.org/forum/topic/18689-tree-lod-scale-troubleshooting/
If a 3D tree LOD model does not match the size of the full model tree, then there is a problem with the 3D tree LOD model.
As explained before, while the game typically ignores translation, rotation, scale on the root node when placing references, LOD generation does not. Remove any translation, rotation and scale from the root of the 3D tree LOD model.

https://dyndolod.info/Help/Ultra-Tree-LOD#3D-Tree-LOD-Brightness

Link to comment
Share on other sites

8 hours ago, sheson said:

https://dyndolod.info/Help/3D-Tree-LOD-Model
The basic idea is to split a full model into two static (collision, animation, skin, bone data etc. removed) files.

See any of the crowns ..\DynDOLOD\docs\trees.ultra\tools\hybrids\input\*passthru_lod.nif and trunks ..\DynDOLOD\Edit Scripts\DynDOLOD\Render\Skyrim\Billboards\DynDOLOD\lod\trees\*_trunk.nif included in the DynDOLOD Standalone download archive. Everything else that is not needed is properly removed to avoid issues or errors.

The separated crowns for the 3D tree LOD model creation is irrelevant for TexGen. It just creates the billboards textures and text files from the trunks.

I compared my crowns with those shipped with DynDOLOD as you suggested, and there are differences you can notice on the node tree. I also didn't perform any special steps to remove animation, skin and bone data (I did remove collision meshes, if that's enough for removing collision). I've seen your instructions to remove skin, also about UV editing - and I checked a few of these meshes at random and saw their UVs were ok, so I skipped checking all of them, for the purpose of what is still just an experiment. I'm aware of the need to remove animations, I think, because you told me so years ago on discord - but I can't find the relevant instructions there, or in the manual. I'll look around. I also remember your suggestion to use a couple of "spells" on nifskope as "general good practice", but fail to recall which.

One other issue is that I noticed how the original meshes have a huge number of vertices - is there a good "hack" to batch optimise them? Another of zilav's magic wands? Or does it have to be done one by one - and in such case, can Nifskope handle it? I've read the post you linked in your later answer about tree scale and noticed that 3DS Max can be used for this (optimisation, assuming that includes reducing vertex count), but considering I don't have the program (and Blender is free) - can Blender be used (productively) for the whole workflow of optimising crown meshes?

Edited by godescalcus
Link to comment
Share on other sites

8 hours ago, sheson said:

The separated crowns for the 3D tree LOD model creation is irrelevant for TexGen. It just creates the billboards textures and text files from the trunks.

It seems like you are saying here that if the full model is used as the treeModel_CRC32_trunk.nif, one would still get trunk billboards when using Render option. I've never tried that and always have removed crown/collision.

I've also found that leaving the Tree_Anim shader flag doesn't hurt anything, and not messing with removing this flag is a big time saver.

6 hours ago, godescalcus said:

I made the separate trunk and crown meshes for 187 of Ulvenwald's 350 tree models (which, by my estimation, correspond to 99% of the trees referenced) and combined them with lodgen, then installed the hybrids as a new mod. Ran texgen and dyndolod and the result is (as expected) much better than before, but ran into an issue where the hybrid models seem to be more then 2x the size of the full model (adding 2 in-game screenshots to illustrate). In no moment did I manually edit anything about the meshes, simply followed instructions to produce the hybrids. Used as tree rules: Lod4=Level0; Lod8=Lod16=Billboard4; Lod32=Billboard6; VWD on; grid=FarLOD. In texgen I used texture sizes and bit density as recommended for 1440p, then ticked both Tree and HD Tree (not Rendered, since I had already built the hybrids).

Do I need additional steps to make the hybrid lods match the full model in scale?

Example screenshots (second screenshot taken past the first small pine, but the ruins are good for scale)

20230510080017_1.thumb.jpg.c6657edfd1530467699b1ca2c7353120.jpg20230510080025_1.thumb.jpg.90822f3f29802a6aaa0fec27d92b5d44.jpg

I also noticed the hybrids seem to react to light differently than the full models (brighter), but I could probably live with that for now, one problem at a time ;) Appreciate your help in getting this far, and would be happy if I could fix the issue with scale.

Scale and relative positioning of crown/trunk will be off if you copy the crown/trunk with 1.0 scaling and 0.0 transform/rotation when it's a child of a parent/grandparent node that has scaling != 1.0 or transform/rotation != 0.0. You must extrapolate that info from all parents, summing the transforms/rotations and multiplying the scales from all parents.

You can optimize the crowns using a 3D app like Blender, Maya, or 3Ds Max. That's a whole other ball of wax though. There's also things like InstaLOD, but that's not free or easy to get a trial

Link to comment
Share on other sites

8 minutes ago, z929669 said:

It seems like you are saying here that if the full model is used as the treeModel_CRC32_trunk.nif, one would still get trunk billboards when using Render option. I've never tried that and always have removed crown/collision.

I've also found that leaving the Tree_Anim shader flag doesn't hurt anything, and not messing with removing this flag is a big time saver.

Scale and relative positioning of crown/trunk will be off if you copy the crown/trunk with 1.0 scaling and 0.0 transform/rotation when it's a child of a parent/grandparent node that has scaling != 1.0 or transform/rotation != 0.0. You must extrapolate that info from all parents, summing the transforms/rotations and multiplying the scales from all parents.

You can optimize the crowns using a 3D app like Blender, Maya, or 3Ds Max. That's a whole other ball of wax though. There's also things like InstaLOD, but that's not free or easy to get a trial

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?

 

Link to comment
Share on other sites

2 hours ago, godescalcus said:

I compared my crowns with those shipped with DynDOLOD as you suggested, and there are differences you can notice on the node tree. I also didn't perform any special steps to remove animation, skin and bone data (I did remove collision meshes, if that's enough for removing collision). I've seen your instructions to remove skin, also about UV editing - and I checked a few of these meshes at random and saw their UVs were ok, so I skipped checking all of them, for the purpose of what is still just an experiment. I'm aware of the need to remove animations, I think, because you told me so years ago on discord - but I can't find the relevant instructions there, or in the manual. I'll look around. I also remember your suggestion to use a couple of "spells" on nifskope as "general good practice", but fail to recall which.

One other issue is that I noticed how the original meshes have a huge number of vertices - is there a good "hack" to batch optimise them? Another of zilav's magic wands? Or does it have to be done one by one - and in such case, can Nifskope handle it? I've read the post you linked in your later answer about tree scale and noticed that 3DS Max can be used for this (optimisation, assuming that includes reducing vertex count), but considering I don't have the program (and Blender is free) - can Blender be used (productively) for the whole workflow of optimising crown meshes?

You should create proper static NIFs with collision, animation, skin, bone data etc. removed. They should be simple NiTriShape/NiTriShapeData or BSTriShapes.

Copy/paste the relevant Shapes blocks from the full model tree NIF to an empty one. However, I am also pretty quick removing blocks with the keyboard combinations.

To optimize meshes you need to use Blender/3DSMax native optimize/decimation features or use a 3rd party plugin like Simplygon, which is free for our use.
I do not use Blender, so I can not help with steps there.

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.