1. Neos VR
  2. News

Neos VR News

2020.6.14.978 - More progress on RadiantUI, small additions, tweaks and fixes

Pushing out some additions, tweaks and bugfixes so they're not waiting on other things. Main focus is on the new RadiantUI, the new dash is now even more complete! I'm getting ready for making the swap to it soon, wrapping the existing UI (with few modifications) into it and then continuing to rework the system to facets.

[h2]New Features:[/h2]
- Added UVOffset and UVScale properties to MeshUVRaycastPortal, which allows adjusting the UV to match the texture offset/scale on the material
- Added ClipRect to UV Rect material, which allows clipping any visual outside of the given rect

[h2]Work in progress features on RadiantUI:[/h2]
- Added open/close support & animation to the new dash
- Visual tweakd and additions (like borders) to the new Dash
- Added header Facet container to the new dash
- Other general progress on implementation of the new dash and underlying systems

[h2]Tweaks:[/h2]
- Some small performance optimizations for components fetching their initialization info
- Upgraded to Unity 2019.4.0f1 (form 2019.3.15f1)

[h2]Security:[/h2]
- Fixed settings being able to be synced from the worlds (reported by @sleepingkaikai through @Shifty | Quality Control Lead)
- Some more cloud security improvements

[h2]Bugfixes:[/h2]
- Fixed all friend links on users not being clickable (reported by @LakeSheep, @sleepingkaikai, @jeana, @GalexY, @Coffee | Programmer and @Shifty | Quality Control Lead)
- Fixed CurvedPlaneMesh freaking out when the Curvature parameter reaches very low values near 0 (reported by @Coffee | Programmer)
- Fixed invalid Crop rect on TextureThumbnailSource from preventing the object to be saved (reported by @A Monsoon of Babies)

2020.6.12.785 - New shaders (PBS Distance Lerp, UV Rect, Mask), tweaks, bugfixes

A shiny new PBS Displace Lerp shader! This one allows creating variety of visual effects based on distance/proximity to points in the world - displacing the geometry and increasing emission. Check #devlog for some quick videos.

Also added UV Rect shader. This one is simpler, but also has its uses for some neat effects, like borders and so on (will be used in the new RadiantUI dash). The Unlit material also now has a mask texture support, allowing alpha blend and independent alpha clip (this is also added for the new Radiant UI dash).

More of the Radiant UI is implemented too, you can see more of the upcoming dash in there, but it's still heavy work in progress and not representative of the final one yet! A bunch of other additions, tweaks and bugfixes as well. I go sleep now.

[h2]New Features:[/h2]
- Added PBS Distance Lerp material, which allows creating variety of proximity-based visual effects (requested by @Nexulan)
-- It allows driving displacement and emission based on proximity of a point
-- Supports up to 16 independent points, with each point providing its own tint color
-- Emission and Displacement distance ranges are individually configurable
-- Distance is measured from each vertex, but can be rounded to a grid size, allowing a group of vertices to move together
-- Displacement direction can be overriden (by default uses normal)
-- The distance measuring can be done both in world-space and in local-space
- Added UV Rect material, which allows visualizing a rectangle based on the model UV coordinates (useful for some effects and debugging)
- Added Mask Texture support to Unlit material - a separate texture slot which can be used to multiply the alpha or provide alpha clipping separate from the main texture
- Added "Recompress Textures" to Asset Optimization Wizard, which will recompress any textures referenced in the hierarchy that are not JPG, PNG, WebP or EXR (requested by @Enverex)
- Added MultiValueTextFormatDriver component which allows driving a string field with a format string and a list of arguments (requested by @Zyzyl)
- Added "Forward Only" property to Camera, which allows forcing it to render using the Forward pass. This can be used to optimize certain scenarios (e.g. the camera only rendering UI)
- Added "NullText" and "NullContent" fields to TextRenderer and Text components respectively, allowing to override which text is displayed when the main text is null

[h2]Work in progress features:[/h2]
- Implemented more of Radiant UI dash and screens, particularly including button rendering

[h2]Tweaks:[/h2]
- A loading indicator with "Waiting... Host is starting session" will now appear immediately when trying to join a session through orb that someone is currently starting to host (based on feedback by @H3BO3)
- Updated youtube-dl to 2020.06.06 (from 2020.05.08) (based on feedback from @DeliriousJax)
- Small performance optimization to sampling random Value (0.0 to 1.0)
- Removed FlatLitToon from material listing in advance of its deprecation, so it's not used for new objects
- Some cloud security improvements

