NifSkope 2.0 Dev 7

@jonwd7 jonwd7 released this Dec 18, 2017 · 12 commits to develop since this release

VC++ 2015 Redistributable is required for 64-bit builds. 32-bit build is forthcoming.


2 0dev7-1


  • Introduced new "Error Color" to match how missing textures are rendered (magenta). If you would prefer no Error Color you can turn it off in Startup Defaults. Currently only applies to files utilizing shaders (Skyrim and FO4).
  • Fixed the tentative rendering fixes from the last release
    • Meshes with missing textures will no longer show up black.
    • Parts of meshes will no longer be invisible.
  • Fixed partitionless skinning rendering (present in Civilization IV and earlier games)
  • Any crashes during the save function no longer write a corrupt/incomplete file.


  • (Tentatively) Fixed a longstanding bug with some GPUs rendering meshes as invisible due to shader issues. Particularly AMD cards.
  • Fixed shader selection for Skyrim so Multi-Layer Parallax shader works again.
  • Support more Oblivion NIFs in some foreign distributions which have inexplicably outdated NIF versions (possible packaging issue). The original American release has most files at but there can be variants of, 10.2,, and
  • Cubemap slots now have a default cubemap if one is not assigned. It is a debug cubemap made of solid colors red/cyan, green/magenta, and blue/yellow.


  • Fixed a crash bug with copy/paste on < 20.1 NIFs


  • Fixed bug where transparency turned to wireframe when an object was selected.
  • Tweaked nif.xml to show bhkRigidBody data for FO4 (pre-Elric) more correctly.



  • New UI theming engine.
    • New Dark/Light theme with user customizeable palettes.
    • Toolbar icon size selection (in Settings > General > Theme)
  • Copy/Paste branch overhaul
    • Strings maintained on copy/paste for Each block has its string indices updated with a new string brought over from the source file. See gallery below for an example.
    • Relaxed the linking restrictions on Paste Branch when a link points to the root node. This allows NiCollisionObject branches to be pasted onto other NIFs more easily for example.
    • Pasting a branch is now 20-30x faster, more so for extremely deep branches.
    • NiCollisionObjects are now auto-linked if pasted on top of an NiAVObject (node or trishape)
  • Add New Ref for None refs:
    • Filtered by the valid types for that link. Interpolator and Controller Refs have additional filtering which only shows the valid types for that block.
      base-profile-12 08 2017---16 36
  • New row copy/paste (incl. multi-row paste). Ideal for quickly pasting types like Vector3 or Color4.
    • Click single row, Ctrl + C, click one or many rows, Ctrl + V
    • Fully undoable.
    • Caveat: Strict type validation (e.g. cannot paste int<->uint or uint<->ushort)
    • NOTE: You cannot multi-copy multiply selected rows. Only the first selected value is copied. You can only paste a single value to multiple rows.
      base-profile-12 17 2017---23 59
  • New array-compound copy/paste. Any flat array or flat compound i.e. an expandle item with no more expandable items under it can be copied and then pasted on other arrays/compounds.
    • Fully undoable. An entire array paste is undone/redone as a group.
      compoundcp-50 arraycp-50
  • Ref arrays (such as Children array on NiNode) can be reordered using Ctrl-Up and Ctrl-Down on individual Refs.
  • Icon res upped 2x for high DPI.
  • Updated all URLs to NifTools websites, added URLs to the NifTools Discord
  • Hold X or Y to constrain axis of motion in UV Editor
  • Hold spacebar as alternative to using MMB for panning in viewport
  • 'Reject Changes' button for NifBlockEditor windows (e.g. Edit Transform). Sets the values back to when you first opened the window.
  • Auto-expansion of more items in Block Details. Modified Textures array expansion to a more general "end array" expansion. Will now apply to Connect Points, etc. Expand NiSkinPartition partition array always, expand NiQuatTransform in interpolators always, expand Children array of NiNode if relatively small.
  • Flags window for editing the vertex attributes for BSTriShape. It hides the bits that need to be auto calculated from the flags and updates the rest of it after you set them. It also recalculates the Data Size. This means you can now turn vertex attributes on/off for FO4/SSE without breaking the NIF.
  • Import/Export improvements
    • Import/Export menu options are now disabled dynamically based on the NIF version instead of always disabled.
    • Exports/Imports more shader settings and texture paths for Skyrim and later. Will create shader properties and texture sets for the newly imported OBJ.
    • BSFadeNode, et al. are now seen as an NiNode for exporting a selection or for parenting an imported mesh.
  • Settings > Resources improvements
    • Add archives from the file dialog only if they contain a textures or materials folder, the same as done with the Auto Detect button.
    • Disallowed manual editing of list items in Archives, but maintained it in Paths.
    • Correctly mark the pane as modified for editing list items and toggling Alternate File Paths option.


  • New texture loader. Supports DX10-header DDS files and BC7, etc. Is also much faster.
  • First stage of renderer rewrite. Removed many bottlenecks. NIFs with thousands of blocks could go to 20FPS or lower. They are now renderered about 3x faster. Some NIFs with 10,000+ blocks are now 4-5x faster.
  • Node axis visualization (Show Axes and Show Nodes must be on). Lets you see the orientation of a node i.e. how objects under that node will be oriented.
  • Reworked segment visualization for FO4 BSSubIndexTriShape. See gallery below for an example.
  • LOD Slider FO4 support (BSMeshLODTriShape)
  • RGB Falloff now supported in FO4 shaders
  • BSPackedCombinedGeomDataExtra (CK generated _OC NIFs) can now be loaded. The geometry baked into the extra data cannot currently be viewed.
  • For skinned shapes, the triangles/strips used for rendering are now the ones from the partitions. So certain NIFs which only had triangles on their partitions will render now and the rendering will be generally more accurate in the event the partition and the shape triangles aren't in sync.
    • Also made a spell which lets you update the shape triangles from the partition triangles (for NiTriShape only so far).

