1. Neos VR
  2. News

Neos VR News

New high-performance text rendering system, font file import support and more!

Hello everyone, welcome back to the weekly update!

To all of our new users: Welcome to NEOS, we’re so happy to have you here! We've hit record numbers thanks to you guys, peaking at 82 concurrent users this week! This really helps boost our drive to provide you with the best metaverse experience!

The Neos update this week is no less exciting either! Major progress has been made with the UI overhaul with the release of brand new text rendering system, which serves as a foundational building block for reworking the UI/UX and offers major performance improvements, as well as support for importing your own TrueType font files.

There are some other wonderful features this week, from the Tooltip Multiplexer to the new improvements of our SimpleAvatarProtection.

Medra is also hosting our very own secret Santa in Neos, where our users exchange gifts and guess who has made theirs. We’ll be live streaming this event on our Twitch soon, so join us for some fun Holiday shenanigans!



[h2]New Text Rendering system & support for importing font files[/h2]

The new text rendering system for Neos is finally up and running in the latest builds of Neos! This is a completely custom system created from scratch specifically for Neos, to replace the Unity Text Mesh Pro and serve as a foundational building block for the UI overhaul.



It brings many new benefits. It’s highly performant, running asynchronously and heavily utilizing multi-threading. This reduces lag spikes related to generating and rendering text, reduces overall CPU utilization and makes Neos more responsive.

The new system also offers much more creative freedom and flexibility. Neos now supports import of TrueType/OpenType font files (.ttf, .ttc, .otf and .otc). Simply import them as any other asset, drop over text renderer and your text will be instantly rendered with the new font!

Neos now uses a method called MSDF (multichannel signed distance field) for achieving high visual quality - this offers better preservation of detail and sharp corners than previous method. The generation parameters (glyph resolution, range and padding) are configurable, if you notice visual artifacts with complex or thin fonts, simply increase the resolution.



Another benefit is support for dynamic glyph generation, rather than being restricted to a pre-generated subset. This allows support for languages with a large number of symbols, like Japanese, Korean and Chinese. Currently languages that require complex text shaping aren’t supported yet (like Arabic), but are planned in the future.

Since it’s designed specifically for Neos, it also integrates very well with other Neos’ subsystems. It uses regular materials and meshes, meaning you can technically drop in any material you like (although MSDF fonts won’t display correctly without the special shader) or use the font material outside of the text rendering system.



Currently the new system is used for all instances of TextRenderer in Neos, all existing worlds and items are automatically upgraded. If you notice any issues or things breaking, please make a report, ideally in #bugs-and-feedback channel on the Discord.

Text embedded within a UI canvas (inspectors, friends list, inventory, file browsers and so on) is still using the old system at the moment. We’ll be creating a new UI framework to replace the old one, using this text rendering at its core. There’s a lot more cool stuff to come!

[previewyoutube][/previewyoutube]

[h2]Asset Cache Obfuscation & SimpleAvatarProtection improvements[/h2]

We've made some new improvements to asset security, such as obfuscating the cache. You can no longer see the textures and other assets in your computers cache directory. This should make it much more difficult for users to extract models and textures, so we can help keep your assets safe!

There are also some major improvements with the SimpleAvatarProtection component which now prevents users from easily snagging mesh, materials and textures from the inspector, or with the material tip or mesh tip.

The upcoming license / object ID system will provide much stronger protections in the future and greater flexibility for managing your and other people’s assets.

[h2]Tooltip Multiplexer[/h2]

This one's going to be a big hit with our power-users and creators! This special new tooltip component allows you to have all of your favorite tooltips in one. You simply choose the tooltips you wish to use, put them in the components index list and use a little bit of LogiX to swap between tips by changing a single number.

[h2]Community Highlights[/h2]

First, a warm welcome to all of our new international users! We at NEOS wish to thank you all so much for giving us a try. We're all so very happy and humbled to have you join us in exploring this new frontier into the metaverse!

You can join the conversation about Neos VR here on Twitter and check out all the cool things people are doing!



[h3]Secret Santa Creator Jam event[/h3]

Medra is hosting a very special Creator Jam this Sunday. Users who have joined the secret Santa were given a random name from the list to procure or create a special gift for them. I know we’re gonna have some wacky gift ideas this year! We’ll be livestreaming the event on our Twitch, so come check it out!



[h3]Snowglobe by Turk[/h3]

