I'm mainly focusing on the new font rendering system now (sorry, it's taking quite some time, it's quite complex problem), but here are some bugfixes, tweaks and improvements!
Tweaks:
- Settings will now always sync, even if there's a sync conflict, overwriting the cloud version. This should fix lot of cases of sync errors and help prevent settings from reverting to defaults - Model Exporter will now name materials by the object they're on (based on feedback by @Business Lawyer) -- Let me know how well this works, it might need some tweaks - Updated the Unity SDK to latest version of Neos (this fixes sync issues from the SDK encountered by @Quinix )
Bugfixes:
- Improved security by preventing simulated button presses (reported by @ProbablePrime ) - Fixed public worlds opening with the access level they were saved with (e.g. opening as private) (reported by @Nexulan ) - Fixed objects turning black when too near the camera due to changes in the post processing stack (reported by @Lewi-bean and @Veer ) - Fixed exceptions during Neos startup due to missing object - Fixed worlds reverting back to private when users join (reported by @ProbablePrime) - Removed diagnostic message for destroyed updatables (based on log from @Coffee ) - Fixed synchronization diagnostic data not always getting logged correctly (to help diagnose @Steamkraft's sync issue)
Blending support for the LUT shader and some fixes and additions.
New features:
- Added support for blending between two LUT's for the LUT Shader - Added ZTest proeprty for the LUT Shader, which allows rendering it over everything - Extended MultiTextureFader<A> to suppor Texture3D as well -- This allows it to be used to fade multiple LUTs with the new LUT shader - Added extra performance metrics to the debug dialog - total engine update time, external update time and so on - Uploaded new batch of CC0 textures to Neos Essentials / Materials - about 200 new high quality PBR materials that are free to use!
Tweaks:
- Updated post processing filters - Various tweaks to help improve rendering performance
Bugfixes:
- Fixed incorrect units for the render time (reported by @Addim) - The secondary stereo camera now uses the same exclude list as the primary one -- This fixes issue where some things show on right eye, that are excluded from the left eye (reported by @Swingly ) - Added retry logic for cloud API requests to increase robustness of API requests -- This should help fix certain things not loading or syncing breaking when there's a random IO/network exception during the request - Fixed exception when dragging out a null texture from the inspector
- Added PBS Color Mask shader (including both Metallic/Specular workflow) (requested by @Aegis_Wolf ) -- This material has a color mask texture, which allows selectively tinting 4 independent albedo/emissive regions - Heavily extended Fog Box Volume shader (based on requests by @DeliriousJax and @Coffee ) -- It now supports 3 distance accumulation modes - Linear, Exponential and Exponential Squared -- Linear mode now has Fog Start and Fog End properties -- Added ability to use vertical color gradient instead of single accumulation Color -- Added Worldspace mode, which computes accumulation in world distance units and doesn't clamp to the cube volume -- Added Clamp Alpha and Clamp Color modes, which prevent color artifacts due to out-of-range alpha or HDR blow-out - Added LUT filter shader (requested by @Coffee ) - Added support for exporting and importing LUT references -- To export, simply grab an image, export as usual and select "LUT" as format (will be PNG file with LUTs embedded) -- To import, simply use LUT option on the same image, which will import it as 3D texture, usable with the LUT filter shader - Added "Disable Shadows" and "Disable Per Pixel Lights" to mirrors (suggested by @InsaneGrox ) - Added render time to debug dialog to help get more performance data diagnosis (based on feedback by @Addim) -- This only works when running in VR - Added Release All Grabbed node, which will force the player to release all held items in specific hand (implemented by @Coffee )
Tweaks:
- Changed default camera far clipping distance to 4096 to correspond to VR clipping distance -- This fixes the finger camera clipping part of the scene in large worlds (based on feedback by @Coffee) - Headless Client doesn't run command server anymore (this prevents it from opening Neos links, reported by @Bom "Bitman" bomb (PolyLogiX) ) - Upgraded to Unity 2019.3b12
Bugfixes:
- Fixed race conditions when accessing world user data, causing certain things to randomly break (discovered in log from @Ballistic) - Fixed excessive logging and exceptions in StatusManager triggered by a different error (discovered in log from @Ballistic) - Removed forgotten debugging text when dragging out LogiX outputs with the tooltip (reported by @Hayden (PolyLogiX - ZyroDesign) ) - Removed some old logging information for P2P asset transfers - Fixed textures with bpp larger than 24-bit (excluding alpha) not exporting correctly as JPG - Fixed export dialog disappearing too soon - Fixed texture data being flipped upside down in some cases -- E.g. this fixes all procedural textures being flipped upside down -- Also fixes certain cases where doing operations on textures (e.g. exporting or transforming) flips them upside down - Fixed 3D Textures not respecting the clamp settings - Fixed Patreon update not working correctly (based on issue by @Thorodiki )
We’ve got a fairly short update this week, because we’re currently focusing on the technical aspects of the UI overhaul. We’ll be discussing a couple small additions and tweaks made to Neos and how they work for our users! We’ve also got a couple interesting and beautiful worlds to showcase by members of our community!
Our weekly livestream will start in about 20 minutes from this post! Come join us and chat with us. The !bobblehead chat command should now also have proper sounds, you’ve got to hear them! ;)
Tweening Node
The new “Tween” node allows for LogiX to animate a parameter of an object over a specified amount of time from one value to another. This greatly simplifies this kind of animation, as you only need one node and you’ll even get an impulse when it’s done animating!
An example could be a light that fades to different colors over the course of a second, a train movement system that needs precise timing, an object that moves smoothly to a random location every other second, and many other wonderful ideas!
Camera permissions
There are now new world permissions that can restrict one’s ability to move their streaming camera to other users, effectively disallowing in-world stream sniping. This can be very helpful to worlds such as the GunLight worlds where users could otherwise use the stream camera for an unfair advantage.
Permissions for saving items and swapping avatars as spectator
We’ve added new world permission settings that allow the owner of the world to take more control of their worlds security. Now you can allow your friends to have builder access while also preventing people from saving items from your world. You can also allow spectator level visitors to swap their avatars while keeping them from bringing in unwanted items.
Community Highlights
Our community members have made some amazing worlds that have made it to our Highlights section this week! Make sure to give them a visit!
Hex Moving - Zane
Being here almost feels like you’re a particle flying through the large hadron collider! This is a wonderful chill world to hang out with your friends and dance!
Broken Heart - Illuminatty Get your smoke on in this wonderfully dank atmosphere! This small hangout is great for hosting private DJ sessions and small dance parties as well as to just chill with friends and meet new ones!
Shangri-La - GearBell A snowy wonderland that makes you feel like you’re in an MMO! Explore the deep ravines or relax on the grassy floating plateau as the snow blows around you.
Light Saber - Lewis_Snow
Lewis has released the first public version of his amazing lightsaber. With fancy power on and off effects, sounds, trails and even collisions (they're currently a bit glitchy, but still fun to play with). You can find it in his public folder, definitely check it out!
Thank you again to our wonderful community for making such amazing worlds! If you have a world you want to show off, let Veer know! Videos are very helpful too!
What’s next?
We’re currently working on the new font rendering system for Neos. This involves a significant amount of groundwork and new concepts being introduced into the engine, so it’s a bit slow from the beginning, but soon you’ll be able to reap its benefits.
The new system is going to be using a multi-channel signed distance field rendering method, which provides superior font quality and preserves sharp corners, unlike the current single channel signed distance field.
The system is also designed to be heavily multithreaded, reducing text update latency and moving it to background thread, reducing lag with changing text and will feature support for both pre-generated and dynamically generated characters. We expect to have first working version of this system sometime next week.
We are also currently porting TiltBrush shaders over to Neos, which will allow for the import of its drawings, while preserving the same look! We’ve had quite a few XR artists ask about this ability and we’re excited to see what kind of creations it will bring.
We’ll keep you updated as we make more progress! Check out our official Discord for daily updates and peek behind the scenes and don’t forget to join our livestream as well, where you can chat with us about these updates and ask us questions.
And as always, thank you again to our wonderful community and very generous patrons! This project could not exist without you.
A bunch of important bugfixes, particularly to prevent data loss with world saving. Sorry for the smaller builds now, I've been busy with a few other things and I'm designing the new font rendering system now.
New Features:
- Added ability to load worlds directly from a raw 7zbson and lz4bson file -- This is mostly for auto-recovery purposes, do not use this as a distribution method - Added FeetCollisionList & FeetCollisionListMode to VRIKAvatar -- This lets you specify which objects will always be ignored from feet collissions or alterantively which ones will be used - Added ability to unfavorite avatar by selecting it and clicking the heart (based on feedback by @Hayden (PolyLogiX - ZyroDesign) )
Tweaks:
- LogiX interfaces and wires for reference fields will now show the color of the reference target, rather than the reference field - Made more tweaks to the chest effector to fix twisting shoulders when using chest tracker (based on feedback by @Reactant )
Bugfixes:
- Reworked logix input connection logix to fix certain scenarios where the right reference node isn't prefixed -- This fixes the issue where reference field can't be correctly plugged to CreateReferenceUndoStep (reported by ProbablePrime ) - Fixed exception in save process when there's a malformed Uri in the saved data, breaking the save process (reported by @Medra ) - Added a guard against unexpected errors in the save process breaking the save completely - Added a failsafe to world saving, which will dump the raw saved data to disk for manual recovery in case there's any unexpected exception in the saving process - Fixed rare crash when upgrading/downgrading an asset variant (e.g. switching texture compression mode or filtering) and the relocation triggers nested relocation again (discovered in log from @Zane ) - Fixed broken texture exporting when only variants of the texture file are downloaded, but not the original (reported by @Kalash ) - Fixed textures with one dimension longer than 16384 (16K) not loading at all, due to inability to compute the variant -- Neos will automatically request variant that has the longest side at 16K so it will get downscaled. -- Please don't use textures this big, it's not supported by GPU's and the graphics API's, so it will just lead to waste of resources and quality loss - Fixed LogiX evaluation contexts not properly clearing outputs -- This fixes the Raycaster outputs getting stuck when nothing is hit (reported by @LucasRo7 , @Shifty ) - Fixed Full Body Calibrator avatar feet colliding with random objects - they will now ignore everything but the platform - Made OneShotAudio instances non-persistent, so they don't get accidentally saved with the world - Fixed race condition when filling empty avatar slots, causing exceptions or add behaviors - Fixed streamer camera not being able to target other users after recent camera permission addition
Today is a #ThankYouPatrons day, so I and the rest of the team have put together this little video for our Patrons! Your support means a lot to this project and it has transformed Neos from just a bunch of code into a living breathing metaverse.
It's mindblowing to me that we have so many people believing in this project and makes me happy to work on it every day. Over the past year and half Neos has drastically transformed and improved into what it is today thanks to your support and feedback and I will continue pushing it along that path for many years ahead.
Seriously! I've spent years in the development thinking if anybody would ever use this thing I poured my life into. By the time I got to beta I was feeling ready to give up. But luckily we created a Patreon and immediately got incredible level of support.
People got what Neos was about and what our vision was and that was incredibly invigorating. Now I've feel more motivated to work on it than ever. It has become my home, I have found new friends through it and experienced so many cool things.
I don't worry about using it anymore, but just about making it better. And over the past year and half it has transformed in a ways that I never imagined it would and with each improvement pulled more support. I can't wait to see where will all this lead, but I'm all in it.
The future of the metaverse is bright. Thank you! ^^
Tweening nodes, camera/item permissions, new nodes, full body improvements and other tweaks and bugfixes! Android / Quest builds were updated to latest as well.
New Features:
- Added Tween Value Node, which allows smoothly tweening value of a field from one value to another on an impulse -- Can be found under Actions -- To use fields current value as To or From, simply leave them unplugged -- It also gives you an impulse when it starts and finishes tweening - Added CameraPermissions component (based on request by @Coffee and @Bom "Bitman" bomb (PolyLogiX) ) -- This lets you restrict which camera modes can be used and whether the user is allowed to frame other users or only themselves - Added simple mechanism for adding/removing permission components from roles - each component lists out roles with a button to add/remove -- This is temporary, a proper UI for managing permissions will be added in the future - Added "Allow Saving Items" to World Permissions, which allows blocking saving of any items (requested by @Coffee ) - Added "Allow Swapping Avatars" to World Permissions as separate permission (based on feedback by @ProbablePrime ) -- This allow setting up spectator permissions which allow for avatar swap, but not spawning of items - Added LogiX nodes for fetching some extra user metadata (based on feedback by @Blaze ) -- Ping, FPS, Downloaded/Uploaded Bytes, Download/Upload Speed (+ Max)
Tweaks:
- Tweaked chest target IK calculations (based on feedback by @Reactant ) -- This should make it behave better when sitting or lying down (let me know if it still glitches) -- It affects the bending of the upper spine now, so vertical rotations are transferred as well. This subtly moves the avatar chest with breathing for example -- Reverted the calibration of the chest tracker since it affects this as well now. Please recalibrate before testing - Added extra debug diagnostic visuals for chest tracking - Added extra diagnostics when assigning a destroyed parent (based on issue by @Zane ) - Added more error messages to inventory when the action is blocked by the permission system - Removed Jump on pulse (DEBUG) (based on feedback by @Shifty ) - Upgraded to Unity 2019.3b11 (from beta 10) -- This seems to fix libVLC crash on certain computers (reported by @pammematth ) - Updated NatMic library to the latest version (1.3.2)
Bugfixes: - Fixed double permission validations for some objects, causing random issues - Fixed permission validations not being correctly scheduled if the object is changed after being cleared, but before the validation testing - Tweaked picking of the right session for P2P asset transfers to help prevent rare scenarios where locally improted assets wouldn't transfer (reported by @Alex from Alaska , @Hayden (PolyLogiX - ZyroDesign) ) - Tweaked Headless client update routine to fix some time-related issues (e.g. switching system time, daylight savings and similar) - Added dummy audio callback to headless client, to fix behaviors dependent on audio updates - Fixed Twitch Interface not working in headless due to a dependency library version mismatch
Fixing up few last instances of broken alpha due to the asset variant system. A few more tweaks too. Updates Android / Oculus Quest builds to the latest as well!
Tweaks:
- Added a mechanism for updating asset metadata - Simplified object hierarchy for imported images - they are now represented by a single object, rather than adding a child. -- This also fixes issue with thumbnail not using the actual texture when saving to inventory (reported by Iforgotwhosorry ;_; )
Bugfixes:
- Scheduled new metadata version to fix incorrectly generated metadata with invalid alpha information. This should help fix more cases of textures having black background instead of transparent ones (give it a load or two, for the old data to be purged/recomputed) - Added auto-update for radius for the old SnapTarget components (this fixes the old ones before the change which made the radius in local space rather than global)
Welcome back to our Friday update. We have an exciting milestone to talk about today! About a week ago, we’ve unveiled the first working implementation of our Asset Variant system. We’ll be going over what this means for Neos and its users.
We’re going to be live streaming on Twitch about when this post is 15 minutes old. If you would like to know more, please join us! We’ll be taking suggestions and answering questions about this optimization update as well as showcasing how it works! Also come try out our new interactive Twitch commands !bobblehead and !coffee.
Asset Variant System
This major feature helps to optimize the Neos experience by taking original assets and computing “variants” of them. These variants are versions of said assets that are much better optimized for your device, connection, and settings. Currently, this version of the system focuses on generating optimized textures.
This will lead to significantly less RAM and VRAM consumption, which will help Neos run much more smoothly. Complex worlds with a lot of large textures not only run better, but they load in a fraction of time they used to before too!
The textures are compressed using native Block Compression algorithms. Opaque textures are compressed with BC1, which allows the texture to be loaded using 8 times less memory, and alpha textures are compressed with BC3 which uses 4 times less memory. Additionally the textures are crunch compressed for smaller download and storage size.
Texture heavy worlds such as Club Fur used to take a long time to load, in some cases upwards of 5+ minutes. After the Asset Variant system implementation, we’ve seen load times as low as a few seconds! This is thanks to the reduction in computations needed to load assets and a much lower volume of data uploaded to the GPU.
These textures use a lot less memory bandwidth when rendering as well. For example Viridian Island would cut a lot of users FPS to an uncomfortably low level. Now, many users are reporting much higher frame rates while visiting!
Avatars with multiple 4K textures do not lag anymore when they load. Photogrammetry scans also tremendously benefit from this system as they often use dozens of high resolution textures.
The latency of the loading process has been improved as well by pipelining the mipmap levels. Textures are downloaded and loaded into the GPU piece by piece, with the lower resolution version shown as soon as possible, which will keep getting sharper as more of the texture’s data is downloaded. That way you don’t have to wait as long for everything to fully load.
This system works for locally generated assets as well (such as photos taken in-game or freshly imported 3D models and images), uploading parts to the GPU and other users as soon as they’re ready, while the rest is still being computed. The peer-to-peer asset transfer protocol has been extended to support this, improving the loading times and latency, especially for users with slower connections.
We have also implemented lots of tweaks, bugfixes and improvements since the first release of the asset variant system based on your feedback. The system should be much more reliable and stable now and the quality of the compressed textures should be improved.
Android & Quest port of the asset variant system
The Asset Variant system has now been ported to our Android and Quest builds. This is a crucial step for mobile devices to be able to use Neos, as these devices have both low memory and low memory bandwidth.
Opaque textures use ETC2 RGB8, which compresses textures down to 4 bits per pixel and alpha textures use ETC2 RGBA8 which compresses down to 8 bits per pixel. Same as on desktop, the textures are crunch compressed and load from the smallest mipmap, getting progressively sharper.
The mobile build now bypasses Unity’s texture pipeline, using native OpenGL to upload textures to the GPU directly. This allows Neos on mobile to spread the upload over several frames rather than all at once, which stops Neos from hanging when loading textures and reducing overall CPU and memory usage.
This was the major part of the porting process, which took a lot of time, effort, and native code. The desktop version was already using DirectX 11 to upload textures to the GPU directly, but it has received some improvements as well, fixing GPU driver crashes reported by some users.
This is a major step towards Neos being available publicly on mobile and Quest. Worlds that previously crashed Quest now load and run reasonably well, even when they’re originally made for desktop. For example Viridian Island would just crash the Quest build before, but now it loads and runs at upwards of 40 FPS.
Your content is future proofed
One major benefit that the asset variant system brings over traditional in-engine compression is future compatibility. All of these optimizations are fully automatic for all submitted worlds and items, regardless of when they were first uploaded. As a creator you don’t have to do a thing!
We take compatibility very seriously and design our systems so they do not permanently break any user submitted content and don’t require reupload anytime we publish a major update like this. If you have already submitted content before, the textures have been automatically optimized for both desktop and mobile, with more to come.
The asset variant system is capable of gradually reprocessing all assets in the cloud whenever we implement new improvements, better compression and optimization methods or fix reported issues and ensure that even content uploaded years ago can receive the benefits of the latest technology.
Other Updates
Besides the release of the Asset Variant system, we’ve pushed out a few upgrades and bugfixes. Frooxius has fixed a startup crash due to SteamVR Input bugs, such as having more input devices plugged such as gamepads and joysticks, running Oculus through SteamVR, or using less common headsets like Pimax.
We’ve upgraded to Unity 2019.3 beta for its engine improvements and bugfixes and will be taking advantage of new high-performance mesh API’s soon. Both SteamVR and Oculus SDK’s have been updated to their latest versions as well.
There were dozens of other bugfixes, tweaks and additions as well, check out the #neos-updates channel on our official Discord for full changelog!
Community Highlights
Medra has been hosting weekly Creator Jams, where the community comes together and, based on the weekly theme, creates content for the rest of the community. They’ve hit the 6 month mark after 24 jams, the most recent theme centering around NPC’s and Robots.
One user made a wall-detecting Roomba (featured in our Twitch streaming house!) while another user made a follower robot NPC! Feeling creative? Feel free to join! They’re hosted every week on Sunday.
Medra is currently making a trailer for the Creator Jams, and needs members of the community to be a part of it. He’s in need of 10+ actors, so give him a message, he more than likely needs a few more to make a full scene.
As he’s stated in our #meetups channel, this will be a fun and playful type of environment, but some shots may take 4 or more takes. He’s done a lot to bring wonderful content to Neos, so if you’re feeling inclined to help him out, please do!
The Sydney Human Factor Research (Known as SHFR on our Discord and in Neos), who have been our long time academic users, are preparing for a big presentation at the Sydney Festival of Inclusion at the Centre for Disability Studies.
If you’ve been facing challenges like agoraphobia, anxiety, immobility, deafness or others and have found Neos or VR in general to help you in some way, you can get in touch with prof. Hamish MacDougall on our Discord (@SHFR) and share your story for the event. All stories will be anonymized.
We are beginning work on phase one of the major UI Overhaul. There are two major phases to this. The first phase is a technical backend phase which will be replacing the old hybrid Unity/Neos frameworks with our completely custom high-performance ones and give us the full control for the next phase.
Phase two is the visual and UX overhaul phase, where we will see a major improvement to user friendliness, customization possibilities, and way more!
First on the list is our own font rendering system which will be a replacement to Unity’s. Loading large amounts of text will not lag anymore as everything will be generated asynchronously on background threads.
This upgrade will also allow you to import your own fonts in-game, improve the text editing ability (for example by being able to click anywhere in the text to place the cursor) and allow 3D mesh fonts in the future too. It will support dynamic symbol generation for languages such as Japanese, Chinese and others that have lots of symbols.
The asset variant system that we just implemented will actually help us with this upgrade as well, allowing to store pre-generated font atlases as a variants of given font access. If we add new rendering method for new devices (e.g. using on GPU vector rendering) in the future, it will mean simply adding another variant and re-generating it for all already uploaded fonts.
We’ll keep you updated as we progress on this. Check out our official Discord for daily updates and peek behind the scenes and don’t forget to join our livestream as well, where you can chat with us about these updates and ask us questions.
0.8.18.18108 An important bugfix for the asset variant system and a quality improvement!
Textures are being recompressed now, if you still see the issue give it a few launches/hours (or a day).
- Added a mechanism for upgrading asset variants to a version with improved settings -- This upgrades the same variant, rather upgrading to a different variant type -- Neos will keep loading the older available variant until the new one is computed in the cloud and available to preserve low memory usage
- Tweaked crunch compression settings to reduce block/square artifacts on the textures (reported by @Aegis_Wolf)
- Fixed broken alpha on newly generated texture asset variants (reported by @Hayden (PolyLogiX - ZyroDesign) , @Nexulan , @Aegis_Wolf and @Anomalous )