[h2]Bugfixes:[/h2]
- Fixed being able to click your own nametag
- Fixed "null" value being rendered incorrectly in the inspectors and sometimes not getting properly cleared up when starting to edit the field (reported by @Shifty | Quality Control Lead, @ProbablePrime, @H3BO3 and others)

https://www.youtube.com/watch?v=ZuRrS-QBVD8

https://www.youtube.com/watch?v=TeW7Zl_5m7Q

2020.6.10.647 - More RadiantUI pieces, new procedural mesh, tweaks and bugfixes

More of the RadiantUI is implemented! It's not usable yet, though you can play with the pieces if you want, but they're not representative of the intended design! A bunch of other additions, tweaks and bugfixes as well!

Should fix another (hopefully last) case of dynamic bone breaking randomly. There's new procedural mesh (designed for the RadiantUI dash, but it's general so it can be used for anything). The #666 GitHub issue is now fixed too and SlotChildrenEvents should work correctly with user plugged in!

[h2]New Features:[/h2]
- Added "CurvedPlaneMesh" procedural mesh, which generates a plane with adjustable curvature and tilt (the curvature is essentially ratio of a circle/cylinder segment)
- Added "Parse Rich Text" property to TextRenderer and Text (default on), which allows disabling the parsing of rich text tags (color, bold, underling...)
- Added "Deduplicate Instances" to Advanced Settings in Model import dialog, which will try to find duplicated instaces of the same mesh in the improted model and merge them into a single one (based on feedback by @Aegis_Wolf | Artist 3D/2D)
-- This can be pretty slow process, so it's off by default, but recommended for particularly large models
- Added "Optimize Model/Scene" which will let Assimp run optimization passes during import, which can improve performance of the imported model
-- This is off by default as well, as it can be destructive and remove some scene structure/hiearchy that you actually need.
- Added ability to override the "HitTriggers" to MeshUVRaycastPortal and SlotRaycastTransferPortal
- Added ability to inject/replace raycast filters to MeshUVRaycastPortal and SlotRaycastTransferPortal
- Added "Bring To" button to the slot inspector, which will make the object jump to the user who clicks the button (requested by @GearBell)
Work in progress features:
- Implemented initial basis of RadiantDash and RadiantDashScreen components, which will serve as the new dash.

[h2]Tweaks:[/h2]
- Inspector text fields will no longer parse the tags, showing the raw string, making it easier to edit
- Various inspector text elements now have "Parse Rich Text" disabled when it's not necessary, improving some performance by skipping the unecessary parsing
- Username/Email/Password labels and/or text fields will no longer parse rich text either, preventing the invalid use of tags in the usernames
- Rolled back change where the Busy mode would behave as "Invisible" in terms of session visibility (based on feedback by @PeterTheThinker and @Hayden (PolyLogiX - ZyroDesign))
- Added warning to the Register dialog that live.com, outlook.com, hotmail.com and other Microsoft-hosted email accounts can take up to 1-2 days to receive the registration email (this seems to affect a fair bit of registration account, due to live.com email server throttling emails from SendGrid)
- Some small moderation feature tweaks

[h2]Bugfixes:[/h2]
- Fixed Dynamic Bone Chain breaking during collisions with player when the head proxy slot cannot be found (reported by @CanadianGit, with log from @Slim Jim)
- Reworked the interaction from behind rejection mechanism on Canvas so it works correctly with raycast portals, fixing the world browser in the hub not working correctly (reported by @pek)
- Added exception guard to OnEquipped() and OnDequipped() events on tooltips, preventing errors in those from causing the player to respawn (reported by @Shifty | Quality Control Lead)
- Fixed exceptions in brush tips when trying to end a stroke group that hasn't been started or has already been ended (reproted by @Shifty | Quality Control Lead)
- Fixed tooltips being equippable through the context menu when they cannot be grabbed in the first place (reported by @H3BO3)
- Fixed Slot Children Events breaking when the OnUser input is plugged in (reported by @Zyzyl, @H3BO3, @Turk and @Anomalous)
- Added an exception guard against exceptions in the OnChildAdded and OnChildRemoved preventing the node from sending any more events (based on feedback by @Anomalous)

2020.6.8.518 - Permission system security improvements, many bugfixes, Quest APK

Some important security improvements and bunch of various bugfixes! Most work now goes towards the Radiant UI, you can actually find the functional pieces of Facets and Containers that were shown in #devlog and play with them, but don't use them for anything serious yet, the system is heavily incomplete!

Android builds were updated to the latest build as well! Update on usual channels. (based on feedback by @Starkido)

