1. Neos VR
  2. News
  3. CHIP-8 emulator built completely in VR, avatar additions, progress on UI more

CHIP-8 emulator built completely in VR, avatar additions, progress on UI more

Hello everyone!

Welcome back to the weekly update. We’ve got a small one today, as most of our development efforts have been focused on the new UI framework, which is nearing its completion. Parts of its design proved to be more challenging than expected, but they’re now mostly solved.

Despite that, we had some exciting events. Last week Aegis_Wolf built a functioning simple 3D modelling tool purely in Neos. This week another of our team members - 0utsider, has built a functioning CHIP-8 emulator completely in VR!

Neos has received a bunch of small additions, optimizations and bugfixes as usual, you can read more about them below.

We’ll be talking about this and more during our livestream on Twitch tonight! We’ll be answering your questions and hanging out with the community like usual so feel free to visit!



[h2]0utsider’s CHIP-8 emulator![/h2]

0utsider, one of our team members, has built an entire CHIP-8 emulator within Neos, based on the original CHIP-8 interpreted language, all made purely in-game with LogiX! This emulator is capable of running ROMs for the COSMAC VIP microcomputer, so you can even play simple games on it.

“It was fun building the Chip 8 emulator in Logix. And hangout with my friends in VR as they would drop by to see the crazy mess of wires running about the gm_flatgrass map where i worked on it. Garry’s Mod was the first game where I made the emulator run in it’s Logix style programming system.“ - 0utsider89





[h2]Avatar pose offsets for more flexible setups[/h2]

We have added a few new components to help with avatars that have unusual body proportions: AvatarTrackingOffset, AvatarPoseOffset and AvatarPoseFilterInstaller. Using these, you can apply a fixed offset to your tracking space or to individual body nodes.

This can be used to setup avatars that have very short legs for example, by pushing the whole tracking space into the floor to compensate, while preserving arm length distances. The offsets are also tied to the avatar itself and are automatically applied to anyone wearing those avatars, without having to fiddle with the settings.

[h2]More reliable 3D model import[/h2]

After reports of some rigged 3D models importing incorrectly, we have investigated and found a series of bugs, particularly for models with bone name clashes. As a result, the Assimp library used to decode the 3D model formats has been updated to the latest version from source and those bugs were fixed, making more models to import correctly out of the box.

[h2]Steam Audio branch[/h2]

Currently Neos is using the Microsoft HRTF Spatializer. While low in audio quality, it provides the best stability and reliability out of available solutions for the moment. Our long term goal is to switch to the Steam Audio spatializer for its high quality and feature set, but at the time it suffers from several issues that prevent us switching to it fully.

However if you’d like to test it out or use it on your own risk, you can! You can do so by switching over to steam-audio branch on Steam, in NeosVR properties. The branch is compatible with regular Neos and is updated in sync with the main build.

While this offers better audio quality, be aware that you might get random pops and complete silence until Neos is restarted and random high CPU usage when playing sound effects. Those are issues with the Steam Audio library that we are waiting to be fixed first and they seem very random in nature, with some users not experiencing them at all, while others encounter them often.

[h2]General additions, optimizations and bugfixes[/h2]

As usual, Neos has received a bunch of bugfixes and optimizations over the course of the week, based both on user reports and our own discoveries. We finally got rid of the slow initial load for inventory folders with lots of items, reduced some memory allocations and CPU usage. Random logging out for long running sessions (particularly headless) was also fixed.

There are some new LogiX nodes as well, particularly Cubic Lerp and Cosine Lerp by Coffee, which allow for building nice procedural animations right inside of Neos. Check out the #neos-updates channel on our Discord or the small patch announcements on Steam for more info!

[h2]Layout system for UIX[/h2]

The full details of the layout system for the new UI framework UIX took longer to design and work out than expected, but they’re now finally being implemented. This is one of the most important parts of an UI framework, as it is responsible for automatically building complex layouts out of several UI elements.

It is designed to handle anything from a simple row or grid of buttons, to complex nested layouts flowing in different directions and provide extensible framework to implement more layout components in the future.

One of the goals of the system and particularly challenging parts of the design was performance. Not only are all computations deferred to a background thread, requiring the synchronous part to do as little as work as possible collecting the necessary information, but it’s designed to avoid recomputations for parts of layout that haven’t been affected.

To achieve this the system is designed to use a hierarchical invalidation propagation, with a way for different components to “absorb” particular changes. For example if a width of a child element changes under an element that has a fixed width itself, the changed width will not propagate beyond that point.

At the same time it will trigger sufficient invalidations that will result in necessary recalculations - even though the width might not have direct effect on parent’s width, it can affect its height though more complex relationships (like text wrapping) and the layout system needs to be able to handle that.

Overall, this will lead to the new UI framework being more responsive, taking less of your system resources (particularly CPU time) and having significantly lower impact on your framerate, while allowing us to build elegant, beautiful and powerful UI’s on top of it.



[h2]What’s Next?[/h2]

With the layout computation system for UIX being worked out and now implemented, we'll be moving to the final stage of the implementation. There are still many things to implement with the new system, but nearly all the hard parts (the layout in particular) are in place now, so the system should be ready to replace the existing UI framework soon.

Thanks again for checking out the weekly update. We hope we’ll have more to share about the UI system soon, it’s been taking long enough, but we appreciate your patience and support. Thank you guys, you’re all awesome!