Importing animations from JSON, Precision Grab, Multithreaded Dynamic Bone Chain
Hello and welcome to another of our weekly updates!
While we continued our focus on educational experiences this week, we added a number of general features and improvements along the way. Notably we now support importing arbitrary animation files from JSON!
This makes it easy to create animation tracks (either by hand or 3rd party tools) that do not have to be tied to a 3D model file and that support any of the Neos' primitive data types. While we used this for our own purposes, this feature is general enough to benefit all content creators in Neos and expand the available tooling for building interactive content.
Another addition spurred by some of the educational content is new precision grab mode. This lets you easily grab a single item between the tip of your index finger and thumb, rather than grabbing multiple objects in your palm area. This can be useful anytime you want to grab just a single object without grabbing everything else in its proximity.
We implemented more optimizations as well! The dynamic bone chain simulation is now multithreaded, which gives another performance boost, especially with multiple people in the world. We also added new nodes that let you parse, format and convert various units, improved security of LogiX accessing external URLs and much more!

[h2]Ravenswood Bluff livestream - social bluff game[/h2]
We have devoted our recent livestream to playing a game called Ravenswood Bluff, which is a community made version of Blood On The Clocktower game. This has been a thrilling experience full of twists and turns. If you missed the stream, you can check out the recording below. As of writing this game isn't released to public yet, but will be in the future.
[previewyoutube][/previewyoutube]
[h2]AnimJ - importing arbitrary animations from JSON[/h2]
As part of our work on the educational projects, we needed to easily animate some parameters in the experience. To make this process easier for us, we introduced a new file format that allows creating arbitrary animation tracks from JSON files that can be easily created by hand or 3rd party tools.
Thanks to Neos’ open nature, anyone can take advantage of this new functionality for any project! The format supports all currently supported animation track types - Raw, Discrete and Curve, which cover the majority of common animations. Any Neos primitive (numbers, vectors, colors and so on) are supported as well.
You can learn more about the format and see some examples over at our Wiki. We’ll add more examples there as we go. Importing the files is easy - simply save the file as .animj and copy & paste it into Neos as any other asset.
The imported animation track can be used with the Animator component to directly drive fields or sampled with the new LogiX nodes we introduced recently.
We hope this enables creators to make it easier to build cool interactive content in Neos, as it makes it easier for our own. We are always happy when work on official projects spawns general functionality like this, that’s beneficial to everyone.
[h2]Precision Grab[/h2]
Another general addition that got implemented based on the needs of the educational project is a new grab mode - the Precision grab! It’s a feature we wanted to add for a long while, but that got pushed into the background by other priorities.
Previously the only way to grab a single item was using the laser. Grabbing objects with your hand would always grab everything within the vicinity of your palm. In some cases this is useful to grab multiple items, but for cases like rearranging LogiX nodes or picking an individual piece on a board game it’s detrimental.
[previewyoutube][/previewyoutube]
You can now switch from the default Palm grab mode using your context menu to Precision grab. This will always grab only a single closest item between the thumb and index finger of your avatar.
Additionally you can also enable “Auto” mode, which switches between Palm and Precision grab based on the orientation of your hand - if your palm is facing upwards or downwards, you’ll perform a palm grab, otherwise it's the precision one. You can also disable hand grabbing completely and just use your laser.
Let us know what you think of this new mode! If it proves to be useful, we might even make it a new default, as it might make interactions more intuitive, especially for new users.
[h2]Multithreading for dynamic bone chain simulation[/h2]
Following our BEPUv2 upgrade we have reworked the way dynamic bone chains update to be more centralized, especially for finding intersections between colliders and the bones, utilizing BEPUv2’s Tree acceleration structure.
In a recent build we’ve implemented another piece of optimization on top of this work - the numerical simulation of dynamic bones is now multithreaded! In worlds and avatars with heavy use of dynamic bones this can save a considerable amount of frametime, increasing the overall framerate.
There is still much to do with optimizations and a lot of performance that can be claimed. We plan to do more optimizations as we go, improving the performance bit by bit.
[h2]Parsing & Formatting Units[/h2]
Neos has its origins as an educational experience and as such, one of the earliest libraries written for it is Quantity parsing and formatting. This allows parsing various units for Distance, Mass/Weight, Velocity, Acceleration, Temperature, Resistance, Voltage, Current and many other physical units.

