1. Neos VR
  2. News

Neos VR News

Collider workflow improvements, Color LogiX nodes, switching to CloudFlare CDN

Hello everyone and welcome to another weekly update!

First of all, congrats to everyone on finishing your MMC 2021 projects! Whether your project is big or small, you should be proud of the work you've done and the creativity you've shared with the rest of the community. We can't wait to check all the awesome submissions out!

We have been finishing our own The Universe experience, adding a few more new features to Neos that should help out every creator. Notably we made it easier to setup simple colliders! Most of the shapes (Sphere, Box, Capsule and Cylinder) can now auto-calculate their size from the geometry using a precise method, making sure the shape is wrapped as neatly as possible. There's a quick way to visualize them as well.

If you need to mass update font, font colors or font material in a hierarchy, you can also utilize the new Text Renderer Wizard tool.

Based on community requests and feedback, we also added a number of small tools and improvements. There's a number of new LogiX nodes for working with colors and a way to recalculate mesh blendshape normals and tangents in-game.

Also importantly we introduced new "UnitScale" to Canvas, which removes the need to scale the root of the canvas to be really small. We will update a number of official canvases (including the context menu) to have a unit scale in a week or two, so if you're using any custom injection systems, please update them to detect this and compensate for the change before we do!

We also switched our CDN from Azure to Cloudflare. After some small initial bumps things seem to be running smoothly, but if you still run into some problems, please let us know so we can investigate!

You can learn more (and see some teaser screenshots of The Universe experience) below!

[h2]Easier setup for shape colliders[/h2]
One of the great ways to optimize your items and worlds is to replace any mesh colliders with simple primitive colliders, like Sphere, Box, Capsule or Cylinder. However setting up those can be a pretty tedious process, with lots of manual guessing of the sizes.

Sizes and offsets of these colliders were computed completely automatically from the geometry.

To help with this, we added a few new tools and algorithms to simplify the setup. Firstly, any primitive collider now has a “Visualize Collider” button in the inspector. Clicking this will show a live visual of the collider that will stay visible until the inspector is closed or switched to a different object. We’ll replace this with a proper gizmo later on, but this should help for the time being.

[previewyoutube][/previewyoutube]

Second, most primitive colliders (Sphere, Box, Capsule and Cylinder) now have methods to automatically compute the size from the hierarchy, using a precise computation. Each one has a custom method that goes through every vertex of meshes in the hierarchy and computes a shape that tries to fit as tightly as possible.

In a lot of cases this can produce significantly better results than simple bounding box calculation, making the collider setup quick and easy.

[previewyoutube][/previewyoutube]

[h2]LogiX nodes for working with colors[/h2]
Based on community requests, we added a number of nodes to make working with colors easier in Neos! You can now use different color blending methods easily (alpha blend, additive, multiplicative and soft) and override/multiply individual color channels, both in RGB and HSV color spaces. There are some helper methods too for getting color’s luminance or inverting colors.

[h2]Recalculating Blendshape normals & tangents[/h2]
In response to another community request we implemented algorithms to recalculate normals and tangents for blendshapes specifically. If you have a mesh that has normals or tangents that imported incorrectly or didn’t import at all, this allows you to potentially remedy that.

This method will go through every blendshape on the mesh, transform the vertices and compute the normals or tangents as usual. Then it computes the difference from the base mesh normals/tangents to produce the final blendshape delta normals and tangents.

[previewyoutube][/previewyoutube]

You can use the regular normal calculation as well as the smooth shaded one. Currently tangent calculation is only supported with the Mikktspace algorithm.

However the success of this method can depend a bit on how the normal maps produced for the original model. Sometimes the algorithm that was used to produce the tangent space doesn’t match the tangent space in Neos, resulting in potential seams. If you run into issues we recommend sharing a sample model so we can have a look.

[h2]Linear interpolation for Interactive Camera anchors[/h2]
A small, but hopefully useful addition now allows you to enable Linear interpolation between Camera anchors. Instead of a smooth motion that speeds up and slows down as it transitions between the different points, Linear interpolation keeps constant speed. This can be useful for some productions that require constant motion.