[h2]New Features:[/h2]
- New Icons by Stubblöv#1507
-- New Deposit / Withdraw NCR icons
-- New icons for the world orb context menu
-- New leave world icon

[h2]New Work-in-progress Features:[/h2] (do not use for serious projects yet!)
- Implemented Facet component, that allows specifying Facet dimensions, aspect ratios and so on (a quick blank Facet can be created with the "Create New" option now)
- Implemented Facet container & interaction system
- Implemented Grid Container for Facets

[h2]Tweaks:[/h2]
- "Busy" online mode will now make all sessions start as private by default, the way invisible mode does (based on feedback from @PeterTheThinker)

[h2]Security:[/h2]
- Added low-level validations to role changes to fix security exploits where users could assign invalid roles to themselves, the host or other users (based on reports from @Lewi-bean | Audio Designer, @Rue Shejn | Artist 3D and @Shifty | Quality Control Lead)
-- If you want to mess with the system, I strongly recommend doing it in a controlled setting with permission of the host (or hosting yourself). If you trip the system, it will temporarily ban you from the host (until they restart), so you can lock yourself out of public sessions
- The permission components can now only be changed by the host, regardless of all permissions, preventing any other users from modifying their own permissions (this will be extended in the future with the hard permission system to allow more granularity) (based on various reports and feedback (sorry I forgot who all talked about this! ;_;))
- Internal moderation tool improvements to help resolving asset ownership disputes