Internally this is used for things like setting your height in settings. Since a lot of its functionality has been untapped though, we exposed it through a set of new LogiX nodes, which let you parse any of these units and format them again as a different one.
This can be used to build experiences that work with physical units. For example users can input sizes in centimeters, kilometers, lightyears, inches, feet and more. You can convert between different units too, like between Celsius and Fahrenheit or centimeters and inches.

The library is pretty versatile and supports a number of metric, scientific and imperial. The library itself is open source too, you can find it over here!
[h2]Fixed time synchronization issues[/h2]
Following from the previous week, we have chased down last issues with time synchronization, especially on headless servers. The system has been significantly refactored to provide more robust synchronization of the session’s master clock, with fewer (and ideally none) time jumps and low clock drift.
As a result, audio, video and animation playback should now have near-perfect sync for all users as well as any other behaviors that depend on the time - spinners, wigglers, LogiX time-based nodes (T, Stopwatch or Elapsed time) and more.
If you find any more issues with time sync, please let us know on GitHub, but we are pretty confident we managed to chase up all the remaining bugs with the system.
[h2]Improved Host Access Security[/h2]
Whenever an item or world in Neos attempts to access an external server, the user gets asked whether they want to permit contacting the given host. This gives you more control over your security.
Based on reports through our GitHub and Moderation system, we have expanded this system to require explicit permission for any port outside the standard HTTP and HTTPS ports (80 and 443 respectively).
This prevents certain attacks like port scanning, for example when you allow access to localhost. For applications that use standard HTTP(s) nothing has changed, but if you’re using any other port, you’ll need to update your setup to request specifically for these ports.
To make this easier, we added new overloads of the nodes for requesting access which now accept the URL and automatically extract the port number when making the request. This approach is more future proof as well, in case we choose to add further restrictions (e.g. based on a protocol used for example), so we recommend switching to those versions for any new projects.
[h2]Improved Uri support in LogiX, tweaks, bugfixes and more[/h2]
Apart from these bigger additions and fixes, we have released dozens of other smaller additions, tweaks, security improvements and bugfixes. For example there are now Uri input and output nodes in LogiX, making it easier to work with this data type.
String, Uri and Type input nodes now also have buttons to easily reset them back to null and we fixed some issues with not being able to undo values changes to those nodes properly.
We added a “View” UserRoot node to a number of components that use it, like “PositionAtUser”, which allow aligning objects with the user’s view, rather than head, which can make them work well with the third person desktop mode or freeform camera.
It’s also easier to enter a freeform camera focused on a particular object on the desktop now! Simply aim your cursor at a given object and Press Ctrl+F from any mode. Pressing Alt+F will unfocus and return to previous camera mode.
If you’d like to see a complete list of all changes over the past week, check out the release notes on Steam or Discord.
[h2]Work in progress: The Universe[/h2]
As part of our educational project efforts, we have been working on recreating “Neos: The Universe” experience. This is one of the original demos from 2015 for the very first GearVR headset, whose goal was to show what Neos could be and what kinds of experiences would everyone be able to build in it.
[previewyoutube][/previewyoutube]
Trailer of the original experience
Now years later, we have recreated an enhanced version of the experience in Neos itself, utilizing all the collaborative power and in-game building tools to put it together. There’s still some work to do on it, but it is now nearing completion and will be released to the public soon.
Unlike the original demo, which ran on a mobile VR headset with no positional tracking or hand interaction, you are able to walk around and grab the items to compare them. Not only that, you’ll be able to easily add your own items into the experience.
We’ll have more information for you soon, but here’s the latest sneak peek.