Data Management

  • Spell updates for SSE/FO4 NIF versions
    • Transform > Apply now works for BSTriShape
    • Texture > Export Template now works for BSTriShape
    • Face/Smooth Normals updated for SSE, incl. skinned meshes.
    • Update Tangents updated for SSE, incl. skinned meshes.
  • Spells for managing NiControllerSequence and NiDefaultAVObjectPalette
  • Updates for latest nif.xml
    • Major NIF format decoding, esp. in bhk blocks for Bethesda versions, and major non-Bethesda version decoding was done across the board.
    • Reduced nesting of HavokMaterial, HavokColFilter and constraint descriptor types
      • This fixed the coloring of collision wireframes based on their layer (e.g. static, clutter, biped)
      • This fixed the display of some constraints no longer working.


  • Fixed long elusive checkbox list crashing e.g. when editing bitflags like shader flags
  • Fixed cross-platform build issues
  • Fixed game detection for 64-bit builds
  • Fixed "Close All Windows" (taskbar option) crash
  • Fixed display of bhkConvexListShape and sub-shapes in hkPackedNiTriStripsData
  • Fixed BGSM/BGEM priority over the shader property blocks for things such as Double Sided, ZBuffer Test, ZBuffer Write
  • (32-bit Only) Fixed longstanding bug with MOPP code regeneration. The byte array was not correctly updated so all binary data created by this spell has always been corrupt. Confirmed to happen in 1.1.x by a tester.
  • Fix texture loading for non-Bethesda games. The path was being cleaned in a way which Bethesda games require.
  • Fixed Update Tangent Spaces for FO4. Tangents were never updated for FO4, only Bitangents, due to an issue with set<T>.
  • Fixed Transform > Apply for all NiTri* based NIFs. It was not transforming Tangents and Bitangents if the Transform had non-identity rotation. So it was required that you also ran Update Tangent Spaces after.
  • Fixed KFM file loading
  • Fixed Stripify for large shapes.
  • Selecting rows in very large flat arrays is no longer slow with Row Hiding on.
  • Fixed camera motion when changing the default up axis in Render settings.
  • Fixed Color3/Color4 behaviors (allows > 1.0, value doesn't show as hex RGB when > 1.0). BSEffectShaderProperty's Color4 alpha most commonly uses values > 1.0.
  • Fixed rigid body selection in viewport (clicking on rigid body axes). Rigid Body axes now turned on/off with Show Axes.

Non-Bethesda specific changes

  • NiMesh initial rendering support (geometry for versions 20.5+)
  • Corrected NiTexturingProperty UV set selection in 20.1+ NIFs, which also applied to NiMesh NIFs. Lightmaps and such were not getting the correct UV sets so the entire appearance was broken.
  • Corrected NiVertexColorProperty vertex color rendering for 20.1+ NIFs. The information moved to a single Flags field which was not being read by the renderer. Vertex colors did not show up at all before this fix.
  • and support, including the header version which does not have block type strings and only hashes.
  • Usage/Access are retained for NiDataStream with copy/paste
  • Fix palettized NiPixelData texture loading


Block String Preservation on Copy/Paste

block string preservation
Note: My copy/paste actions in the GIF do not necessarily make a valid NIF

Better Segment Visualization (FO4)


NiMesh (20.6) Rendering

nimesh-20 6

Array/Compound Copy/Paste

base-profile-12 18 2017---00 17

NifSkope 2.0 Pre-Alpha 6

@jonwd7 jonwd7 released this Oct 25, 2016

Please note that the release date directly above is not accurate, as I occasionally update this release with new builds. Please check the latest date in the changelog below.



Correct Flags for BSXFlags, NiAVObject (Nodes and Shapes)

The flags for NiAVObject (NiNode, *TriShape, etc.) were severely out of date and I decoded their actual values. The same goes for BSXFlags which didn't have all the options listed.

(Note: Just because the options are there to check doesn't mean you should. :) The last 8 bits of the NiAVObject flags are not even supposed to be read from the file, and for BSXFlags there are several more options past what I've shown, but I believe they are runtime-only)

Major memory leak fixes

There was a shameful number of memory leaks, most of which predated my involvement with the program. The number was so high that it made it hard for me to find the ones that mattered. After actually sitting down and attempting to fix them, I've managed to eliminate every leak I could find during normal usage.

Memory that wasn't leaking was also reduced slightly, and I will be focusing on usage more in future releases.


Skinning Improvements

  • New Skinning toggle: skinning
    • Allows you to preview a mesh in its skinned and unskinned state.
  • SSE and FO4 meshes are now skinned.
    • For SSE this means they will now look the same as the same Skyrim mesh.
    • For FO4 this means clothing/armor/etc will no longer appear below the floor (grid) as well as fixing the appearance of many creatures.
    • FO4 also benefits from now being able to show in-mesh skinned animations (e.g. the refrigerator and certain ammo boxes have skinned open/close animations in the NIF file).
  • Extended bone bound visualization to Skyrim/SkyrimSE (See: which was previously only for FO4 meshes.
    • This helps diagnose issues with visibility/flickering, i.e. if the bounds are not aligned with the visible mesh the game will not be able to correctly calculate visibility.

New Spells

  • Triangulate All Strips (Batch)
    • Lots of older modded meshes should have their NiTriStrips converted to NiTriShapes and this does that for the whole file.
  • Add Tangent Spaces and Update (Batch)
    • Turns the tangent flags on in NiTriShapeData and then runs Update All Tangent Spaces for the whole file.
  • Remove Unused Strings (Optimize)
    • Will clean up the strings stored in the NIF header which are no longer used by any blocks.


  • SSE NIFs with skyrimhd\build\pc\data\ prepended to their texture paths will now load their textures correctly.
  • Fixed a Skyrim/SSE shader error causing black artifacts, most noticeably the opposite side of double sided geometry.


  • Initial Skyrim Special Edition support.
    • Support for new NIF version.
    • Skyrim shaders updated to recognize SSE NIFs, and should render identically to the original.
    • Support for new BSA version for both Archive Browser and texture loading.
    • Auto-detect in Settings > Resources > Paths/Archives updated to recognize SSE.
    • UV Editor updated for SSE NIFs.
    • NOTE: Some spells have not been updated for either SSE (or FO4) and may not show up in menus or may not work.
  • FO4 support updates
    • Greatly improved rendering, using near-exact lighting models for diffuse/specular as compared to in-game. To be specific, the game uses Oren-Nayar for diffuse and Torrance-Sparrow for specular.
    • UV Editor updated for FO4 NIFs.
    • Re-enabled auto-sanitize on save for FO4 NIFs.
  • Resolved issues with opening NifSkope via double-clicking NIFs such as broken shaders.
  • Massive speedups to certain block operations like Copy/Paste Branch. My go-to test case was a certain node in a very large FO4 NIF, with very deep hierarchy. Before refactoring it took 16 minutes to delete and was reduced to about 16 seconds. Which is still slow, but I've done about all I can without a complete rewrite.
  • Moderate speedups (1.5-2.0x) for all file loading, more noticeable on FO4 (and by extension SSE) NIFs whose vertex data is hard for NifSkope to parse.
  • Removed a spell from the spells that run during "Auto-sanitize before save" which would reorder blocks. This can cause a lot of issues in Skyrim where the order matters for texture set overrides, or could break rendering of decals or things like moss in game. The spell can still be run manually.
  • Rendering
    • Increased max framerate to 144 FPS.
    • Fixed the texture filesystem watcher, which reloads a texture when it's been modified on disk. This was broken during the port from Qt 4 to Qt 5, 3 years ago.
  • UI fixes and improvements
    • Completely redid the "Hide version mismatched rows" to be much more efficient, and work for more things. It hides everything that does not apply for that block, not solely those based on NIF version. Having it on no longer greatly slows down many operations.
    • Float editor precision increased. Before, merely double clicking on a float and then canceling the edit would effectively truncate a float from full to half precision. Note: This only happened during manual editing i.e. opening and immediately saving a file would not truncate float precision.
    • Uint editor fixed to allow input values > INT_MAX. Before, to copy/paste a large number in a number box, you'd have to convert it from unsigned to signed. Also added the ability to input numbers as hex.
    • Added a "Copy Transform" button to the inspect widget. This allows you to copy the world transform of a block for use with Transform > Apply, as Transform > Copy in the context menu can only copy local transforms. My specific use case was to be able to get the world transform of bone nodes in actor skeleton NIFs, for use in AO (Art Object) NIFs.
  • Two new spells
    • Sanitize > Fix Invalid Block Names - Corrects common issues with node and shape names such as duplicates, missing names, or names which will cause the NIF to crash the game like 'BSX'.
    • Export/Import Binary - This allows you to export or import binary data to/from file, e.g. exporting the embedded Havok files used for FO4 collision to their own file, editing them, and then re-importing them.

Known Issues

  • Editing shader flags on BSLightingShaderProperty can randomly crash, but I stopped being able to reproduce it and therefore cannot debug it.
  • There was some kind of lighting regression for double-sided geometry, so one side will appear too dark. Possibly caused by FO4 updates to the renderer.
  • Import is STILL disabled and will stay that way indefinitely.
  • Many Spells have not been updated for either SSE/FO4. I will update them as they are requested.

Changes Prior to 2.0.dev6

For the previous changelog visit the 2.0.dev5 release page.

NifSkope 2.0 Pre-Alpha 5

@jonwd7 jonwd7 released this Apr 11, 2016



  • Material files (BGSM/BGEM) will no longer crash NifSkope if they are in JSON format. Note: They will still not be read if in JSON format.
  • Fixed several bugs caused by the partial data model refactor.



  • Vertex Selection mode
    • Due to implementation limitations, vertex selection works on a max of 255 trishapes. NIFs with more trishapes than that will not support vertex selection correctly.
  • Partial loading refactor. Basically, all meshes will load more quickly.
    • To test this I ran XML Checker (in File menu) on entire folders. For the average mesh the speedup is about 2.0x. Full Benchmark
    • This also benefits copy/paste speed for branches.
    • Note: This does not necessarily confer a 2x increase on a single file opened as there are additional things that occur like 3D initialization, texture loading, etc.
  • Node rendering improvements.
  • [Fix] An issue with texture find operations was breaking the UV Editor as well as absolute texture paths.
  • [Fix] A lack of #version pragma in the vertex shaders was the likely cause of random AMD/Intel driver issues.


  • Connect point visualization (BSConnectPoint::Parents)
  • PreCombined visualization (BSPackedCombinedSharedGeomDataExtra)
  • Alpha rendering improvements. Also correctly ignores vertex alpha on trees.
  • [Fix] The appearance of wireframes, vertices, etc. was not consistently following the colors the user defines in the Settings.

Update Notes

Please note that there could be unforeseen issues with my partial refactor of the NIF loading. This is the first update where I've changed the underlying data/model classes.

The load refactoring mentioned above was actually done specifically to benefit FO4 NIFs. Using a proper XML definition for the vertex data, the previous release would take 18 minutes to scan meshes/architecture. After the refactor the proper vertex data definition only takes 17 seconds to scan. However, in the previous releases I did not include the proper XML definitions for this reason, and the XML actually consisted of several optimized variants. Even still, the new "proper" way is over 2x faster than the old "optimized" way. (See Benches)

Changes Prior to 2.0.dev5

For the previous changelog visit the 2.0.dev4 release page.

NifSkope 2.0 Pre-Alpha 4

@jonwd7 jonwd7 released this Nov 23, 2015



  • Wider vertex format support
    • Generated meshes in Meshes/SCOL now fully supported
    • BTR files now have the correct vertex format
    • Many atypical vertex formats now handled correctly, such as certain editor markers
  • Archive Browser fixes
  • Faster BA2 loading
  • Double Sided / Alpha Blending rendering fixes (Gallery)
  • Scrollbar minimum height fix


  • BA2 Support. For both the Archive Browser and loading resources via Settings > Resources > Archives.
  • Material file support. Loads BGSM and BGEM files when referenced by the shader property and will override shader/texture settings.
  • BSLightingShaderProperty/BSEffectShaderProperty all new values now properly decoded.
  • Improved FO4 shader support
    • Grayscale to Palette support. FO4 uses this extensively to make recolors on layered materials easy and use less VRAM.
    • Environment mapping, including blurring of reflections based on glossiness.
    • Much more accurate specular, though still an approximation as the method they used and their asset pipeline is still not clear (i.e. if smoothness is linear or curved).
    • Glow/emissive now shows, accuracy TBD.
    • BSEffectShaderProperty overhaul. FO4 adds support for normal/spec/env for BSESP blocks (also via BGEM). The class and shaders were updated to support this.
  • Support for BC5U FourCC (as opposed to just ATI2 before).
  • Spell updates for Smooth Normals/Face Normals.
  • Bounding Sphere visualization for BSTriShape and BSSkin::BoneData. (Highlighting "Bounding Sphere" in block details will show the calculated bounds)

2015-12-11 Gallery

Update Notes

If you continue to use loose texture files, you must re-extract the cubemaps if they were extracted with B.A.E. v0.03 or earlier. The cubemaps were extracted incorrectly and will break the shaders in NifSkope.

You must add the Materials BA2 to Settings > Resources > Archives if you want to load BGSM/BGEM files without extracting them.


  • Vertex colors now rendering for FO4 meshes.
  • Editor support for new Vertex Color format (i.e. color wheel).
  • Other general rendering improvements for FO4 meshes.
  • Visualization for BSSubIndexTriShape segments which are used for dismemberment or occlusion.


  • Fixed display of normals/tangents including issues at UV seams and mirrored islands.
  • Fixed display of specular. May still be too bright, but it was completely inverted before.

Namely I was having issues with ATI2/BC5 as read by OpenGL, combined with the fact that they seem to have swizzled the tangent-bitangent-normal matrix compared to Skyrim.

Before and After


Initial Fallout 4 support.


Update Notes

This is a highly preliminary first effort for Fallout 4 NIF support. The important parts such as NiTriShape/NiTriShapeData from previous games are gone and replaced with BSTriShape and some inherited shapes such as BSSubIndexTriShape and BSMeshLODTriShape. These no longer inherit from NiTriBasedGeom/NiTriBasedGeomData like all previous Bethesda games and so the workflow will be quite different. The data is on the main block itself, which also poses another set of problems.

In the past replacing merely the vertices/normals/etc. was as simple as pasting over the NiTriShapeData. You can no longer do this, and since we also do not have the vertex record flags fully decoded, I have disabled things such as Import. At some point actions will be implemented to allow importing directly over the Vertex Data array. Worse still, the vertex data is compressed together as one object, and certain vertex features change the length of this vertex data record. For example, turning on Vertex Colors is no longer as simple as toggling Has Vertex Colors. Therefore things like this are not yet implemented.

Skinned meshes appear to use BSSubIndexTriShape exclusively and have a large chunk of undecoded data at the bottom. Until this can be regenerated for any mesh, do not expect to be able to change skinned meshes significantly.

Known Issues

  • Import is DISABLED. We don't know enough about the data formats to reasonably allow for this in general use cases.
  • Visible position of skinned meshes is often incorrect.
  • The vertex format on a small percentage of files is incorrectly handled due to inadequate condition checks. You will get a warning upon opening if saving this file is unsafe.


Changes Prior to 2.0.dev4

For the previous changelog visit the 2.0.dev3 release page.

NifSkope 2.0 Pre-Alpha 3

@jonwd7 jonwd7 released this Nov 2, 2015



  • [Fix] bhkCompressedMeshShape blocks were ignoring their Chunk Transforms (#82)
  • [Fix] Only most recently opened viewport resized correctly (#88)
  • [Fix] File > XML Checker works again


  • New Archive Browser (Image)
    • Allows you to open mesh BSAs in order to open NIF filetypes without needing to extract the BSA.
    • Filepath/filename filter for searching BSAs.
    • Tracks Recent Archives and the Recent Files for each archive.
    • Uses a dockable widget, which you can relocate to wherever you'd like.
  • Improved BSA auto-detection. The "Auto Detect Archives" feature in Settings > Resources > Archives now only includes BSAs which actually have textures. It is recommended you clear your Archives list and redo the auto-detection. This helps cut down on program and NIF load times.
  • Forward/Back support for selected blocks. Currently only supported via the forward/back buttons on the mouse. This lets you cycle through previously selected blocks which can be useful in large files. UI support for this feature may come later.
  • Nif.xml metadata columns now hidden by default (e.g. in "Block Details"). These served no real purpose other than visual clutter and confusing new users, as they are not actually part of the NIF data. The "Type" column remains visible by default as a hint to the user. You can unhide these columns in Settings > NIF > nif.xml.

Update Notes

It is recommended you clear your Archives list in Settings > Resources > Archives and redo the Auto Detect Archives. This helps cut down on program and NIF load times.

This release is compiled with a newer version of Qt, so your UI will reset. Additionally Qt 5.5 does away with a dependency on the ICU libs so the size of the installation has been drastically reduced.


Changes Prior to 2.0.dev3

For the previous changelog visit the 2.0.dev2 release page.

NifSkope 2.0 Pre-Alpha 2

@jonwd7 jonwd7 released this Mar 26, 2015



  • New Settings dialog
    • You now must Save/Apply your changes
    • You can now Cancel your changes
    • Migrated most of the old settings from the old dialog
    • Combined BSA management into same area as texture path management.
    • New settings:
      • Startup Defaults for "Show" options (Axes, Grid, etc.)
      • Camera FOV, movement/rotation speeds (used with WASD and arrow keys)
      • Set specific values for Antialiasing and Anisotropic Filtering
      • Added User Version / User Version 2 to NIF Startup Defaults
    • Restore All Defaults button
      Note: If an option is greyed out it is probably not fully implemented yet and thus disabled in the release builds.
  • Restored "Show Hidden" behavior so now you can see all meshes (such as edge blood) which have their Flags set to Hidden.
  • Default FOV now set to 60. Was previously hardcoded at 45. If you prefer it being at 45 you can set it back in the Render settings.
  • Axes/Grid are separate toggles now. New "G" shortcut introduced to toggle Grid.
  • SLSF2_Weapon_Blood support (Gallery)
    • Note: Some issues still remain with proper alpha blending/sorting when two meshes occupy the exact same space (i.e. Z-fighting). Sometimes the blood's specular NiTriShape will fight with the actual blood NiTriShape.
  • Certain video cards were experiencing graphical glitches.
  • In locales where the comma (,) is the decimal separator, you can now enter periods for floats.
    • Note: The German/French translation has been disabled for now as it was woefully out of date anyway

Update Notes

A few settings will be reset upon upgrading to this version. Your texture paths and BSA archives list will be migrated however.

There are a lot of under-the-hood benefits from switching to this new Settings class that don't fit well into the changelog format. The dialog itself is more generic and more extensible and will allow for much easier additions to the settings in the future. The way that the Settings class communicates with the rest of the program is much improved. Instead of repeatedly asking the dialog window what setting is checked or unchecked, the class (e.g. the viewport) stores the values it needs in a Settings data structure and only updates these values when you click Save/Apply in the dialog window. In some cases, like rendering 60FPS, this can confer a non-insignificant performance improvement as it is doing much less to query these settings.

Changes Prior to 2.0.dev2

For a full changelog visit the 2.0.dev1 release page.

NifSkope 2.0 Pre-Alpha 1

@jonwd7 jonwd7 released this Oct 14, 2014

A very early, experimental build. Registry settings are separate from 1.2 and 1.1.3, so that all three can be run on the same machine (not simultaneously).


2015-03-21 (Hotfix)

Certain video cards were experiencing graphical glitches.

If you are experiencing these issues you can download the patched shaders, and extract the .frag files to the shaders folder in the NifSkope directory, overwriting the existing files.


Major Skyrim Shader Improvements

The goal has always been to reflect as exactly as possible the in-game appearance of Skyrim NIFs. With this release, nearly all Skyrim NIFs are now extremely close to their in-game appearance.

The major new features are:
  • Environment/Cube Mapping (Video)
  • Multi-Layer Parallax (Video)
  • Parallax (Video)
    • Although broken in vanilla, ENB can fix the in-game parallax implementation.
  • Model Space Normals and dedicated Specular map (Example)
  • Face Tint and Hair Tint shaders (Example)
Other new features are:
  • Additional BSLightingShaderProperty & BSEffectShaderProperty values are now sent to the shaders
    • SLSF1_ZBuffer_Test & SLSF2_ZBuffer_Write
      • Now it will be obvious if the correct Z-buffer flags are not set on a mesh.
      • This also means correct translucency rendering, as most translucency is not supposed to write to the Z-buffer. However NifSkope was writing all translucency to the Z-buffer, leading to an ugly "cutout" effect with lots of overlapping translucency.
    • SLSF1_Own_Emit (now correctly affects whether emissive or glow mapping are visible)
    • UV Offset
    • UV Scale
    • Texture Clamp Mode
    • Alpha (Example)
Improved features are:
  • BSEffectShaderProperty
    • Major improvements to the shader code resulting in more accurate shading under all circumstances.
  • Emissive/Glow
    • Emissive values not using Glow Shader are now taken into account as long as SLSF1_Own_Emit is set.
    • Emissive was being incorrectly shadowed by the diffuse light direction.
  • Soft Lighting
    • Completely new algorithm to replace the existing approximation. It is the exact algorithm the game uses.
  • Rim Lighting
    • Was implemented incorrectly.
  • Back Lighting
    • Was implemented incorrectly.
  • Specular lighting model
    • Was using standard Phong model, switched to Blinn-Phong like in most games.
  • Vertex color handling
    • Vertex colors are now correctly accounted for for various effects like glow mapping.
    • If SLSF2_Vertex_Colors is set but Has Vertex Colors is "No", the mesh will correctly blacken.

Effect Animations

Now that nearly all shader properties of a mesh are accounted for in the shaders, it is possible to animate them in NifSkope.

The following animation controllers are now supported: BSLightingShaderPropertyFloatController, BSLightingShaderPropertyColorController, BSEffectShaderPropertyFloatController, BSEffectShaderPropertyColorController, BSNiAlphaPropertyTestRefController


Other features

  • BSOrderedNode rendering support. The order of nodes in a BSOrderedNode is now taken into account and will be rendered in the correct order.
  • Alpha depth sorting.
    • Previous implementation was not sorting by camera depth at all.
    • Alpha blended objects will now sort correctly by their distance from the camera.
  • Quadratic interpolation for animations. Previously all animation used linear interpolation despite the settings. If an animation is set to QUADRATIC_KEY it will now use quadratic interpolation.
  • Brightness controls for directional and ambient light.
  • New Axes overlay (Example)

Fixes and Enhancements

  • Screenshot dialog improvements
    • PNGs were not saving as compressed.
    • Added WebP which at 100% quality is identical to PNG but half the size.
    • Normalized the "JPEG Quality" values so that they give roughly the same image quality between JPEG and WebP.
  • Convex shape generation improvements
    • Now takes the position of the NiTriShape into account.
    • Can now set the Collision Radius from the generation dialog.
  • Correct center of mass position for bhkRigidBody.
  • DEV Restored the ability to right click in the empty area in the Block List tab.
  • DEV Added the context menu to the Header tab.


  • Bugfix: Previous changes to the cell editing behavior prevented using widgets in the Value column of an array's parent row, e.g. the Update button, or Color > Set All.
  • NifSkope now listens on a different IPC port for file I/O so you can now have both NifSkope 1.x and NifSkope 2.x running simultaneously. _2014-12-20: Build has been updated in place to remove this feature. It was causing more problems than it was solving._
  • BSWaterShaderProperty stub class to remove missing NiProperty warning. Note: The warning came from the renderer and had no bearing on the NIF data or its integrity. The stub silences the warning and nothing else, i.e. there was not any kind of rendering support added.
  • BSFurnitureMarkerNode now correctly rotates the furniture based on its Heading value.
  • Drag/drop NIF file(s) to NifSkope window to open them.
  • BTO/BTR initial support
    • The different texture paths (BTO/BTR start with Data/Textures instead of just Textures) are accounted for. Note: Meshes such as BTR files without Has Normals + model space normals (SLSF flag) currently render very dark. This is a lighting issue with or without shaders on. For the terrain files, it seems temporarily setting the scale to 1.0 makes it brighter if you really need to see the textures.
  • Changes to file extension handling to accommodate BTO/BTR.
    • Save As dialog no longer defaults to NIF in the "Save As Type" dropdown, it instead defaults to whatever extension you have open.
  • Multiple cross-platform build improvements. Also a few code changes to get NifSkope compiling on Linux.
  • Initial command line parsing system for passing in arguments to NifSkope.
    • Currently only option is --port or -p. This allows you to manually define which port NifSkope uses, in the event your firewall hates the chosen port, or you would like to run multiple versions simultaneously (e.g. 2.0, 2.1, etc.)
      • NifSkope listens by default to port 12584. To change this you can add, for example, --p 12585 to the end of your Target value in the NifSkope shortcut's Properties window.

Update Notes

Not a ton of big improvements in this build. Releasing now mostly for bug fixes.


  • File windows will now show as modified by appending an asterisk (*) to the window title, as is standard in most document-based applications.
    • Any change to the NIF data will now be seen as a modification, whether or not Undo is supported for that action.
  • Save Confirmation dialog will now account for all modifications (i.e. if there is an asterisk in the window title it will prompt you).
  • An edited value will no longer enter the Undo stack or cause the file to be counted as modified if the value is the exact same before and after (e.g. Set 'Scale' from 1.0 to 1.0)
    • This happened most often when double clicking the value but cancelling the edit.
  • [WIP] New message box system
    • Differentiates visually between info, warning, and error.
    • Messages attempt to be succinct and user-readable, hiding specifics behind a "Show Details" button.
    • Messages which are "spammy" in nature will be appended to the "Show Details" area of a single message box.
  • [Enhancement] The previous NiDefaultAVObjectPalette selection fix/enhancement has been changed to work more generally as it could happen with any blocks which do not inherit NiAVObject such as controller blocks like NiGeomMorpherController.
  • [Enhancement] Many improvements to row/column edit behavior / edge cases
    • Context menu for Spells will no longer show up when right-clicking disabled rows or columns which are not editable.
    • Several columns which should not have editable values are no longer editable (e.g. 'Array1')
    • Double clicking a bool value in a disabled / version-mismatched row will no longer toggle it.
    • Clicking the 'TXT' button in disabled / version-mismatched rows for string types will no longer bring up the string editor.

Update Notes

The message box system is a work in progress and may sometimes feel more annoying than the previous log system. The application should ideally never show more than one message box at a time, so please report any use cases which cause multiple message boxes to show up simultaneously. Eventually a secondary message log system will be put in place for messages which do not need to be displayed in a modal dialog box.


  • _LIMITED_ Undo/Redo support
    • NOTE Currently limited to the editing of most values. No additions/deletions or Spells are supported at this time.
  • Save Confirmation dialog
    • NOTE Currently only accounts for undoable actions. Meaning: Save Confirmation relies on Undo/Redo and thus does not prompt you in all cases.
  • Non-Undoable Action confirmation dialog i.e. it warns you before you make a change which cannot currently be undone.
    • Suppressible via "Do not ask again" checkbox in the dialog window.
    • This will remain in place until all actions are supported via Undo/Redo.
  • [Enhancement] Clicking on meshes in the viewport will no longer select the inapproriate block in the Block List when the NIF has a NiDefaultAVObjectPalette block.


  • Filename will now be filled in Save As dialog.
  • Filepath in statusbar will now update after Saving As a new filename.
  • Crash after exit when displaying collision for certain bhkConvexVerticesShapes. Related to new algorithm from 2014-10-09 release.

Update Notes

As of this release, refactoring has begun on the viewport area. This is to make way for the addition of widgets such as buttons, text, or menus into the viewport itself (versus the toolbars or docks). If you notice that any existing viewport functionality has broken in this release, please report it.


  • Fixed display of CVS collision (bhkConvexVerticesShape). Previous algorithm (1.2 and earlier) drew all edges instead of only exterior ones.

(More Examples)


Since 1.2 Alpha

  • Redone UI
    • Separate dock/widget for NIF Header.
    • New Open/Save widgets
    • Recent Files list
    • Expand/Collapse buttons in Block List and Block Details
      • Warning: Expanding extremely large files is not recommended.
    • Statusbar widgets
      • Filepath of current NIF, shortcut to open NIF location in Windows Explorer.
      • Progress bar for loading/saving.
    • Toolbar widgets hide when not needed, such as Animation, LOD toolbars.
  • Major shader overhaul. Generally much better reproduction of in-game appearance.
    • Shaders are still WIP (accuracy not guaranteed) but currently support:
      • Specular
      • Normal mapping
      • Glow mapping
      • Soft lighting
      • Rim lighting
      • Back lighting
    • BSLightingShaderProperty and BSEffectShaderProperty parameter support such as:
      • UV Offset
      • UV Scale
      • Emissive Color
      • Emissive Multiple
      • Glossiness
      • Specular Color
      • Specular Strength
      • Lighting Effect 1
      • Lighting Effect 2
    • Lighting Shader flags which are reflected in viewport: SLSF1_Specular, SLSF1_Vertex_Alpha, SLSF2_Double_Sided, SLSF2_Vertex_Colors, SLSF2_Glow_Map, SLSF2_Soft_Lighting, SLSF2_Rim_Lighting, SLSF2_Back_Lighting
    • Effect Shader flags which are reflected in viewport: SLSF1_Greyscale_To_PaletteAlpha, SLSF1_Greyscale_To_PaletteColor, SLSF1_Use_Falloff
  • Visualization Modes
    • Lighting Only - Removes diffuse texture so you can see only normal, specular, and glow information
    • Silhouette Mode - Makes model solid black. Ideal for seam/hole detection.
  • Toggling of various lighting/shading options
    • Textures (Alt + T)
    • Vertex Colors (Alt + V)
    • Specular (Alt + H)
    • Glow (Alt + G)
    • Disable Shading (Alt + S)
  • Lighting widget to easily modify and visualize light direction, as well as toggle certain options.
  • Color Picker (Alt-Click) in viewport to set background color from the NIF's colors. (This currently does not save the color between application instances)
  • Redone Editor and Furniture Marker visualization. Instead of "Draw Furniture" there is now "Show Markers" which also includes Editor Markers.
    • Support for new BSFurnitureMarkerNode in Skyrim.
  • New grid/ground option. (Axes are currently disabled for now until they are redone.)
  • [Enhancement] Screenshot dialog enhancements
    • Supersampling Render a picture at 1x, 2x, 4x, or 8x the size of your viewport.
  • [Enhancement] Columns can be rearranged and this is saved/restored the same as column widths.
  • [Enhancement] Type/Value columns swapped by default, to best make use of horizontal space on smaller screens.

Summary of 1.2 alpha changes

  • Screenshot dialog
  • Open multiple files at once
  • FPS bumped to 60
  • Improved anti-aliasing and anisotropic filtering
  • Improved decal rendering / removed z-fighting
  • Skyrim support:
    • bhkCompressedMeshShape display (the primary collision type in Skyrim).
    • BSLODTriShape support in Spells (e.g. Update All Tangent Spaces)
    • BSEffectShaderProperty support for 'Edit UV'
    • Havok scale fixes
    • LOD slider for BSLODTriShape visualization
  • Skyrim / F:NV auto-detection
  • Skyrim / F:NV BSA detection

See previous 1.2.0a releases for all post-1.1.3 changes.

Known Issues

Non-reproducible crash when editing bitflags (e.g. SLSF shader flags). If you can manage to create reproducible steps to cause the crash please let me know.

OpenGL support has been rather dodgy when it comes to the new shaders. Some integrated graphics will report errors despite supporting OpenGL 2.1 (a rather ancient version in 2014).




NifSkope Nightly 20140710

@jonwd7 jonwd7 released this May 16, 2014

Nightly (2014-07-10)

Built from c9da040

Known Issues

  • For Skyrim NIFs, the latest nif.xml (0.7.1) has changes to collision layers which removes the various colors with which collision could display, e.g. OL_STATIC vs OL_CLUTTER. All Skyrim collision will appear as one color, green, until NifSkope is updated to take the nif.xml changes into account.
  • Specular is completely wrong on most all meshes. You can set your specular color to black in Settings > Colors. Now that most meshes are using shaders now, the shaders just aren't being passed the correct specular information (power, glossiness, color).


Nightly 2014-07-10

  • [Feature] "Set All" for Color arrays such as vertex colors.
  • [Fix] Crash in spells which used certain block operations like Crop to Branch
  • [Fix] Translations now work again (but may not be up to date)
  • [Feature] Reimplemented settings migration between NifSkope versions (#61, #11)
    • NifSkope 1.1.3 had removed the registry-key-per-version code. NifSkope 1.1.3 will now maintain its original settings and not be touched by future NifSkope versions.
    • Minor version releases (1.2, 1.3, 1.4) will each get their own registry key. 1.2 will import settings from 1.1.3 when applicable.

This means your UI and other settings will reset the first time you run this build, and it will migrate all the important settings from the 1.1.3 settings, and now 1.1.3 will no longer interfere with 1.2+ and vice versa.

  • [Enhancement] Screenshot dialog enhancements (#60)
    • You have the choice of using the screenshots directory in your NifSkope folder (it auto-creates the directory if it's not yet present).
    • You have the choice of saving to the same folder as the NIF file.
      (You can still save anywhere by opening the File dialog)
    • It creates a default filename based on the NIF filename and the datetime.
    • It saves your preferred JPEG quality.
    • Changed the file priority to JPG > PNG > BMP. So that JPG is the default.
    • Widened the dialog for legibility.
  • [Enhancement] BaseModel does not store file info (#59)
  • [Enhancement] Window title now shows NifSkope version and release (e.g. 1.2.0 Alpha 2) (#61)
  • [Fix] Inverted UV Editor zoom
  • [Fix] Redid alpha depth biasing to work more generally so that e.g. wireframes can still show above decals.
  • [Fix] Mesh selection (i.e. clicking TriShapes) in viewport is inaccurate with Antialiasing enabled in Render > Settings. (#57)
  • [Fix] JPEGs do not save in Nightly 20140528. (Missing DLLs) (#58)


  • [Feature] Minimal shader support for Skyrim (normal mapping, partial glow mapping). (#26)
  • [Feature] Minimal shader support for Fallout (normal mapping). (#26)
  • [Feature] Alpha depth biasing for decals (alpha tested transparencies in same plane as base mesh). Completely eliminates z-fighting / flickering.
  • [Feature] Multisampling AA.
    • Hardcoded at 16 samples, though driver settings should be able to override this. Will be configurable in the future.
  • [Feature] Anisotropic Filtering.
    • Uses max available. Will be configurable in the future.
  • [Feature] Save screenshot of viewport to file. Render > "Save View to File...".
    • I re-enabled this feature from some disabled code. The action was under the Render menu and I left it there, though I will likely relocate it to File, and create a toolbar icon for it.
  • [Enhancement] FPS bumped to 60, from 30... There seems to be a floating point error which causes 30 to become ~21, and 60 -> 62.5. This will be fixed in the future and FPS will become user configurable in Settings.
  • [Enhancement] Began GL code cleanup / refactoring.


  • [Feature] The "Textures" array in BSShaderTextureSet blocks will be expanded by default. (#55)
  • [Fix][Qt5] The file dialog for Texture > Choose would cause the NifSkope window to lose focus after selecting a texture (reported by Hanaisse) (#54)


  • [Feature] You can drag multiple files to the executable, or select multiple files from Windows Explorer and hit Enter or Right Click > Open.
    • Opening multiple files is not yet available from the file dialogs inside NifSkope.
  • [Enhancement] LOD slider is enabled only on NIFs with BSLODTriShapes.


  • [Feature] Add Skyrim, Fallout: NV auto-detection (#49)
  • [Feature] Added Skyrim, Fallout: NV BSA support (#49)
  • [Feature] Added display support for bhkCompressedMeshShape (#7)
  • [Feature] BSMultiBound - Initial support, displays AABB/OBB (#16)
  • [Feature] Edit UV support for BSEffectShaderProperty (reported by Hanaisse) (#4)
  • [Feature] BSLODTriShape support for Spells (same as NiTriShape) (#1)
  • [Feature] LOD Level visualization for BSLODTriShapes (#22)
  • [Fix] Plugin - OBJ - UV Import fix (#8).
  • [Fix] Enums sorting out of order
  • [Fix] Bitflags with only one checked option were uncheckable (reported by ttl269) (#51)
  • [Fix] Havok scale fixes for Skyrim (#3)
  • [Fix] Scale generated bhkConvexVerticesShape for Skyrim (#7)
  • [Fix] Sluggish UI elements in Rendering Settings due to continuous flushing of 3D.
  • [Improvement] Port to Qt5 (#28)
  • [Improvement] Refactored FSEngine (BSA handler) for Qt5 (#36)
  • [Improvement] Tooltip formatting, large enum display. (#47)
  • [Improvement] Export UV Template rewrite (Broke in Qt5 port, reported by Hanaisse) (#52)
    • PNG, BMP formats; Transparent background (PNG); Wire color/alpha selection; Antialiasing
  • [Improvement] Code refactoring (#41)
    • Updated to use C++11
    • Removed obsolete code
    • Replaced deprecated code with newer alternatives
  • [Improvements] Updated project files
    • Build improvements for GCC, MSVC.
    • Docsys, doxygen make targets.
    • Project structure reorganisation (#31)
  • [Translation] Improved french translation (NicocoIN)