1. Neos VR
  2. News

Neos VR News

2021.9.14.1024 - Undo for LogiX input nodes, tweaks and fixes

Just a small update with a few tweaks and bugfixes. We'll be focusing on some bigger things that will take some time, so I want to push these out so they're not held up.

Compatible with previous build, but some of these won't take effect unless everyone (especially host) is on the latest build.

[h2]Tweaks:[/h2]
- Set null button on LogiX input nodes is now undoable (requested by @AshtonSparx, GH #3006)
- Type input node now has null button as well
- Added "Install NeosVR on Android Phone.bat" to the android-preview branch (requested by @kazu0617 Neos:kazu, GH #3007)

- Merged Korean Universe locale strings by @MirPASEC
- Merged Japanese Universe locale strings by @Aesc/あすく

[h2]Bugfixes:[/h2]
- Fixed undoing changes on Logix input nodes not actually updating the node value
-- Note that if you have existing saved nodes, it will not work correctly. You need to pack and unpack to get the fixed behavior
- Fixed IsTooltipInUse node breaking when evaluated by user that's not holding the tooltip (reported by @AshtonSparx, GH #3001)
- ITriggerActionReceiver components are now ignored when they're disabled
-- This fixes disabled InteractiveCamera component capturing photos when it's part of hierarchy of grabbed object, but disabled (reported by @AshtonSparx, GH #3000)

2021.9.13.981 - DynamicBoneChain simulation is multithreaded, tweaks and fixes

Hello everyone! Got another smaller build for you, but hopefully with some more nice goodies! Notably the rework of the DynamicBoneChain system brings another fruit - the simulation itself now runs multithreaded, which should give another performance boost! There's still lots of optimizations to be done overall, but things should improve bit by bit.

Other than that there's some small additions, tweaks and fixes to things here and there.

[h2]New Features:[/h2]
- Added EmptyString LogiX node (requested by @kazu0617 Neos:kazu, GH #3003)
- Added NullString LogiX node
- Added lightsecond support to distance parsing & formatting
- Added ∅ button to String & Uri input nodes to set them back to null (based on request by @kazu0617 Neos:kazu, GH #3003)

[h2]Optimizations:[/h2]
- DynamicBoneChain simulation is now multithreaded for improved performance
-- Note that this currently only covers the actual numeric simulation stage. Multi-threading more parts will require some extensions of the data model (see our Performance roadmap for more detail)
-- Debug dialog now displays diagnostic information for the major stages
Tweaks:
- Uri input node can now be created using the secondary shortcut (pulling a wire out and pressing secondary) (requested by @kazu0617 Neos:kazu, GH #2996)
- Searching Animation track with null string for Node/Property will now match tracks that have no name (empty string)
-- Node/Property of animation track cannot be null, they are always auto-converted to empty string on import
-- This fixes confusion when trying to find imported tracks that have Node/Property set to null and trying to match it to null (reported by @kazu0617 Neos:kazu, GH GH #3002)
- Text renderer will no longer display the NullContent value when the caret position is active
- String & Uri input nodes will now display "null" when the text is actually null
- MaterialApplyPolicy now works with Skyboxes (implemented by @ProbablePrime | Docs, GH #2329)
- You can now export specific mesh through reference to a MeshRenderer (based on report by @Khosumi, @H3BO3, @Kyuubi, @Enverex, GH #2780)

- Merged Japanese locale additions (including The Universe) by @Aesc/あすく and @kazu0617 Neos:kazu
- Merged The Universe Finnish locale additions by @Toni Kat
- Merged Korean locale additions by @MirPASEC

[h2]Bugfixes:[/h2]
- Fixed decoding of Uri strings from persisted data breaking on certain Uri values
- InteractiveCamera will no longer parent itself under the root when its parent is destroyed and it has no simulating user (reported by @AshtonSparx, GH #2988)
- Fixed Animator breaking when Animation asset is created, but data is null (based on report by @jeana and @Psychpsyo, GH #2920)

2021.9.12.1084 - Improved SI Unit parsing and formatting, fix crash due to Uri

Pushing an extra small build with some improvements to unit parsing and formatting since I forgot to add these to the previous build.

Also patch for a bug causing session crash. Compatible with previous builds, but update is recommended.

[h2]Tweaks:[/h2]
- Micrometers now accept 'µ' (U+00B5), 'μ' (U+03BC) and 'u' during parsing (based on report by @Chroma | Mass Communications, @Ryuvi | Technical Artist, @Nexulan | Producer and others)
-- This fixes micrometers not parsing properly in some cases, due to Unicode defining multiple symbols
- Added more common SI units for Distance - pico, femto and atto (previously it would at most use nanometers)
- Angstrom is no longer classifed as common Distance unit
- Parsecs are no longer classified as common unit (meaning at most light years will be used during auto-formatting)

[h2]Bugfixes:[/h2]
- Fixed Uri decoding resulting in a session crash for other users in the session (reported by @3x1t_5tyl3, @Lexevo, GH #2995)

2021.9.12.967 - Uri Input & Display nodes, fixed head movement lag in desktop

Hello everyone! Just a small build again, we're still crunching the educational demo so that takes most of the time now, but here are some small additions and bugfixes to help some issues that popped up recently!

[h2]New Features:[/h2]
- Added Uri overloads to Request Host Access & IsHostAccessAllowed nodes (requested by @Earthmark, GH #2991)
-- It's recommended to use those nodes when possible, as they automatically parse and extract the host and port from the URL
- Added Uri Input node
- Added Uri display node

- Added OverrideFarTransitionOffset to ScaleObject which allows overriding the global FarTransitionOffset per object
- Added CustomTransition and TransitionLerp to ScaleObject
-- Enabling this will avoid the size transition of the object and instead provide a lerp value for handling a custom transition (e.g. fading in/out)
- Added Randomize Locations to ScaleObjectManager
-- This will randomly place all objects around on the XZ axis, preserving their current distance from the center

[h2]Tweaks:[/h2]
- Merged workaround from BEPUv2 for very dense meshes (relative to player size) causing heavy lag
-- This workaround will skip smoothing out triangle boundaries when the character collides with large number of triangles at once
-- The mesh colliders can become "bumpy" if they're too dense due to the missing boundary smoothing
-- While this reduces the duration of the lag spike, dense mesh colliders will still have negative impact on performance. Please use optimized colliders where you can!
- Removed diagnostic logging for the world master time synchronization
-- I'm removing this because the issue seems resolved. If it still persists let us know and we'll readd it

[h2]Bugfixes:[/h2]
- Fixed regression causing the IK head to lag by a frame behind in desktop mode (reported by @epicEaston197, @SeventhVoid, @MinkyFox, @Cyro, GH #2992, GH #2990)
-- This was fixed by ensuring that update order of input event receivers and input groups is respected between the two groups, instead of just within each group (with input event receivers updating before input groups)
-- Reversed the sorting of input groups by Priority so correspond to the UpdateOrder of components
- Fixed allowedUrlHosts in headless config not properly parsing port numbers when a scheme isn't provided, resulting in URLs for HTTP(s) addresses not being granted access (reported by WallTack, GH #2993)
- Fixed ScaleObject jumping to a random offset when released within the CenterOffsetRadius

2021.9.11.1001 - Importing arbitrary animations from JSON files, tweaks, fixes

Hello everyone! Another relatively small build, we're still focusing on the educational experiences right now, but here are some general goodies and tools that were implemented for this experience.

Notably, you can now import arbitrary animation file from a custom JSON format .animj! This lets you create and bring in arbitrary animation tracks without having to tack them onto some 3D model files and support all the Neos' animation track types too, as well as any Neos-supported primitive datatype (e.g. colors, integers, booleans...). This can be particularly powerful for building experiences, where you can sample these animations with LogiX to drive behaviors.

There's now also View UserNode element, which should improve certain behaviors to work better with the 3rd person or freeform camera modes and other overriden views.

Also there's some more tweaks and few security improvements as well.

[h2]New Features:[/h2]
- Added suport for importing raw animation tracks from a custom ".animj" format
-- This allows creating any animation track type supported by Neos.
-- To learn more about the format and some examples, see this wiki page: https://wiki.neos.com/AnimJ (will be WIP at the time of release)
-- You can sample these animations with LogiX or drive elements with Animator as any other, but the animation tracks do not need to correspond to just Transform (Position, Rotation, Scale) properties, but can be used for any Neos primitive datatype for arbitrary purposes

- Added "View" as UserNode element, allowing it to be used with any Component or LogiX node that uses this
-- This makes "View" a valid target for PositionAtUser (requested by @Hayden, GH #2816)
-- Note that if you try to set user's position/rotation via View, it might not always produce a correct result, because the view can be controlled by external means where user's root position in the world doesn't map to the view

[h2]Tweaks:[/h2]
- Ctrl+F to focus target in freecam can now be used from any camera mode (e.g. first person or third person) rather than only while Freeform camera is active
-- Pressing Alt+F to unfocus will automatically switch to previous camera mode when Freeform camera is activated this way
- Added type castability checks when generating cast nodes, to avoid generating casts that are known to never succeed and prevent confusion (based on report by @Delta, GH #2989 and number of previous reports)
-- Casts are not generated when casting one class to another, if neither is ever assignable to the other
-- Casts are also eliminated when casting class to interface that it doesn't implement
- GrabbableSetterTip now has the option to apply grabbables to the hit object or the object root (requested by @SHFR_H, implemented by @ProbablePrime | Docs | Docs)
-- Object root is the default option to preserve the old behavior

[h2]Security:[/h2]
- Host access now requires requesting access for each individual port to avoid security vulnerabilities like port scanning (based on report by @FRICK/フリック, Moderation Ticket #823623)
-- HTTP and HTTPs ports (80 and 443) do not require specifying port, they'll be both allowed with just the base string. If you only use these ports, you don't need to change anything
-- LogiX nodes have been updated accordingly, allowing you to specify port that you're requesting access to
- Fixed roleCloudVariable being able to assign higher role than the host has (reported by @Raith | Programmer, Moderation Ticket #952355)
- Added guard to prevent errors in stream messages from crashing the whole world and added extra diagnostics (based on report by @Azora Husky, GH #2980)