[h2]Canvas Unit Scale - update your systems![/h2]
Another community suggested addition is the new “UnitScale” property on Canvas. This allows specifying the ratio between the world units and canvas units, removing the need to apply large scaling on the root of the canvas and providing a way to adjust the Canvas’ “DPI” easily.

Previously to make canvas with sizes that roughly correspond to typical resolutions (for example 1920x1080), you’d have to scale them down significantly, e.g. to 0.001 to bring the resulting visual to a regular size. This could present some complications when parenting other objects to it.

With this new addition, you can simply set the Unit Scale to 1000 instead. A canvas with size 1x1 (meaning it’s 1x1 meters in the world) will then act as canvas with resolution 1000x1000 without making it large. This is because the world size is multiplied by the Unit Scale to produce the final result.

This property can also be used to slightly change the canvas’ “DPI” - for example for users who have trouble reading, you can enlarge the elements slightly - assuming you built your UI in a way that will reflow properly.

We plan to transition the majority of the common canvases used by Neos to this new method within a week or two, including the context menus. If you are using any system that injects new behaviors into it, please update your system soon to support this, so you don’t run into issues when it’s finally updated!

[h2]World Text Renderer Wizard[/h2]
As another part of our work on The Universe experience we added another general tool to Neos that should benefit all creators - the text renderer wizard. You can find it under Create New -> Editor.

This lets you perform mass changes to text renders (both standalone and UIX) in the hierarchy - changing the font on all of them, changing the font material and overriding their color. It has filtering options similar to other wizards as well - you can exclude disabled ones or only process ones with a particular tag.

[h2]Moving to Cloudflare CDN[/h2]
Over this week we have transitioned our infrastructure to the Cloudflare CDN from Azure CDN. This is mostly an internal change and shouldn’t make much of a practical difference at the moment, but should allow for better scaling, decrease cost (allowing us to invest into other services and features) and give us some more control over the backend.

We ran into a few bumps with a portion of users whose DNS servers took longer than expected to update, but have since pushed a mitigation that falls back to the direct URL when that happens. If you run into some issues with this transition, please let us know and we’ll work to fix it as fast as we can!

Based on some initial findings, we also enabled support for GZip compression for API communication, which should reduce your internet bandwidth usage and reduce some latency as well.

[h2]The Universe experience nearly complete[/h2]
We have pretty much completed the work on The Universe educational experience! We’re very excited to show it to everyone soon and hope it’ll help show off the educational and collaborative potential of Neos.

We are still putting together some materials for the release and with the huge number of MMC entries that just got published we’ll probably release it in a week or so. In the meanwhile here’s a few teaser pictures!





Anyway that's all for this week! We hope everyone will enjoy checking out all the MMC entries this week, don't forget that the community voting starts soon! You can lean more about it in the post here: https://store.steampowered.com/news/app/740250/view/2944778418489926498

And as usual, big thanks for everyone supporting Neos, whether it's through Patreon or by sharing your time and creativity with people in the community and making the place come alive! See you next week!

2021.10.1.551 - GZip compression for API calls, UnitScale fix for ScrollRect

Another small patch, enabling GZip compression for API calls which should help significantly reduce network bandwidth usage and speed up the responses a bit.

Also bugfix for the new UnitScale breaking some behaviors like scroll rects.

Compatible with previous builds.

[h2]Optimizations:[/h2]
- Enabled GZip compression on the cloud API responses, which should reduce the latency and network bandwidth usage

[h2]Bugfixes:[/h2]
- Fixed ScrollRect and potentially other behaviors not compensating for the UnitScale of the Canvas (reported by @Lexevo)

2021.10.1.73 - Added fallback asset URL in case of DNS name resolution failures

Hello everyone, pushing a small patch that has fallback logic for the new CDN since some users ran into issues to their DNS records taking a while to update, this should help mitigate the issue. I'm sorry for the trouble it's caused!

I'll keep the previous build on Steam the one before the switch just in case, hope this helps though. This should generally resolve itself within a day or so (depending on your DNS server), you can also try mitigation steps in 📢announcements

Build is compatible with previous.

