10 ‐ Changelog - DaymareOn/hdtSMP64 GitHub Wiki

Version 3.0.5


⚡ Performance Improvements

  • perf: replaced 'ppl' threading system by Intel 'tbb' Major thanks to Kanin-Hop and Asdt123123 for this improvement!
  • perf: Improved physics profiling in the logs when at log level 5. Major thanks to Asdt123123 for this improvement!

✨ MCM

  • feat, user-friendliness: removed obsolete tag groupEnableMLCP and related message from MCM and config

✨ Validator

  • feat, user-friendliness: improved validator with new assertions (error messages when a xml file isn't valid)

Version 3.0.4


✨ MCM

  • feat, user-friendliness: Replace blocking Debug.MessageBox in tagDefaultValue with a non-blocking Debug.Notification (On startup with only configs.xml present (no preset XMLs, or presets from an older FSMP version missing newer tags), the MCM fired a blocking popup per missing tag — e.g. "This tag isn't set in the loading file: logLevel"). Sincere thanks to Kanin-Hop for this evolution!

Version 3.0.3


🐛 Bug Fixes

  • fix: fixed face geometry handling in VR mode by properly managing cached node data through cloning instead of direct mutation. Enhanced bone resolution accuracy during VR interactions. Improved diagnostic logging for face geometry operations. (This fixes the black face bug reported by an user when the face geometry is force-reloaded by the game. I assume it's caused by the fact we're mutating the npcFaceGeomNode in the skeleton merge section of processGeometry.)
  • fix: instead of overwriting the vfunc, we just use the old detour hook like in 2.5.1. Avoids breaking mods that also hook that function, while still allowing the detour chain to run (this fixes the compatibility issue with Mu Joint Fix introduced in 3.0.0).
  • fix: install hooks at init (Same behavior as FSMP 2.5.1: reduces incompatibilities with other mods)
  • Major thanks to Asdt123123 for these fixes!
  • CTD fix: fixes a CTD when the player uses the FSMP data dumping function, and there is some Node which isn't a NiNode. By DaydreamingDay

Version 3.0.2


⚡ Performance Improvements

  • CTD fix + perf: face geometry crashes, invisible NPCs, some performance stutters - Replaced NPC face geometry loading mechanism with improved model-database workflow. Enhanced bone-name resolution validation with stricter memory bounds checking and printable string verification. Improved error logging for failed geometry loading and unresolved bone references (replaces the previous NiStream system with an implementation that mirrors Bethesdas. We now use their BSModelDB, which handles all the broken nifs and what not for us, and has a built-in cache layer and what not. This also implements Bottle's corrupted bone name check as a final fallback - although that should likely never be hit.) Major thanks to Asdt123123 for this fix!
  • fix + perf: keep nearby NPCs active when auto-adjust shrinks the skeleton budget (close NPCs are now never deactivated by the budget cap, so cap oscillation can no longer strip physics from NPCs standing next to the player. Behavior is unchanged when auto-adjust is off, and unchanged for NPCs outside minCullingDistance. In the (rare) pathological case where more than maxActiveSkeletons NPCs are all inside minCullingDistance, the cap becomes a soft floor rather than a hard ceiling — preferable to a stiff NPC in the player's face. Side benefit: previously, in crowd scenes where the cap saturates, m_minCullingDistance was effectively inert: the top-N skeletons by sort score were almost always in-frustum and unoccluded, so the frustum/LOS overrides it guards rarely fire. This change gives the setting meaningful reach in the regime where it matters most). Major thanks to Kanin-Hop for this fix!

🐛 Bug Fixes

  • CTD fix: improved face geometry loading mechanisms and bone reference handling for enhanced stability and reliability. Optimized VR face geometry processing and bone name resolution (the code was only searching for the original name. If a bone had already been renamed then boom!). Existed on 2.5.1. Major thanks to Asdt123123 for this fix!
  • fix: avoid continuous enabling/disabling of NPC physics (the previous auto-scaling logic used fixed step sizes (+2/-2) regardless of context: scale-down was too aggressive at low skeleton counts — dropping by 2 at 5 active skeletons is a 40% reduction from a single slow frame, causing unnecessary pop-in and oscillation. Scale-up used a fixed 90% budget threshold with a fixed +2 step, ignoring how many skeletons would actually fit in the remaining headroom. The minimum floor of 1 meant physics could be reduced to a near-useless state. Nota: we now never drop below 3 max enabled NPCs). Major thanks to Kanin-Hop for this fix!
  • fix: the MCM includes checks for dependencies now, so it should be obvious if JContainers or papyrus util is missing; this will prevent the MCM from corrupting config files. Major thanks to Kanin-Hop for this fix!

✨ MCM

  • beauty: add background image in MCM Sincere thanks to Kanin-Hop for this evolution!

Version 3.0.1


⚡ Performance Improvements

  • Significantly improving performance: enhanced physics simulation performance with optimized collision detection and motion prediction for skinned meshes (optimize broadphase, and batch parallel better).

🐛 Bug Fixes

  • CTD fix: improved stability when loading actor skeleton and geometry data by preventing crashes from invalid memory references in character models (correctly handle broken head meshes to avoid crashes/corruption). The root cause appears to be bad LE ports which the engine internally handles properly, but we don't.
  • CTD fix: guard against invalid nodes to avoid CTDs (OpenAnimationReplacer creates dummy characters in the main menu which will lead to FSMP reading invalid data and crashing.)
  • Validator fix: correctly made wind-factor a positive float rather than a [0, 1] value to reflect the real fsmp code. Removed the obsolete wind-effect tag.

Version 3.0.0


⚡ Performance Improvements

  • Loading hair/outfit physics in RaceMenu is now 2–4× fasterSystemCreator was heavily optimized: bone lookups are now O(1) via hash maps, triangle-building no longer spams heap allocations, collision shapes are built in parallel, and F16C hardware instructions are used to convert bone weights on supported CPUs (AVX2+).
  • Smoother physics simulation — Multiple internal optimizations to how simulation "islands" (groups of interacting objects) are managed reduce overhead each frame.
  • Better CPU cache usage in transform processing — The per-bone parallelism was replaced with per-system parallelism, which is faster due to reduced cache misses and thread overhead.
  • Optimized collision dispatcher — The low-level collision broadphase and dispatch code was cleaned up and significantly optimized.
  • Optimized mesh collision — Skinned mesh (soft body) collision now avoids unnecessary heap allocations and redundant work each frame.
  • Compiler and SIMD improvements — Several hot paths now use SSE4 and AVX2 intrinsics for faster math (quaternion/transform operations).
  • Major thanks to Asdt123123 for this astounding work!

🐛 Bug Fixes

  • Fixed the "slot 32" physics bug — A long-standing bug where certain outfits' physics would completely break has been resolved.
  • Fixed first-person ↔ third-person reset — Switching between first and third person no longer causes a physics explosion on the player character.
  • Facial morphs no longer break — Fixed a Skyrim bug where hard-part items (like SMP hair) could cause face morphs (expressions, RaceMenu morphs) to stop working. Affects characters with physics-enabled hair or head accessories.
  • Fixed head corruption leading to CTD — Corrected an issue where face geometry (FaceGen) processing could corrupt data over time and eventually crash the game.
  • Dynamic HDT (DHDT) no longer corrupts game saves — Saving while a DHDT override was active could make the save impossible to load. This is now fixed with a safer save/load system.
  • Improved DHDT transfer stability — Switching physics presets via DHDT no longer causes visual explosions or constraint glitches. World transforms are now properly computed before transferring velocities between rigs. Thread safety is ensured.
  • Bone name matching is now case-insensitive — Short or mixed-case bone names no longer cause SMP glitches or physics failures.
  • Fixed race condition in transform writes — Transform data is now safely written on the main thread, preventing rare physics corruption.
  • Fixed a memory leak in skeleton nodes — Previously, skeleton nodes were not always properly cleaned up, which could cause memory growth over long sessions.
  • Raised the collision contact limit — The old artificial limit was causing FPS drops when two physics shapes got stuck inside each other. The limit has been doubled, giving Bullet Physics more information to resolve overlaps without a framerate tank.
  • Physics shapes are now built from the neutral havok pose — Prevents shapes from being built in incorrect positions at load time.
  • VR: Fixed crashes from bone limit and bad bone references — Two separate crash-to-desktop bugs affecting VR users have been fixed.
  • Fixed minor memory leaks — Several small memory management issues in collision and mesh code have been resolved.
  • Fixed preset loading — loading a preset now correctly reflects success or failure, and the "currently loaded" label is properly tracked even across save/load cycles.
  • Fixed potential logic inconsistency in config parsing.
  • Fixed a bug where existing saves could display incorrect or missing page labels in the MCM.
  • Ignore constraints declared by modders between two non-physics-enabled bones.
  • MCM: ensure that the 'Max Active Skeletons' slider can be adjusted even when 'Auto Adjust the max number of NPCs' is disabled.
  • Major thanks to Asdt123123, BackPorter, Alandtse and /bin/cat for this astounding work!

✨ New Features

  • BudgetMS: Time-based physics budget — The physics timing system has been redesigned. Instead of a frame percentage, you now set a budgetMs value: the maximum number of milliseconds FSMP can use per frame. This makes behavior more predictable across different hardware and frame rates. The metrics display has also been improved to show clearer frame-time impact numbers.
  • Improved wind simulation — The wind implementation has been overhauled for more realistic and stable cloth/hair movement in wind zones. A new xml setting allows to configure the intensity of wind per-bone.
  • AVX build is now the default — The installer now defaults to the AVX variant (better performance on modern CPUs) instead of the no-AVX fallback.
  • AVX variant is logged at startup — The log file now reports which AVX level the DLL was compiled for, making it easier to verify your installation.
  • Config and SMP reset events are now logged — When the physics config is loaded or SMP resets, the active settings are written to the log. Useful for diagnosing configuration issues.
  • Dynamic HDT provides 2 new functions: enabling/disabling physics on a bone; reset physics, with or without snapping back to reference pose.
  • XSD schema for configs.xml — An XSD validation file is now included, allowing mod authors to validate their configs.xml files in editors like VS Code or Notepad++ before shipping.
  • Better dev build identification — Dev builds now log their exact version string (e.g. hdtsmp64 v3.0.0-dev-abc1234) at startup.
  • MCM — Frame Time Budget control: A new slider "Allowed frame time budget for SMP (ms)" is now available in the MCM under the auto-adjust section. This replaces the old "Percentage of frame time" approach and lets you set a direct millisecond budget (0.1–16 ms) for SMP physics per frame.
  • MCM — Active preset indicator: The Presets page now highlights the currently loaded preset with a "Loaded!" label so you always know which preset is active.
  • MCM — Add Default Preset
  • Major thanks to Asdt123123 and Kanin-Hop for this astounding work!

🗑️ Removals / Cleanup

  • CUDA support has been removed — CUDA-accelerated physics was unmaintained and caused build complexity with no practical benefit. All users were already running the CPU path. The FOMOD installer and the MCM have been cleaned up accordingly.
  • Unused config fields removed — Several leftover configuration fields that had no effect have been removed from the sample config files and from the MCM to reduce confusion.

⚙️ Default Configuration Changes (configs.xml and MCM)

  • Frame time budget replaces percentageOfFrameTime: default is now 3 ms (was 18% of frame time).
  • numIterations (Simulation quality): default raised from 8 → 16.
  • maxSubSteps: default raised from 1 → 4 (more sub-steps per frame for more stable simulation - it was the real applied value in previous versions).
  • enableCuda and groupIterations entries removed from all config files.
  • Major thanks to Kanin-Hop for his very helpful work in the MCM and wiki!

📋 Preset Changes

Preset What changed
Performance Frame time budget changed from percentage (18%) to 2.8 ms
Reasonable Frame time budget: 30% → 4 ms; numIterations: 10 → 16; maxSubSteps: 2 → 4; culling distance: 300 → 500
Quality Frame time budget: 60% → 5 ms; numIterations: 50 → 32; culling distance: 300 → 500; 1st-person physics now enabled (was disabled)
Debug Frame time budget changed from percentage (30%) to 5 ms
  • Major thanks to Kanin-Hop for this very useful work in the MCM!

Documentation change


Library change

  • FSMP now uses CommonLibSSE instead of SKSE. Major thanks to BackPorter for this enormous work!
  • For the users, it means that FSMP is now version-independent.
  • For the modders, it means the codebase is a lot more readable and easily modifiable / buildable, come contribute :) !

📦 Version

  • Official version is now 3.0.0

📦 License

  • The licence is now GPL V3, and not MIT anymore - Among other things, it guarantees users access to the code of FSMP and of any of its derivatives.

Version 2.5.1

  • Status: Released in beta version
  • Fix: Moved the FSMP User Guide pdf to the Skyrim data folder.

Version 2.5.0

  • Status: Released in beta version
  • Feat: Catch and log better the fatal FSMP AE skse loading errors to better investigate them.
  • Feat: Provide FSMP, its MCM, User Guide and Validator in one install fomod.
  • FSMP-Validator 2.1.0:
    • Docs: Add FSMP architecture diagram.
    • Fix: Added springDampingLimited to generic-constraint and generic-constraint-default in the xsd.
    • Docs: Better tag descriptions of: angularStiffness, angularStiffnessLimited, springDampingLimited, can-collide-with-bone, can-collide-with-tag, frameInB, gravity-factor, inertia, linearBounce, linearDamping, linearLowerLimit, linearStiffness, linearStiffnessLimited, linearUpperLimit, no-collide-with-bone, no-collide-with-tag, stopERP.

Version 2.4.0

  • Status: Released in beta version
  • Feat: Reintroduce skinning logs allowing mod authors to debug SMP skinning.

Version 2.3.1

  • Status: Released in beta version
  • Fix: Fix a skse version bug for GOG Skyrim 1.6.1179.

Version 2.3.0

  • Status: Released in beta version
  • Feat: Add FSMP for Skyrim GOG 1.6.1179.
  • Note: From now on, FSMP for Skyrim GOG 1.6.659 isn't provided anymore. FSMP 2.2.1 is the most recent FSMP for Skyrim GOG 1.6.659.

Version 2.2.1

  • Status: Released in beta version
  • Fix: Fixed a fomod bug for Vortex users.

Version 2.2.0

  • Status: Released in beta version
  • Feat: Add FSMP for Skyrim 1.6.1170.
  • Note: From now on, 1.6.1130 isn't provided anymore. FSMP 2.1.3 is the most recent FSMP for 1.6.1130.

Version 2.1.3

  • Status: Released in beta version
  • Fix: Fixed a fomod bug for Vortex users, for Skyrim 1.5.97 and maybe VR too.

Version 2.1.2

  • Status: Released in beta version
  • Fix: Fix locale-dependent bug while reading floats in configs.xml.

    It happened at least for RU/UKR skyrims. The player was told by skse that the FSMP dll wasn't up-to-date (which was wrong). Credits and thanks to ousnius for this fix. Bug was already in original HDT-SMP.

  • Note: From now on, 1.6.353 and debug builds aren't provided anymore. FSMP 2.1.0 is the most recent FSMP for 1.6.353. If you really need a debug build, contact me.

Version 2.1.1

  • Status: Released in 2.1.2
  • Fix: Fix random function arguments in wind code (introduced in 1.49.0).

Version 2.1.0

  • Status: Released in beta version
  • Feat: Add FSMP for Skyrim 1.6.1130.
  • Feat: Adapted the FSMP fomod so that next time a new version happens, it says that FSMP isn't yet ready for that version.
  • Credits: Thanks to Snotty for his support to all players on the discord #help channel.

Version 2.0.7

  • Status: Released in beta version
  • Fix: Fix slowness introduced by 2.0.5. Thanks to Snotty for finding it and reporting it.

Version 2.0.6

  • Status: Released in 2.0.7
  • Fix: Calculate SMP for very near skeletons even if their origin point is hidden.

    We now always enable the skeletons that are just around the camera. It's useful if for example the skeleton origin is very near, behind the camera, but some parts or the skeleton are in front of the camera and need to be animated. This is implemented with a minCullingDistance parameter: any skeleton nearer than this distance is always calculated. Default value is 500. Can be disabled by setting the distance to zero.


Version 2.0.5

  • Status: Released in beta version
  • Fix: 3rd person view fix. Skeletons that were hidden from the PC by something had their physics not calculated. Now it's hidden from the camera. Bug was introduced in 1.37.

Version 2.0.4

  • Status: Released in beta version
  • Fix: Collisions between per-vertex-shapes were faulty.

    Bug was already in original HDT-SMP. With this comes the opportunity for smp mod authors to use these collisions which might be faster to compute.


Version 2.0.3

  • Anniversary: FSMP is two years old!! Let's celebrate this!
  • Status: Released in beta version
  • Fomod: The fomod detects automatically the skyrim version. No more "Help me, FSMP doesn't work" due to manual version errors.
  • Fix: Manage smp at x0.15 - x200 scales.

    Do not scale spring linear & angular damping when scaling, scale the linear upper/lower limits of the spring movements when scaling. Done and tested specifically for the Giantess mod. Bug was already in original HDT-SMP.


Version 2.0.2

  • Status: Released in beta version
  • Fix: Reenable smp off and smp on console commands.

Version 2.0.1

  • Status: Released in beta version
  • Fix: Set the default motorERP and stopERP values at the Bullet default values to avoid regressions.

Version 2.0.0

  • Status: Released in beta version
  • For Modders: Add non-hookean physics for more realistic moves! Thanks to Webspam.
  • Features: Allows to configure more finely generic constraints (defaults as per Bullet library).
    • enableLinearSprings (can bypass spring algorithm entirely for performance)
    • enableAngularSprings
    • linearStiffnessLimited / angularStiffnessLimited
    • springDampingLimited
    • linearMotors / angularMotors
    • linearServoMotors / angularServoMotors
    • linearNonHookeanDamping / angularNonHookeanDamping
    • linearNonHookeanStiffness / angularNonHookeanStiffness
    • linearTargetVelocity / angularTargetVelocity
    • linearMaxMotorForce / angularMaxMotorForce
    • motorERP / motorCFM
    • stopERP / stopCFM
  • Docs: Documented in the last version of FSMP-Validator.

Version 1.50.9

  • Status: Released in release candidate
  • Fix: Fix random CTD introduced in 1.50.8-rc1.

Version 1.50.8

  • Status: Released in RC / Test version
  • MAJOR PERFORMANCE improvement: SMP physics now runs in a separate thread from the main Skyrim thread.

    If your physics calculus take less time that the unrelated part of the skyrim main loop, it doesn't slow that loop anymore. Caveats: CPU will work on other cores (heat/electricity). Added a new hook to Skyrim exe, report conflicts with other dlls.

  • Performance Config: Provide performance config inspired by full_inu.

Version 1.50.7

  • Status: Released in release candidate
  • Fix: Add a configuration option to solve the slow time bug.

    When enabled, use the RealTime clock instead of the WorldTime clock. Improves stability of physics simulation when game time is slowed or fps are high (100+). Bug existed since original HDT-SMP.


Version 1.50.6

  • Status: Released in release candidate
  • Fix: Take into account the unexpected armors names changes done by the Skyrim executable.

    Solves bug where NiAVObject names are changed on the fly by Skyrim, preventing armor re-application during SMP resets. Affects armors but not headparts. Bug existed since original HDT-SMP.


Version 1.50.5

  • Feat: Added a configurable option to disable headparts physics when a wig is present.

Version 1.50.4

  • Fix: Fix remaining invisibility bugs on AE.

Version 1.50.3

  • Feat: GOG version. Thanks to igloomod!

Version 1.50.2

  • Fix: When you have at the same time smp hair and smp wig, now, only the wig is physically calculated.

Version 1.50.1

  • Fix: Remove the 8 bones limit on AE. Thanks to jg1!

Version 1.50.0

  • Feat: PC max rotation speed is now configurable. Thanks to webspam!
  • Fix: Fix invisible characters bug introduced in 1.49.1 for VR users. Thanks to alandtse!

Version 1.49.3

  • Fix: Fix the invisible/floating head part bug on AE introduced since AE integration. Thanks to Acro!

Version 1.49.2

  • Fix: Fix CTD with hdt-smp hairs on NPCs on AE. Thanks to antpillager!

Version 1.49.1

  • Fix: Prevent crash on shutdown introduced in 1.49.0. Thanks to jg1!

Version 1.49.0

  • Anniversary: FSMP is one-year-old!!
  • Performance: MAJOR PERFORMANCE increase: calls to the bullet physics engine are now multithread. Thanks to Alandtse.
  • Feat: Preliminary introduction of WIND. Thanks to Alandtse.

    Matches Skyrim wind direction. Occlusion logic included (objects protecting the PC).

  • Cuda: Updated cuda compilation from 11.6 to 11.8. Added Ada Lovelace (RTX 4090/4080) and Hopper support. Removed Kepler 35/37.
  • Bullet: Upgrade from Bullet 2.89 to Bullet 3.24.
  • Modders: Interface added for other mods to apply forces (magnetism, earthquakes, etc). Thanks to jg1.
  • Technical: FSMP version printed in logs. Updated to VS 2022 (v143).

Version 1.48.0

  • Feat: Integrated 1.6.353 versions in the main installer.
  • Technical: Streamlined build process for VR/SE/AE/GOG/Epic versions.

Version 1.47

  • Fix: CTD fix by Alandtse (happened when armor was added without a node).
  • Technical: Provided 1.6.353 dlls. Updated building instructions for VR.

Version 1.46

  • Fix: Missing head parts on AE (vampire bug). Solves some invisibility bugs.

Version 1.45

  • Update: AE version updated to 1.6.640.

Version 1.44

  • Fix: Fix the "invisible bug" and the "displaced head parts bug" on AE.

Version 1.43

  • Logging: Users can now track all bones creations in the logs.
  • Technical: Bones creation code factorized. New warnings for undeclared bones or double declarations.

Version 1.42

  • Fix: Disable autoAdjustMaxSkeletons by default (prevents physics loss on lower-end PCs).
  • Technical: configs.xml settings now have better comments.

Version 1.41

  • Fix: Solved the assertion crash when using a debug version (introduced in 1.37).

Version 1.40

  • Feat: Made configurable the number of physics calculus substeps (maxSubSteps).

    Players can now choose between simulation quality and higher FPS.


Version 1.39

  • Fix: Scaling bug introduced in 1.25 about generic scale constraints (visible at scale 10).
  • Feat: Source configured to allow debugger attachment.

Version 1.38

  • Fix: Stop the corruption of saves for AE introduced in 1.37.
  • Fix: Avoid CTDs rarely happening during smp reset or closing RaceSex menu.
  • Performance: Allow configuration to disable PC physics in 1st person view.

Version 1.37

  • Contributors: Enormous thanks to alandtse and SesamePaste.
  • MAJOR - VR: Integration of VR branch.
  • MAJOR - Performance: Automatically adjusts number of physics-enabled NPCs based on time budget (configs.xml).
  • MAJOR - Feature: Added support for weapon nodes.
  • Technical: Compilation based on CUDA 11.6. Fixed NPC feet visibility bug.

Version 1.36

  • Technical: Papyrus scripts of Dynamic HDT moved to a dedicated mod.

Version 1.35

  • Revert: Reverted 1.31 (it introduced jitter under 60 fps).

Version 1.31

  • Performance: Physics run exactly at min-fps frequency when under that threshold to avoid resonance artifacts and resonance errors.

Version 1.30

  • Fix: Fixed collision bug introduced in 1.18 (jiggle).

Version 1.29

  • Fix: Fixed collision bug introduced in 1.25 (wild hairs).

Version 1.25

  • MAJOR Performance: Uses less CPU at high fps, and a lot less CPU/GPU at low fps.
  • Fix: Cull skeletons in the cone behind the camera correctly.

Version 1.24

  • Feat: smp reset now reloads the configs.xml file.

Version 1.18 - 1.23

  • 1.23: Fatal error when loading SKSE 2.1.5 solved.
  • 1.22: Reworked culling math for performance (removed trig/divisions).
  • 1.20: Culling depends on camera orientation rather than player orientation.
  • 1.18: Added AE CUDA versions. Integrated CUDA/NOCUDA and AVX/AVX2/512 into one solution.

Version 1.11 - 1.17

  • 1.17: Bugfix for hair on AE.
  • 1.15: Fix CTD caused by NULL m_name of BSTriShape (Fix by romanicles).
  • 1.12: CTD when changing sex in RaceMenu solved in VR CUDA.
  • 1.11: All SSE versions now generated on DaydreamingDay branch. Standardized configs.xml values.

Version 1.0 - 1.10

  • 1.10: Added SSE - Not CUDA - AVX512 version.
  • 1.5: Replaced download files by a fomod installer.
  • 1.3: Added version by geniusty removing auto-jiggling.
  • 1.2 VR: Logic improvements for performance in VR.
  • 1.0: Initial version.
⚠️ **GitHub.com Fallback** ⚠️