SakeTami
neosvr
neosvr

patreon


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!

Ravenswood Bluff livestream - social bluff game

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.

https://youtu.be/c3cHQDiAtTg

AnimJ - importing arbitrary animations from JSON

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.

Precision Grab

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.

https://youtu.be/kZUB-i2iQbI

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.

Multithreading for dynamic bone chain simulation

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.

Parsing & Formatting Units

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!

Fixed time synchronization issues

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.

Improved Host Access Security

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.

Improved Uri support in LogiX, tweaks, bugfixes and more

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.

Work in progress: The Universe

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.

https://youtu.be/nxlD57awB_M

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!


More Creators