Anyway that's all for this week! We can't wait to bring you more stuff the next one! You can always check the latest on our official Discord. And as usual, big thanks to everyone for supporting Neos! Without your help we couldn't keep working on this project every day and pushing it towards the future!
While we continued our focus on educational experiences this week, we added a number of general features and improvements along the way. Notably we now support importing arbitrary animation files from JSON!
This makes it easy to create animation tracks (either by hand or 3rd party tools) that do not have to be tied to a 3D model file and that support any of the Neos' primitive data types. While we used this for our own purposes, this feature is general enough to benefit all content creators in Neos and expand the available tooling for building interactive content.
Another addition spurred by some of the educational content is new precision grab mode. This lets you easily grab a single item between the tip of your index finger and thumb, rather than grabbing multiple objects in your palm area. This can be useful anytime you want to grab just a single object without grabbing everything else in its proximity.
We implemented more optimizations as well! The dynamic bone chain simulation is now multithreaded, which gives another performance boost, especially with multiple people in the world. We also added new nodes that let you parse, format and convert various units, improved security of LogiX accessing external URLs and much more!



[h2]Ravenswood Bluff livestream - social bluff game[/h2]
We have devoted our recent livestream to playing a game called Ravenswood Bluff, which is a community made version of Blood On The Clocktower game. This has been a thrilling experience full of twists and turns. If you missed the stream, you can check out the recording below. As of writing this game isn't released to public yet, but will be in the future.
[previewyoutube][/previewyoutube]
[h2]AnimJ - importing arbitrary animations from JSON[/h2]
As part of our work on the educational projects, we needed to easily animate some parameters in the experience. To make this process easier for us, we introduced a new file format that allows creating arbitrary animation tracks from JSON files that can be easily created by hand or 3rd party tools.
Thanks to Neos’ open nature, anyone can take advantage of this new functionality for any project! The format supports all currently supported animation track types - Raw, Discrete and Curve, which cover the majority of common animations. Any Neos primitive (numbers, vectors, colors and so on) are supported as well.
You can learn more about the format and see some examples over at our Wiki. We’ll add more examples there as we go. Importing the files is easy - simply save the file as .animj and copy & paste it into Neos as any other asset.
The imported animation track can be used with the Animator component to directly drive fields or sampled with the new LogiX nodes we introduced recently.
We hope this enables creators to make it easier to build cool interactive content in Neos, as it makes it easier for our own. We are always happy when work on official projects spawns general functionality like this, that’s beneficial to everyone.
[h2]Precision Grab[/h2]
Another general addition that got implemented based on the needs of the educational project is a new grab mode - the Precision grab! It’s a feature we wanted to add for a long while, but that got pushed into the background by other priorities.
Previously the only way to grab a single item was using the laser. Grabbing objects with your hand would always grab everything within the vicinity of your palm. In some cases this is useful to grab multiple items, but for cases like rearranging LogiX nodes or picking an individual piece on a board game it’s detrimental.
[previewyoutube][/previewyoutube]
You can now switch from the default Palm grab mode using your context menu to Precision grab. This will always grab only a single closest item between the thumb and index finger of your avatar.
Additionally you can also enable “Auto” mode, which switches between Palm and Precision grab based on the orientation of your hand - if your palm is facing upwards or downwards, you’ll perform a palm grab, otherwise it's the precision one. You can also disable hand grabbing completely and just use your laser.
Let us know what you think of this new mode! If it proves to be useful, we might even make it a new default, as it might make interactions more intuitive, especially for new users.
[h2]Multithreading for dynamic bone chain simulation[/h2]
Following our BEPUv2 upgrade we have reworked the way dynamic bone chains update to be more centralized, especially for finding intersections between colliders and the bones, utilizing BEPUv2’s Tree acceleration structure.
In a recent build we’ve implemented another piece of optimization on top of this work - the numerical simulation of dynamic bones is now multithreaded! In worlds and avatars with heavy use of dynamic bones this can save a considerable amount of frametime, increasing the overall framerate.
There is still much to do with optimizations and a lot of performance that can be claimed. We plan to do more optimizations as we go, improving the performance bit by bit.
[h2]Parsing & Formatting Units[/h2]
Neos has its origins as an educational experience and as such, one of the earliest libraries written for it is Quantity parsing and formatting. This allows parsing various units for Distance, Mass/Weight, Velocity, Acceleration, Temperature, Resistance, Voltage, Current and many other physical units.