[h2]Bugfixes:[/h2]
- Added extra diagnostic information to youtube-dl integration (based on problem by @Ardes)
- Fixed Video Player not switching back to mono display after it has been switched to stereo (reproted by @Danyy59, @Enverex and @H3BO3)
- Added filtering to the world-space laser offset/direction/distance values, to prevent the world from corrupting the userspace laser, breaking interactions (reported by @Shifty | Quality Control Lead on behalf of @Aegis_Wolf | Artist 3D/2D)
- Fixed being able to assign a role higher than the "Admin" default role to users on worlds hosted by the headless (reported by @ProbablePrime)
- Removed default System assemblies for type processing during Neos initialization, speeding up the startup a bit and fixing some errors in the headless startup process (like one reported by @Oblivionburn )
- Fixed headless kick, ban, respawn and role commands being able to be applied on the headless host itself
- Fixed headless not being able to load the CSCore and its depenencies when running with .NET Framework, causing audio clips to not load on the headless and print out errors when attempting to do so
- Fixed the user being respawned due to invalid raycast values in the interaction laser (e.g. ones caused by scaling the avatar's arm to 0, reported by @Shifty | Quality Control Lead on behalf of @GearBell)

Building !zeus Twitch chat command from scratch, multiple instances and more!

Hello and welcome back to the Weekly Update! We’ve got some small new features added this week, from being able to run multiple Neos clients on the same computer, to the new laser-grab rotation feature!

On this Wednesday’s crash course stream we also showed you how to build a completely new interactive Twitch chat command from scratch and we have more development progress on Facets and Containers.



[h2]Learn how to build your own interactive Twitch commands![/h2]
On this Wednesday’s crash course livestream we went in detail over the streaming functionality in Neos, showing you how to use the interactive camera, camera anchors and other tools to the fullest for both filming and livestreaming in Neos VR.

[previewyoutube][/previewyoutube]

In the latter part of the video we went even further and built a completely new interactive Twitch command from scratch, so users can type !zeus into the Twitch chat, causing the whole world to darken, a cloud form above the particular user and a lightning strike that zaps them out of existence!

Giving the Twitch chat this level of interactivity allows to make your streams a lot more compelling and fun and thanks to the flexibility of LogiX, our visual programming language, you can make pretty much anything to happen with the Twitch chat commands! Give the full video a watch if you’d like to learn more!

https://www.youtube.com/watch?v=k4Eg7NoupuU

[h2]Please vote on the User-Blocking feature priority![/h2]
Last week we have asked you to let us know what you think about prioritizing the User Blocking feature for Neos on GitHub, but unfortunately we haven’t gathered enough feedback to make a solid decision yet.

We’ve created a poll on Patreon where you can vote to let us know your preference. If you’re not a Patreon supporter, feel free to reach out to any of the team members to let us know your preference on this (particularly if you need this functionality urgently).

Our goal here is to determine if we should prioritize this feature right now, because it’s needed by some of the users or if the situation is manageable enough so it can wait a bit more. Please let us know, even if it's on behalf of a friend or another user!

One of your main concerns was the possibility to create a negative culture, where users are permanently blocked over trivial matters. To avoid this, we plan on making the mechanism such, that the quick single-click block is temporary (1 day probably) and making it longer or permanent requires a few more additional clicks afterwards.

This should be enough to discourage users from permanently blocking everyone, while not being too difficult to use in genuinely distressing situations.

However with the current UI, we don't have the flexibility to implement it in a such way. Which gives us a few choices.

We can implement it right now, either as permanent or temporary block and then expand when the UI is reworked within a few weeks. Or we can delay the implementation completely until then.

This is a tricky topic and because it's you, who's mainly affected by this change, we want to let you to decide on how urgently do you need this functionality, so please let us know!

Also note, this poll isn't necessarily about the option that gets most votes, but to gauge need for this functionality and if we should prioritize it in a more limited form over the UI and expand later.

[h2]Laser-grab Rotation Feature[/h2]
Now, when you grab an item with your laser, you can rotate the object by double-clicking your trigger and rotating your wrist. This will give users a lot more control when they want to place objects precisely. No more wondering if your videos or pictures are hanging perfectly! This is great for placing furniture around a room as well, as you will always know that the bottom of the furniture will always be aligned perfectly with the floor.

This new feature coincides nicely with the trigger activated aligner. If you haven’t read about this feature before, it’s very useful! When you grab an object with your laser and pull the trigger, the object being grabbed will align itself along the Y axis. It will do this based on what sides of the object are closest to the Y axis, so if you grab a pot for example that is facing up mostly normally, it’ll straighten it out completely when you pull the trigger. If it’s leaning much further to the side, it’ll orient fully sideways.

[h2]Running multiple graphical instances and overriding profile path[/h2]
One of the new additions this week was the ability to run multiple graphical instances of Neos on the same computer by using a different profile for each. This can be achieved by a new command-line argument -DataPath , which will override where Neos stores the user profile and asset database.

Additionally you can also override where the cache is stored by using -CachePath , but this is optional. Neos has its own locking mechanism, which will make sure that each profile is only used by a single active instance at the time, but other than that you can run as many instances as your computer can handle.

This can be very useful for certain development and research tasks, which is one of the reasons this feature was added in the first place. The Canadian Research group is developing and training AI agents in Neos and this feature allows the AI agent to run alongside a regular Neos VR session.

[h2]Progress on Facets and Containers[/h2]
Our current main focus, the new Radiant UI has passed an important milestone. The core of the Facet and Container system has now been implemented and tested with a grid container as you can see in the video below.

[previewyoutube][/previewyoutube]

Each colored square is a single Facet - a piece of UI which can contain anything (for testing purposes it’s just a solid color that acts as a button) and which defines on how it can be sized. Each facet defines its minimal and maximum size, supported aspect ratios and recommended sizes.

This information is then used by containers to place the facets within them. Each container defines its own rules and style of placement, but it will make sure to follow the specifications defined by the facet itself.

The first container to be implemented and one that will likely be the most common one is the grid container. This simply fits multiple facets into a grid, automatically finding available free space or letting users define their own size.

Now that this core interaction is in place, we can continue polishing and building upon it and designing other parts of the system. This makes the process significantly easier and faster, as things will more easily fall into place once the technical details of the initial part of system is settled on.



[h2]Community Highlights[/h2]

[h3]Neos VR in the news for education[/h3]
Neos made it to the news again! Students and educators at CQUniversity took a virtual field-trip to an island to learn how to measure water PH! The session was led by SHFR, where the students would get in their virtual boat and ride up to research buoys, collecting water samples to help keep the virtual world healthy.



[h3]Momo, by Gearbell, Vigilabo, and Shalefoot[/h3]
This little bird, originally made by Gearbell, has been given the ability to fly to other users by Shalefoot’s command! The command gesture system was written by Vigilabo, who has created many fun and interesting LogiX projects.

[previewyoutube][/previewyoutube]

[h2]What’s Next?[/h2]
Having the core of the Facet & Container system implemented, we’re now designing and implementing the rest of the system, including Workspaces and the new dash. Once this is ready we’ll wrap the existing UI windows into the Facets and then swap out the dash for the new one.

After that, we can rework and expand the UI piece by piece, allowing for a lot more gradual transition and continuous feedback rather than dropping everything at once. This will help us sort out the bugs and utilize your feedback to the fullest extent.

Thank you again for reading our Weekly Update! Things are starting to pick up speed with the UI update, so make sure to check for the weekly updates as we’ll have a lot more to showcase! Stay safe!