Other user's assetsAll the assets in this file belong to the author, or are from free-to-use modder's resources
Upload permissionYou are not allowed to upload this file to other sites under any circumstances
Modification permissionYou must get permission from me before you are allowed to modify my files to improve it
Conversion permissionYou are not allowed to convert this file to work on other games under any circumstances
Asset use permissionYou must get permission from me before you are allowed to use any of the assets in this file
Asset use permission in mods/files that are being soldYou are not allowed to use assets from this file in any mods/files that are being sold, for money, on Steam Workshop or other platforms
Asset use permission in mods/files that earn donation pointsYou must get permission to earn Donation Points for your mods if they use my assets
Author notes
This author has not provided any additional notes regarding file permissions
File credits
jonwd7 - For assistance with the format and general help.
Donation Points system
Please log in to find out whether this mod is receiving Donation Points
Changelogs
Version 3.2.1
Added an icon to the application
Remove "Packed Tangent" shader flag when saving headparts for LE
Fixes for texture path cleanup with whitespace and newline characters
Fixed reading strings in NIF files that are longer than 2048 characters
Fixed loading NiSkinData without vertex weights but with Num Vertices > 0
Version 3.2.0
64-bit executable
Added new option "Fix BSX Flags" for correcting mismatching external emittance flags
Added new option "Fix Shader Flags" for correcting mismatching environment map flags
Fixed ordering of header strings within a single block.
Improved block ordering performance.
Code refactoring and optimization.
Version 3.0.14
Fixed node hierarchy potentially carrying over between NIF files (bug introduced in 3.0.13).
Version 3.0.13
Fixed losing skin instance reference (LE to SE).
Added A8L8 texture scan.
Version 3.0.12
Fixed tangents not being updated with LE optimization.
Various bug fixes and changes in the NIF library.
Version 3.0.11
Keep all-white vertex colors when "Remove Parallax" is disabled. Vertex colors are required for parallax shaders to work.
Version 3.0.10
Fixed bone transforms sometimes changing the wrong way with "Clean Skinning" on.
Version 3.0.9
Fixed crash when creating NiTriShapeData blocks without UVs
Fixed texture scan warning about TGA files within FaceGenData folders
Fixed texture scan result dialog showing without detected errors
Version 3.0.8
Fixed crash with long NiStrings
Fixed NiPSysData link when saving in a lower version
Texture scan now uses the selected folder at the top of the frame
Version 3.0.7
Added LE output mode.
Limit bones per partition to 80 for SSE (then split automatically).
Fixed crashes with meshes without vertices.
Version 3.0.6
Added check for the L8 format (one channel with luminance flag) to the texture scanner. Use R8 or a compressed format instead.
Version 3.0.5
Fixed deletion of NiTriStripsData associated with bhkNiTriStripsShape blocks (16 NIFs in the vanilla game use it).
Version 3.0.4
Fixed v3.0.2 - v3.0.3 adding empty strings where not needed.
Version 3.0.3
Meshes with the tree animation shader flag now keep their vertex colors even when fully white.
Version 3.0.2
Allow empty header strings to fix possible crash issues (e.g. with some NiTextKeyExtraData blocks).
Version 3.0.1
Fixed the cubemap check of the texture scanner.
Version 3.0.0
- Added "Scan Textures" button to scan for compatibility with SSE.
- The following warnings currently exist:
1.) TGA texture files are not supported.
2.) Dimensions must be divisible by 4 (currently <width> x <height>).
3.) Uncompressed cubemaps require an alpha channel, use ARGB8 or DXT1/BC1.
4.) Several warnings for unsupported uncompressed formats.
- Further fixed handling of NIF files without a root node.
- Ignore empty vertex weights (factor 0.0) in NiSkinData.
- Allow overflowing header string index to prevent losing strings.
Version 2.9.2
- Calculating new geometry bounds for skinned meshes is now optional.
- Now removes invalid triangles that point to non-existent vertices.
- Fixed handling for root nodes that aren't at block index 0.
- Now fixes faulty "Has Vertex Weights" boolean values in NiSkinData.
- Files with names that have UTF-16 encoded characters can now be loaded and saved.
Version 2.9.1
- Fixed writing of breakable and malleable constraints. Please re-optimize NIFs using "bhkMalleableConstraint" and "bhkBreakableConstraint" in case they cause crashes.
Version 2.9
- Multiple references to the same shape in a node no longer count as duplicates, so they won't be renamed.
Version 2.8
- Further important fixes for files with duplicate shape names.
- Some more code refactoring.
Version 2.7
- Fixed regression in v2.6 where shapes with duplicate names (not under the same parent) weren't optimized.
Version 2.6
- Now processes terrain and LOD meshes (.btr and .bto files) as well.
- Added option to remove parallax shader flags and textures from meshes (on by default).
- Fixed reading NIFs with disabled constraint motors.
- Fixed renaming of duplicate shapes not being aware of its parent node and siblings.
- Removed checkbox for unused strings - they are now always removed.
- Major refactor of the underlying code for handling NIF files.
Version 2.5
- Fix for meshes that have vertex weights disabled in their NiSkinData (some trees, maybe more).
Version 2.4
- Support for particle systems and emitter meshes.
Version 2.3
- Fixed an issue with skin partitions of meshes with flipped triangles.
Version 2.2
- Added support for head parts (head, eyes, mouth, ears, hair). Use the new checkbox FOR HEAD PARTS ONLY!
- Fixed some partially see-through skinned meshes by using cleaner weights from BSTriShape instead of the NiSkinData.
- Removed safety check for particle meshes - be careful about those for now.
Version 2.1
- Fixed optimizing meshes that shared the same NiTriShapeData block for some reason.
- Fixed "removed vertex colors" message logging even if the mesh never had any to begin with.
- Improved normal smoothing algorithms, there should be less black splotches now when using it.
- Changed "Max. Degrees" selection range for normal smoothing from 0-100° to 0-180°.
Version 2.0
- The tool now has an actual user interface with a directory picker and progress bar.
- Created some more options as checkboxes to toggle on/off.
- Fixed some rare texture paths being trimmed the wrong way and causing purple meshes.
- Added a "Smooth Normals" feature with a maximum angle in degrees and a toggle for close seams.
- Tangents didn't always update for skinned meshes.
Version 1.9
- Fixed tangents not being calculated after the last update, sorry for that!
- Fixed rare occasions of invisible static meshes by not calculating new bounding spheres anymore (bounds in .esm/.esp didn't match NIF).
Version 1.8
- Fixed files with the .NIF extension (instead of .nif) not being detected.
- Fixed extended ASCII file paths not getting converted correctly.
Version 1.7
- Fixed vertex color flag not being removed properly for BSEffectShaderProperty blocks.
- Added log message for added tangents and deleted unreferenced blocks.
Version 1.6
- Redone the console input from scratch, you can now choose a mode with sub directories or the working directory only.
- Removed batch files, as they're not needed anymore.
- Changed the logging, now with way more information and a better look.
- Log file is always created now.
Version 1.5
- Unreferenced blocks that aren't under the root node tree are now deleted.
- Fixed NiTextKeyExtraData strings being swapped out. Can fix crashes and animation sounds.
- Fixed BSBoneLODExtraData being saved wrongly, mostly used in skeleton NIFs.
Version 1.4
- NIFs that are already in the SSE format are cleaned up now as well.
- Fixed a crash for rare meshes without UVs.
- Improved the logging batch file.
Version 1.3
- Fixed the bone indices in the BSTriShape pointing to the wrong bones. This eliminates the spaghetti monsters. They were fun while it lasted.
- Cleans up the NiSkinData now as well (source for the vertex weights, unused in-game).
- Now updates bounding spheres of all bones and geometry.
- Added a batch file that produces a log file of the output. Otherwise acts the same.
Version 1.2
- Fixed skin partitions (invisible meshes, holes in meshes, black screen in NifSkope).
- Added a batch script to optimize all NIFs found in the current sub directories at once.
Version 1.1
- Fixed meshes being added to the root node twice.
SSE NIF Optimizer a tool to optimize Skyrim NIFs for SSE
Description: This is a tool that optimizes NIF files for the SE/AE (or LE) format and fixes several potential issues. Also scans textures for compatibility.
Make sure to create backups of your NIFs beforehand!
Don't run it on your entire meshes folder at once.
Use the head parts option on ONLY head parts, without exception!
So it's better to temporarily copy/paste all those heads, eyes, hairs to a separate folder for optimization. Things like helmets are regular meshes, not head parts.
If a NIF is already in the SSE format, the tool optimizes them as well, but it doesn't perform as many cleanup operations. Note that SSE-formatted NIF files do NOT work in the old Skyrim any longer.
To view the new NIF format in NifSkope, you will need the very latest version currently found here: NifSkope releases by jonwd7
Please let me know if there are any problems with a NIF and if possible, provide the files before and after optimization. If this tool helped you with your mod, it would be cool if you could give it credits, but that's not required of course. :)
Optimizes NIFs to the new SSE format (BSTriShape, changes to NiSkinPartition).
Optimizes head parts to BSDynamicTriShape (separate checkbox).
Triangulates the geometry and skin partitions.
Cleans up the NiSkinData (source for vertex weights that are unused in-game).
Calculates new bounding spheres for geometry and all of the bones.
Adds tangents to all meshes that need them.
Removes normals and tangents from all meshes that don't need them, such as body meshes.
Removes all-white vertex colors from meshes.
Renames all meshes that have the same name, since they need to be unique.
Cleans up the header strings.
Deletes all blocks that aren't referenced somewhere within the root node tree.
All of this results in a hopefully working NIF that's cleaned up and smaller in file size.
Works on NIFs that already are in the SSE format as well.
Can revert the format to LE.
Scan textures for SSE compatibility.
Things to keep in mind:
SSE has a lower precision for UV coordinates, so if you happen to stumble upon a mesh that makes use of coordinates way outside of the 0.0 - 1.0 range, you should probably re-center the UVs using NifSkope before optimization.
Installation: This can't and doesn't need to be installed with a mod manager, as it is a utility for modders. Simply download the archive, extract the executable and run it, then follow on-screen instructions.
Uninstallation: There's no uninstallation process, simply delete the executable from your computer.
Running from the command line: Examples: /opt SE "file.nif" /opt SE "folder" /opt SE /recursive "folder" /opt SE /headparts "headpart.nif" /opt LE /log "log.txt" "file.nif"
Credits: jonwd7 - For assistance with the format and general help.