Internally this is used for things like setting your height in settings. Since a lot of its functionality has been untapped though, we exposed it through a set of new LogiX nodes, which let you parse any of these units and format them again as a different one.
This can be used to build experiences that work with physical units. For example users can input sizes in centimeters, kilometers, lightyears, inches, feet and more. You can convert between different units too, like between Celsius and Fahrenheit or centimeters and inches.

The library is pretty versatile and supports a number of metric, scientific and imperial. The library itself is open source too, you can find it over here!
[h2]Fixed time synchronization issues[/h2]
Following from the previous week, we have chased down last issues with time synchronization, especially on headless servers. The system has been significantly refactored to provide more robust synchronization of the session’s master clock, with fewer (and ideally none) time jumps and low clock drift.
As a result, audio, video and animation playback should now have near-perfect sync for all users as well as any other behaviors that depend on the time - spinners, wigglers, LogiX time-based nodes (T, Stopwatch or Elapsed time) and more.
If you find any more issues with time sync, please let us know on GitHub, but we are pretty confident we managed to chase up all the remaining bugs with the system.
[h2]Improved Host Access Security[/h2]
Whenever an item or world in Neos attempts to access an external server, the user gets asked whether they want to permit contacting the given host. This gives you more control over your security.
Based on reports through our GitHub and Moderation system, we have expanded this system to require explicit permission for any port outside the standard HTTP and HTTPS ports (80 and 443 respectively).
This prevents certain attacks like port scanning, for example when you allow access to localhost. For applications that use standard HTTP(s) nothing has changed, but if you’re using any other port, you’ll need to update your setup to request specifically for these ports.
To make this easier, we added new overloads of the nodes for requesting access which now accept the URL and automatically extract the port number when making the request. This approach is more future proof as well, in case we choose to add further restrictions (e.g. based on a protocol used for example), so we recommend switching to those versions for any new projects.
[h2]Improved Uri support in LogiX, tweaks, bugfixes and more[/h2]
Apart from these bigger additions and fixes, we have released dozens of other smaller additions, tweaks, security improvements and bugfixes. For example there are now Uri input and output nodes in LogiX, making it easier to work with this data type.
String, Uri and Type input nodes now also have buttons to easily reset them back to null and we fixed some issues with not being able to undo values changes to those nodes properly.
We added a “View” UserRoot node to a number of components that use it, like “PositionAtUser”, which allow aligning objects with the user’s view, rather than head, which can make them work well with the third person desktop mode or freeform camera.
It’s also easier to enter a freeform camera focused on a particular object on the desktop now! Simply aim your cursor at a given object and Press Ctrl+F from any mode. Pressing Alt+F will unfocus and return to previous camera mode.
If you’d like to see a complete list of all changes over the past week, check out the release notes on Steam or Discord.
[h2]Work in progress: The Universe[/h2]
As part of our educational project efforts, we have been working on recreating “Neos: The Universe” experience. This is one of the original demos from 2015 for the very first GearVR headset, whose goal was to show what Neos could be and what kinds of experiences would everyone be able to build in it.
[previewyoutube][/previewyoutube]
Trailer of the original experience
Now years later, we have recreated an enhanced version of the experience in Neos itself, utilizing all the collaborative power and in-game building tools to put it together. There’s still some work to do on it, but it is now nearing completion and will be released to the public soon.
Unlike the original demo, which ran on a mobile VR headset with no positional tracking or hand interaction, you are able to walk around and grab the items to compare them. Not only that, you’ll be able to easily add your own items into the experience.
We’ll have more information for you soon, but here’s the latest sneak peek.


Anyway that's all for this week! We can't wait to bring you more stuff the next one! You can always check the latest on our official Discord. And as usual, big thanks to everyone for supporting Neos! Without your help we couldn't keep working on this project every day and pushing it towards the future!


