2020.7.15.1186 - Native support for MikkTSpace tangent generation, tweaks, fixes
Native support for MikkTSpace algorithm for calculating tangents! It's on by default for newly imported models, you can also recalculate it for any existing mesh from the inspector. This should fix many inconsistencies in normal maps and height maps and visual artifacts.
Also a bunch of other stuff that has accumulated. Improvements for headless and some fixes for handling permissions/roles. Fixes for incorrectly used video playback engine in some cases, causing potential crashes.
[h2]New Features:[/h2]
- Integrated the Mikktspace Tangent Space calculation algorithm directly into Neos (recently requested by @H3BO3)
-- This should produce more robust results and fix visual artifacts (like normal map seams) for models. This algorithm is very widely used (e.g. by Blender, Unity, Unreal Engine, Substance Painter and others) so the tangents should now be consistent with many industry standard tools
-- It is now used by default on imported models, instead of Assimp's tangent space calculation.
-- You can also run it manually on any existing mesh through the StaticMesh in the inspector, by running "Recalculate Tangents (Mikktspace)"
-- Since there wasn't existing .NET Wrapper for this algorithm, I've made one and published it as open source under MIT for anyone to use! https://github.com/Frooxius/Mikktspace.NET
- Added overloads for Math function nodes with two inputs that accept scalar as first argument and vector as second
GitHub
Frooxius/Mikktspace.NET
A .NET / C# wrapper for the Mikktspace tangent generation algorithm - Frooxius/Mikktspace.NET
[h2]Tweaks:[/h2]
- Increased number of parallel jobs for processing uploads and record syncs, reducing some queue stalls with long-running jobs (this should reduce cases of the syncing sometimes taking a long time)
- Disabled RTF parsing for Input and Display LogiX nodes, making it easier to edit/diagnose strings with RTF tags in them
- Some internal moderation tool improvements (based on suggestions by @CanadianGit, @Veer | Chief of Moderation and @Dante)
- Some other internal security improvements
- Sealed many of the LogiX node types, potentially enabling compiler/JIT optimizations
- Set Global/Local Rotation/Scale nodes now use identity rotation/scale as a default when value is not plugged in (suggested by @Alex from Alaska)
- Headless will now skip most heavy updates in the gameloop if no users are present in the world, effectively treaing it as a background world (based on previous feedback by @Enverex)
- Changed default order of dash screens (based on suggestion by @Shifty | Quality Control Lead)
- Tweaked dash screen button colors
- Headless client/server will now use the higest available role when setting up role overrides, rather than skipping assigning it altogether when the role is higher than the host is allowed
- Upgraded to Unity 2019.4.4f1 (from 2019.4.3f1)
- Updated the Debug build of Neos
[h2]Bugfixes:[/h2]
- Fixed VideoTextureProvider getting corrupted when unexpected error occurs in youtube-DL (e.g. due to invalid URL) and not loading any subsequent videos (reported by @A Monsoon of Babies)
- Fixed invalid playback engine switching when playing videos from URL with unknown MIME, resulting in Unity Native being used when libVLC should be used instead and resulting in potential crashes (reported by @RΞBOЯИ through @Shifty | Quality Control Lead)
- Fixed Atan2 LogiX nodes having swapped X and Y inputs in relation to the underlying function (reported by @Zyzyl)
-- Exiting instances will have their inputs swapped on load to preserve the original behavior
- Fixed some more potential time comparison errors due to local system timezone (when updating world statistics and focus changes)
- Fixed headless host not getting assigned proper role (effectively defaulting to Admin), causing odd behaviors in the permission system (e.g. not being assign certain roles in some cases, but giving role higher than it normally could in others) (based on feedback by @Enverex)
- Fixed headless host using the DefaultHostRole when determining which role can and cannot be assigned, rather than taking the actual Host role into account
-- This fixes odd behavior where the host is a friend or has an override and as a result gets a higher role than regular host, but this higher role isn't taken into account (based on feedback by @Enverex)

Also a bunch of other stuff that has accumulated. Improvements for headless and some fixes for handling permissions/roles. Fixes for incorrectly used video playback engine in some cases, causing potential crashes.
[h2]New Features:[/h2]
- Integrated the Mikktspace Tangent Space calculation algorithm directly into Neos (recently requested by @H3BO3)
-- This should produce more robust results and fix visual artifacts (like normal map seams) for models. This algorithm is very widely used (e.g. by Blender, Unity, Unreal Engine, Substance Painter and others) so the tangents should now be consistent with many industry standard tools
-- It is now used by default on imported models, instead of Assimp's tangent space calculation.
-- You can also run it manually on any existing mesh through the StaticMesh in the inspector, by running "Recalculate Tangents (Mikktspace)"
-- Since there wasn't existing .NET Wrapper for this algorithm, I've made one and published it as open source under MIT for anyone to use! https://github.com/Frooxius/Mikktspace.NET
- Added overloads for Math function nodes with two inputs that accept scalar as first argument and vector as second
GitHub
Frooxius/Mikktspace.NET
A .NET / C# wrapper for the Mikktspace tangent generation algorithm - Frooxius/Mikktspace.NET
[h2]Tweaks:[/h2]
- Increased number of parallel jobs for processing uploads and record syncs, reducing some queue stalls with long-running jobs (this should reduce cases of the syncing sometimes taking a long time)
- Disabled RTF parsing for Input and Display LogiX nodes, making it easier to edit/diagnose strings with RTF tags in them
- Some internal moderation tool improvements (based on suggestions by @CanadianGit, @Veer | Chief of Moderation and @Dante)
- Some other internal security improvements
- Sealed many of the LogiX node types, potentially enabling compiler/JIT optimizations
- Set Global/Local Rotation/Scale nodes now use identity rotation/scale as a default when value is not plugged in (suggested by @Alex from Alaska)
- Headless will now skip most heavy updates in the gameloop if no users are present in the world, effectively treaing it as a background world (based on previous feedback by @Enverex)
- Changed default order of dash screens (based on suggestion by @Shifty | Quality Control Lead)
- Tweaked dash screen button colors
- Headless client/server will now use the higest available role when setting up role overrides, rather than skipping assigning it altogether when the role is higher than the host is allowed
- Upgraded to Unity 2019.4.4f1 (from 2019.4.3f1)
- Updated the Debug build of Neos
[h2]Bugfixes:[/h2]
- Fixed VideoTextureProvider getting corrupted when unexpected error occurs in youtube-DL (e.g. due to invalid URL) and not loading any subsequent videos (reported by @A Monsoon of Babies)
- Fixed invalid playback engine switching when playing videos from URL with unknown MIME, resulting in Unity Native being used when libVLC should be used instead and resulting in potential crashes (reported by @RΞBOЯИ through @Shifty | Quality Control Lead)
- Fixed Atan2 LogiX nodes having swapped X and Y inputs in relation to the underlying function (reported by @Zyzyl)
-- Exiting instances will have their inputs swapped on load to preserve the original behavior
- Fixed some more potential time comparison errors due to local system timezone (when updating world statistics and focus changes)
- Fixed headless host not getting assigned proper role (effectively defaulting to Admin), causing odd behaviors in the permission system (e.g. not being assign certain roles in some cases, but giving role higher than it normally could in others) (based on feedback by @Enverex)
- Fixed headless host using the DefaultHostRole when determining which role can and cannot be assigned, rather than taking the actual Host role into account
-- This fixes odd behavior where the host is a friend or has an override and as a result gets a higher role than regular host, but this higher role isn't taken into account (based on feedback by @Enverex)