This beautiful and cozy world features a very interesting ceiling design! Make your way over to the coffee table, pick up the snowglobe and look into it and you'll see a tiny version of the room! What's more, you'll see a tiny version of yourself looking into a little snowglobe. Look up at the ceiling and you'll see a massive version of yourself!

We’re so happy to have you join us again for this weekly update! Thank you to all of our users and patrons! Without you, we could not move forward with the project. You literally make our world go 'round! And again, to all of our wonderful new users, welcome!



[h2]What’s next?[/h2]
With the new text rendering system pretty much done, we’re now more than half-way through the technical phase of the UI overhaul. Next we’ll be working on a brand new UI framework system, using the new text rendering as a basis, that’s going to replace the current Unity system.

Similarly to the new text rendering this will not only offer drastic performance improvements (especially with lots of windows and inspectors open!), but also give us full control over all parts of the system, which will allow for redesigning the UI visuals and interactions to provide the experience we want.

We’ll also continue fixing up any issues with the text rendering as we go and there are some new additions planned, like better text editing (being able to click anywhere in the text to position the cursor) or 3D mesh text generators, so there’s a lot of fun stuff you can look forward to!

0.8.19.29761 - Tweaks, improvements and bugfixes for the new Text Rendering

A bunch of bugfixes for the new text rendering system. More are coming!

[h2]Tweaks:[/h2]
- Switched default font weight to Medium from Regular to improve readability in VR
-- Based on feedback from @AlienInArea51 (MR-Alex) and @Anomalous
- tag for the new font rendering system now supports colors by names (e.g. , based on feedback from @Anomalous)

[h2]Bugfixes:[/h2]
- Fonts and FontSets are now referenced as assets rather than regular objects, preseving links to them when saving objects
-- This fixes text disappearing after saving items into the inventory or transfering them to another world (reported by @三田村綯夜 and @Ero)
- Fixed audio clips not loading correctly in some cases
- Fixed race condition breaking glyph rendering process when same glyph is enqueued for rendering after the render has already started
- Fixed TextRenderer not correctly respecting Enabled state, causing some text to be shown when it shouldn't be (e.g. in Neos text fields, reported by @ProbablePrime)
- Fixed up some font change propagation issues, resulting in fonts not being updated properly
- Fixed not being parsed correctly (e.g. , reported by @Zyro1331 | Need Help? Ask.)
- Fixed broken font on Export Dialog and other "physical Neos UI" elements (reported by @Danyy59)

0.8.19.37798 - New Text Rendering system, support for import TrueType font files

New semi-major release, the new text rendering system and support for font import is finally here! :smile: This has been one of the most complex subsystems to develop for Neos and one of the most significant, as this is a foundational block for the UI overhaul, as well as giving you more creative control, improving performance and supporting more languages!

Following this, I'll be working on a brand new UI framework (which should take significantly less time) using this font rendering as basis after which the UI/UX itself will be redesigned.

[h2]New features:[/h2]
- Added a brand new custom Neos text rendering system, replacing the old Unity one
-- This new system is heavily asynchronous and multi-threaded, utilizing multi-core systems and removing all lag when changing/generating lots of text
-- It uses a higher quality MSDF rendering method (old one uses SDF), preserving more detail and sharp edges in font
-- It supports dynamic glyph atlas generation on the fly, rather than a fixed pre-generated atlas, allowing for any glyphs from the font file to be displayed
-- Supports significantly more languages now, including Japanese, Chinese and Korean
-- Languages with complex text shaping rules and right-to-left writing aren't supported yet (e.g. Arabic)
-- This currently replaces the text rendering in TextRenderer, Text within UI canvas (e.g. inspectors, friends list) still uses old one. Will be replaced with new UI system

IMPORTANT: This upgrades all existing instances of TextRenderer. If you encounter anything breaking, DO NOT SAVE the world or item and report the issue. Some small visual differences are expected.

- Added support for importing Font asset files (TrueType/OpenType font formats are supported: .ttf, .ttc, .otf and .otc)
-- You can configure glyph size in atlas, signed distance field range and padding on the asset.
-- Increase the glyph size for fonts with think or small features to reduce artifacts
-- Neos now uses Noto Sans as its default font, replacing previous Liberation Sans

- Added TextUnlit material, which supports MSDF rendering and is used by the new text.
-- You can use this material fully standalone as well, it isn't technically tied to the text
-- It supports different blending modes, offsets and other material settings that the old FontMaterial didn't support
-- More font materials to come in the future!