[h2]Tweaks:[/h2]
- Added fallback to direct non-CDN URL when the CDN fails to name resolve to help people with DNS servers that take an unusual amount of time to update (based on reports by @ProbablePrime | Docs, @Shadow Panther [RU/EN, UTC+3], @zangoose, @Enverex, @3x1t_5tyl3, @H3BO3, @ItsDusty , @Detective Bot, @epicEaston197 and others)

- Merged Japanese locale update by @Aesc/あすく
- Merged Russian locale update by @Shadow Panther [RU/EN, UTC+3]
- Merged Korean locale update by @MirPASEC

[h2]Bugfixes:[/h2]
- Fixed wrong thumbnail URL (reported by @epicEaston197)
-- Note that the host needs to update for this to be fixed

2021.9.29.842 - Auto-computing primitive collider sizes to fit geometry/hierachy

Hello everyone! Another small build with some improvements, here's a bunch of functions to easily setup different types of primitive colliders! Most of them now have a method to automatically calculate one based off the geometry/objects in the hierarchy through the inspector, so you don't have go guess their sizes.

There's also a quick way to visualize them too. We'll have a better method in the future, but this one was quick and non-invasive to implement.

[h2]New Features:[/h2]
- Added "Set from local/global bounds (precise)" to BoxCollider
-- This uses the precise bounding box calculation which transforms every vertex for mesh based sources
-- Note that the computation runs asynchronously, so the result might not get assigned immediatelly
- Added "Set From Precise Bounds" to Sphere Collider
-- This actually computes an exact bounding box sphere for the hierarchy and geometry, which can provide much tighter fit than one generated from the bounding box
- Added "Set From Precise Bounds" to CylinderCollider
-- This processes each vertex and potential bounding point in the hierarchy, to find an accurate offset, radius and height of a cylinder to encompass the hierarchy
- Added Set from precise cylinder bounds to CapsuleCollider
-- This uses the same algorithm as for cylinder and then fits the capsule inside of it.
-- Since the capsule shape is rounded at the ends, it means that it might not fully envelop the source hierarchy, but this can be desirable in some cases
- Added "Visualize Collider" in the inspector for a quick collider visualization using existing Debug visual system
-- This visualization is live, but only persists while the inspector for the collider is open.
-- Note that we'll likely replace this with a proper collider gizmos in the future that will provide better visual and allow you to visually change the shape as well

[h2]Tweaks:[/h2]
- Merged Korean locale additions by @MirPASEC
- Merged Japanese locale additions by @Aesc/あすく
- Merged Russian locale additions by @Shadow Panther [RU/EN, UTC+3]

2021.9.28.865 - MultiSet color for text, fixed UIX bug, tag

Hello everyone, another tiny build, just pushing out a few small modifications and additions that stemmed from some finalizations of the Universe demo.

I wanted to go to sleep a few hours ago, but ended up running into a nasty bug where some UIX text wouldn't render when the canvas was loaded. Turned out to be issue with FontCollection, should be all good now, so at least that's one less such bug too!

Also for translators, note that there's a bunch of locale strings now that end with ".Wiki". DO NOT translate these! They're used for overrides for Wiki articles and should be setup individually for each language (you can set those up for your locale once the demo is released).

[h2]New Features:[/h2]
- Added "Set Color" to the Text Renderer Wizard
- Added Solar Radius (R☉) as supported Distance unit
- Added tag that will prevent from closing tags outside of region wrapped by this tag (based on feedback by @3x1t_5tyl3 and @Sox (GH #3089)
-- E.g. if you do "Blabla" it'll prevent the from being closed

[h2]Tweaks:[/h2]
- Added "F2" as binding for toggling the Edit mode in desktop

- Merged Korean locale additions by @MirPASEC
- Merged Japanese locale additions by @Aesc/あすく
- Merged Czech locale additions and tweaks by @rampa_3 (UTC +1, DST UTC +2)

[h2]Bugfixes:[/h2]
- Fixed WorldDetail breaking and throwing exceptions when persisted
- Fixed AvatarUserRootOverrideAssigner not working when the avatar is equipped by the host (reported by @epicEaston197, GH #3099)
-- This also fixes potential scenario where the component doesn't deactivate if it's dequipped by someone else than the user wearing it
- Fixed FontCollection not propagating asset updates properly, resulting in Text & TextRenderers using it not rendering in some cases (particularly when the world/item is loaded)