Jump to content

Creating Tree LOD Models (by The Step Team)


z929669
 Share

Recommended Posts

Using CRC32 to match models is the preferred method.
The last ditch effort method shouldn't be mentioned. It is only useful for cases were there is not going to be any future updates and never any overwrites/replacers.

Personally I copy full models into a work folder and use a script to rename the files to *_[_CRC32_]passthru.NIF. Adding CRC32 with a script is easier this way since its the same file.
I then use NIFskope to remove extraneous blocks and data, spells to clean etc. and only keep the static trunk and crown and save it to the trunk work folder. Remove the trunk from the NIF. Double check/fix UV or change to UV clamp mode in the shader. Save it to the crown folder.
Then open the trunk NIF and remove the crown. Once all trunks are done, mass rename with a tool to add _trunk to the filename.

>>>Copy crown nodes into ..\Any\Path\Outside\Of\Mod\List\[TreeName]_[CRC32]_trunk.nif of the target mod in the mod list.
Remove trunk form the filename. Crowns should be the final filename.

emptypassthru_lod.nif is Skyrim LE format.  To copy BSTrIshape from Skyrim SE it needs to be updated with CAO or self made (hence my preference to remove form existing full model).

For convenience of humans troubleshooting large load orders I suggest to put the hybrids into subfolders with some kind of mod id, initials etc. like meshes\DynDOLOD\lod\trees\[mod id]\, same for trunks DynDOLOD\Render\Billboards\DynDOLOD\lod\trees\[mod id]\

DynDOLOD\docs\trees.ultra\tools\emptypassthru_lod.nif only support Skyrim LE format when copy pasting hence my preferences to remove stuff from existing full model.

Link to comment
Share on other sites

3 hours ago, sheson said:

Using CRC32 to match models is the preferred method.
The last ditch effort method shouldn't be mentioned. It is only useful for cases were there is not going to be any future updates and never any overwrites/replacers.

Will do

3 hours ago, sheson said:

emptypassthru_lod.nif is Skyrim LE format.  To copy BSTrIshape from Skyrim SE it needs to be updated with CAO or self made (hence my preference to remove form existing full model).

Part of the process I use is running all crowns through SSE NIF Optimizer, which takes care of SSE format in my standard workflow. Good to know this though.

3 hours ago, sheson said:

>>>Copy crown nodes into ..\Any\Path\Outside\Of\Mod\List\[TreeName]_[CRC32]_trunk.nif of the target mod in the mod list. Remove trunk form the filename. Crowns should be the final filename.

In my workflow, this is just emptypassthru_lod.nif renamed as indicated above (I rename this same mesh for both crown and trunk for convenience). I use this for pasting the trunks, and those are consumed by hybrid.bat without issue and TexGen doesn't seem to care about this either way.

3 hours ago, sheson said:

DynDOLOD\docs\trees.ultra\tools\emptypassthru_lod.nif only support Skyrim LE format when copy pasting hence my preferences to remove stuff from existing full model.

So doing it that way, you must be renaming the base node to BSFadeNode, or it doesn't matter? I avoid cleaning up unused strings and such left from removing mesh parts, since it's an added step.

Perhaps I will run emptypassthru_lod.nif through SSE NIF Optimizer before renaming to trunk/crown NIFs. This would ensure trunks are SSE format ... but I would still run crowns (and what I call "standard LOD models") through SSE NIF Optimizer either way to clean up strings and perform other menial tasks.

3 hours ago, sheson said:

Personally I copy full models into a work folder and use a script to rename the files to *_[_CRC32_]passthru.NIF. Adding CRC32 with a script is easier this way since its the same file.
I then use NIFskope to remove extraneous blocks and data, spells to clean etc. and only keep the static trunk and crown and save it to the trunk work folder. Remove the trunk from the NIF. Double check/fix UV or change to UV clamp mode in the shader. Save it to the crown folder.
Then open the trunk NIF and remove the crown. Once all trunks are done, mass rename with a tool to add _trunk to the filename.

In the meantime, I will try your method to see how it works for me.

Thanks for the tips!


I updated the article note at top to include a disclaimer that my workflow is one approach and that a standardized method is yet to come. I also changed options 1-3 to now be options 1 & 2 with preference as you indicated. The goal is to familiarize people with the general process, so I will update the article as I learn more.

Link to comment
Share on other sites

17 hours ago, sheson said:

emptypassthru_lod.nif is Skyrim LE format.  To copy BSTrIshape from Skyrim SE it needs to be updated with CAO or self made (hence my preference to remove form existing full model).

How can I tell the NIF game format of any random NIF file directly (without surmising from the node names)? emptypassthru_lod.nif contains nothing I know of that indicates it's for LE and not SE.

When I first was figuring out how to create hybrids, I was very confused about the empty NIF and where to get it (game format, base node name, other parameters). This is why I used emptypassthru_lod.nif as a basis.