- TextRenderer now uses regular Neos materials, rather than a specific FontMaterial asset and generates a regular mesh, fitting elegantly into Neos' pipeline
- Added "BoundsAlignment" property to TextRenderer, allowing to set alignment of the BoundsAlignment
- Separated "Align" into HorizontalAlign and Vertical Align for TextRenderer
- HorizontalAlign now supports "Justify" alignment
- Added FontChain component, which allow specifying a main font and a set of fallback fonts used for glyphs missing from the main one
- Added FontCollection component which allows specifying a collection of fonts
- Added tags, which allows using different font for a section of the text. This requires those fonts to be supplied in the FontCollection
- Added or tag for rich text, allowing to select a specific glyph ID from a font file

[h2]Tweaks:[/h2]
- Categorized LogixTip corretly (based on report by @DeliriousJax)

[h2]Bugfixes:[/h2]
- Fixed broken syncing of items/worlds loaded from the database (reported by @Alex from Alaska)
- Fixed TooltipMultiplexer not forwarding the circular menu items correctly (based on report by @DeliriousJax)
- Removed a bunch of old testing and debug components

0.8.18.40552 - Cache obfuscation, Tooltip Multiplexer, local-only data model...

Releasing some goodies today! Obfusaction of data cache, tooltip multiplexer, extensions to data model and more! I was hoping to have the new text rendering system ready today, but there are a few remaining glitches and things to work out and I'm getting dead tired. But it's definitely coming out tomorrow!

[h2]New features:[/h2]
- Added obfuscation for the asset cache, preventing users from easily finding the texture, mesh and other data (based on feedback by @フリック)
-- This only affects new assets, clear the cache first if you want to test this
- Added "TooltipMultiplexer" tooltip, which acts as a proxy for multiple tooltips (selected with an index from a list) (based on request by @DeliriousJax , @LeonClement , @Turk and @Medra)
- Expanded data model to support local-only hierarchy (parts of scene that aren't synchronized)
-- This is done by creating local Slots. Anything on/under those will not be synchronized
-- Any synchronized part of the data model cannot reference local parts, but the opposite is possible
-- This is currently mostly used internally and isn't accessible with LogiX yet (it's used by the new font system)
- Added "PersistentOverrides" to ValueUserOverride and ReferenceUserOverride to allow making the overrides non-persistent (based on feedback by @Hayden (PolyLogiX - ZyroDesign))
- Made some more improvements to internal moderation tools

[h2]Tweaks:[/h2]
- Optimized memory usage and some CPU time for slots, by not allocating children management structures until they're needed (saves memory and CPU on leaf slots)
- PlayOneShot now uses local slots when the sound is set to play only for local user
-- This makes local clips significantly more efficient and prevents some audio artifacts for other users (previously reported by @Coffee)
-- No changes are necessary for this to take effect
- Some small allocation optimizations
- Added ICommonMaterial interface to WireframeMaterial
- Added abuse protection to FocusWorld and OpenWorld node (based on feedback by @ProbablePrime)
- Prevented Login Dialog from being spawned outside of userspace (based on report by @Dante)



0.8.18.20173 - SimpleAvatarProtection improvements, device reliability fixes

Protection improvements for SimpleAvatarProtection, eye tracking and microphone reliability improvements, other bugfixes

[h2]Tweaks:[/h2]
- Added extra protections for the SimpleAvatarProtection, preventing extracting of meshes and materials in most cases
-- This still isn't designed to offer 100 % protection within Neos, but makes it significantly more difficult to extract the data. The license/object ID system will offer protection at asset level once implemented

[h2]Bugfixes:[/h2]
- Fixed EquipTooltip, GetTooltip and DequipTooltip nodes not working correctly (reported by @Parker and @Vigilabo)
- Fixed GetTooltip and DequipTooltip throwing an exception when the node is set to Unknown
- Fixed default snap distances being affected by the model scale when importing model as snappable (reported by @Medra)
- Fixed Vive Pro Eye tracking breaking when the headset is briefly disconnected, especially with wireless (reported by @Reactant and @FustyLugs)
-- Let me know if this fixes the issue completely. I'm pretty sure it should, but I don't have wireless to test
- Added audio input (microphone) reinitialization when the audio data stops coming (e.g. when the device is unplugged or wireless connection is lost, reported by @Reactant)