1. Neos VR
  2. News
  3. 2020.11.5.88 - Realtime audio waveform mesh, transform LogiX nodes and more

2020.11.5.88 - Realtime audio waveform mesh, transform LogiX nodes and more

A bunch of new goodies! I've implemented new procedural mesh mechanism that lets procedural meshes to be used both in UIX and as standalone meshes, as well as some new underlying procedural generators, which will power lots of things in the future. Some more architectural underlying changes were made as well to support new ways to implement stuff in Neos (particularly with genrics) which will make some other things easier to implement.

Currently there's a new "AudioSourceWaveformMesh" procedural mesh added with this system, which generates an audio waveform from arbitrary audio source! Audio clip, video, realtime voice, anything should work!

A bunch of new Transform nodes as well, various tweaks, updated SDK and bunch of bugfixes (including some more for AudioX still throwing exceptions and causing audio artifacts).

[h2]New Features:[/h2]
- Added new procedural mesh mechanism, which allows certain meshes of base type RectMeshSource to be used both as standalone and within UIX
-- StandaloneRectMesh will generate it as standalone mesh, with explicitly provided Rect used to define the mesh generation area
-- RectMesh UIX graphic will allow the mesh to be used as part of UIX canvas, with the Rect provided implicitly by the RectTransform
-- Those meshes need to be instantiated as generic parameter using one of the above container components, you can't attach them directly as component
- Added AudioSourceWaveformMesh (a type of RectMeshSource), which visualizes realtime audio waveform from arbitrary audio source
-- It has configurable number of Points (currently samples aren't averaged over an interval), width, color and UV scale
-- You can also configure HistoryLength (in seconds, up to 1 second), which determines how much of the audio data duration is visualized. Lower values are recommended
- Added full support for TimeSpan type in the Neos' data moadel
-- This now also allows a TimeSpan LogiX variable to be created (requested by @Earthmark)
- Added nodes to set Slot's transform in one operation (requested by @Turk, @H3BO3,@Electronus and @KierDran):
-- SetLocalPositionRotation
-- SetLocalTransform
-- SetTRS (mildly dangerous, make sure your TRS is valid, otherwise use the ones above)
-- SetGlobalPositionRotation
-- SetGlobalTransform (I strongly recommend using the one above instead, setting global scale can lead to lots of problems, you were warned)
-- SetGlobalTransformMatrix (This one is even easier to shoot yourself into foot with. Use only if you absolutely know what you're doing)
- Added "SetUserScale", which allows setting the global scale of the user while preserving their position in the world (requested by @Shifty | Quality Control Lead)
-- It also has optional "AnimationTime" input, which will smoothly animate the scale. Default is 0, which is instant change
- Added ∅ (set null) button for string value fields (requested by @3x1t_5tyl3)
- Added "Recalculate All Normals" and "Recalculate All Normals (merged)" to Asset Optimization Wizard (requested by @AdmiralSoap and @Kal)

[h2]Tweaks:[/h2]
- Added generic type presets to DataPresetValue (suggested by @Earthmark)
- Categorized Brush tooltips under Tools/Brushes (based on suggestion by @Hayden (PolyLogiX Studio))
- When loading data, null string values will no longer decode as empty strings (based on report from @Alex from Alaska)
- Upgraded to Vive Hand Tracking SDK 0.9.4 (from 0.9.3) (suggested by @Danyy59)
- Upgraded to SR Anipal SDK 1.3.1.0 (from 1.3.0.9)
- DefaultUserScale will now update the default value continually, rather than just on equip (based on report by @Shifty | Quality Control Lead)
- World open/focus nodes will not close a current world for the host if they own the world and have unsaved changes (based on feedback by @ProbablePrime)
- Small optimizations for segmented mesh builders
- Improved resampling playback rate precision
- Removed deprecated "RemotePressSpeed" from PhysicalButton (based on report by @sirkitree)

- Merged Czech locale additions and fixes by @rampa_3 (UTC +1, DST UTC +2)
- Merged Russian locale additions by @Shadow Panther
- Merged Japanese locale fixes by @Aesc

[h2]Bugfixes:[/h2]
- Fixed inventory folder sorting separating items by the case, causing order to appear non-alphabetical (reported by @PeterTheThinker)
- Fixed audio playback throwing exceptions (causing audio glitches & performance degradation) when playback position ends up aligning with the last sample of aligned decode block for stream-decoded audio clips
- Fixed crash when joining a world while another user leaves due to permission validation trying to use data from the disposed user (discovered on @Nammi's headless)
- Fixed DefaultUserScale ignoring SetOnEquip setting (reported by @Shifty | Quality Control Lead)
- Fixed world focusing breaking when there are worlds with null SessionID (reported by @ProbablePrime)
- Fixed "status" command displaying incorrect uptime on headless (reported by @Shadow Panther)
- Fixed being able to record voice messages to non-contacts (reported by @Vixus)
-- This was only UI issue, the message would get rejected by the cloud server