You should know that I have no issue with copy/paste of BSTriShape into emptypassthru_lod.nif (after I rename to empty_trunk.nif). And these become my trunks and are never updated with CAO or SSE NIF Optimizer. They do work as expected with LODGen in creating the hybrids or changing the textures.

I will also add that I have always copy/pasted crowns into emptypassthru_lod.nif (after I rename to empty_passthru_lod.nif). Early on, I did not run these through CAO or SSE NIF Optimizer, and they worked without issue for hybrids or 'standard' LOD trees in my testing, so I must just be lucky or it doesn't matter for LOD?

These days I run through an optimizer just to clean up junk if it came over with the mesh parts I copied (and after getting that advice from you).

Link to comment
Share on other sites

14 hours ago, z929669 said:

In my workflow, this is just emptypassthru_lod.nif renamed as indicated above (I rename this same mesh for both crown and trunk for convenience). I use this for pasting the trunks, and those are consumed by hybrid.bat without issue and TexGen doesn't seem to care about this either way.

The filename of the crown should be that of the final hybrid model (*_XXXXXXXXpassthru_lod.nif). Only trunks should have "trunk"

15 hours ago, z929669 said:

So doing it that way, you must be renaming the base node to BSFadeNode, or it doesn't matter? I avoid cleaning up unused strings and such left from removing mesh parts, since it's an added step.

I suppose I must be converting it since its good pratice. When LODGen combines crown + trunk the output should have BSFadeNode either way.

31 minutes ago, z929669 said:

How can I tell the NIF game format of any random NIF file directly (without surmising from the node names)? emptypassthru_lod.nif contains nothing I know of that indicates it's for LE and not SE.

The Header / BS Header / BS Version is 83 for LE and 100 for SE.

33 minutes ago, z929669 said:

You should know that I have no issue with copy/paste of BSTriShape into emptypassthru_lod.nif (after I rename to empty_trunk.nif). And these become my trunks and are never updated with CAO or SSE NIF Optimizer. They do work as expected with LODGen in creating the hybrids or changing the textures.

Whatever works and is easier for you is fine.

34 minutes ago, z929669 said:

These days I run through an optimizer just to clean up junk if it came over with the mesh parts I copied (and after getting that advice from you).

Running through COA or something similar is good practice to make sure they do not upset LODGen.

  • Thanks 1
Link to comment
Share on other sites

28 minutes ago, sheson said:

The Header / BS Header / BS Version is 83 for LE and 100 for SE.

This is the key I was missing! Just opening NifSkope.exe defaults to BS header 0, and only Ni* are available on Block > Insert spell. Once I change that value to 100, I now have additional Bethesda (and Havok) categories for selecting BS* nodes (blocks).

In all of my scouring over NIF doc, I never found this.

35 minutes ago, sheson said:

Whatever works and is easier for you is fine.

Thanks. I do prefer copy/pasting blocks via keyboard over removing them from the base model, since then I avoid all of the cleanup steps (e.g., extra strings). It's also difficult for me to strip stuff from models with skinning, since parent/child blocks are more complex, and I am often left with an inconsistent hierarchy and block names. It must all get sorted by LODGen in the hybrids.bat/DynDOLOD automation anyway?

I do see that the method you lay out (CRC script on base models via xEdit > strip blocks > clean up > save as trunk/crown) is very straight forward. It trades-off the hassle of my copy/paste of CRC and treeName strings (using 7-zip CRC shell integration and Explorer) for the hassle of stripping/spells in NifSkope and launching xEdit. I will write up this approach once I run through it.

18 hours ago, sheson said:

For convenience of humans troubleshooting large load orders I suggest to put the hybrids into subfolders with some kind of mod id, initials etc. like meshes\DynDOLOD\lod\trees\[mod id]\, same for trunks DynDOLOD\Render\Billboards\DynDOLOD\lod\trees\[mod id]\

So I can package my mods this way then? I didn't consider that DynDOLOD would scan recursively beyond \DynDOLOD\lod\trees, but that seems obvious now. Fantastic.

Link to comment
Share on other sites

On 1/13/2022 at 5:50 PM, z929669 said:

So I can package my mods this way then? I didn't consider that DynDOLOD would scan recursively beyond \DynDOLOD\lod\trees, but that seems obvious now. Fantastic.

Yes. Anytime the tools look for assets it is usually done recursively.

Link to comment
Share on other sites

6 hours ago, sheson said:

Yes. Anytime the tools look for assets it is usually done recursively.

Works like a charm in constructing hybrids (after I found that I needed to account for the extra folder in the TexGen_Output path.

I also used your "strip from"  method (and CRC script) to construct the hybrids rather than my "copy to" method (and manual CRC). Your way is a tad bit quicker and a tad bit less potential for error. I only did it on some simple aspens, so I have yet to try it on skinned trees, which will be a bit trickier stripping down.

Do you remove the BSTriShape blocks from under the NiNode/BSMultiboundNode and place under root block or just leave NiNode/BSMultiboundNode/BSTriShape? I guess I will see for myself at some point but just curious.

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
 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.