




Got three fixes for you, plus the locale updates! Compatible with previous build.
Locale:
- Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete - Merged Japanese locale update by @.aesc
Fixes:
- Fixed broken RadialForce mode for PhotonDust (reported by @modernballoonie, issue #3823) - Fixed CultureLocaleCode setting not working properly (reported by @baplar, issue #3824) - Fixed implicit arm dynamic bone colliders not being ignored when ColliderWithOwnBody is enabled on the dynamic bone (based on report by @epiceaston197, issue #3825)
[ 2025-02-26 03:02:46 CET ] [ Original post ]
Hello everyone! I got a new build for you today, with a whole bunch of goodies! This is cleaning up a bunch of smaller things that needed some love for a long while, but were pushed out by bigger work on PhotonDust and other stuff and a bunch of other treats to break up the development a bit from the big stuff a little. There's also a new bonus module for PhotonDust inspired by a game I started playing recently, allowing for even more cool effects! I can't wait to see what you'll make with it!
New Features:
- Added OriginRadialForce module for PhotonDust -- This is similar to RadialForce module, except the center is implicitly the original position that the particle was emitted from in the coordinate space of the particle system - Added Squared & Linear radial force modes -- The previous linear is renamed to InverseLinear & auto-updated -- Those modes work inversely from the previous too - the force gets stronger the further away the particle is from the center - Added Min/MaxForce to the RadialForce to limit the resulting force applied to the particles - Added "Use cookies from browser" setting for yt-dlp (requested by @zangooseoo, issue #3800) -- You can use this if videos from streaming services (like YouTube) don't load from you by selecting which browser you use -- Supported browsers are: Firefox, Chrome, Edge, Safari, Brave, Chromium, Opera, Vivaldi and Whale - Added "Open autosave path for current world" button to Photo Capture Settings to open inventory location for the current world (requested by me, issue #3248) -- This makes it easy to open the folder where photos are being autosaved for the current world based on your path formatting - Added "Sticky Grab" option to interactions -- When enabled, first press of grab starts holding items, second press releases -- This is useful when you want to hold something for longer period of time without having to press the button -- The toggle is in "Grabbing" submenu on each hand. The hand grab types were moved to this submenu as well to consolidate -- This only affects worldspace grabbing -- This is in VR only currently (we can enable this for desktop too if there's interest)
Tweaks:
- Added helpful logging messages for exceptions related to loading a world by url within headless (reported by @Tobs2007, issue #3518) - Significantly improved accuracy of implicit body colliders for dynamic bones, especially with full body (requested by me, issue #1567) -- Chest colliders are now significantly more precise, which should prevent them from pushing dynamic bones up when lying down -- Arms & Legs now have precise colliders as well as part of the body, that follow each arm/leg, alongside with elbow/knee - Improved calculation of user's feet position - if the feet are not tracked, the system will fall back on the IK feet position if available
Locale:
- Merged Japanese locale update by @rabbuttz - Merged Chinese locale update by modimobeikete - Merged German locale update by @muppeq & @cameron5 - Merged French locale update by @j4.lc - Merged Japanese locale update by @.aesc - Merged Polish locale update by @foxobread, t91a60 and @torrndraws
Fixes:
- Fixed exceptions when emitters try to unregister themselves with already removed particle system - Fixed mesh emitter colors from texture being flipped on the Y axis (reported by sjsanjsrh, issue #3362) -- This only affects new instances, existing instances are auto-upgraded to preserve old behavior - if you already fixed it yourself, your fix should stay - Fixed FireOnChange with references causing crashes when input is a local element (reported by @jackthefoxotter, issue #3686) -- Note that local elements will effectively be treated as null by this node - they only exist locally and cannot be tracked globally by the node
[ 2025-02-25 22:06:18 CET ] [ Original post ]
Quick hotfix for the "Ask To Join" button not getting cleared up when user goes Offline. Despite initial assumptions, the Invisible status was **NOT** leaked by this feature - it would occur also in case when the user genuinely went offline. In general, please be careful about jumping to assumptions about causes of bugs, as it can lead to spreading of rumors! Also the new Invite Requests now have Japanese and Korean translations already thanks to speedy translators! Compatible with previous build.
Locale:
- Merged Japanese locale update by @.aesc - Merged Korean locale update by @mirpasec
Fixes:
- Fixed "Ask to join" button not getting cleared when user goes offline (based on report by @thebasementnerd, @amrialeiah, issue #3779) -- IMPORTANT: This bug had nothing to do with leaking Invisible status - it would happen both in cases when user went genuinely offline (they logged off) and when they went Invisible. In short, Invisible status was NOT leaked by this feature.
[ 2025-02-21 01:47:25 CET ] [ Original post ]
Hello everyone! I got a bit of a small treat for you! I've decided to prioritize a smaller thing to help with some of the social friction with users being in inaccessible worlds - Invite Requests! They're designed to be smart - e.g. someone requests invite from you and you can't invite them (e.g. Private session and you're not the host) you can just forward it to host with a single press of button. If host is headless, it'll forward it to handlers automatically too - and they can either send one time invite or add the user as contact directly from the invite request. The overall goal was to make it as frictionless as possible. It won't solve all the "people are in private/hidden worlds" problem completely, but hopefully this helps make things easier and remove some of the anxiety! Hope you enjoy the feature! There might be still some quirks and tweaks needed, so make issues if you run into problems.
New Features:
- Added invite requests (requested by @www.sizemo.re, @archietheraccoon, @kulza, @imerin., Valnarr, issue #255) -- You can send it from the Contacts UI -- This is designed to remove as much friction as possible when getting people into sessions and will smartly handle a number of conditions -- If you can't join user directly and they're online, the "Join" button will be "Ask To Join" instead -- If the user can't invite you directly (e.g. Private/Contacts only session and they're not host), they can forward the request to host -- If the host is headless, it'll automatically forward it to invite handlers for that session -- If the host/handlers grant invite, it's automatically forwarded all the way back to the original user -- The host/handler can also add the user as a contact (for handlers, this adds the user as contact of the headless host) -- The handler does not need to be in the same session to handle the invite -- The host/handler don't need to be Contact of the user who wants to be invited - Added `inviteRequestHandlerUsernames` configuration for headless worlds -- Any users in this list will be forwarded invite requests sent to the headless host -- The users in the list must be contacts with the headless host for this to work -- Headless also automatically forwards invite requests to any users present in the session with "Admin" role
Tweaks:
- Significantly mitigated UI Z-Fighting by increasing the OffsetUnits parameter on the UI panel backing material to 4000. -- This should significantly improve the readability of UI at reasonable distances from the world origin and when UI-aligned in desktop mode.
[ 2025-02-21 00:31:52 CET ] [ Original post ]
Hello everyone! I got another smaller build for you, but with a bunch of cleanup! There's fixes for two PhotonDust issues that popped up after the legacy particle removal, cleaning that up. Also I spent most of the time narrowing down a hard crash. I found the exact cause and applied a workaround (essentially adding more stack space for tree queries x3) which fixes the current issue, but I'll have to make report to Bepu for a full fix. The build is compatible with previous, so update at your leisure (or when you are affected by those particular bugs).
Fixes:
- Fixed particle trails sometimes glitching out to a wrong position, causing rendering artifacts (reported by @orange3134, issue #3762) -- This was done by restructuring how the second segment of trails is calculated - it used to be calculated too early, before the particle itself was simulated - in case it was never updated later on, it would stay in its wrong state - Fixed particles made with brush tools set to CloneComponent mode disappearing when the brush is deleted (reported by @orange3134, issue #3761) -- The brush tool now clones the renderer & all particle modules on the style when in this mode - Fixed exceptions in Color(X)MemberEditor when it's misconfigured and the target field is missing - Increased maximum tree traversal depth in Bepu physics -- This fixes hard crash with certain worlds and collider setups (reported by @zangooseoo, @modernballoonie, @scraner, @m7_emmy, @joshtiger, issue #3758) -- Note that this mostly just "postpones" the issue, it's still possible for the crash to occur with certain setups. Full fix requires more complex changes to Bepu:
[ 2025-02-19 00:37:08 CET ] [ Original post ]
Another hotfix for an issue. This might not fix the issue, but it'll likely get rid of some logspam. Compatible with previous also!
Fixes:
- Fixed drive errors when setting up ProtoFlux wires (based on report by @zangooseoo, @modernballoonie, @scraner, @m7_emmy, @joshtiger, issue #3758)
[ 2025-02-18 00:13:46 CET ] [ Original post ]
A quick hotfix for some worlds & items not loading when they contain mix of legacy & PhotonDust systems! Compatible with current. Update if you're experiencing crashes on loading of those items.
Fixes:
- Fixed crash when loading worlds which contain mix of legacy & new particle systems (reported by @spexcat, @vrbat, issue #3759)
[ 2025-02-17 23:40:56 CET ] [ Original post ]
Hello everyone! The time has finally come! The legacy particle system is no more in this build and all your creations now auto-convert to PhotonDust! This concludes a major milestone of the performance update, bringing us much closer to being able to run FrooxEngine under .NET 9, with only the audio system rework standing in the way of the actual "splittening"! Thank you everyone for all your reports! At this point I've spent probably about two months fixing up various compatibility issues to make the conversion near perfect to preserve old content and I couldn't do it without all your reports and samples! As long as you don't overwrite your original copies, we can still fix conversion issues even after this swap too. There are many more things for PhotonDust in the future - we now have our own system, pretty much fully under our control, but for the time being I'm going to refocus on the next goals to bring us closer to the big performance update. There's another notable change - namely our headless has been unified between Windows & Linux, so both can run from a single install! For now there's still Windows & Linux slot, but the Linux one will be removed soon. Also, the world browser has been updated to MMC25 category! If you submit your entry early (which you should to avoid stress), it'll appear there!
Optimizations:
- Removed Legacy Particle System, completing major performance update milestone to replace it with custom system (issue #587) -- All items are now automatically converted to PhotonDust **on spawn** -- This removes a significant tie to Unity, as this system was FrooxEngine-Unity hybrid -- If you find conversion issues at this point **do not overwrite** the old item/world - the conversion can run again as long as you have original copy! - Fixed world list updating unnecessarily when the tab is unfocused or dash is closed (reported by @zyro1331, issue #2970, fixed by @bluecyro)
Tweaks:
- Updated MMC category in the world browser to MMC25 -- This will now show all the MMC25 submissions that have been submitted so far! Submit yours early if you can so it appears there! - Unified Windows & Linux headless into one build that's compatible with both platforms (based on issue #3050, implemented by @bluecyro) -- This is a preparation for deprecation of the Linux branch on Steam - you will get the same headless from the Windows branch -- With this change, we use the .NET runtime mechanisms to load platform-appropriate versions of libraries -- This also paves the way for the headless running well on other architectures in the future, such as ARM (currently this is NOT supported officially as of right now, but this brings it closer) - When changing username on Resonite, it'll now also be updated on Stripe end (implemented by @gawdl3y) -- This will help the support team better match Stripe subscriptions in case of username changes - Categorized ValueReceiver, ReferenceReceiver and AssetReceiver components under UIX/Interaction (based on report by @grand__, @nytra, issue #3749) - Renamed ReferenceGrabReceiver to ReferenceReceiver to unify its naming scheme (based on report by @grand__, @nytra, issue #3749) -- This is a non-generic version of the receiver. Generally I recommend using the generic version where possible as it allows specifying exact type -- Added "Undoable" field to this version to unify it with other variants - Updated yt-dlp from 2024.12.23 to 2025.01.26
Removals:
- Removed BooleanUserOverride component (based on question from livestream) -- This component was uncategorized and did nothing
[ 2025-02-17 21:50:03 CET ] [ Original post ]
A quick hotfix for the PhotonDust trails breaking! Sorry for the inconvenience! Compatible with previous build. I'll push `prerelease` version in a bit.
Fixes:
- Fixed trails not getting properly cleaned up when they don't die immediately with the particle (based on report by @orange3134, Mhowser, @dustysprinkles, @krzeszny, issue #3729)
[ 2025-02-14 07:10:10 CET ] [ Original post ]
Hello everyone! Here's a last batch of fixups and optimizations for PhotonDust. I'm now pretty confident in its state, since the issues have slowed down significantly and have been mostly simple regressions. Because of that, I have important announcement: IMPORTANT: The Legacy Particle System will be removed this upcoming Monday! This will finalize the initial PhotonDust implementation and a major milestone towards the big performance update! Thank you everyone who participated in the testing :3 There will be more PhotonDust features in the future, but I'll likely refocus on the next tasks for the performance update first, which will be the audio system. I'll be updating `prerelease` with the latest fixes in a bit. Oh and this build is compatible with previous! New Features: - Add debug statistics for particle state uploads (currently visible in the Debug dialog on the Worlds page) Optimizations: - Skip particle buffer submissions when the particle system is empty (based on report by @orange3134, issue #3301) - Use separate processing queue for uploading particle simulation results for rendering to improve particle smoothness (based on report by @orange3134, issue #3301) -- This makes sure that the particle simulation results don't fight for processing time with other asset uploads (meshes, textures, materials...) -- The particle upload queue also has more time for processing. This means with heavy loads it can lower FPS at bit more (we can tweak how much), but will reduce jerkiness of particle systems in some conditions Fixes: - Fixed extremely short particle trails (with only two points) being glitchy and stretching too long in some cases (based on report by @nytra, issue #3716) -- Note: The legacy particle system actually has a glitchy behavior as well, with the second point of the particle not updating smoothly. PhotonDust fixes this, making it animate smoothly on its end. This is intended change, even though it produces small visual difference. - Fixed regression causing LineEmitters with fixed emission direction resetting the direction to zero (reported by @orange3134, issue #3381)
[ 2025-02-13 23:33:59 CET ] [ Original post ]
Hello everyone. I'm not feeling well/functional today, so here's a few remaining bugfixes for PhotonDust to get these out, but not much else. I don't want these to be held up. These should pretty much fix up any last issues that I'd consider blockers for finalizing PhotonDust. I'll push a prerelease build with the same fixes in a bit - if all is good, we'll probably remove the Legacy particle system in the next build or two.
Optimizations:
- Switched Message content serialization to System.Text.Json
Fixes:
- Added validation to Min/Max sequence count for SequenceRibbonSplitter (based on report by @nytra, issue #3663) -- This prevents invalid values from breaking PhotonDust -- If MinSequenceCount is larger than MaxSequenceCount, then it'll be always used - Fixed regression causing TrailLifetimeFromSizeInitializer module being always on for converted trails, resulting in incorrect lengths (reported by @modernballoonie, issue #3701) - Fixed ConeEmitter not respecting DirectionTransformMode for RadialUniform directions, resulting in different particle velocities for legacy content (based on report by @nytra, issue #3705) - Fixed trails from legacy particle systems having slightly different color when using Min/Max trail color (reported by @krzeszny, @joshtiger, issue #3488) -- This is due to legacy system converting those colors as Linear and then Unity particle system reinterpreting them as sRGB - Fixed legacy particle systems with render transform override that are scaled to zero by default not rendering after conversion (based on report by @badhaloninja, issue #3531) -- This is done by disabling the UseSystemLocalScale when this transform override is detected - with PhotonDust, the particle scaling is computed only once during simulation - render transform override cannot update the individual particle sizes
[ 2025-02-12 21:16:37 CET ] [ Original post ]
Hello everyone! I got another build for you! This one is merging a whole bunch more PR's in from the team and cleaning up more PhotonDust issues. With the Stripe support we introduced last Friday (big thanks to @gawdl3y for making this happen again!) - there's now also a new endpoint with stats on how much support we're getting from each platform as well as component to access this in-game for building visualizers and such. There's now also chunk of work done by @bluecyro for the upcoming audio engine - Zita Reverb! This is mostly preparatory work, however you can apply it to audio clip assets with static processing with ProtoFlux. Also some improvements from @probableprime's work on the asset variant system that have trickled into the main build now as well as improving date/time formatting to match people's locale. More coming soon! And remember, we're still doing the final `prerelease` testing of PhotonDust on the other branch, see the update before this one for more!
New Features:
- Added stats/fundingStats API endpoint which contains aggregate statistics for Resonite's support -- Both current (active tiers) and historical aggregates are computed -- Aggregate for all services and per service (Patreon/Stripe) are provided -- Data per-tier is also provided - Added FundingStatistics component -- This provides in-game access to the common aggregate funding metadata -- It's under Cloud/Indicators - Added `-RestoreCloudSettingsFile
Optimizations:
- Improved detection of imagine file format when loading textures (implemented by @probableprime) -- We now prioritize the MIME type of the image if available rather than the extension which can incorrect or missing -- This improves speed of loading textures and generating asset variants (both locally and in cloud)
Locale:
- Merged French locale update by @j4.lc - Merged British English locale update by @bredo - Merged German locale update by @muppeq - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete - Merged Japanese locale update by @.aesc
Fixes:
- Fixed legacy CylinderEmitter that is emitting from the cylinder volume not emitting in the same direction after conversion (reported by @nytra, issue #3699) - Fixed null reference exceptions when detecting texture types, causing errors when generating asset variants (fixed by @probableprime)
[ 2025-02-11 00:25:29 CET ] [ Original post ]
Hello everyone! Another "cleanup build", majorly for PhotonDust. This pretty much wraps most of the remaining issues with it and with compatibility, to the point where I'll be now starting removal of the Legacy Particle system - we'll do a `prerelease` on that when it's ready to re-verify everything. As a little treat, I threw in a bunch of new modules for it too - you can now control particle color by their speed!
New Features:
- Added PivotModule for PhotonDust -- This module offsets particle centers by their per-particle pivot -- Pivots are in the local orientation of the particle -- Note that adding pivot module makes PositionSimulatorModule a bit more expensive - Added PivotFromVelocityMagnitude module -- This computes a particle pivot that's scaled by the current speed of the particle - Added ColorBySpeed MinMax/MinMaxHSV/Texture modules for PhotonDust (based on request by @jackthefoxotter, issue #3353) -- These modules will modify the particle color depending on their velocity -- You define the min and max velocity, which is used to interpolate the color between min/max or sample texture -- The texture variant can use "Repeat" mode when the velocity is outside of the range - Added settings to toggle whether destroying components with inspector and slots with developer tool asks for confirmation or not (based on request by @charizmare, @reddneko, @epiceaston197, @dustysprinkles, @jackthefoxotter, @_deltawolf, @draconas_rayne, @krzeszny, @officialxau issue #3622) -- This is under User Interface - > Edit Settings -- You might need to equip dev tool or spawn inspector at least once for the setting to appear -- Note that once we rework the Inspector UI, these settings might go away for a more flexible approach
Optimizations:
- Auto-disable more modules when they're not in use for legacy converted particle systems to reduce their performance impact (based on report by @readun, issue #3634) -- This includes the TextureSheetAnimator module, which is doing most complex unnecessary work and adding additional buffers -- Already converted particle systems will only disable TextureSheetAnimator - to disable others you'll need to re-convert the systems, but those should have minimal impact
Tweaks:
- ColorRangeInitializer & TrailColorRangeInitializers will now interpolate colors in their provided color space if it's equal for Min & Max -- This means that if both Min & Max are equal, they'll be interpolated in the sRGB color space -- If they are not equal, both are converted to Linear space and interpolated there -- This might improve differences in colors for converted systems (reported by Krzesny, @joshtiger, issue #3488) - Changed "Share/Unshare" labels in the Inventory to "Make Public" & "Make Private" (based on feedback by @amrialeiah, issue #3653) -- This should better reflect that the folder is publicly accessible by anyone who can get the link - Changed the "Set Avatar/xyz" to "Favorite Avatar/xyz" in Inventory to better reflect what these buttons do - Ensure that proper supporter account type is displayed based on which one is active (based on report by @wattlefoxxo, @_deltawolf, issue #645 in locale)
Locale:
- Merged French locale tweaks by @mip2006
Fixes:
- Fixed legacy particle systems with negative velocity scaling not behaving the same (reported by @ultrawidegamer, issue #3627) -- This preserves the behavior of legacy particle system where negative velocity scale applies an offset to the particles (this is why the PivotModule was added) - Fix possible stack overflow in Slerp function with certain arguments -- This fixes Texture3D_Force causing a crash with very fast particles (reported by @nytra, @luxkitty, @dustysprinkles issue #3652)
[ 2025-02-05 22:00:09 CET ] [ Original post ]
Hello everyone! I got another build for you! This is mostly some more cleanup and fixes, notably for PhotonDust and fixing the issues with the cloud syncing (thanks to everyone for the reports and logs!). There's a few goodies though, giving you more control over angular velocity for PhotonDust! I got another fix coming up, but I wasn't able to finish it for this build, because it's a fair bit more complicated - it particularly has to do with legacy systems that used negative scaling - this turned out to be quite a time sink, requiring some bigger architectural changes to PhotonDust. In case you wonder why we sometimes don't allow values out of certain ranges - this is why x3 I should have a fix tomorrow though, which should wrap up some last bits of PhotonDust. Just as a reminder - the Legacy particle system will go poof very soon! We don't recommend using it for any new projects at this point.
New Features:
- Added AngularVelocityDrag module for PhotonDust (requested by @mr.redstar, @luxkitty, issue #3639) -Added ConstantAngularVelocityForce module for PhotonDust -- This applies a constant angular acceleration to the particles -- It requires the RotationSimulationModule to function - Added LerpUnclamped support for SphericalHarmonics -- This fixes crash when trying to use ValueLerpUnclamped node (reported by @luxkitty, issue #3620) - Fix exceptions when checking validity of ProtoFlux node visuals when the target node has been deleted, but visual hasn't (found in a log from @nytra, @luxkitty, issue #3635) - Added SizeMultiplierByVelocity module for PhotonDust -- This allows multiplying the size based on the velocity -- The multiplier can be clamped within a certain range as well as the resulting size -- You can also mask which axes of the size are affected by this
Locale:
- Merged Japanese locale update by @.aesc - Merged Chinese locale update by modimobeikete
Fixes:
- Fixed legacy particles with length/velocity scaling and zero velocity being visible after conversion to PhotonDust (based on report by @ultrawidegamer, issue #3628) - Added read lock to mesh data for mesh emitters -- This prevents PhotonDust from breaking when the procedural mesh data is being updated (reported by @nytra, @luxkitty, issue #3635) -- This only affects procedural meshes as those can be updated on the fly. Static meshes don't require locking and are more efficient to emit from - Fixed particles in Facing mode rolling with head (reported by @veercollie, issue #3626) - Added retry logic to fetching asset metadata from CloudFlare when crucial information is missing -- This fixes a transient error, when freshly uploaded blobs are sometimes missing information, causing syncing to break (@reddneko, @elaina6254, @orange3134, @bredo, @zahndy, @nytra, @lynrayy, issue #3629)
[ 2025-02-04 22:49:26 CET ] [ Original post ]
Hello everyone! Got another build for you! This is a bit smaller, mostly just cleaning up and merging in some things. One of the bugs (the crashes due to large structs) turned out to be really nasty to investigate and work around, it took me most of yesterday - Mono really likes to explode with value types that are too big - including the methods that were normally used to check for validation of things. This should improve some Spherical Harmonics support and the ambient light not updating properly in some cases.
New Features:
- Exposed RemoveChildrenObjectRoots as a sync method on ObjectRoot (requested by @jackthefoxotter, issue #3592) - Add Constant & Smooth Lerp support for spherical harmonics (requested by @modernballoonie, issue #3616) - Added SmoothLerp & ConstantLerp support for matrices -- Note: ConstantLerp is applied element-wise
Tweaks:
- Added confirmation for deleting components to prevent accidental deletions (based on report by @epiceaston197, issue #2657, implemented by @bluecyro)
Optimizations:
- Slightly optimize lerping of vectors & matrix types
Locale:
- Merged German locale update by @muppeq - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec
Fixes:
- Added struct size limit when instantiating SphericalHarmonicsLx
[ 2025-01-30 23:38:26 CET ] [ Original post ]
Hello everyone! I got a whole bunch of things for you today! First, you now have full control over the global ambient lighting in the world! The automatic calculation from the skybox is now also controlled from FrooxEngine side with a new set of components - including one that efficiently computes the parameters from a reflection probe with a Compute Shader. This is way faster and more efficient than Unity's own method, making ambient light changes significantly faster and smoother. Big thanks to @troyborg, @epiceaston197, VirgilCore, @modernballoonie and @rockstarraccoon for helping to test this in `prerelease`. Fortunately there weren't really many issues with this reported over last two weeks, so it should be good to go - but if you still run into something, make a report and we'll fix it in subsequent builds. If you'd like to learn more about how this new system works, we covered it in the recent episode of The Resonance: [previewyoutube=Hyv2s364DPU;full][/previewyoutube] Second, PhotonDust is now out of experimental phase! Majority of the remaining issues (including legacy conversion) are now resolved - it's good to start using for new projects and convert your old into it and continue on! The conversion isn't automatic yet - this will happen when the Legacy system is removed fully. The legacy particle system still exists for a little bit, but it will be removed very soon! If you run into some issues, please report them while you can! I'll probably remove the legacy system sometime next week, assuming there's no big blockers. There's a number of bugfixes too from @probableprime, which should resolve some issues and regressions!
New Features:
- Added AmbientLightSH2 component to control the ambient light in the world -- This functions similarly to the Skybox component, where there will be one active component that is determining what the current ambient lighting is -- The ambient light is parameterized using second order spherical harmonics - Added ReflectionProbeSH2 -- This computes Spherical Harmonics (of order 2) based on the current texture of the target Reflection Probe -- The computation is done using Compute Shaders and should be fast. However having lots of these will add up -- The calculation is done locally for each user - if you want to share it, write the computed value into a field -- For Baked probes, the calculation will currently only work with uncompressed texture formats -- The Compute Shader is adapted version of this:
Tweaks:
- Remove "experimental" label on PhotonDust -- From this point on, we recommend using PhotonDust for any new projects and avoiding the Legacy Particle system, which will be removed very soon -- For any changes to PhotonDust we'll now implement compatibility conversions to make sure your items keep working properly -- Conversion is still not automatic and legacy particle system is present, but as of now we don't recommend using it for new projects -- Legacy system will be removed very soon, so prepare for its removal! - When particle trails space changes, the trails are now cleared to prevent odd positioning (based on report by brecert, issue #3510) - Added generic recursion limit for SphericalHarmonics instances that can be introduced into the data model (it cannot be above 2) - "Set Active Skybox" button on Skybox component is now localizable
Locale:
- Merged German locale update by @muppeq - Merged Esperanto locale update by SejdenGrauk - Merged Japanese locale update by @.aesc - Merged French locale update by @j4.lc - Merged Chinese locale update by modimobeikete - Merged Russian locale update by @lynrayy
Fixes:
- Fixed the importing of public folders via their resrec url (reported by @badhaloninja, issue #3554, fixed by @probableprime) -- This also allows for both Link and Directory record urls to be used to importing public folders and provides error messages on issues/problems with the URL - Fixed OnChanges reflection probes not re-render when the Slot they're is disabled and then re-activated (reported by @modernballoonie, issue #3553) -- This is a `prerelease` build fix - Fixed ReflectionProbes breaking when near/far clip are too low - Fixed deleting PhotonDust particle systems sometimes resulting in all particle systems to break (reported by @modernballoonie, issue #3507) - Fixed SkinnedMeshEmitter not working with meshes that either lack bones or blendshapes (based on report by @luxkitty, @nytra, @baxterottoman, @fukuro8232, issue #3522) - Fixed GravityForce being in the incorrect space for legacy converted particle systems (reported by brecert, issue #3508) - Fixed legacy line emitters not emitting particles with correct direction when using line-aligned mode (reported by brecert, issue #3509) -- Note: This is a breaking change for existing converted systems. If you have saved converted systems with PhotonDust with these emitters you'll need to reconvert them - Fixed particle renderer modules getting a weird offset when the main renderer space changes (based on report by brecert, issue #3510) - Restored the order of operations when importing resdb urls -- This fixes cases of "cloud spawning" being broken on 2025.1.14.6 (reported by @yoshi1123_, issue #3534) -- Do keep in mind that "cloud spawning" via this method may break in the future, but we do hope to create an official version of cloud spawning in the future. - Fixed Spherical Harmonics generic instances not being flagged as unsupported, allowing creating invalid instances which result in a crash (reported by @modernballoonie, issue #3529) - Added generic validation to SphericalHarmonics nodes, preventing unsupported instances from being made and causing issues and crashes (based on report by @modernballoonie, issue #3529)
[ 2025-01-28 20:30:48 CET ] [ Original post ]
I've been looking into some cloud performance degradation. This isn't a full fix, but it should improve things a bit before I can look into this fully next week. This build is compatible with previous, but update ASAP please (including your headlesses) - the more clients update, the more it should improve.
Tweaks:
- Improved handling of session metadata updates to reduce load spikes on the cloud
[ 2025-01-25 20:52:55 CET ] [ Original post ]
Hello everyone! I got another build for you with a bunch of goodies! Resonite now has a new data primitive - spherical harmonics! This has been added through my side project of adding gaussian splatting support (which will probably be released next week, I'm going to FC this week, so I don't want to push out big things just yet), but it's useful for lots of other stuff (some of which will also appear soon(ish)!). It's a generic primitive and there's a bunch of nodes and components to play with it. This build also merges the joining via URL by @probableprime, so that should be significantly improved! There's some other goodies by @bluecyro and @ryuvi as well.
New Features:
- Added ability for the UniversalImporter to recognize and handle ressession://, and other network protocol links(lnl, lnl-nat) (implemented by @probableprime) -- This Allows you to paste or otherwise submit to our importer these links and for them to be processed. -- By Default, if a link is joinable(session, network etc), or if the link is a world, Resonite will try to Open/join it. - Added Import Settings for Session, World and Network Urls (implemented by @probableprime) -- Allows you to control what happens in the UniversalImporter for Session, World and Network Urls --- Open - Instructs Resonite to Open/Join the URL if possible --- SpawnInterface - Spawns a world orb in your active world. This is useful for sharing sessions with your friends --- SpawnUrl - Spawns a URL interface for the url, this is useful for technical items such as programming ProtoFlux etc. - Created go.resonite.com, a micro-site used to easily link other users to your sessions and worlds (implemented by @probableprime) -- Provides big green join/open button, which triggers the Join By URL flow, mentioned in the fixes section. -- Provides alternative connection urls as text, which are useful for ProtoFlux etc. -- Fully supports, Open Graph meta-data, allowing the Sessions and worlds to look good across most social media(Blue Sky, Discord etc) -- This item resolves issue reported by @nytra, issue #1120 - Added SphericalHarmonicsL1..L4
Optimizations:
- Optimized IcoSphere calculation by skipping redundant per-vertex operations
Tweaks:
- Update Noto fonts to latest versions to support newer characters (based on request by @krzeszny, @amasteramaster, issue #3514) -- Note that if you're using a different set of fonts, you might need to update them manually
Locale:
- Merged German locale update by @muppeq - Merged Russian locale update by @shadowpanther
Fixes:
- Fixed joining Resonite sessions via URL (requested by business client and reported by @frooxius, @aritosuits, @enverex, issue #1295 and @cyberfrogg, issue #2260, implemented by @probableprime) -- On Startup, Resonite will now check that its protocols are registered on your computer, If they are not they will be registered by a small helper program. -- Once registered, clicking or visiting any ressession://, resrec://(assuming its a world at the moment) resonite: link from within Common Apps such as Browsers, Email Clients etc. Will prompt you to launch a tiny program. -- If the program detects that Resonite is open, it will forward the clicked url, to Resonite. --- The URL will then be Imported, by our Importer system. See New Features for info on the changes there. -- If the program does not detect Resonite is open --- It will attempt to open Resonite via Steam if possible --- And then manually, using CLI arguments to launch into the world --- In both cases, it will add Command Line Parameters to try to open the URL once Resonite has completed opening. -- For more information on these feature checkout our wiki page on it: https://wiki.resonite.com/Go.resonite.com -- If you'd like to opt-out of this system you can add `"disableProtocolRegistration":true`, to your Config.json file. - Fixed Color serialization including the IsNaN property - Fixed ColorX inspector editor not properly nesting out, corrupting the UI when the colorX datatype is used within other datatypes - Fixed ParticleSystem not unregistering style events when destroyed, resulting in resource leak and exceptions (based on report by @modernballoonie, issue #3507) - Fixed new gradients added to gradient sky box not appearing (reported by @bluecyro, @spexcat, issue #2514, fixed by @bluecyro)
[ 2025-01-14 00:37:56 CET ] [ Original post ]
Some more optimizations for PhotonDust and compatibility fixes. This should make PhotonDust run a fair bit smoother and improve compatibility. This also clears all the Compatibility issues on the board (except two that I'm waiting for confirmation if they're fixed or not), which means PhotonDust is very close to being taken out of experimental! Won't happen until next week at least (or maybe one after, because I'll be at FC for most of it), but I wanted to push this ASAP to allow more testing. This build is compatible with previous, no need to update right away! (unless you're testing PhotonDust x3)
New Features:
- Added `-ForceSignalRLongPolling` argument to force SignalR to always use long polling instead of WebSockets -- It's NOT recommended to use this unless you have connectivity issues, as this is a lot less efficient
Optimizations:
- Added copy stage for PhotonDust rendering data submission to better pipeline updates and improve overall update rate, especially with large number of particles (based on performance reports by @Stella, @Rucio, @Garfflesnark, @Foxbox and @Stiefel, issue #3401) -- This trades off increased memory usage for smoother particle system simulation
Fixes:
- Fix aligners not respecting injected auto-ignore tags (based on report by @ultrawidegamer, issue #3376) - Fix legacy ConeEmitter directions not being converted properly (reported by @ultrawidegamer, issue #3377) - Fix converted particle systems with mesh particles using length/velocity stretch scaling when they shouldn't (reported by @ultrawidegamer, issue #3380)
[ 2025-01-10 23:13:46 CET ] [ Original post ]
I got another build for you! This should fix majority of the remaining compatibility issues with PhotonDust and has some more performance improvements to make the particle systems smoother! PhotonDust is now at a point where I'm considering moving it out of the experimental phase soon, so please, give it some more testing making sure items convert properly. When PhotonDust moves out of the experimental phase, following will happen: - PhotonDust "experimental" label will be removed - Conversion from Legacy -> PhotonDust will become automatic (it'll always happen) - Legacy Particle system will be removed completely - This will conclude this part of performance update and allow to move to the next one (audio system) You can check the current state of PhotonDust development and the individual issues here: https://github.com/orgs/Yellow-Dog-Man/projects/42/views/1 It's getting close!
New Features:
- Added "BurstOnStart" to PhotonDust particle emitters -- When this is on, the emitter will burst when it initialy starts (e.g. when loaded or on duplication) -- For converted legacy emitters, this is on by default, fixing compatibility issue (reported by @foxbox., @modernballoonie, issue #3495) -- The burst only happens if the emitter is Enabled and its slot is Active at the time of the start - Added `disablePlatformInterfaces` to the config .json file -- When true, platform interfaces like Steam or Discord won't be initialized -- This can be useful when you don't want Resonite to interact with those at all, but some functionality will be unavailable -- Platform interfaces can also be disabled with `-DisablePlatformInterfaces` command-line without having to modify the config file - Added UseSystemLocalRotation to particle style -- This will use the local rotation of the particle system as basis, regardless of the simulation space -- This fixes legacy particle systems having wrong orientation in some cases (reported by @krzeszny, @joshtiger, issue #3423) -- Note that this is breaking change as UseSystemLocalScale & ParticleScaleMode were moved to ParticleStyle as well. You will need to reconvert any existing systems - Added DirectionPostTransform to most PhotonDust emitters -- These allow you to specify arbitrary 3x3 matrix which will be used to transform the direction/velocity vector after all other transofmrations are done -- SphereEmitters converted from legacy systems have an adapter automatically injected to replicate bug of legacy system, where the direction in radial mode is not actually properly transformed. This preserves behavior for old systems (based on report by @krzeszny and @joshtiger, issue #3420)
Optimizations:
- Move PhotonDust simulation job processing to TPL processor to separate it out of FrooxEngine's current job scheduler - Improve PhotonDust simulation parallel task division to significantly reduce submission times (based on performance reports by @stellanora, @rucio, @garfflesnark, @foxbox. and @stiefeljackal, issue #3401) - Added double-buffering to PhotonDust buffer submission to improve throughput when updating the particle system (based on performance reports by @stellanora, @rucio, @garfflesnark, @foxbox. and @stiefeljackal, issue #3401) - Implement multithreaded conversion of render data for trails for PhotonDust to improve overall particle update rate
Tweaks:
- Added overall FPS tracking to PhotonDust particle systems -- This will help with diagnosing overall rate of updates of the particular particle system - PhotonDust particle system should now respect locally disabled rendering (e.g. when blocking avatar)
Locale:
- Merged German locale update by @muppeq - Merged Spanish locale update by Mrdabup
Fixes:
- Fix PhotonDust particle systems ignoring skybox/reflection probe reflections (based on report by @baxterottoman, issue #3452) - Fix PhotonDust systems that start disabled bursting large amount of particles on their first activation (reported by @orange3134, issue #3391) - Fix particle trails not properly inheriting transform scale, when the scaling mode is Continuous for the whole system, while the trails inherit only the starting value (based on report by @ultrawidegamer and @krzeszny, issue #3379) - Fix first points in a trail not respecting SizeInheritanceMode when size inheritance is set to continuous - Fix transforming scale from one space to another being incorrect and affected by rotations -- This fixes particle trails being different scale when the particle and trail space don't match (reported by @orange3134, issue #3382) - Fix particle trails having reversed UV's compared to legacy system, leading to discrepancies (based on report by @krzeszny and @joshtiger, issue #3416)
[ 2025-01-09 23:48:20 CET ] [ Original post ]
Hello everyone! I got a new build for you! This is mostly resolving a bunch of issues for PhotonDust, getting that working again! This build improves performance/smoothness of PhotonDust, especially with large numbers of particles and fixes a number of compatibility issues. There's still more to come, but this gets us closer to being able take PhotonDust out of experimental and remove the legacy particle system! However for now, it still remains experimental, so use caution! There are some breaking changes in this one, so any converted items that use the lights module need to be re-converted or fixed manually. There are a few other bits as well, notably users who switched from Patreon to Stripe (which is currently in closed beta) now should have proper supporter badge! There's a bunch more stuff coming soon, there's a lot of things cooked up in PR's that getting finished, so expect a bunch more goodies soon!
Optimizations:
- Convert particle buffers to Unity buffers with multithreaded processing -- This speeds up the overall simulation rate (based on report by @stellanora, @rucio, @garfflesnark, @foxbox. and @stiefeljackal, issue #3401) - Pipeline PhotonDust buffer submissions for rendering to improve overall update rate and parallelize processing -- This prevents PhotonDust from having to wait a whole frame to run another simulation update in some cases, causing the particle system to be choppier (based on report by @stellanora, @rucio, @garfflesnark, @foxbox. and @stiefeljackal, issue #3401) -- Once the PhotonDust buffers are converted to Unity for rendering, they are released, which allows another simulation update to happen in parallel, while the buffer is being submitted
Tweaks:
- Ensure that particles with infinite lifetime die on collision when lifetime loss is set to 1 (based on report by @3x1t_5tyl3, issue #3435) - Significantly improve robustness of PhotonDust particle collisions to prevent particles getting randomly stuck or leaking through colliders (based on report by @orange3134, issue #3393) - ColorOverLifetimeStartEnd now uses colorX instead of color (reported by @kulza, issue #3406) - Supporter badge is now displayed for users who support through Stripe (implemented by @gawdl3y) - Updated yt-dlp to 2024.12.23
Locale:
- Merged Esperanto locale update by @sejden - Merged Chinese locale update by lolosiax
Fixes:
- Rework legacy particle light module conversion to fix a number of conversion issues (reported by VirgilCore, @krzeszny, issue #3358) -- This fixes the lights being too bright or dim -- Note: The way this module is converted has changed in a way that's not compatible. Any saved converted systems will have this broken - you'll need to convert them again or fix them manually -- IgnoreTemplateIntensity and IgnoreTemplateRange on ParticleLightsModule were removed as they're not necessary for the new conversion - Fix exceptions when disposting PhotonDust particle system due to disposal being performed twice (based on logs by @_deltawolf, @elbrar, @azzurol, @kick_kick, VictorBraga, PhoenixLugia75, horusalpha, issue #3487) - Fix MeshEmitter breaking when given a mesh without UV0s (based on report by @lecloutpanda, @3x1t_5tyl3, issue #3436)
[ 2025-01-07 23:19:01 CET ] [ Original post ]
I'm just pushing out a small build. The main thing is a fix for animations freezing up things when swapping them out to help the Creator Jam New years event. I threw in a few small goodies as a present as well :3 I hope everyone's having happy holidays!
New Features:
- Added Mode to RadialForce (based on request by @baxterottoman, issue #3429) -- This allows you to switch the attenuation mode between InverseSquared, Linear and Constant - Added MinDistance & MaxDistance to RadialForce module (based on request by @3x1t_5tyl3, issue #3413) -- This lets you clamp the distance based on which the force strength is computed - Added ColorHSV_RangeInitializer (requested by @gamethecupdog, issue #3431) -- This will initialize particle colors with a random value in the HSV color space
Tweaks:
- RadialForce now uses its own slot as its default coordinate space when attached (this only affects new instances)
Locale:
- Merged Russian locale update by @shadowpanther
Optimizations:
- Fixed long freeze when swapping animations with a large number of drives (reported by @foxbox., @rucio, @stiefeljackal, @knackrack, @ohzee and @bluecyro, issue #2699)
[ 2024-12-26 23:14:01 CET ] [ Original post ]
A bunch more fixes for PhotonDust! This fixes a number of conversion issues, improving compatibility with old content. I'll be traveling soon, so it'll be a bit quieter now, I wanted to get as many of these out as I can. I'm still keeping the experimental label on PhotonDust, since there's still a number of issues open, so be cautious, but feel free to play with it! It's been great seeing the cool visuals and stuff everyone's been messing with. If you do, please share more! Also this update fixes "performance" issue that turned out to not really be much of a performance issue at all - a setting didn't convert right, resulting in PhotonDust having to update and render about 10 times the amount of geometry data for a converted system - and thus having "lower performance" as result. This should be much better now!
New Features:
- Added ShuffleInterweavedRibbons to ParticleRibbonsModule -- This will randomize the order in which new particles get assigned to ribbons -- This can help randomize ribbon grouping when the emission is too predictable and ordered -- This is automatically on for legacy converted systems, which fixes ribbons not connecting across groups in some cases (based on report by VirgilCore, issue #3359)
Optimizations:
- Optimized data ordering of trails for rendering to improve performance(based on report by @orange3134, issue #3301 and @rucio, @epiceaston197, @foxbox., @stiefeljackal, @stellanora, @playerkode, @storm_dpd, issue #3355)
Locale:
- Merged Korean locale update by @mirpasec - Merged French locale update by @j4.lc
Fixes:
- Strip alpha values from converted legacy ColorOverLifetime -- This fixes issue in legacy items that had alpha, which was previously ignored (based on report by @gareth48, issue #3373) - Fixed SkinnedMeshEmitter not updating transforms of the source Skin continually (reported by @fukuro8232, issue #3385) - Fixed direction not being converted properly for legacy LineEmitter instances (reported by @orange3134, issue #3381) - Fixed ParticleSizeAffectsTrailLifetime not getting converted properly to PhotonDust -- This resulted in some systems having trails significantly longer than the original, contributing to a significant performance degradation due to more than 10x increase in amount of trail geometry in some cases (based on report by @orange3134, issue #3301 and @rucio, @epiceaston197, @foxbox., @stiefeljackal, @stellanora, @playerkode, @storm_dpd, issue #3355) - Fixed issues in RotationSimulatorModule buffer management, resulting in particle rotation jitter (reported by @aegis_wolf, issue #3357)
[ 2024-12-18 08:06:19 CET ] [ Original post ]
Some more bugfixes! This fixes issues with the new cursor sizing as well as few more PhotonDust issues. More to come soon(ish)! This build is compatible with previous, but update is recommended asap!
Locale:
- Merged Chinese locale update by modimobeikete - Merged Polish locale update by @foxobread - Merged German locale update by @muppeq - Merged Japanese locale update by @.aesc
Tweaks:
- Merged build pipeline changes that allow Resonite to be fully built on Linux (implemented by @bluecyro)
Fixes:
- Fixed everyone's cursor's being affected by the host's settings in multi-user sessions (reported by @3x1t_5tyl3, issue #3369) - Fixed "null cursors" from being returned in some cases, such as when you join a headless, leading to invisible cursors (reported by @ultrawidegamer, issue #3370) - Fixed PhotonDust renderer modules not cleaning up visuals when the particle system using them is removed, but the renderer module isn't (reported by @modernballoonie, issue #3363) - Fixed freshly saved legacy particle system components not converting properly - Fix CylinderEmitter Fixed direction getting double-transformed (reported by @modernballoonie, issue #3354)
[ 2024-12-17 09:07:22 CET ] [ Original post ]
A quick hotfix for the headless! This build is compatible with previous, but if you're hosting headless, I strongly suggest updating!
Fixes:
- Fixed headless crashing when introducing PhotonDust components (reported by @3x1t_5tyl3, issue #3367)
[ 2024-12-16 23:19:01 CET ] [ Original post ]
PhotonDust, our new particle system and major milestone for the performance upgrade, is now part of the main build! **It is still in "experimental" testing phase**, because there are still issues to fix. However, since it's in a stable enough state to play and experiment with, we can continue testing on the main branch! Currently it exists alongside the legacy particle system - I still recommend using the old one for stability until we remove the "experimental" label from PhotonDust. The goal is to have a more gradual transition to the new system, rather than an abrupt one, so for the time being, you can use both old and new particle systems! Big thanks to everyone who helped test PhotonDust in the `prerelease` branch and find a number of issues so far: @rockstarraccoon, @epiceaston197, @decoybird, @orange3134, @zozokasu, @rueshejn, @modernballoonie, @moonbase__, @nytra, @mirpasec, @ultrawidegamer, @lexevo, @badhaloninja, @mysticjuniper, @hamocorp, @dustysprinkles, @foolishsnowmew, @aegis_wolf, @qualium and anyone else I missed (I went over the release notes and issues, so sorry if you got missed! >///< - if you got a prerelease issue open that hasn't been addressed yet, you'll be credited as those get fixed up!) If you'd like to help us polish PhotonDust, please give a read to the testing and reporting instructions first: https://github.com/Yellow-Dog-Man/Resonite-Issues/discussions/3276 I've also went over how PhotonDust works in a recent episode of The Resonance. If you'd like to learn more, watch here: [previewyoutube=OnecM48lKnc;full][/previewyoutube] There's also some other goodies in this, @probableprime has overhauled the cursor system, which fixes a bunch of sizing inconsistencies and exposes new options to configure cursor sizes! If you find the new defaults too big (or still too small), adjust them in your settings!
New Features:
- Implemented a new in-house modular particle system called PhotonDust (issue #587 - a major milestone of our performance updates) IMPORTANT: This is currently in "experimental" state, as there are still issues to fix and polish. Be cautious about using it for new projects at this time (until the experimental label goes away) - Please play and experiment with it though to help us polish it up some more! - You can still use the Legacy Particle system until PhotonDust is polished for stability Currently conversion of Legacy Particle systems to PhotonDust is opt-in - go Settings -> Misc -> Debug -> Convert particle systems to PhotonDust - WARNING: Do not overwrite any items/worlds with converted versions! This will bake in any conversion bugs without being able to resolve them - Once PhotonDust is fully polished, we will remove the Experimental label, remove the legacy particle system and make conversion fully automatic PhotonDust has a number of new features: - Designed for performance, with multi-threading & semi-asynchronous updates - heavy particle system updates (e.g. complex collisions with the world) will not drop your FPS as much - only the particle system itself will drop its update rate - Highly modular - particle initialization, simulation and rendering is handled by modules, instead of a monolithic component - compose the behaviors you want for your particle system! This also makes adding new features and modules much easier in the future! - Feature parity with legacy system - any effects supported by the legacy particle system are supported with PhotonDust as well It also introduces many new modules and features over the legacy particle system: - Split constant / min-max initializers for particle properties (e.g. if you want only a single value, you don't have to set both value to min/max anymore) - Linear, Radial, Turbulent (simplex noise) and 3D Texture-based forces for particles - Velocity Drag that allows particles to slow down (requested by @alphaneon, issue #3288) - Size over lifetime, Size sine multiplier (to create wobble effects) and more - Consistent position & rotation coordinate system handling - Color by orientation direction, color from Texture 3D, Color over lifetime in HSV space, Color over lifetime from texture - Particle trails with unique color/size for each segment of the trails - Configurable ribbon splitting - split by time proximity or fixed sequence - you can separate ribbons between groups of particles if there was a gap between the emission - Particle lights module supports more light properties - Particle trails can now be simulated in any space (independent of the particles themselves), not just world-space - Unified emission direction handling and number of new emitter options, such as: -- Colors for point emitters (previously requested by @baxterottoman, issue #3138) -- Circle orientation for CircleEmitter -- Per-point particle direction for LineEmitter -- Body/cap emission direction for Cylinder emitter -- And a bunch more! ------------------- - Overhauled interaction cursor management (implemented by @probableprime) -- Cursors are now configurable in settings, you can control the base size and various multipliers that affect the cursor when interacting with other objects -- This fixes cursor size inconsistencies, with cursor being too small in some cases and having poor contrast (reported by @shiftyscales, @probableprime and @frooxius, issue #3124 and a business client) -- This foundational work, allows for further Cursor changes in the future, so check the GH for more! - Added MultiChannelSimplexTexture3D -- This allows specifying simplex noise parameters for each of the color channels independently -- You can also set Min, Max and Exp values to process the noise - Added "AutoAddIgnoreTags" to aligners "AutoAddChildren" -- This allows ignoring any children with specific tag from being auto-added -- This is initialized by default with "AUTO_INJECTED" tag - this tag will be added to some automatically injected children during upgrade process -- This fixes PhotonDust upgrade process from breaking some aligners (based on report by @ultrawidegamer and @foolishsnowmew, issue #3329)
Optimizations:
- Fixed TrackedDevicePositioner registering setting listener every frame, rather than just once, resulting in performance degradation (reported by @esnya, issue #3351)
Locale:
- Merged German locale update by @muppeq - Merged Japanese locale update by @.aesc - Merged Polish locale update by @foxobread - Merged Chinese locale update by modimobeikete - Merged Korean locale update by @mirpasec - Merged Russian locale update by @shadowpanther - Merged French locale update by @j4.lc
Tweaks:
- Updated yt-dlp from 2024.12.06 to 2024.12.13
[ 2024-12-16 21:58:16 CET ] [ Original post ]
Just a small build to update yt-dlp to fix YouTube videos not loading properly. Also some more locale updates! This build is compatible with previous, so no need to update right away!
Tweaks:
- Updated yt-dlp from 2024.11.18 to 2024.12.06 (requested by @epiceaston197, issue #3332) -- This should fixup YouTube videos not loading properly
Locale:
- Merged Russian locale update by @shadowpanther - Merged German locale update by @muppeq - Merged Korean locale update by @mirpasec
[ 2024-12-10 08:11:55 CET ] [ Original post ]
This is just a small update, that's mostly locale files, but an important one! There's also big Dutch locale overhaul included by our awesome community members! We are prepping some cloud updates for the Stripe implementation and had some fixes to serialization. Those require client update, so it can deserialize entities properly, otherwise it would break. TL;DR: This build is compatible with previous, but you won't be able to log in fully on the previous build, so make sure to update to this one if you restart and you'll be good!
Tweaks:
- Switched serialization for some cloud entities to use strings for enums
Locale:
- Merged Dutch locale overhaul by @whippersnatchpumpkinpatch and @teknocatron - Merged German locale update by @muppeq - Merged Russian locale update by @shadowpanther - Merged English locale tweaks by AwesomeTornado and @banane9 and @troyborg - Merged Chinese locale update by modimobeikete - Merged Japanese locale update by @.aesc - Merged French locale update by @j4.lc - Merged British English locale update by @bredo - Merged Polish locale update by @foxobread
[ 2024-12-09 19:32:21 CET ] [ Original post ]
Hello everyone! I got a new build for you with a bunch of changes! The .NET 9 headless is now finally out and default with this build! You will need to use the new runtime to host. Our community ran a number of tests and everything seems to be fine. There might be some extra performance boost from this too thanks to improvements in .NET 9 - we did notice them in our cloud infrastructure that got moved to .NET 9 recently too. There's new accessibility options too - you can enable controls to look around with your keyboard arrows, instead of just mouse! If you have difficulty using mouse or use remote desktop or laptop with poor touchpad, this should help you! Some work was done on the cloud as well recently, because we ran into an issue where syncing got stuck. Investigating that revealed a few related problems, which now got fixed up, which should improve the robustness a bit and reduce some load & cost on the cloud. There's not much other things, my focus has been mostly on PhotonDust now. Pushing the .NET 9 now frees up the prerelease slot, so I'll try to get PhotonDust testing started soon, so we can test that one out thoroughly and get it out of the door as soon as we can too!
New Features:
- Added keyboard look controls (implemented by @probableprime) -- This allows you to look around using your arrow keys, instead of just mouse -- The goal is to improve accessibility and use with laptops & remote desktop connections -- You can enable these in settings under controls -- When enabled, you can hold the Control key to suppress this (e.g. in order to send the arrow key inputs to anchors and other systems)
Tweaks:
- Upgraded headless client from .NET 8 to .NET 9 -- This is mostly runtime change and shouldn't cause any breakage. If you host sessions, you will need to use .NET 9 runtime to run headless servers now -- Big thanks to everyone who helped us test this in prerelease: @zangooseoo, @troyBORG, @darbdarb_, @Bredo, @alex_2pi, OrionMoonclaw, @j4.lc, @ModernBalloonie -- .NET 9 has a number of performance improvements, which should provide some speedup to the headless over previous .NET 8 - Added additional diagnostics and error handling to the cloud worker to help improve robustness -- This should prevent the cloud worker from getting stuck when processing syncing and other tasks (based on report by @rucio and @stiefeljackal, issue #3210) - Updated yt-dlp from 2024.11.04 to 2024.11.18
Optimizations:
- Removed custom system for handling asset trash removals after a month -- We now use the R2's lifecycle rules to handle the removal, which is a lot more efficient (note: this system didn't exist at the time, which is why we needed to implement our own custom system for this instead) -- This reduces some load on the cloud and latency of some cloud queue processing operations like syncing as well as some cost on our end - Removed custom system for handling thumbnail asset removals -- Same as above
Security:
- Improved security of SkyFrost.Archive (CloudFlare-side asset API)
Locale:
- Merged French locale update by @j4.lc - Merged Polish locale update by @foxobread - Merged Chinese locale update by modimobeikete - Merged German locale update by @muppeq - Merged English locale improvements by AwesomeTornado and addition by @nepushiro - Merged Russian locale update by @shadowpanther - Merged Finnish locale update by @airride91 - Merged Japanese locale update by @.aesc - Merged Korean locale update by @mirpasec
[ 2024-12-02 20:11:16 CET ] [ Original post ]
Hello everyone! I got another small maintenance build for you. Most of the time now goes towards getting PhotonDust (the new particle system) to feature parity, but here's a few improvements. The big part - large chunk of SkyFrost - our cloud service has now upgraded to .NET 9 from .NET 8, since it released earlier this month! As part of the upgrade, we also moved all related libraries from 8.x.x versions to 9.0.0 - including ones in the graphical client. I'll be making a `prerelease` build of the headless for .NET 9 for testing & prep, so announcement on that coming soon. You can also now import BlueSky videos! Just paste a link to a post with video and it will import as video player! There's a few other bugfixes as well. Oh also since there's no data model changes, this build is compatible with previous! Only caveat - you'll experience the bugs and BlueSky videos won't load for you if you run on the old one.
New Features:
- Added support for importing BlueSky videos (requested by @moonbase__ and @zyro1331, issue #2965)
Tweaks:
- Switch cloud projects to .NET 9 from .NET 8 (issue #3179) - Update packages to from 8.x.x versions to 9.0.0 to match .NET 9 release (this includes System.Text.Json, SignalR libraries and others on the client-side as well)
Fixes:
- Fixed intractable handles on Avatar Creator and Full Body Calibrator resetting position when released (fixed by @bluecyro) - Fixed custom tools without a specified name showing the locale string instead of actual default label (reported by @gyztormizirath, @lixquid, @alizardguy, issue #3171) - Fixed BlackBodyColorX node disconnecting its inputs and outputs on load (reported by @troyborg, issue #3188, fixed by @bluecyro) -- Any already saved instances should load properly now, unless they were re-saved after being disconnected
[ 2024-11-19 08:08:40 CET ] [ Original post ]
I'm pushing out a quick hotfix for YouTube videos not loading. Unfortunatelly it seems they're blocking the method we've been using to get higher quality videos. I'll have to look into alternatives, but right now my goal has been to just get the videos to load in the first place. Also the new faeture & fix in this are actually in the previous build, I just forgot to copy my release notes from my laptop on my main PC so they were missed, sorry! The plus side is, this build is compatible with previous!
New Features:
- Added AngularVelocityDelta node -- This accepts angular velocity (in euler angles per second) and deltaTime -- It outputs a delta quaternion, which when applied to another quaternion will rotate it by given angular velocity over given delta time
Tweaks:
- Disable mediaconnect option for yt-dlp due to increase in issues with YouTube videos not loading (based on report by @natosaka, issue #3183) -- Unfortuntely this means that YouTube videos will likely load in lower quality for now. We'll have to tackle this separately, but the main goal was to get videos to load right now
Locale:
- Merged French locale update by @j4.lc - Merged Chinese locale update by modimobeikete
Fixes:
- Fixed logging results when Discord SDK throws an exception on success (based on report by @nytra, issue #3143, fixed by @probableprime)
[ 2024-11-14 20:06:02 CET ] [ Original post ]
Hello everyone! I got another build for you! This is mostly cleaning up a number of things, as the main focus is currently on the PhotonDust (new particle system), but there's a number of goodies here. The locomotion animation system defaults were finally updated! Sorry it took so long. I'd like to give big thanks to @vrbat, @orange3134 and @rhenium_nv whose parameters were used for the new defaults as well as @bluecyro for going through the community tunings and integrating them into Resonite. We also now have latest yt-dlp which should fix issues with loading videos as well as new version of Opus, which improves the quality of voice and has much better handling for lost packets! There's also a number of bugfixes for several issues as well as some new nodes that should simplify a few things.
New Features:
- Added ComposeColorX node -- This lets you compose a new colorX value from color and color profile - Added ColorXToProfile node -- This converts a colorX value to a color value in a specified target color profile - Added GetColorXProfile node - Added GetColorXBaseColor node -- WARNING! This gives you the raw base color in whatever profile it is, with the color profile information removed. You're responsible for maintaining that color profile information externally when you work with these values - Added DecomposeColorX node -- This gives you both the base color and color - Added GetLocomotionArchetype node -- This gives you the "archetype" (Walk, Fly, NoClip...) of given locomotion node as a nullable enum -- Note that some locomotion modules might not have one assigned and the value will be null for them - Added UniFesta 2024 & VKet 2024 badges (requested by @orange3134 / Weaverse (our partner), implemented by @probableprime)
Tweaks:
- Replaced default locomotion animation tuning parameters with community based tunings (integration handled by @bluecyro) -- The new defaults are a combination of @vrbat 2.2 animations with idle foot turning values from IKANJI 1.08 by @orange3134 and @rhenium_nv -- Big thanks to everyone helping us tune these values and improve the animations! -- Please note that this only changes the defaults - if you're already using custom settings yourself, the system will use those. If you prefer different animation style, you can always override the defaults - Updated yt-dlp from 2024.10.07 to 2024.11.04 - Update opus library (used for encoding voice & audio streams) from 1.3.1 to latest 1.5.2 (issue #3125, huge thanks to @j4.lc for creating CI/CD scripts) -- This has a number of improvements for audio quality, optimizations and significantly better handling for packet loss -- Our fork is available here:
Locale:
- Merged German locale update by @muppeq - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc - Merged Chinese locale update by modimobeikete - Merged Polish locale update by @foxobread - Merged British English locale update by @bredo - Unified key names for tooltips/tools (based on report by @whippersnatchpumpkinpatch, issue #563 in Locale repo)
Fixes:
- Fixed TwitchChatMessageEvent and TwitchSubscriptionEvent node interfaces not generating properly (reported by @shuisho, @amasteramaster , @nytra, @grand__, o6uipi, UnskilledWolf, issue #2597) -- This also fixes not being able to use their CheerBadge & Plan output values in the data model due to not being marked as data model values - Fix TwitchChatMessageEvent & TwitchRaidEvent color outputs not being properly upgraded from color to colorX -- Existing instances that use color should be auto-upgraded to preserve functionality. If you run into issues with this, please make a report! - Fix being unable to switch locomotion modes after a locomotion module is deleted (reported by @jackthefoxotter, @3x1t_5tyl3, issue #3156) - Fix record asset manifest getting cleared when changing username (based on report by @shiftyscales, issue #3152) -- Added a mechanism to prevent partial entities from being written back to the database to catch similar problems early next time - Fixed scrollwheel speed being framerate dependent (e.g. when sliding items) (reported by @bluecyro and @copygirl, issue #2451, fixed by @bluecyro) -- This also fixes the Scroll Wheel Grab Move Speed setting not being visible in the settings - Fix WAV files with AAC encoded audio data resulting in crash of all users when imported (reported by @ceekur, @waterphox, @applebutter180, @troyborg, issue #3167) -- Currently we do not support these types of files -- This has been done by removing any Media Foundation based decoders from CSCore library to prevent similar crashes - these decoders are not cross-platform and seem to cause crashes when used in combination with Unity
[ 2024-11-12 22:30:45 CET ] [ Original post ]
Hello everyone! I got another build for you. This is mostly bugfixes and merging some things in, since my main focus right now is on the new particle system as part of the performance updates. This should fixup a few of the issues, some of the recent ones that cropped with the SteamLink update, but there's still more to do. There's a few goodies too that stem from the particle system work - 4D Simplex Noise! This also fixes all the procedural textures handling their color inputs incorrectly - ignoring the color profile of those. In most cases you probably wouldn't encounter the problem if the color and the texture are the same color profile. However if this fix results in some of your procedural textures looking incorrect, please make a GitHub issue with report and we'll sort out system to fix those up!
New Features:
- Added "Spawn Visualizer" to procedural 3D textures in the inspector to allow easily visualizing them - Add SimplexTexture3D procedural texture -- This generates a procedural 3D texture with simplex noise -- You can control the offset/scale of the noise and the two colors it interpolates between -- You can also switch it to use 4D SimplexNoise algorithm, with a WOffset - this lets you evolve the noise "in time" - Added Simplex 4D node overload -- This samples a 4D simplex noise function using a float4 coordinate - Add ExcludeHeadless to Boolean/NumericUserOverrideGather (requested by @3x1t_5tyl3, issue #3132)
Optimizations:
- Hoisted color profile conversions in several procedural textures out of per-pixel operations to only happen once -- This should slightly speed up the procedural texture generation, especially for textures with heavy color interpolation math - Remove unnecessary color profile overhead when generating UVTexture pixels
Locale:
- Merged English locale names for the tools by @rueshejn - Merged Korean locale update by @mirpasec - Merged Polish locale update by @foxobread, @torrndraws - Merged Japanese locale update by @.aesc - Merged Chinese locale update by modimobeikete - Merged French locale update by @j4.lc - Merged German locale update by @muppeq
Removals:
- Remove ExternalCameraSeparationPoint component -- This is no longer used by any systems and was obsolete
Fixes:
- Fix ResonitePackages getting corrupted when overwritten (reported by @989onan, @dustysprinkles, @karasutengu, @epiceaston197, issue #3109) - Fix SimplexTexture ignoring the color profile on Background/Foreground inputs instead of converting them to the color profile of the texture - Fix SolidColorTexture ignoring the color profile of its input - Fix StringQRCodeTexture ignoring color profile on Color0 and Color1 inputs - Fix GridTexture ignoring the color profile of BackgroundColor & - Fix NoiseTexture ignoring the color profile of MonochromeMin/Max inputs - Fix AudioWaveformTexture ignoring color profile of Background/ForegroundColor inputs - Fix GradientStripTexture ignoring the color profile on the gradient inputs - Fix logs getting spammed with "Error running discord callbacks: NotRunning" (reported by @nytra, issue #1522, fixed by @probableprime) - Fix SteamLink face tracking not initializing after recent update (reported by @modernballoonie, @zahndy, issue #3067) -- This would happen if you at any point switched to hand tracking on your Quest headset before launching Resonite -- Please note that in order to fix this, SteamLink OSC face tracking is now initialized for any Oculus headset, even when not running over SteamLink. This is due to SteamLink changing the headset identification from SteamLink to Quest 2 (even if Quest 2 isn't used) after hand tracking activation. We're not currently aware of another way to reliably detect SteamLink use - Fix Black Body Color node returning colors in the wrong color space (reported by @pjb, issue #1402, fixed by @bluecyro) - Fix TimeSpanFromX causing crash when being fed NaN values (reported by @mpmxyz, issue #3081)
[ 2024-10-29 20:45:18 CET ] [ Original post ]
Hello everyone! I've got a smaller-ish build for you, but with some goodies! I was originally hoping to release this before BLFC, but since there were some issues with the changes that needed to get resolved, it got pushed until now so we can resolve them. This is the first build that was made with a new SDK-style project style which @bluecyroand and @geenz switched us to! This doesn't change any functionality on itself, but it makes building Resonite easier by using a more modern pipeline, which saves all coders time and allows us to spend more of it on implementing other things! There's a bunch of smaller additions and bugfixes in this as well. This includes fixes to the handling of controllers when switching between controllers and hands with SteamLink. There are still some lingering issues with that, but none of them should be new. Big thanks to everyone who helped test the updated SteamVR input handling in prerelease to make sure that controller inputs do not break with these fixes: @zahndy, @bigredwolfy, wisemagick1, @rockstarraccoon, @troyborg, @krzeszny, @nytra, Mhowser, @dustysprinkles, @gamethecupdog, @foxobread, ko-tengu, @stellanora, @foxbox., @shdw_x, @siderealscout
New Features:
- Switched internal project files to more modern SDK style (implemented by @bluecyro and @geenz) -- This is an internal change with no functional difference for Resonite itself -- It is an important change, because it uses newer tooling for building Resonite and its components, which in turn simplifies the overall development process - Added notifications when your permission role in the world is changed (requested by @moonbase__, @draconas_rayne, @modernballoonie, issue #3057) -- You can configure the notification level (or disable this completely) in the settings under "User Interface" - Exposed 2D versions of Slerp and SlerpWithMagnitude to ProtoFlux (requested by mpmxyz, issue #3010)
Tweaks:
- Upgraded yt-dlp from 2024.08.06 to 2024.10.07 - Upgraded SteamVR Unity Plugin from v2.7.3 to 2.8.0 (SDK 1.14.15 -> 2.0.10)
Locale:
- Merged Russian locale update by @shadowpanther - Merged Chinese locale update by modimobeikete - Merged German locale update by @muppeq - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc
Fixes:
- Fix earmuff transition range not scaling with the user (based on report by @shiftyscales, issue #2230) - Fix RelayName network statistic not being correctly populated (reported by @bredo, @zyro1331, issue #2958) - Fix Slerp not interpolating properly when the vectors are exactly opposite each other (they will now be slightly biased in the positive dimension) - Rebuild bindings whenever the registered controller changes -- This fixes changes in active controller resulting in the controls being broken in some cases - Fix users with usernames containing slashes and other symbols not being able to be fetched from the cloud API (reported by @mvak, @nepushiro, issue #3085) -- This fixes those users not getting assigned proper default roles with headless -- Note that this is fixed by using different endpoint internally that makes the username a query: `users?name=
[ 2024-10-23 00:38:42 CET ] [ Original post ]
I'm pushing out a smaller build which has a bunch of bugfixes. I'm now mostly busy with designing the particle system, so these are just few things that didn't take as much time and should fixup some problematic issues.
New Features:
- Added SlerpWithMagnitude nodes (requested by mpmxyz, issue #3009) -- These will split the input vectors into unit vectors and their magnitudes, interpolate each individually (with vectors being spherically interpollated) and then combine them back together - When Userspace crashes, the state of all hosted worlds will be dumped to disk and Resonite will shut down (based on feedback by @jackthefoxotter, issue #2779) -- This prevents Resonite from continuing to run with unusable Userspace -- The paths of the world dumps will appear in the log
Locale:
- Merged Chinese locale update by modimobeikete - Merged German locale update by @muppeq - Merged French locale update by @j4.lc - Merged Russian locale update by @shadowpanther
Fixes:
- Fix user's head pose being stuck at origin in the Userspace, resulting in various UI's and prompts appearing below the user (reported by @_deltawolf, @modernballoonie, @nepushiro, @akiram_, issue #2941) - Fix world orb saver appearing below the user in desktop mode (reported by @_deltawolf, @modernballoonie, @nepushiro, @akiram_, issue #2941) -- Note that we plan to rework the whole UI to be more unified and UI based in the future - Fix multiple instances of SimpleUserSpawn resulting in breakage (reported by @foxbox., @amasteramaster, @defhammer, issue #3015) - Increased validity of avatar access key to 5 minutes to fix user's avatar not loading when loading into the world takes too long (reported by @rucio, issue #1386) - Fixed BezierCurve nodes disconnecting from everything when saved and spawned (reported by blllrpy, @gyztormizirath, issue #3042, fixed by @bluecyro)
[ 2024-10-08 22:40:16 CET ] [ Original post ]
Hello everyone! I got another build for you! This one is more of a "cleanup" build, merging in and sorting out some of the issues that have been pushed to backburner for a bit with other stuff we were dealing with. There's a bunch of new cool goodies in this one! Lots of new nodes & functions for shaping/easing, more access to the eyebrow tracking data. You can now also mark worlds as "Readonly" to prevent accidental saves (e.g. when you archive things). There's also important privacy improvement in this one, which builds on the recent session networking handling rework: User's ban status is no longer included in the public API that can be queried by anyone - the information is now only accessible once for brief period when joining a session, which helps improve overall privacy. A bunch of things were fixed up too - issues with the finger posing system breaking, Resonite to Resonite account migration (this actually borked due to security fortification that was done a while back) and more!
New Features:
- Added a set of new easing/shaping functions (issue #736, implemented by @ryuvi) -- Following easing functions are now supported: Sine, Quadradic, Cubic, Quartic, Quntic, Exponential, Circular, Rebound (Back), Elastic and Bounce -- These are available as Tween CurvePreset property -- There are also three ProtoFlux nodes for each - In, Out and InOut - Added eyebrow drivers to EyeLinearDriver (requested by @hazre, @gourry.gabriev, @natbard, issue #2303, implemented by @ryuvi) -- InnerBrowVerticalTarget, InnerBrowRaiseTarget, InnerBrowLowerTarget, OuterBrowVerticalTarget, OuterBrowRaiseTarget, OuterBrowlowerTarget - Added InnerBrowVertical & OuterBrowVertical to AvatarRawEye data (requested by @hazre, @gourry.gabriev, @natbard, issue #2303, implemented by @ryuvi) - Added "Readonly" flag for worlds (requested by @stiefeljackal, @rucio, @medravr, issue #2793) -- You can set this by editing the world's metadata and checking is "ReadOnly" checkbox -- When checked, you won't be able to save the world in-place or overwrite it -- If you want to make saving the world possible again, uncheck the flag first, before loading the world again -- Please note that this is only "soft" prevention and not a security/permission mechanism. The goal is to prevent accidental saves (e.g. for archived worlds) - AppConfig can now restrict which login methods are available with `availableLoginMethods` list property (implemented by @probableprime) -- Currently Login, Register and SAML are supported login methods -- This is useful for coporations/organizations which want to restrict which methods can be used to login - Added `forceStartMicrophoneMuted` setting to AppConfig, which allows to override the microphone to always start muted (implemented by @probableprime) - Bezier Curve node now outputs the tangent in addition to the curve point (implemented by @bluecyro)
Tweaks:
- The hyphen symbol "-" is now a legal character in dynamic variable path names (requested by @badhaloninja, @gareth48, issue #3038) -- This makes it easy to directly use user/group ID's as part of the path
Privacy:
- Restricted access to user's ban status through the public API (based on feedback by @rucio, @stiefeljackal and @dantetucker, issue #2619) -- This prevents anyone from determining whether arbitrary user is currently banned or not just by querying the API -- When joining a session, the host is given one-time access key to query the user's ban status. This ensures that the information is available only for a brief period to a single user and only when the user initiates join to a session
Security:
- Improve validation when creating onetime access keys in the API
Fixes:
- Fix finger pose processing components breaking when one of the source components only provides rotations with no positions (based on report by @modernballoonie, issue #2964) - Added filtering to session update events to prevent local status updates being triggered by irrelevant sessions -- This fixes the underlying issue behind "Session updated, forcing status update" log spam (reported by CZakarya, issue #2909) - Fix regression causing data migration between two Resonite accounts not working (reported by RuiNtD, @tumnusb, @wattlefoxxo, @mvak, issue #2347) -- This was caused due to session token security fortification implemented a while back - Fixed output of Bezier Curve being wrong (reported by @zozokasu, @rhenium_nv, @orange3134, @rucio, @banane9, ColinTimBarndt, Kemono-Kay, issue #1268, fixed by @bluecyro)
[ 2024-10-04 15:42:23 CET ] [ Original post ]
Hello everyone! I got a new build for you, with another chunk of performance optimizations - this build fixes the voice/pose hitch when users join sessions, ensuring they stay smooth even when the sessions grow big! This has been done by rewriting the session networking handling system, which made the code a lot nicer as well, fixed, optimized and improved a bunch of things along the way and opened more doors towards future improvements as well. There are a number of smaller improvements too, regarding moderation and group management. I'll be traveling tomorrow, so things will probably be busy, but I hope this build helps quite a bit. There's a lot more performance optimizations to be done, especially to improve the overall framerates! Also big thanks to everyone who helped test this new update, including: @bredo, @ohzee, @kyuubiyoru, @jackthefoxotter, @orange3134, @readun, @j4.lc, @modernballoonie and @foxbox. !
New Features:
- When account restrictions are applied, the user will receive an email in addition to Resonite bot message (implemented by @dantetucker) -- This also fixes issue where full account bans (which are very rare) are not able to learn reason for banning through their account - `/changeGroupName
Optimizations:
- Reworked session networking handling to remove voice & pose hitches caused by users joining a session (reported by "literally everyone", issue #1477) -- Processing of incoming/outgoing messages - encoding/decoding and so on is now handled in parallel with the task parallel library -- Majority of processing for control messages (initial join, asset transfers) has been hoisted out of the world sync loop, allowing them to be processed faster and reducing overhead on the world loop itself -- Improved the security/robustness of the initial handshake when joining session -- This is a significant rewrite, which significantly improves the overall quality of the code and makes working with this system much easier in the future and will make fixing bugs, security/privacy issues and adding new features (e.g. mesh networking) much easier -- Note that there is still a data model hitch that happens during the initial capture of the world state. This should not affect any voices and user pose streams. Optimizing this is a different set of optimizations in the future. - Rework synchronization of time from async stream messages to avoid constant memory allocations - Rework async stream decoding to reduce memory allocations - Optimize building a list of users for sync message transmission - Fix freshly joined users receiving host streams when they haven't requested streams yet, causing unecessary overhead - Fixed session processing not returning pooled resources, resulting in constant memory allocations and GC pressure
Tweak:
- World configuration changes will not be logged for userspace and worlds with only the host in them to eliminate clutter (implemented by @probableprime)
Locale:
- Merged German locale update by @muppeq - Merged Japanese locale update by @.aesc - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete
Fixes:
- Fixed failure message displaying wrong port when starting LNL listener fails (fixed by @probableprime)
[ 2024-09-30 20:46:03 CET ] [ Original post ]
A quick hotfix for avatars with custom LocomotionAnimationConfiguration. Compatible with current build! Though update is recommended if you want the parameters fixed. You can also fill them out manually to fix this.
Fixes:
- Fix existing instances of LocomotionAnimationConfiguration values not getting updated with new values (based on report by @jackthefoxotter, issue #2972) -- This should fix the animation breaking randomly -- This also fixes the standing still animations not working right on avatars with custom animation configuration due to all the parameters being 0 -- If you've already re-saved your avatar after the previous update, you'll need to fill out the "Standing Still" parameter section manually - you can just copy values from another instance
[ 2024-09-16 18:39:11 CET ] [ Original post ]
Hello everyone! Here's a bunch more tweaks and improvements! I'll be at Eurofurence this week, so there probably won't be too many builds during that, but this should help a bit. I still need to pack and prepare for travel, so this is what it is now, but I'll see if I have time for some things later. The procedural animation should be improved some more too, especially when standing still and while in VR, it shouldn't be moving as much anymore. Also a bunch of other stuff got merged in, I've been catching up on stuff that's been held by the business stuff.
New Features:
- Implement special handling for when the locomotion animation avatar is considered to be standing still -- The feet use different logic to determine when to move around to provide more natural behavior -- This should eliminate the feet stepping too often while in VR (based on report by @shiftyscales and general observations, issue #2852) -- This should also eliminate excessive head bobbing when looking around while standing on a spot -- The parameters for this new mechanism have been exposed on the configuration under "Standing Still" section
Tweaks:
- Inspector buttons now require lock in to press by default, preventing accidental changes (reported by @ryuvi, @jackthefoxotter, @readun, issue #2594, implemented by @ryuvi) **Locale:** - Merged Russian locale update by @shadowpanther - Merged Japanese locale fix by @akiram_
Fixes:
- Switched to C# 11 language version, fixing handling of delegates (implemented by @bluecyro and @geenz, related code postprocessing issues fixed by @bluecyro - issues #2107 and #2108) -- This fixes .NET 8 headless crashing due to Discord SDK not working properly with older versions of the language (reported by @orange3134, issue #2554) - Fixed DynamicBlendShapeDriver breaking when one of the blendshapes is not filled in (reported by @modernballoonie, issue #2408, fixed by @bluecyro) - Fixed mesh winding direction on MultiSegmentMesh and the component breaking when sides is set to less than 3 (repoted by @aegis_wolf, issue #1994, fixed by @ryuvi) -- Existing instances of this mesh will have FlipNormalDirection set to true to preserve old behavior - Fix VR keyboard not being able to copy any text which contains invalid path characters (reported by @nytra, @sctanf, AlanMoonbase, issue #1206)
[ 2024-09-16 12:04:30 CET ] [ Original post ]
Hey everyone! Here's another build with some more fixes and tweaks. It's a bit smaller, I went to get a COVID booster today and I got back home a bit go and my arm is starting to really hurt, so this is all you get x3 I started sorting out some of the backed up work too, so there's few bits of that too!
New Features:
- Add weight properties to FootstepSoundSplatmapSplitter -- This allows you to change weight of the splatmap colors used to select which sound effect to play. This is useful if you want less dominant colors in the splatmap to override more dominant ones for areas where the values are mixed (based on feedback by @ohzee, issue #2942) - Add BlendSounds option to FootstepSoundSplatmapSplitter (based on feedback by @ohzee, issue #2942) -- Enabling this will play a mix of sounds with volumes weighted based on the ratio of the channels in the splatmap -- This allows for smoother transitioning between different types of terrain -- Any parts with weight below MinimumThreshold will not be played at all - Replaced the Patreon badge with a more generic supporter badge (implemented by @ryuvi and @chromashiba, issue #1176) -- This is done because we'll soon be introducing more ways to support the platform and this provides more generic way to display the supporter status -- Once the badge system is reworked, we can explore giving support platform specific badges in addition of this one and letting users decide which ones they want to display
Tweaks:
- Change raycast filtering for footstep events to accept wider range of colliders - including ones with NoCollision (based on report by @modernballoonie, @amasteramaster, issue #2938) -- This allows you to have two separate sets of colliders - one for actual player collisions and another for footstep events - which can include more information as well (e.g. using primitive colliders for collisions and mesh collider for footstep sounds) - Updated yt-dlp from 2024.07.25 to 2024.08.06
Fixes:
- Fixed locale string error on procedural audio texture (reported by @rueshejn, issue #2410, fixed by @bluecyro) - Fixed locale string error on procedural meshes (reported by @_deltawolf, issue #1430, fixed by @bluecyro)
[ 2024-09-13 11:25:37 CET ] [ Original post ]
Got another build with more improvements and additions for the locomotion system. There's a number of tweaks which should make it behave and look better and fix some of the weirdness. I think it's pretty ready to get some of the community made tunings integrated, so if you're helping to fine tune the parameters, give this build a try, I'll be looking at them soon. There's also more additions to the footstep system - it's now super easy to setup worlds with footstep sounds! You just need to create footstep sound definitions for various materials - you can select/modulate them based on the foot impact velocity and other parameters and then you just need to apply a single component to the collider surfaces for this to work. It works with submeshes (so you can match different sounds to different materials) and there's a component to work with splatmaps too! There's still more to do with the system, but this should be adding a bunch more polish and giving you some extra goodies at the side as well!
New Features:
- Added FootstepSoundDefinition for defining a single footstep sound "material" -- You can have multiple clips for each definition, where one is chosen randomly based on the footstep specifics and weight -- Each sound can be limited to play only if the footstep impact velocity is within MinVelocity & MaxVelocity - this lets you use different sound effect clips depending on how fast the player is walking/running -- Each sound can also be limited to play only for walking on the ground or only when the player lands after falling/jumping. You can also limit clips to play only for the left or right foot -- You can modulate the sound pitch and volume based on the velocity and add a random variation to each as well -- The idea of this component is that you can easily reuse it for lots of colliders and parts of the world - e.g. by creating a preset for walking on grass, wood, metal and so on - Added FootstepSoundPlayer component -- Place this on any collider that you want to produce sound effects when players walk on them -- You can reference one or more "sound materials". Use multiple if you want each submesh of a mesh collider to produce a unique sound effect -- If only a single material is defined, it will be always used, regardless if the foot lands on a submesh -- The sound material component can be individual FootstepSoundDefinition or a component that handles further selection - Added FootstepSoundSplatmapSplitter -- This component is a sound material that can be plugged to FootstepSoundPlayer -- It allows you to reference a splatmap and then play appropriate sound effect depending on which part was hit - selecting unique sound effects for R, G, B or A, depending which channel has highest value -- The splatmap needs to be a readable texture for this to work -- This only works with UV mapped mesh colliders - Add SelfFootstepEventRelay (requested by @jackthefoxotter, issue #2927) -- Placing this in the hierarchy of the user lets you receive all footstep events generated by that user -- You can use this directly as the source for the FootstepEvents node
Tweaks:
- Add landing velocity to the velocity of a footstep event after falling -- This will more accurately represent the impact velocity of the foot on landing - Improve forward movement reference handling to be smoother and prevent rapid flipping between front/backwards movement when moving sideways (based on report by @zyro1331, issue #2922) - Reworked knee effector calculation to produce better knee poses and avoid the leg randomly twisting around -- Note that it can still misbehave when crouching, particularly depending on the avatar and how the IK is configured
Fixes:
- Fix locomotion forward reference flipping when looking up - Fix LocomotionState not being marked as data model type -- This fixes DebugLocomotionSimulator causing crash when added in a session with users (reported by @moonbase__, @draconas_rayne, Orion_Moonclaw, issue #2927) - Fix footstep events being missed when landing at high velocity
[ 2024-09-12 13:05:23 CET ] [ Original post ]
I got another build for you! This has a bunch more improvements for the locomotion animation system. I still haven't touched the defaults, I'll give those a bit more time and then look at which ones would be good to integrate to replace the current ones. I've also added a bonus that I wanted to implement with this system, because it made it much easier - footstep event system! This allows the environment to receive events whenever player lands a footstep on them. Currently there's mainly a node which gives you the raw event data, so you can do whatever you want with it! There will be more components built on top of this, espeically to make it easy to setup footstep sound effects in the world! The system also doesn't detect footsteps from full body movement yet (though when you walk around and the animation system takes over it will get that), but this will be added later too. There's a few other small additions. I've also started work on more optimizations (notably the session server join hitch), but that is a bit bigger thing.
New Features:
- Add better body turning detection for locomotion animation while in VR -- The hands are used to distinguish from the head moving around vs the whole body moving around - the body will move only if the hands move with it - Added DeltaAngle(Rad) node which computes angle between two 2D vectors and the direction -- Positive angle is clockwise, negative counter-clockwise -- Positive Y coordinate is up - Added a general system for sending footstep events into the world -- This can be used by a number of components and systems, with more to come! Right now you get the raw events themselves, I plan on adding a component that will make it easy to setup sound effects for this soon as well! -- Currently this only receives footstep events coming from the locomotion simulation - it will not detect footsteps coming from full body tracking (except when simulation takes over when you walk) - this will be added later - Added FootstepEventRelay component (under Locomotion/Footsteps) -- This allows to relay the footstep events to another Slot - Add FootstepEvents node (under Locomotion) -- You need to provide the FootstepEventRelay node as a source -- This will locally fire for each user who performs a footstep on the collider the event is sourced from -- You will receive the foot side (left/right), position and rotation of the footstep, impact velocity and whether the footstep is from landing (e.g. when falling), the hit collider and hit triangle index (if mesh collider was hit) - Added FootstepEventDebugVisualizer -- This visualizes footstep events received by the collider that this component is on -- This is mostly for diagnostic purposes - do not use this to build any specific behaviors! - Add RelayName network statistic of type string (issue #2751) -- When user is connected through a relay, this will be filled with the name of that relay
Tweaks:
- Add more detailed logging to world destroy events and ensure events get called even if one of them throws an exception (based on report by @_deltawolf, @zyro1331, @aritosuits, @stiefeljackal, issue #2681)
Locale:
- Merged German locale tweak by @muppeq
Removals:
- Remove DebugSetting component since it's no longer needed (based on report by @dustysprinkles, issue #2911)
Fixes:
- Fix session asset gather jobs not unregistering world destroyed events, resulting in resource leak and also exceptions when the world is closed after the asset has already been processed (based on report by @_deltawolf, @zyro1331, @aritosuits, @stiefeljackal, issue #2681)
[ 2024-09-11 11:26:41 CET ] [ Original post ]
Hello everyone! Here's a bunch more additions, tweaks, improvements and fixes, majority of them for the locomotion animation system. This should make things look and behave better, but there's still more to do! If you're helping us tune the default parameters, I recommend giving the sets a try. Since this auto-computes metrics for avatars, your existing tunings will probably look a bit different and might need re-tuning. Same with some other stuff that changes the behaviors a bit. There's a few other additions and improvements too, but still heavily focused on the animations, since that's mostly affecting people now.
New Features:
- Implemented automatic computation of metrics for locomotion animation for full body avatars (issue #2887) -- This should overall help animations fit the avatars better and make them look better -- Note that with these changes, some re-tuning will probably be needed -- This computes feet separation, shoulder positions and arm lengths and hand offsets -- Note that the success rate will vary depending on avatar and some avatars might need adjustment more than others. The calculation is based on the resting pose of the avatar - e.g. if the resting pose of the avatar has wide feet stance, the resulting metrics will also produce a wide stance - Added smarter adjustment of forward reference direction for the locomotion animation to allow to head move without the feet immediately reacting -- The head can move up to certain angle before the feet will start adjusting rotation -- When walking or running, this adjustment will happen sooner, in order for feet to stay aligned with the direction of movement - Added system that limits maximum simulation timestep for locomotion animation and will perform multiple simulation steps per frame if it drops too low -- This helps improve the accuracy of the simulation, especially at lower framerates -- There's a limit to simulation steps. If the framerate is running too low or there's a freeze, the simulation will "slip". This is done to prevent too much CPU load by too many simulation steps and also to prevent the simulation from causing a "freak out" by stepping too far - Full body avatars using VRIKAvatar will directly feet current shoulder position into the locomotion animation system -- This overrides the actual shoulder separation and offset set by the metrics with live-updated poses, which provides the most accurate results - Added Space to LocomotionAnimation(Feet/Hand)Metrics -- This allows specifying the metrics in the local space of the Slot the component is in, which will automatically rescale them to the user root -- This is better when the avatar gets significantly scaled when equipped and ensures the metrics stay in sync with its current scale - Added ShoulderOffset metric -- This allows applying forwards/backwards offset to the shoulder position - Added support for universe homes (implemented by @probableprime) -- This is useful for organizations/corportations, so they can have a custom Local & Cloud home for users in their private universe
Optimizations:
- Slightly improve environment collider check performance by doing a cheaper check first - Improve AvatarUserViewHeadOverride performance by reducing GC pressure and disabling completely while in VR -- This could potentially help issue #2895 reported by @ryuvi (I haven't tested if the issue is caused by this) - Track requests to recalculate skinned mesh matrices and automatically unflag skinned meshes when nothing is requesting them to be recalculated for every render anymore - Small optimization when fetching components of certain type
Tweaks:
- Properly calculate head reference position with neck offset, fixing the shoulders moving down when looking down or up - Improve forward reference calculation to prevent the feet direction flipping when looking down - Improve knee offset calculation when using simulated poses - When a foot acquires footing, it is immediately simulated on the ground for the remainder of current update tick -- This improves the accuracy of the simulation, especially with large movement speeds - Ensure that the default configuration in the world is non-persistent, so it's properly initialized on every startup -- IMPORTANT: You shouldn't modify the version of the component referenced by UserPoserController as default other than for testing purposes. If you want to use custom setup, put an instance of the configuration under your avatar
Locale:
- Merged English locale tweak by @stiefeljackal - Merged German locale tweaks by @muppeq
Fixes:
- Fixed invalid hand swing parameters corrupting the animation, causing the hands to be pulled towards root (based on report by @Jatsy, issue #2875) - Fixed RenderTransformOverride not activating properly when enabled/activated from a disabled/inactive state - Fixed world loading indicator showing under the floor and not following head rotation (reported by @bredo, @raidriar796, @conehead1, @ocelot342, @modernballoonie, issue #2855, fixed by @probableprime)
[ 2024-09-10 11:31:12 CET ] [ Original post ]
Pushing a hotfix that fixes old instances of LocomotionAnimationConfiguration losing their values when they're loaded with latest build. If you have not re-saved them, just spawn them again and they'll have their old values back! Also this build is compatible with previous!
GENERAL PSA:
In general, Resonite is designed to not mess with the saved data unless you resave them again. This is done on purpose, so in situations like this, where upgrade of the values goes wrong for some reason, you don't actually lose the data - unless you explicitly save the item/world and overwrite the old copy. Whenever this happens again (something gets borked that worked before), always keep the original of the item/world saved, only ever save copies if you must. It's typically very easy to fix those issues and restore your original data - it stays safe "at rest" by design.
Locale:
- Merged English locale VSync description tweak by @stiefeljackal - Merged French locale tweak by @j4.lc
Fixes:
- Fix LocomotionAnimationConfiguration resetting previously saved values due to new values being added in (reported by Xau, @charizmare, @inucune, @gyztormizirath, @bobool3ol, issue #2894) -- If you have not resaved any existing instances, your old values will be preserved
[ 2024-09-06 20:00:31 CET ] [ Original post ]
Hello everyone! I've got a bunch of bugfixes and improvements for the new system for you. This should fixup most of the pressing issues and improve some of the behavior. There's still more to do, I was trying to get automated avatar metrics calculation into this build, but it wasn't working right with all avatars, so I'll need more time to finish that one up, but I'm getting snoozy, so I don't want it to hold up stuff.
New Features:
- Split VelocitySmoothTime parameter to increase & decrease versions (issue #2885) -- This allows the velocity to ramp up much more slowly than it goes back down -- This helps resolve some of the jankiness, particularly when the player is moving in small bursts, by not immediately going to a running gait, unless the movement is sustained - Add LocomotionAnimationBodyCollider component, which is now required for any colliders to be considered for self-collision for the hands (based on report by @memtx, issue #2874) -- Existing full body avatars are automatically instrumented with those components -- Use IgnoreForLeftHand & IgnoreForRightHand to make corresponding hand ignore those colliders (this is used for hand to not self-collide) -- The nearest instance of this component is used, which lets you override which hands get ignored -- The LocomotionAnimationColliderBlock is still respected if it's found in the hierarchy between the collider that was hit and the LocomotionAnimationBodyCollider - this lets you mark a chunk of hierarchy for collision and then exclude parts of it
Locale:
- Merged Finnish locale update by @airride91 - Merged English locale fixes by @airride91 - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete - Merged French locale update by @j4.lc - Merged German locale update by @muppeq
Fixes:
- Fixed duplicate avatar object slots for feet when using full body tracking, resulting in misbehavior -- This fixes the tracker visuals being visible even when the tracker is calibrated (reported by @charizmare, @hamocorp , issue #2856) - Fix LocomotionAnimationColliderBlock not being properly categorized (reported by @_deltawolf, issue #2868) - Fix feet not being positioned properly in avatar anchors (reported by @yoshi1123_, @bluetera, @nexus15., SilvyPaws, @wolf_seisenbacher, issue #2859) -- AvatarPoseBoxConstraint now has "ProcessSimulatedPoses", which allows you to keep simulated poses when user is in anchor. By default this is off to simulate old behavior. - Fix full body calibrator freaking out when adjusting poses (reported by @hamocorp, @harumaki021, issue #2864) - Fix CurrentOnGround not updating on VRIKAvatar (reported by @gearbell, issue #2860) - Fix held objects moving with head animation (reported by @hamocorp, issue #2858) - Fixed newly registered users sometimes getting a blank dash (reported by @kodeska, fixed by @probableprime)
[ 2024-09-06 10:39:20 CET ] [ Original post ]
Hello everyone! I've got a build for your after a while. This one took a bit, because I spent a lot of time working on the new procedural locomotion animation system, which came up as a requirement for one of our business client. My goal was to get it as good as possible before release, but I've been getting progressively more fatigued with it, making it hard to make progress, but also because it already got merged internally, it was blocking releasing any builds. Because of that, I'm releasing this in its current state - it should be polished enough to be better than the existing animations and any major bugs and issues should be sorted out. However the animations themselves aren't as tight and tuned as I'd like them to be, which means they can look a bit goofy. Fortunatelly the system is highly configurable and we've had a number of dedicated community members helping fine tune the default parameters. This will continue to help make the default animations look better and if you're like to nab any of these tunings and use them right now or even contribute to the process, go here: https://github.com/Yellow-Dog-Man/Resonite-Issues/discussions/2799 There are other additions as well that you can use right away - there's a new set of components for animating fingers! You can use those to setup custom finger pose systems and smoothly blend between those and the finger tracking solutions on the avatar. A lot of things got fixed up and tweaked too. This build also contains significant improvements to our universe system, which is very useful for corporations and organizations - but some of them can be useful for you as well. Overall these help make Resonite a more well rounded solution for those, which helps support our team. I'll be focusing on a few issues that have been piling up and some other stuff I wanted to do for a bit in the new few builds, before I circle back and integrate some of the polish for the animations. Also big thanks to everyone who participated so far helping test and fine tune the procedural animations: @troyborg, @gamethecupdog, @foolishsnowmew, @shiftyscales, @orange3134, @cameron5, @vrbat, @modernballoonie, @rockstarraccoon, @rabbuttz, @veercollie, @modernballoonie, @j4.lc, @zyro1331 and others (sorry if I missed your name, I'm compiling this from the GitHub issues & discussion - make sure to submit anything there!)
New Features:
- Implemented a new procedural animation system for animating avatar feet, hands and head when they are not tracked -- This sytem simulates the end feet and hand positions as well as head offsets and finger poses -- The system uses semi-physical simulation, reacting to user's movement in world -- Multiple gaits are supported - animation parameters are interpolated depending on user's speed -- The system supports self-collisions of hands with body -- The system also supports feet colliding with the environment -- When in full body, the system will only override feet when moving fast enough and when you're not horizontal - the horizontal angle can be configured in Settings under "Controls -> Full Body Tracking" -- IMPORTANT: This system still needs a number of tweaking and fine tuning - which you can contribute to as well - Added LocomotionAnimationConfiguration (under Users/Common Avatar System/Animation) -- This allows you to provide your own configuration for how the procedural animation looks by placing it on your avatar -- If this component is absent, world's default configuration will be used instead - Added LocomotionAnimationFeetMetrics and LocomotionAnimationHandMetrics (under Users/Common Avatar System/Animation) -- These allow overriding poses and distances of hands and feet on an avatar to make the animations better fit the avatar -- It's useful if the avatar has less typical proportions - short/long arms or legs - Added LocomotionAnimationColliderBlock (under Users/Common Avatar System/Animation) -- Add this to the top of the hierarchy of any colliders on your avatar that you don't want your avatar hands colliding with -- You can also add this to the environment colliders, if you want the feet to ignore and not collide with them - Added LocomotionAnimationSuppressor (under Users/Common Avatar System/Animation) -- Placing this on avatar and enabling SuppressFeetSimulation will stop the animation system from taking control over the feet, allowing systems like posers to work -- **IMPORTANT:** Please note that generally we advise against hijaking systems you don't control for your own functionality - the way a system controls something can change, breaking your own systems that might depend on particular behavior or pattern of control! (see:
Locale:
- Merged German locale update by @muppeq - Merged Chinese locale update by modimobeikete - Merged Japanese locale update by @.aesc - Merged Spanish locale update by @ruzeh - Merged Korean locale update by @mirpasec - Merged French locale update by @j4.lc - Merged Ukrainian locale update by @antonneposeda - Merged Russian locale update by @shadowpanther - Merged English locale fixes by @_deltawolf and @muppeq - Merged Thai locale update by @naborisk
Tweaks:
- Exiting Resonite while in universe (used for business / education) will now use blank void rather than local (implemeneted by @probableprime) - When custom inspector UI builder throws an exception, it will be displayed in the generated UI if possible to indicate that something went wrong, rather than showing incomplete UI
Fixes:
- Fixed new world dialog issues when LNL ports are restricted by config (fixed by @probableprime) - Fixed Replace First Substring node not behaving correctly (reported by @mpmxyz, issue #2550, fixed by @bluecyro) - Fixed loading indicator now showing the world name in some cases (reported by @zyro1331, issue #2284, fixed by @probableprime) - Ensure access level is provided to local/cloud home as soon as possible, to avoid it being briefly public (reported by @dantetucker, issue #448, fixed by @probableprime) - Fixed Pow operation on quaternions sometimes returning NaN - Fixed VRIKAvatar using wrong side offset for left foot position - Fixed render overrides sometimes not overriding properly due to no render context switches - Fixed BipedRig wrongly indicating if right hand fingers were detected - Fixed floating point editor fields producing NaN values when the field is empty - Fixed finger pose streams missing pinky tip bodynode
[ 2024-09-04 06:23:21 CET ] [ Original post ]
Hello everyone! Today is just small build, sorting out a few things I needed to for a bit. I've been busy working on the procedural animation system and some other stuff in the background (plus taking a few days off due to brain being mush). The main thing is we're now swapping to the .NET 8.0 headless fully! The old .NET Framework / Mono headless is gone and the .NET 8.0 is now in its place! You'll need to update your tooling accordingly. Thank you everyone for testing! We've got lots of reports of great performance improvements with .NET 8.0, which is very exciting for the upcoming switch of graphical client to this runtime as well. There's also new notification sound effects!
New Features:
- Added new notification sound effects for Sociable, User Join & Leave (requested by @epiceaston197, issues #2177 and #1926, sounds made by @lacydoes)
Tweaks:
- Removed .NET Framework / Mono headless and made the .NET 8.0 version the main (and only) headless client -- You can find migration instructions at Wiki here: https://wiki.resonite.com/Headless_Server_Software/Migration -- Important: The .NET 8.0 version is now placed in the same folder where the old headless was. The `net8.0` folder is gone.
Locale:
- Merged Polish locale update by @foxobread and @torrndraws - Merged Japanese locale update by @.aesc and @zozokasu - Merged Ukrainian locale update by @antonneposeda - Merged Chinese locale update by modimobeikete - Merged Korean locale update by @mirpasec - Merged English locale fixes by @stiefeljackal - Merged Spanish locale update by @luxkitty - Merged Hungarian locale update by @fernzehen - Merged French locale update by @j4.lc
Fixes:
- Do not recompute compatibility hash when the file timestamps changes, but the actual file doesn't -- This fixes first launch taking much longer after a released update (reported by @ohzee and @nytra, issue #2671) - Fix exception when formatting messages in .NET 8.0 headless due to dependency version mismatch
[ 2024-08-05 22:39:01 CET ] [ Original post ]
For some reason a file was missing from the Steam depo, causing WebSocket functionality to break in the last build. I'm unsure what caused the problem, since the file was present locally and copying is handled by a batch script, but just republishing seems to fix it. Compatible with previous, but if you don't update websockets might not work for you (which will also likely cause issues for SignalR).
Locale:
- Merged Russian locale update by @shadowpanther
Fixes:
- Republished build to fix missing `System.Net.WebSockets.Client.Managed.dll` from the install to fix websockets not working (reported by @scarstrf, @decoybird, @luxkitty, issue #2670)
[ 2024-07-25 21:34:26 CET ] [ Original post ]
Hey everyone, another smaller build today. Cleaning up a few small things that I meant to for a good bit, but other things got in the way. I'll be focusing more on the procedural animation system now though. There's also update to yt-dlp and a workaround that should make videos with higher resolutions load.
Tweaks:
- Added "Use System Language" to the Setting UI locale selection -- This will automatically use whatever locale the OS is set to - Updated yt-dlp to 2024.07.25 from 2024.07.09 -- This should fix some videos loading as only audio (reported by @foolishsnowmew, @raidriar796, issue #2664) - When there's only a single available SAML provider, it will automatically be used for login, rather than presenting selection (implemented by @probableprime)
Locale:
- Merged French locale update by @j4.lc - Merged Russian locale update by @shadowpanther - Merged Japanese locale update by @.aesc - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete - Merged German locale update by @muppeq - Merged Ukrainian locale update by @antonneposeda
Fixes:
- Fix text selection not clearing when the text field is empty -- This fixes the first character typed into a field after double clicking getting removed (reported by @_deltawolf, @imerin., issue #2361) - Fix broken locale keys on full body / avatar calibration dialog (reported by @stiefeljackal, issue #2279) - Fix broken locale keys in the LanguageSelection UI (reported by realdoomsboygaming, @electronus, @_deltawolf, @stiefeljackal, @whippersnatchpumpkinpatch, issue #1837) -- Note: this UI has also been marked as legacy and will be fully removed in the future, and replaced with the new data feed based system - Fix broken locale keys in the Audio Device selection UI (reported by realdoomsboygaming, @electronus, @_deltawolf, @stiefeljackal, @whippersnatchpumpkinpatch, issue #1837) -- Note: we're also likely to replace this UI at some point with a data feed based system - Applied workaround for yt-dlp to fix some YouTube videos being limited to 360p (based on report @lucaedr, @raidriar796, @rodgerdodger, issue #2584)
[ 2024-07-25 19:00:19 CET ] [ Original post ]
Just a small build again, sorry. It's been a bit difficult to focus lately and I have pretty bad headache today. There's a few goodies though, some new nodes and fixes. I've been starting implementation on the new procedural avatar animation system, which needs quaternion extrapolation, which is now added in the form of the Pow node. There's a fix for Mono headless too, but it will be removed very soon, see #announcements please.
New Features:
- Add Pow operation for quaternions -- ProtoFlux nodes are now available for this -- This effectively allows extrapolating given quaternion - Add lerp & slerp random nodes -- These will give a random value that's a linear (or spherical for floatQ) interpolation between the two values -- This includes RandomSlerpFloatQ that gives random rotation between two values (requested by @gearbell, issue #2642) - Added button to worker inspector that opens the slot it's on (requested by @art0007i, issue #608) - Universes can now have a default group assigned to them (implemented by @probableprime) -- This is particularly useful for corporate/university applications
Locale:
- Merged missing English locale key by @wattlefoxxo and @stiefeljackal - Merged German locale update by @muppeq
Bugfixes:
- Fix Mono headless on Windows failing to start (reported by @bredo, @zachthemicrohybrid, issue #2649) - Fixed OSC_Sender binding itself to the same port as the target, preventing localhost connections (based on report by MuffinMcGee, @technobaboo, issue #1972) -- You can now configure local port through LocalPort property -- Setting this to 0 (which is default) will pick a free port automatically (this is recommended unless you need specific port)
[ 2024-07-24 18:33:51 CET ] [ Original post ]
Hey everyone! Last week has been unfortunately really exhausting, so I've only got a small build for you today, I've been a bit sluggish :( There's a few bugfixes though - notably websockets should now work with .NET 8.0 headless! Also fixed up another missed type with the new type managed system causing crashes. We've also got a new language thanks to @antonneposeda - Ukrainian!
Tweaks:
- Validate RawOutput fields when validating data model types - When Desktop tab is disabled, the dash button is disabled as well (implemented by @probableprime)
Locale:
- Merged new Ukrainian locale by @antonneposeda - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete - Merged German locale update by @muppeq - Merged Russian locale update by @shadowpanther
Fixes:
- Reworked WebsocketClient to use System.Net.Websockets rather than websocket-sharp -- This fixes websockets not working on .NET 8 headless (reported by @walltack) -- On graphical client, this will use the modified version with the UTF8 split codepoint fix (same version that SignalR uses on the client) - Fix SkyFrost failing to initialize when user agent version is missing -- This fixes migration issues (reported by @dantetucker, issue #2646) - Fix ChannelConfiguration not being marked as data model type -- This fixes RectMesh & AudioClipMetadata causing a world crash (reported by @amasteramaster, @harmonicafenneccat and @sveken, issue #2645)
[ 2024-07-22 22:07:49 CET ] [ Original post ]
I've finally gotten to the bottom of the cloud issues that we were experiencing for past few days. This build *should* fix it (at least it fixes underlying cause). @everyone please update to this build immediately. I will be blocking previous builds from accessing the cloud since they're tripping the issues. I apologize for the ping, but this is important to get things stable as soon as possible. The gist of things that have been happening is: - There's a bug in an old System.Net.Websockets implementation in Mono, where messages that contain multi-codepoint UTF8 symbols (e.g. Japanese or Chinese characters) will trip up validation and make the connection explode and disconnect - This bug in System.Net.Websockets was fixed back in 2018, but the Mono implementation in Unity is older than that. I've backported the fix to an older version, which will work for now - There has been an increase in session updates with those symbols present, resulting in the connections exploding much more frequently (most of them not lasting even a minute) - SignalR would reconnect after connection exploded, which is somewhat heavy process. Due to this happening very frequently for pretty much everyone, this would destabilize the cloud - The connection dropping frequently also means that you stop receiving and sending updates randomly, causing further issues with the info being up to date I'll keep monitoring the situation, but hopefully this should make things calm down.
Bugfixes:
- Switch to modified System.Net.Websockets implementation for SignalR -- This version contains a packported fix for when WebSocket messages end up splitting UTF8 strings in a middle of a surrogate pair, resulting in websocket connection crash -- See
[ 2024-07-20 18:44:50 CET ] [ Original post ]
Ok, I found a better workaround, since the previous one doesn't work super well. This should make things work okay for now, hopefully without any (too many) ill effects, at least ones that aren't worse than part of the cloud just dying. Compatible with previous build, but update recommended so people can see you properly online.
Workarounds:
- Swapped to a modified version of managed WebSocket client with disabled Utf8 validation and switched SignalR back to websockets -- This is only temporary workaround to this problem, since it technically breaks WebSocket spec and can lead to undefined behavior -- I've tested this for a bit and it doesn't seem to have any noticeable ill effects - at least not worse than what was already happening -- Once I manage to narrow down the exact cause, the validation will be restored
[ 2024-07-20 01:46:18 CET ] [ Original post ]
Hello everyone! Sorry that things have been very bumpy lately, I've been drilling down into the issues and while I do have good idea where they are coming from (though not sure why things changed yet), direct fix still requires a fair bit of work. This build should provide good workaround for the problems however in the meanwhile and get us through the weekend (if I don't manage to fix the issues before then). Compatible with previous, but I suggest you update ASAP.
Workarounds:
- Switch SignalR to use LongPolling or ServerSentEvents instead of WebSockets -- This should help mitigate current issues with SignalR connectivity while those are further investigated
New Features:
- Add Websocket wrapper for SignalR to help diagnose issues
Fixes:
- Remove deprecated SignalR packages - Fix contact list not being fully marked as initialized, resulting in cloud variable breakage (reported by @stellanora, @sctanf, issue #2623) - Fix .NET 8.0 headless not loading properly due to SignalR library weirdness -- This resolves some issues reported by @khauni, @sctanf, @gyztormizirath, @sveken, @xlinka, issue #2625
[ 2024-07-19 20:25:21 CET ] [ Original post ]
There's only a few things in this build, because I spent most of today (well... still am) dealing with the cloud issues. There's a few things that might help with that, but I'll have to see how the cloud reacts. Please update as soon as you can.
Tweaks:
- PhotoMetadata will not generate "Save/Export Screenshot" options when it's disabled (based on report by @euphieeuphoria, issue #2611) - Exposed SetFromCurrentWorld() on AssetMetadata (which includes PhotoMetadata) to ProtoFlux (based on issue by @euphieeuphoria, issue #2611) -- This allows you to trigger automatic filling of the details for items with ProtoFlux - PhotoMetadata will no longer be marked as already exported under following conditions: -- It's disabled at the time of save/spawn (requested by by @euphieeuphoria, issue #2611) -- It's been spawned from a source not owned by the user spawning it (e.g. shared inventory folder or from a message item) - Bot and Chat Client user statuses are now displayed properly in the contacts dialog, including their version (based on issue by @exothewicker, issue #2604) - Updated cloud libraries to latest versions where possible - Updated Enums.NET, PDFiumSharpV2, QRCoder, DiscordGameSDKWrapper to the latest versions - Update SignalR client side libraries to latest - Increase SignalR disconnect timeout to prevent early disconnects
Optimizations:
- Rewrite initial contact initialization when logging in to use SignalR streaming, instead of sending everything at once - Do not make anonymous connection to SignalR when autologin is in progress, to prevent wasted load the client & cloud
Locale:
- Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc - Merged Chinese locale update by modimobeikete
Fixes:
- Fix exceptions when marking local database for repair and when running the repair itself - Fix server errors when fetching asset metadata that is currently being computed
[ 2024-07-19 04:51:38 CET ] [ Original post ]
Hello everyone! Today build is very heavily focused on improving networking. We've been pretty busy sorting out issues for some of our business uses, which pretty much took all day yesterday to get finished (and I mean... ALL day), so today I only had the energy to polish it up and not do much else >///> A number of those improvements should benefit overall by improving the robustness of connections and offering some new options - notably Resonite now supports session connections over TCP protocol! This is mostly useful within local and corporate/university networks - but it can be pretty beneficial if you're running connections on LAN - TCP is very fast there. The other big addition is "LNL Poking" mechanism - this is useful within networks with stateful firewalls, which makes connections work reliably on those networks. With this stuff out of the way, we'll have more "regular" stuff soon!
New Features:
- Added support for TCP protocols for realtime session networking -- This will generally only work on direct IP connections on local networks -- This is mostly meant as fallback solution for university and corporate networks, when UDP connections fail -- However this can be useful for LAN as well, as TCP can perform better on local networks than UDP based protocols -- This protocol will also respect the port range setting when configured - Added Prefer TCP setting to Realtime Networking Settings -- Enabling this will prefer TCP connections above all else. This is mostly useful for LAN connections -- TCP can perform very well on LAN networks, achieving high transfer speeds -- It can also work on certain networks, where UDP traffic is not acceptable -- However it can also suffer from head-of-line blocking, causing voices and poses to be significantly delayed, so use this with caution - Add LNL Poking mechanism to help connections within corporate & university networks -- When used within a private Universe, direct LNL IP connections will send "poke messages" to the connecting client to help facilitate connection -- This helps establishing connections when a stateful firewall is present
Tweaks:
- When announcing local IP's, link-local addresses are filtered out (implemented by @probableprime) -- These usually do not work past the first router/switch and in corporate scenarios -- This helps speed up connections in some cases by not trying these addresses - Add additional logging for LNL connections (including when they start on a restricted port range) - Direct LNL connections will now attempt to be established with UDP routing disabled first, which can help in some networks, particularly with multiple network adapters -- If this fails, another attempt will be made with the routing enabled afterwards -- This should help improve robustness of establishing connections, particularly in corporate/university subnets - LNL Listeners & Connections will now manually bind to specific interfaces -- This can potentially help resolve some networking issues, when multiple network interfaces are present and wrong ones are being used for routing connections - LNL Direct IP connections now indicate the source and target IP/port they're connecting to
Locale:
- Merged Japanese locale update by @.aesc and @linki9s7 - Merged Chinese locale update by modimobeikete - Merged British English locale update by @nytra - Merged English locale fix by @muppeq - Merged German locale update by @muppeq - Merged French locale update by @cerealbowlsystem and @j4.lc - Merged Korean locale update by @mirpasec
Bugfixes:
- Improved robustness of Local IP discovery to ensure that all of them are properly discovered - Fixed null reference exception in ContactDialog when selecting contacts in some cases (fixed by @probableprime) - Fixed null reference exception for LegacyGlowCircle (fixed by @probableprime)
[ 2024-07-17 19:47:18 CET ] [ Original post ]
Hello everyone! Today is more of a "cleanup" build - fixing a number of additional issues that popped up with recent changes due to the new Type Management system and the .NET 8.0 healdess, plus a few other things that we didn't get time to get to until now. Notably there's now badge for users who helped us test Resonite before official release! I've also sorted out a number of Translator badges - if you don't have yours, just make a GitHub issue in the Locale repo with your UserID and we'll get it sorted!
New Features:
- Add "Incompatible Sessions" advanced filtering option to the Worlds tab -- You can check this if you want incompatible sessions to be listed (though this is mostly for debugging purposes) - Add IncompatibleSessions filtering option to WorldsDataFeed -- Enabling this will include any found incompatible sessions in the feed - Added setting that allows disabling automatically using Steam Voice when playing Resonite through Steam Remote Play (requested by @glitchfur, issue #2561, prioritized due to boyfriend privileges (and also taking less than 5 minutes to implement x3)) -- Can be found under Integrations -> Steam Integration settings - Added Durian tester badge -- This is a small thanks for everyone who we could onboard to help with testing Resonite before it's official release -- Note: If you don't have your badge (some of the info we had from testing doesn't match Resonite account), DM me your username/UserID and I'll get it sorted
Tweaks:
- Added additional logging for LNL bridge & relay connections (implemented by @probableprime)
Removals:
- Remove Fetch Incompatible Sessions setting -- Resonite now fetches all sessions and instead the filtering will happen in individual places where the session would be displayed -- This fixes users in incompatible sessions not displaying as such, unless this setting was enabled (reported by @epiceaston197, issue #2551)
Locale:
- Merged Chinese locale update by modimobeikete - Merged French locale update by @cerealbowlsystem and @j4.lc - Merged Russian locale update by @shadowpanther
Bugfixes:
- Mark Delegate as system type to fix crashes when manipulating method proxies with ProtoFlux tool (reported by @nytra, @luxkitty @modernballoonie, chaixshot, issue #2573) - Fix nullable types failing to parse when the base type is not an engine base primitive (e.g. enum) -- This fixes ObjectFieldDrive
[ 2024-07-15 22:50:36 CET ] [ Original post ]
Pushing out a small bugfix build. I want to get these fixes out asap, since they prevent some items from loading properly and can result in data loss if resaved.
Bugfixes:
- Mark Delegate as system type to fix crashes when manipulating method proxies with ProtoFlux tool (reported by @nytra, @luxkitty @modernballoonie, chaixshot, issue #2573) - Fix nullable types failing to parse when the base type is not an engine base primitive (e.g. enum) -- This fixes ObjectFieldDrive
[ 2024-07-15 15:26:39 CET ] [ Original post ]
I've got another update with some fixes. This one is not compatible with previous unfortunatelly, but I felt this bugfix is important enough to push before the weekend, since it breaks a number of things following the type management system.
Tweaks:
- Expand the list of sync types used for automatic type validation to help catch more types that were not marked as proper data model types
Fixes:
- Mark StripePoint, TubePoint, ParticleBurst, SnapperFilter, UIBuilder and MouthParameterGroup as data model types -- This fixes some particle features not working (reported by @nytra, issue #2546) -- This also fixes session crash when opening user inspector and face tracking problems (reported by @aphelioninterface, @hikari_akimori, MahSandwich, @chundelac, issue #2544)
[ 2024-07-12 19:23:41 CET ] [ Original post ]
Got the System.Text.Json security update sorted for the client/headlesses. Compatible with previous, though update is recommended.
Security:
- Update System.Text.Json to 8.0.4 for graphical client and both headlesses due to a high security vulnerability in older version (reported by @stiefeljackal, security ticket #471041) -- CVE details:
[ 2024-07-12 18:27:30 CET ] [ Original post ]
Pushing out an update now, which is mostly bugfixes, most of them for .NET 8.0 headless. and the dash breaking for some users. I'm pushing this out earlier now, in case there's issues with some of the changes so we can get them resolved before it gets later in the day. I'll likely push another update later with more .NET 8.0 headless bugfixes, but those should not affect anything else (compatibility or the normal headless).
New Features:
- Added Parent Override to Common Spawn Area (requested by @ohzee, issue #1548, implemented by @ryuvi)
Tweaks:
- Remove `Resonite.exe` from Linux version of .NET 8.0 headless (based on report by @bredo and @sveken, issue #2540) -- To run it on Linux, use `dotnet Resonite.dll`
Bugfixes:
- Fixed a number of failures when establishing LNL connection on networks to improve the connectivity robustness (fixed by @probableprime) -- This will properly handle failures like network errors (unreachable routes), failed connections (e.g. firewall blocking), Resonite crash on connecting and so on -- This makes sure that if there are other IP's or protocols to attempt, they will be attempted properly rather than getting stuck - Prevent exceptions in updating dash screens from breaking the dash completely (based on report by @electronus, @rockstarraccoon, issue #2537) - Add extra diagnostics & auto-recovery for radiant dash screens when the canvas reference is nulled (based on report by @electronus, @rockstarraccoon, issue #2537) - Fix dependency library issues with Hardware.Info and Brotli (based on report by @bredo, @raidriar796, @exothewicker, @sveken, @j4.lc, @troyborg, @teknocatron, issue #2541) - Fix SignalR library references for .NET 8.0 headless to fix login issues (based on report by @bredo, @raidriar796, @exothewicker, @sveken, @j4.lc, @troyborg, @teknocatron, issue #2541)
[ 2024-07-12 15:55:03 CET ] [ Original post ]
The .NET 8.0 headless is here! This was pretty easy to get going. This is going to exist for a bit alongside the "normal" headless for testing and transition time! Read this issue to learn more: https://github.com/Yellow-Dog-Man/Resonite-Issues/discussions/2539 Resonite now also has a new language it supports thanks to fernzhn - Hungarian! This should also potentially fix the issue with the dash breaking for some users after the upgrade. Oh also it's compatible with previous build. I'm going to go crash into VR now, bye!
New Features:
- Added .NET 8.0 version of headless (issue #2265) -- Currently this is packages alongside the normal .NET Framework one to allow for transition period and testing -- You can find it in the `net8.0` subfolder next to the normal headless -- Use with caution! While this seems to work well, we'll be doing some testing on this -- It's compatible with other builds, so it should be able to be used interchangeably -- This should provide much better headless performance compared to the old headless
Locale:
- Merged new Hungarian locale by fernzhn
Fixes:
- Fix radiant dash screens breaking when modal overlay fails to setup (based on report by @electronus, issue #2537)
[ 2024-07-12 00:26:07 CET ] [ Original post ]
The new type management system is now done and out! This is a major rework of how Resonite (FrooxEngine) handles types, improving compatibility and security. This is also first major task completed for our performance optimizations - while this doesn't help with performance itself, it lays important groundwork for it. The next step will be moving the headless to modern .NET runtime, which might be relatively simple at this point, since this was a major blocker. I'd also like to give big thanks to everyone who helped test this and get this polished before public release: @bredo, @epiceaston197, @modernballoonie, @whippersnatchpumpkinpatch, @zyro1331, @bluecyro, @jgullberg, @mpmxyz, @_deltawolf, @aritosuits, @stiefeljackal, @ohzee Also since I forgot this in a rush yesterday (sorry ;_;), there's also big thanks to people who helped to test the LNL Windows Size pre-release as well: @ohzee, @bredo and @_deltawolf (and everyone who joined the BoTC game to help test), as well as @rucio, @stiefeljackal, @stellanora, @sveken, @banane9, @jackthefoxotter, iamgreaser, @_deltawolf, PJB3005, @charizmare in issue #1324 from which the work on dynamic LNL window size stemmed based on their testing data.
New Features:
- Redesigned & reworked type serialization & negotiation - introducing a new "Type Management" system (issue #2264) -- The process of encoding & decoding datatypes, both on network and for persistence, is now fully controlled by our code, rather than relying on .NET Framework methods -- This is major step towards moving Resonite & FrooxEngine to modern .NET runtime for performance optimizations, allowing the modern runtime to load existing content and communicate with clients on the old while we transition -- This also improves security by restricting which datatypes can be introduced into the data model - specifically marked types can be introduced (e.g. this fixes headless crashes when creating fields of datatypes only found in the graphical client, but not headless) -- Generic types are handled recursively - both the generic definition and all the generic arguments need to be allowed data model types to be allowed in the data model -- Compatibility between sessions is now computed automatically, which fixes cases where human error (meaning I forget to mark the builds as incompatible) leads to crashes when incompatible builds try to interact (Note: There's still some additional validation that needs to be added) -- When saving items, datatypes are now encoded more efficiently into a table, rather than duplicated, speeding up saving/loading process and reducing the file size -- This also simplifies maintaining backward compatibility with content, providing more powerful mechanisms to indicate relocated or restructured types -- Compatibility is now computed on per-session basis. Each session determines which assemblies (and which versions) it loads. This allows plugins to be loaded without breaking compatibility with vanilla sessions. Note: There's currently no UI for picking which plugins will be available in the session, this will be added later -- Note: Plugins now need to be tagged with DataModelAssembly attribute to be scanned for types IMPORTANT: Anything you save with this build will not be able to be loaded in older builds. If you find any broken content that doesn't load properly, DO NOT RE-SAVE it (copies are okay) and make a report! We'll have a look asap. - Nice type parser robustness has been significantly improved (e.g. when specifying type fields or generic arguments) -- It now scans all types allowed in the session and allows ambigious matching - you don't need to specify namespace for any types. However if there are name collisions, this might give you the wrong type -- Generic & nested types are fully supported in any combination and with any depth - Nice type formatting robustness was also significantly improved -- Generics, nested types, nullables, arrays and any combinations of these will be properly formatted now - Added encoding/decoding for quantity types, allowing them to be used as values in the data model (based on report by @_deltawolf, @aritosuits and @stiefeljackal, issue #2527) - Added `void` type alias when parsing types - Added Wavelength Color nodes that provide a colorX value corresponding to given wavelength of light (requested by @shdw_x, issue #2406, implemented by @ryuvi and @bluecyro) -- The algorithm implemented to compute the color is based on
Locale:
- Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec
[ 2024-07-11 21:44:02 CET ] [ Original post ]
Hello everyone! I've got a build for you today! I've been trying to get the new type management system done, but it needs more time - maybe tomorrow! However there's a bunch of goodies in this one too! There's new LNL Window Size setting, which helps you control the throughput of the LNL library! If you end up queuing packets in a session, increasing this can help! Be careful though, setting it too high can also make things worse. This is the first phase of improving the LNL library - the goal is for this value to adjust itself automatically in the future, but that requires additional work. This should make things better in the meanwhile. There's been some more efficiency improvements to LNL as well (something I call "packet stuffing"), which help reduce queuing even with the default as well. Not all LNL bridges & relays are spun up for the new version yet - we'll spin them up in the following days and remove the old versions to help with transition. You can now also configure the port range that LNL will use as well! This can be useful if you need to configure your network/firewalls. It can be particularly helpful at university/corporate networks too! There's a number of other fixes and tweaks as well, including @dantetucker's first contribution!
New Features:
- Added "LNL Window Size" setting, which allows controlling the size of LNL window used for networking -- If you begin to experience packet queuing in a session, you can increase this value to improve bandwidth and reduce or eliminate queuing -- The higher you set the value, the higher the chance of destabilizing the connection! Be careful with this. If the situation worsens - e.g. you start queuing even more or voice starts breaking up, lower it back down. -- Changed values will take effect near immediately - you do not need to exit and join the session - Implemented "packet stuffing" into LNL library -- This will pad remaining space in packets to be sent out with reliable packet data if they fit, even beyond the window size -- This helps improve networking efficiency even with default window size and therefore eliminate more cases of packet queuing - Implemented port range support for LNL connections, bridges & relays (implemented by @probableprime) -- This allows restricting the range of ports on which connections will be made -- This helps particularly with corporate/university networks, which need to configure their firewalls -- You can specify this by adding `lnlConfig` to the Config.json file, with `ports` property, which has `min` and `max` - documentation will be on Wiki at some point - Exposed Widen parameter on AvatarRawEyeData (implemented by @ryuvi)
Tweaks:
- Export filenames are now validated, preventing exporting when there are invalid characters (based on report by @chundelac, ko-tengu, yoshiyoshyosh, issue #2286, implemented by @dantetucker) -- RTF tags are now also automaticlaly stripped when dialog is opened - Updated yt-dlp to 2024.07.09 (requested by @azavit and @gawdl3y, issue #2471) -- This should fix instances of videos not loading properly
Locale:
- Merged German locale update by @muppeq - Merged Japanese locale update by @.aesc - Merged Chinese locale update by modimobeikete - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec
Fixes:
- Improved SignalR connectivity when using web proxies (implemented by @probableprime) -- When proxy is enabled, the connectivity automatically switches to LongPolling, due to WebSocket issues when proxy is active -- Fixed SignalR getting inconsistent proxy settings from rest of the API's - Fixed wrong label for common generic types on component selector (reported by @banane9, issue #2486, fixed by @bluecyro) - Fixed ReplaceFirstSubstring throwing exception and causing world crash when index is out of bounds (reported by @ultrawidegamer, issue #1659, fixed by @bluecyro)
[ 2024-07-10 23:32:55 CET ] [ Original post ]
Hello everyone! Sorry for lack of builds recently, I've been busy with travelling, internal stuff, some business stuff and doing some preparatory work on the performance update. Here's a build with a whole bunch of bugfixes and contributions from a number of team members, including @ryuvi's first code contribution! (see each contribution for credit) And also community contribution to an open source library that we use that fixes the scrambled blendshape order from @luxkitty! Thank you so much! There are some changes and improvements for networking, which should help when running Resonite on corporate/university networks. It's probably not too interesting to everyone here, but it helps with some of our other usages!
New Features:
- Added support for announcing all available local IP's for hosted sessions via session API -- This improves direct connectivity within organizational networks, like corporations & universities -- This is automatically enabled when UniverseId is set -- Alternatively this can be forcefully enabled or disabled via Config.json file by adding `announceLocalIPs` bool? entry - Add `disableIntroTutorial` setting to Config.json -- This will ensure that the intro tutorial (the initial setup wizard and intro world) are never loaded - Add `disableCloudHomeAutoLoad` setting to Config.json -- This will forcefully disable automatic loading of the cloud home on login -- This overrides other settings - e.g. even if user has autoload enabled in their personal settings, this will override that
Security:
- Fixed raw files outside of Resonite's database getting cleaned up on import (reported by TheAutopilot, security ticket #292298, fixed by @probableprime)
Tweaks:
- Grab spheres in edit mode are more visible now (requested by @alizardguy, issue #1318, tweaked by @ryuvi) - Added space at the end of moderation warning message (requested by moderation team, implemented by @probableprime)
Locale:
- Merged Polish locale update by @foxobread - Merged Chinese locale update by modimobeikete - Merged French locale update by @j4.lc - Merged German locale update by @muppeq - Merged English locale additions and tweaks by @stiefeljackal -- Note: Part of is for upcoming feature on prerelease branch and won't be visible on main build until the feature itself is merged - Merged Japanese locale tweaks by ginjake
Fixes:
- Fixed Short form ColorX to Hex Code not working correctly (reported by @imerin., issue #384, fixed by @probableprime) - Fixed ChildParentAudioClipPlayer not cleaning up slot events, resulting in a world crash (reported by @marsmaantje and @elektrospy, issue #1420, fixed by @ryuvi) - Fixed connecting to sessions through LNL getting stuck when a network error occurs during the initial connection - Refactored HTTP proxy setup to handle a number of edge cases, causing proxy issues (implemented by @probableprime) - Fixed ChildIndex node throwing an exceception on the RootSlot, resulting in a crash (reported by @art0007i, issue #651, fixed by @bluecyro) -- The node now returns -1 for RootSlot, as it's not a child of any other slots - Fixed regression in Xiexe material blooming more strongly than before with overdriven colors (reported by @epiceaston197, @knackrack, @nepushiro, @shrikealvaron, ko-tengu, issue #2395, fixed by @geenz) -- Additionaly this fixes legacy content that was not re-saved not blooming strongly enough (this part was fixed by myself) - Voice message recording no longer gets interrupted when the laser leaves the button (reported by @troyborg, issue #142, fixed by @ryuvi) - Merged fix for the Assimp library scrambling order of blendshapes on FBX files (reported by @zangooseoo, @gunnar0, @gearbell, @kirvgoldblade, @flamesoulis, @modernballoonie, issue #1106, fixed by @luxkitty) -- PR with fix from @luxkitty for reference:
[ 2024-07-04 22:45:06 CET ] [ Original post ]
Hello everyone! I got a small, but special build for you today - @bluecyro's first contribution! :D This one has just a few bugfixes - I've been busy working on a testing LNL build with manually adjustable window size. I got it mostly working, but I completely broke packet loss computation, so I need to fix that before I push a pre-release. Plus I'll be travelling tomorrow to Vienna for a business trip and need to do a bunch of preparations for it - I won't be back until late Friday, so there might not be any more builds this week. However I didn't want these bugfixes to get held up, so here they are! The build is compatible with previous. However if you don't update, GridTexture will be broken for you with invalid parameters, while it'll work for people with updated builds - this is not really critical, so it's just headsup so you're not confused.
Locale:
- Merged German locale update by @muppeq - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec - Merged Russian locale update by @shadowpanther
Fixes:
- Fixed GridTexture breaking when invalid parameters are entered (reported by @scrapsavage, @shdw_x, issue #2299, fixed by @bluecyro) - Fix data feed views failing to unregister event listeners from the source feed (based on report by @art0007i, issue #2399) -- This fixes feed views breaking when the feed is changed to something else (e.g. null) and then back -- This fixes resource leak and other potential misbehaving when swapping feeds - Fixed VR controls not falling back to turn & move properly when one of the joysticks is set to "Turn Only" and other to "Strafe" (based on report by ko-tengu, @epiceaston197, xavion-lux, @shiftyscales and @stellanora, issue #2309)
[ 2024-06-25 19:21:19 CET ] [ Original post ]
Hello everyone! I'm back and I've got a big update for you! :D There's now a Worlds Data Feed! This data feed provides the currently opened worlds and sessions, with filtering & searching options. This allows to build custom world/session viewers/facets and other stuff. In the future, we'll also add support for enumerating saved/published worlds to this feed, so this will be used to rework the World UI. In order to support this, the general data feed mechanisms got improved and expanded! They support updating items now (e.g. if you have interfaces, it will automatically update everything with new data - e.g. when a world name/thumbnail/user count/etc changes) and the add/update/remove events support search parameter now. We now also have a new Translator badge for everyone who's been helping translate Resonite into other languages and make it more accessible! There's lots of other updates too! Plenty of bugfixes by @probableprime and merged shader update by @geenz, which should fix a number of issues with materials/shaders! Also please note that SSL 3, TLS 1.0 and TLS 1.1 protocols have been deprecated in this build! We haven't found any issues in pre-release testing. Generally it's recommended to not use those protocols anymore, because they have severe security issues. If you have an issue and you can't switch to a newer one easily, let us know and we'll have a look at what we can do.
New Features:
- Added Worlds Data Feed (requested by myself (@frooxius) and content team, issue #2300) -- This provides a feed of all found sessions and opened worlds -- This fully supports events - any data feed items will be added/updated/removed appropriatelly as the world/session info changes -- This also supports searching, with simple syntax of `+` for required terms (all must appear) and `-` for excluded terms (none can appear) and plain for optional terms (any of them will make item appear) -- A number of filtering options are available: Headless/User hosts, Minimum Total Users/Contacts (for sessions), Min/Max session access level, Min/Max uptime (in seconds) -- Found entries can be merged by world ID or session ID - any worlds & sessions with same world or session ID (in this order) will be merged into a single feed item when those merging options are enabled -- This can be used to build custom session viewers or facet to show active worlds and so on -- Note that any non-public sessions (and any world data) will only be accessible in Userspace or Unsafe worlds for security/privacy reasons -- In the future, this will fully replace the WorldListManager, once we have more data feed views and support for published/uploaded world listing is added - Added MergedWorldDataItemInterface -- This provides interface for data feed items from the WorldsDataFeed -- This provides data on the aggregate information about the given worlds/sessions -- This also provides a data on the individual sessions & locally opened worlds through "subfeeds" -- Subfeeds allow you to specify template (same as main data feed) and root - it will automatically manage the items for you (add/update/remove) as the information is updated -- Each subfeed allow you to configure limit of items you want to show (including 0, which will not generate the items). This limit can be adjusted dynamically - e.g. from 0 to max value, when you want to actually generate the templates - the last data is cached and the items will be generated immediatelly from the template - Added SessionInfoItemInterface -- This provides interface for the SessionInfo data feed items (currently only available through the subfeed on MergedWorldDataItemInterface) - Added WorldItemInterface -- This provides interface for World data feed items (meaning currently opened worlds, similarly this is only available through the subfeed on MergedWorldDataItemInterface at the moment) -- If you're missing some information about the world that you'd like exposed through this, let us know (through a GitHub issue) and we can look if it's possible to add! - Data Feed events are now "search phrase" aware -- This means that when search phrase is active, any added/updated/removed items are properly filtered based on the current search phrase -- This fixes WorldUsersFeed adding newly joined users that do not match the current search phrase - Added mechanism which allows data feeds to have persistent data for each view -- This allows implementation of new complex features and efficient caching (e.g. for the merging support for the Worlds Data Feed) - Added support for updating data feed items with updated data - any generated items will automatically be updated with new data through the same interface (there's no need to make any changes, unless you have mechanism that removes the feed item interface) - Added a number of activation modes to BooleanSwitcher to provide more flexibility (based on request by @mpmxyz, issue #2269) -- AtIndexOnly (this is the original mode, activates item only at the index) -- AllButIndex (the item at index is deactivated) -- IndexAndBefore (all items all the way to the index are activated) -- IndexAndAfter (all items at index and after it are activated) - Added Translator badge (requested by modimobeikete, issue #1814, badge created by @chromashiba) -- If you've been contributing translations and gotten reward space for it, you should get the badge automatically within next few hours -- If you don't have one, please make an Issue at the Locale repo and we'll try to get to it as soon as possible! - Added `debugWorldState` command to headless, which prints out debugging info for state of all worlds (this is to help diagnose issue reported by @j4.lc, @readun, @hikari_akimori, @ink_25, issue #685) -- If the session freezes your headless, type this command and save the output. Then type it again a few seconds later and save the output again.
Tweaks:
- `.cc` extension is now recognized as a text file on import (requested by RobertBaruch, issue #1030, implemented by @probableprime)
Security:
- Fixed user invisible status leaking when signing out (reported by @989onan via security ticket #788915) - Added moderation tool for sending warnings to users (requested by @veercollie internally, implemented by @probableprime) -- This can be used by any moderators to issue official warnings -- There is built-in audit, which informs moderation leads when warnings are issued to prevent any potential abuse of this command - SSL 3, TLS 1.0 and TLS 1.1 protocols have been now deprecated (implemented by @geenz) -- If you run into issues with this, please let us know ASAP and we can revert this. However please note that this will eventually go away completely anyway, because in modern versions of .NET these protocols are not supported at all. You should upgrade to latest TLS, since these older versions have severe security issues
Locale:
- Merged migrated Metric/Imperial locale strings for all languages from the legacy strings by @stiefeljackal - Merged missign English keys for inspector texture (fixed by @stiefeljackal) - Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc and @zozokasu - Merged French locale update by @j4.lc - Merged British English locale update by @paradoxical_autumn
Fixes:
- Light Tool "Change Color" context menu item now uses the locale key (reported by @namminamm, issue #483, fixed by @probableprime) - Fixed spelling in Impulse Receiver Nodes (reported by @banane9, issue #1096, fixed by @probableprime) - Fixed multiply string node having + symbol instead of x (reported by @luxkitty, issue #194, fixed by @probableprime) - Fixed import dialog appearing to the side of the user while in desktop mode and the window is not focused (reported by @luxkitty, issue #1929, fixed by @probableprime) - Fixed ButtonValueShift ignoring MaxIsExclusive (reported by @mpmxyz, issue #1435, fixed by @probableprime) - Fixed OpenGL base texture format not being set correctly on Linux (reported by iamgreaser, @s3rgal, @rcelyte, issue #69 (nice) fixed by @geenz) - Fix RootCategoryView not unregistering event listeners when destroyed -- This fixes memory/resource leak - Fixed "Sad" face tracking shape now being detected as "Angry" (reported by @shiftyscales, @nordic, @cataena, @felixq., @flamesoulis, Lxw404, @modernballoonie, issue #2343) - Fixed migrated content using Fresnel Unlit not appearing as expected (reported by @kulza, issue #40, fixed by @geenz) - Fixed PBS_ColorMask not applying EmissiveMap to EmissiveColor channels (reported by @towneh, issue #158, fixed by @geenz) - Fixed Reflection material being broken with normal maps (reported by @maksim789456, issue #174, fixed by @geenz) - Fixed Matcap materials breaking with normals maps (reported by @luxkitty, issue #200, fixed by @geenz) - Fixed NormalScale not affecting fresnel material (reported by @luxkitty, issue #1117, fixed by @geenz) - Fixed FresnelLerp material not working when PolarUV's are enabled (reported by @art0007i, issue #1581, fixed by @geenz)
Obsolete:
- Obsoleted SessionsOrbsController -- This will eventually be removed completely, with more generic replacements made using the new WorldsDataFeed -- If there are generic things needed to build replacements or missing, let us know (make feature requests) - Obsoleted WorldListManager -- Note that this will still exist at least until some time after WorldsDataFeed gets ability to also list Records (search published worlds), which would bring it to full feature parity -- We are marking this as obsolete now to indicate that we have plans to remove it eventually -- If you are building content that needs only opened worlds / sessions, you should use the new WorldsDataFeed and port any existing solutions to this to prepare
Removals:
- Removed DebugSceneHierachyFeed
[ 2024-06-24 22:33:51 CET ] [ Original post ]
Hello everyone! Recently we held a two week long survey to help determine our next major development priority for Resonite. We were unsure whether to prioritize IK rework or Performance improvement first, as we received messages, comments and anecdotes about both. Our goal was to gather more solid data and let you, the community, be the deciding factor.
What's the next priority?
Based on the results from the survey, our next major development priority will be SIGNIFICANT PERFORMANCE IMPROVEMENTS!
Survey Data
The support for performance was overwhelming. We have received 2579 responses in total. For 72 % of users, performance is the hardest thing preventing them from enjoying Resonite, while IK is 12 %. 67 % of responses indicated that improving performance alone would make them play Resonite more, while 11 % would play more with IK being improved alone. You can see more of the data on our Wiki here: https://wiki.resonite.com/May_2024_survey We also went over these results in our latest recap stream: [previewyoutube=Cg2TgK6wUb0;full][/previewyoutube]
Next Steps
Following this, we started organizing performance related issues into a project board on our GitHub here: https://github.com/orgs/Yellow-Dog-Man/projects/29 This is not an exhaustive list! In the first part, we'll be doing some research and benchmarking, to figure the best way forward. We'll keep you updated on the progress on our socials and in the devlog channel and we'll release any incremental improvements when we can.
FAQ
Also to clear some misconceptions, here are some common questions we got:
- Does this mean work on IK is cancelled? - No. It just means we're not doing it right now, but we'll pick it up later
- Will all the work be performance only? - No. Performance will be our major focus - the biggest task we're currently working on, but we'll still make smaller updates, improvements and additions along the way.
- How will the performance improvements be measured? - Our primary goal is to increase the overall framerate and reduce stutters and lag spikes as much as possible. Our broad goal is to make Resonite feel better and smoother to use, rather than focus on any specific metric - that said we'll be using a range of tools to profile and benchmark as we work.
- How will performance be optimized? - We'll determine that based on the research and benchmarking. Currently based on past tests we are most strongly leaning towards switch to process based architecture and use of modern .NET runtime, which has much higher quality codegen, high performance features and much better garbage collector, but this is subject to change.
- Will there be test builds? - For major changes yes, we'll announce and run public testing.
- Why not just do both at same time? - Splitting our focus between two major tasks makes both of them take longer as a result. We get things done faster if we focus on one first, then the other.
- Where can I ask more questions? - Here: https://github.com/Yellow-Dog-Man/Resonite-Issues/discussions/2346 or at our office hours!
[ 2024-06-16 01:05:19 CET ] [ Original post ]
Fixing a security issue with the export dialog. This affects the Resonite Packages, but it's actually a more general issue that's been there for a while that only just got reported, technically affecting all kinds of exports (textures, models, audio...) Compatible with previous build, but update recommended!
Security:
- Export dialog will now re-verify permissions for export when actual export is triggered -- This fixes an exploit, where export dialog can be redirected to a different object to bypass security checks (like SimpleAvatarProtection) (reported by @glavingkya, security ticket #927658)
[ 2024-06-11 01:27:55 CET ] [ Original post ]
Introducing Resonite Package format! You can now export and import any items from Resonite to a standalone package format, which includes everything needed for that item without any reliance on the cloud. This can be useful for distributing fully setup Resonite items and avatars outside of Resonite (e.g. on Gumroad or Discord) and making it very easy for users to bring these packages in - just drag & drop them like any other file and they'll import right away. If the avatar is setup with SimpleAvatarProtection, it will be automatically remapped to the importing user too, so the avatars can be setup with full protection from the get go. There are two main options for making the package - default and with variants (the +Variants option). Including variants will result in a bigger package, but make the imported item show up much faster - without them user has to calculate the variants on import. You can also use this feature for local backups if you want to as well! There's a bunch of bugfixes (most of them relating to the export dialog) too. I hope this feature is useful to you and creators and opens up some cool new options for distributing content on Resonite!
New Features:
- Implemented `.ResonitePackage` format for exporting items from Resonite to local file and importing back (requested by Narazaka, @akiram_, @jackthefoxotter, ko-tengu, bdunderscore, gameboyjcp, @lill.la, @spexcat, @stellanora, @marsmaantje, @hazre, kisaragiEffective, djsime1, @fuzzyfoxe , issue #950) -- You can export any item through the file browser, which will now offer Resonite Package as export format -- This format exports/imports the object 1:1 (except the exact asset URL's) to show it is in Resonite without any reliance on the cloud. This includes all necessary assets and components (including ProtoFlux) -- This format can be used for distributing items/avatars independently from the cloud, with everything needed in the package -- You can also use this format if you want local backups of your items -- You can export the package with all variants included - this will make a bigger package, but also the imported object will load much faster. Without the variants the user will have to compute them locally on import, which can take significant amount of time -- Note that exporting worlds through world orbs is not supported right now. This can be added if there's interest, but requires more work - Add OnPackageImported event node (under Flow/Events) -- This will fire when the object is imported from a Resonite Package -- This lets you do any custom setup and actions when user imports a package - SimpleAvatarProtection is now Resonite Package aware and will remap itself to the user who imported the package -- This lets you setup avatars with full protection on and have this protection be automatically applied to given user -- If you don't want this behavior, you can uncheck the new ReassignUserOnPackageImport property -- Generally if you want to use this for backup purposes, make sure the not share the package file with anyone. Even if the checkbox is unchecked, the package contains all the raw files, which can be easy to extract for users
Security:
- Worlds can be started with Unsafe mode on only from dialogs in the Userspace (based on security report by TheAutopilot, ticket #409776, fixed by @probableprime)
Tweaks:
- Export dialog now updates the extension based on the selected option - Improve audio & video exportable strings in the export dialog - Picarto.tv is now recognized as video stream when importing (requested by @hafaeith, issue #1543)
Locale:
- Merged Korean locale update by @mirpasec - Merged French locale update by @j4.lc - Merged Chinese locale update by modimobeikete - Merged German locale update by @muppeq - Merged Finnish locale update by @airride91 - Merged Japanese locale update by @.aesc - Merged Russian locale update by @shadowpanther
Bugfixes:
- Fix exporting items by grabbing and holding them exporting empty objects -- If there are multiple exportables of the same type within the object, they will not be offered to export - make sure to only grab a single item -- If you grab multiple separate items, export option won't be offered - make sure to only grab one item - Fix asset variants not being found in some cases due to the base URL including an extension - Fix export dialog UI generating duplicated options when there are multiple exportables - Fixed crash when using ValueConstantLerp and supplying any input with NaN (based on security report by @chameleono2, ticket #734466, fixed by @probableprime) -- ValueConstantLerp now propagates NaN to the output when any input is supplied with NaN values. However it will resume normal operation once given normal inputs again
[ 2024-06-11 00:02:19 CET ] [ Original post ]
Hotfix for some people having login issues and the dash not initializing properly. Compatible with previous, if you're not affected by this bug, you don't need to update right away.
Bugfixes:
- Fix Workspaces not initializing after failed auto-login, resulting in UI's not loading (reported by coolymike, @energymaster , @whippersnatchpumpkinpatch, @fennboii, issue #2239) - Ensure that auto-login token gets cleared out when the login fails (based on report by coolymike, @energymaster , @whippersnatchpumpkinpatch, @fennboii, issue #2239)
[ 2024-06-05 18:20:07 CET ] [ Original post ]
I focused on a whole bunch of improvements with a general quality of life in this build! You can now configure your online status persistence! The sociable status can be configured better too. Earmuff has some improvements - the base shape is now a sphere sector instead of cone, which will stop users from becoming a bit louder first when you move your head away. There's new image import preset "Sprite" which will automatically clear out white fringes and improvement to how Pixel Art imports too. The startup has been optimized a bit too when you're being auto-logged in, skipping a bunch of unnecessary work, so it should be a little bit snappier. A whole bunch of other things have been fixed too and there were improvements to security/privacy as well. Hope you enjoy this build!
New Features:
- Add online status settings (based on feedback by @shiftyscales, @exothewicker, @azavit, @jackthefoxotter, @zyzylian, issue #2191) -- You can configure how will your last online status will be remembered - always, if recent (with configurable amount of time) and never -- Invisible status has its own separate settings, allowing you to reset your online status on next login, unless it was set to Invisible for example -- You can specify which online status should be your default when it's not remembered -- You can also configure auto away interval - how long it takes before you're automatically switched to away due to inactivity - Add CompoundOverrideNames & CompoundUseLongNames to data feed quantity elements and appropriate interfaces - Add new Sprite image import preset (based on previous feedback by GreaseMonkey, @medravr and @rucio, issue #1570) -- This automatically runs the BleedColorToAlpha on imported images, which will remove white fringes around edges - Add ClosestPointOnSphericalSectorSurface node under Math / Geometry 3D -- This computes point on a surface of spherical sector that's closest to given other point -- It also provide if the point is inside or not - Add DistanceFromSphericalSector node under Math / Geometry 3D -- This computes the closest distance from a point to a spherical sector
Security:
- Session thumbnails are now invalidated when session accessibilty increases (e.g. from Private to Contacts or from Hidden to non-Hidden) (based on security report by @.froppy., @rabbuttz and moderation team, issue #2227)
Optimizations:
- Workspaces will not run the default initialization when the user is being auto logged in -- This reduces CPU/memory/network usage at startup, due to loading the default versions of all the facets, only to be replaced shortly after by user's own saved version
Tweaks:
- Switch sociable notification configuration from boolean to full configuration (full, toast only, audio only or off) (based on request by @azavit, @lecloutpanda, @whippersnatchpumpkinpatch, @thebasementnerd, @karasutengu, @hazre, @shrikealvaron, @modernballoonie, win189, issue #2189) -- If you disabled the notifications altogether, you'll need to reconfigure this (sorry) - Multiplying string by 0 now outputs empty string, rather than the string itself (based on feedback by @art0007i, issue #2027) -- If you have setup/content that relies on the old behavior, please make an issue and we'll add update mechanism - Change how UserAssetLoadProgress calculates aggregate info, to instead use all the users in the session, rather than ones who have already reported on the progress -- This fixes the state not being reported correctly at some times, especially immediatelly after spawning the asset (reported by @_deltawolf, issue #976) - PixelArt preset when importing images will now import images as uncompressed and without distortion (based on request by @code807, @lecloutpanda, @virgilcore, issue #986) - Rework Earmuff to use sphere sector instead of a cone (based on feedback by @shadowpanther, issue #1944) -- This fixes users getting slightly louder when looking slightly away from them, when they're at the edge of distance
Locale:
- Merged French locale update from @j4.lc - Merged German locale update from @muppeq - Merged Chinese locale update from modimobeikete - Merged Russian locale update from @shadowpanther - Merged Korean locale update from @mirpasec
Bugfixes:
- Fix contacts with unread messages not getting sorted to the top in some cases (reported by @lecloutpanda, @knackrack, @epiceaston197, @stawz, @kulza, issue #2182) - Fix bounds becoming infinitely sized after encapsulating an empty bounding box (reported by @zyzylian, issue #2090) - Setting AudioOutput to invalid audio type group will now result in the audio output being inaudible, rather than bypassing all volumes (reported by @sloppymcfloppy, @shdw_x, issue #2014) - Fix not being able to remove contacts that have not migrated (reported by @drshadowfish, bobcatkill, @j4.lc and @flamesoulis, issue #1371) - Fixed laser hovering at edge of view facet anchor when editing causing rapid strobing (reported by @shiftyscales) - Restructure Userspace bootstrap with async method -- This fixes user sometimes being logged in local home and having their avatar loaded (reported by @epiceaston197, issue #2071) -- This also ensures that when the user is automatically logged in, this is indicated as early as possible to other systems
[ 2024-06-05 03:30:30 CET ] [ Original post ]
Some more tweaks and fixes to the notifications to reduce the spaminess! Compatible with previous build.
Tweaks:
- Suppress Online/Sociable notifications shortly after logging in to prevent the initial notification spam
Locale:
- Merged Korean locale update from @mirpasec - Merged Chinese locale update from modimobeikete
Bugfixes:
- Fix online notifications not being properly filtered, resulting in "Online" notification spam (based on report by @.froppy., @_deltawolf, @badhaloninja, issue #2178)
[ 2024-05-31 03:29:38 CET ] [ Original post ]
Ooops, turns out that the timeout condition for the notification spam has been inverted! This build fixes that, sorry! What's interesting is that it's been inverted for the normal "Online" notifications too, but it went un-noticed until now, which means that Online notifications were incorrectly supressed in a lot of cases. Compatible with previous build. If you don't update, your notifications will still be spammable. For anyone spamming the changes though - please stop. Doing so can also get you rate limited by the cloud, so you might experience degraded service as a result.
Bugfixes:
- Fixed inverted condition for user online & sociable notifications, resulting in possible notification spam
[ 2024-05-31 01:19:58 CET ] [ Original post ]
A smaller build today again, I was working on some administrative stuff and some stuff that's longer (working some more on the LNL library!), but there's some goodies! There's new Sociable status! If you want to indicate to users you want to be poked and invited, just switch to this status! This should make it easier when people are hanging in hidden or private worlds and you don't want to send everyone a poke. If you don't like to receive those notifications, you can disable that too in settings! There's more privacy settings too! And some quality of life fixes and tweaks.
New Features:
- Added new "Sociable" online status (based on request by Cometstreak, @azavit, issue #909) -- When you switch to this status, all your contacts will receive an audible notification that you are sociable, with a prompt to poke or invite you -- If you do not like to receive this notification, it can be disabled in Settings -> User Interface -> Notifications. Disabling the setting will treat "Sociable" no different than "Online" for notification purposes - Added privacy setting that will strip EXIF data from images on import (implemented by @probableprime, issue #2015) - Add Thai font to the font chain to support Thai language
Tweaks:
- Lower offset factor/units values on UI ZWrite material to prevent graphical artifacts (based on feedback by @euphieeuphoria, gameboycjp, @rustybot, TisFoolish, @ohzee, issue #2141) - AllowedURLHosts configuration for headless now also allows OSC connections (based on feedback by djsime1, issue #2158) -- To allow OSC Receiver on given port, the host must be "localhost" - Mark workspaces as modified when a template facet gets loaded, to ensure that the load/upgrade doesn't need to run on every single startup -- This should generally speed up loading of facets
Locale:
- Merged English locale fixes by @airride91 - Merged Russian locale update by @shadowpanther - Merged Japanese locale update by @.aesc - Merged Chinese locale update by modimobeikete - Merged initial Thai locale by @xhayper
Bugfixes:
- Fixed "Save To Inventory" showing "You must be logged in to save items" when it shouldn't (reported by @moonbase__, issue #2160, fixed by @probableprime) - Fixed laser sticking to random points on passthrough interaction targets -- This fixes laser having lingering collisions on the view facets (reported by @shadowpanther, issue #2153)
[ 2024-05-31 00:48:31 CET ] [ Original post ]
Smaller build today, but it has some important bugfixes and improvements. There's improvement to locomotion controls - you can separately control deadzones for movement & turning and you can switch joysticks to be used only for turning and no movement. This should make the controls more familiar to players coming from other platforms and games. The bug with people randomly appearing offline *should* also be gone, but we'll need to see. The bug with the dash screens randomly becoming blank is also fixed now! The "Save to inventory" now indicates when you can't save and the avatar creator tells you why you can't protect avatar in Local, which should help reduce some confusion!
New Features:
- Add TurnOnly mode for left/right controller movement (based on feedback by @trotim, issue #1769 and @gawdl3y, issue #2114) -- This will make the joystick only cause turning and no forward/backward motion -- The original "Turn" mode is now "TurnAndMove" -- TurnOnly is now the new default for new users - Split deadzone setting between movement deadzone & turning deadzone (based on feedback by @trotim, issue #1769 and @gawdl3y, issue #2114) -- This allows you to set turning deadzone higher than movement, to prevent accidental turning when turning and moving on the same joystick - ValueReceiver now has TryConvertValues (default on), which will try to convert incompatible values to the target type of possible (requested by @art0007i, issue #561) -- E.g. if the target value is float and the input is string, it will try to parse it or if the input value is int, it will convert it to float
Tweaks:
- Switch SteamLink OSC driver to use non-typoed version of the parameter for tongue out (reported by @hazre, issue #2100) -- There's no functional change, the typo is actually in the source data coming from SteamLink - Added note on why "Protect Avatar" cannot be used in Local home (implemented by @probableprime) - "Save to inventory" context menu option now provides reason when item can't be currently saved (based on feedback by @atakku, @_deltawolf, @cameron5, TisFoolish, @ohzee, issue #10, implemented by @probableprime)
Locale:
- Merged German locale update by @muppeq - Merged Russian locale update by @shadowpanther
Bugfixes:
- Add delay before clearing user's online status on disconnect to prevent users from appearing offline when they lose connection to SignalR temporarily (based on report by @pyroboy, @nexustwg, Drazion, @rawpie, @its_sox, @989onan, @liny_fox (), @nytra, @flamesoulis, @skywind.kitsune, @shadowpanther, @zahndy, issue #739) - Fixed freshly initialized dash screens (e.g. after using -ResetDash) that were never activated, but ended up saved, becoming blank (reported by @orange3134, @konshu, arcanus2112, AxelTheAvali, @stiefeljackal, @gearbell, @zahndy, issue #466) - When facets loaded from presets fail to load, try load them again on the next startup to prevent them from getting stuck
[ 2024-05-30 01:17:44 CET ] [ Original post ]
A quick hotfix to some inspector buttons being broken, sorry! Compatible with current. Host will need to update for this to be fixed.
Locale:
- Merged French locale update by @j4.lc - Merged Japanese locale update by @.aesc - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete
Bugfixes:
- Fixed regression where buttons in lists would not be clickable (reported by ko-tengu and @ryuvi, issues #2139 and #2140)
[ 2024-05-29 02:15:55 CET ] [ Original post ]
Today's been focused on a bunch of small improvements and fixes, both for the new facet anchors and some other stuff! You can now switch which hand toggles the facet anchors and which one triggers dash! You can control visibility of individual facet anchors from your avatar too to build your own systems to toggle them on and off! You can now also bake individual blendshapes or even split blendshapes to left/right on meshes! And the button to find/break drives is now on lists too! [previewyoutube=Sc0b9huIwh4;full][/previewyoutube]
New Features:
- Add OverrideState to AvatarFacetAnchor, which allows overriding the active state of given facet anchor from the avatar (requested by @_amplified_, lxw404, issue #2125) - Added option to swap which controller (left or right) toggles facet anchors and which toggles the dash (requested by @imerin., @waya, issue #2118) - Add AreAppFacetsOpened node, which indicates of the user has facet anchors opened -- This only indicates the global open / close - the individual overriden state is not indicated through this - Add ability to bake/remove individual blendshapes through the extra action button in the inspector on a SkinnedMeshRenderer (requested by @fukuro8232, issue #1644) -- This can also be invoked from ProtoFlux - Add ability to split individual blendshapes symmetrically across an axis (X, Y, Z) on SkinnedMeshRenderer -- You can use this to split blendshapes that apply across the mesh to ones that only affect Left or Right -- E.g. if avatar has single blendshape for certain expressions, you can make them single-sided using this function -- Invoking this from the inspector assumes that the mesh in its default pose is perfectly centered on the axis -- This method can also be called with ProtoFlux, which allows controlling the offset and transition range
Tweaks:
- Changed the OffsetFactor/Units for UI materials based on community feedback to prevent ZFighting on UI's when further away from the origin (based on feedback by @epiceaston197, @shiftyscales, @lexevo, @banane9, @bluecyro and @ohzee, issue #1292) - Contact session notifications will no longer show sessions started by contacts that haven't accepted the contact request (reported by @epiceaston197 and @banane9, issue #2031) - Rework list editors to use the same code for generating labels as root items -- This fixes list items (including blendshapes) not having buttons for extra operations & value copying (reported by @scarstrf, issue #639) - Developer tool will now better reject gizmos when selecting items to prevent them from being selected accidentally (based on report by @emergencytemporalshift, issue #1460) - View facet anchors no longer take laser priority (based on report by @shiftyscales, issue #2129)
Locale:
- Merged Japanese locale update by @.aesc - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete - Merged French locale update by @j4.lc - Merged German locale update by @muppeq
Bugfixes:
- Fixed ReferenceDrive attempting to drive non-local references with local targets, resulting in a crash (reported by @lill.la, @liny_fox ( ), @banane9, @zyzylian, @nytra, issue #712) - Fix facet anchors being active in desktop mode when they shouldn't
[ 2024-05-29 00:42:33 CET ] [ Original post ]
Hello everyone! I'm very excited with this update, as I've finally implemented something that I wanted to do for a while - a sort of "cherry on top" of the Setting UI rework and other things - Avatar Facet Anchors! What this means is that you can place facets (which includes any individual settings from the new Setting UI!) on your hands and your viewport for quick access! This way you can customize your UI experience so you don't need to rummage through the dash for things you use often! As we rework more UI's into modular facet pieces, the power of this feature will grow even more! There's a bunch of other nice things and improvements, both related and unrelated. Anyway, I hope you enjoy this! [previewyoutube=XmvXq9NaQKs;full][/previewyoutube]
New Features:
- Added Facet Anchors on avatar (hands & forearms) & viewport -- This can be enabled in Settings under User Interface -- When enabled, pressing the App button on the right controller will show/hide the on avatar facet anchors -- This provides a number of additional spaces to place facets for quick access to UI, without needing to open the entire Dash - Added AvatarFacetAnchor (under Users/Common Avatar System) -- This lets you customize positioning of facet anchors on each avatar -- When the component isn't present, default positioning is used -- All full body avatars are automatically instrumented with the anchors for hands and forearms - Facet anchors are always a laser priority -- This prevents them from being occluded by the avatar colliders - Add UserspaceLaserPriority component -- When added on a laser target that's in userspace, this will force that target to be a priority - the laser won't be blocked by any colliders in world - Added setting for legacy inventory/session gesture (requested by @art0007i, issue #1796) -- Default is off, so if you want these to work, you need to re-enable it manually -- Note that since these are legacy gestures, they will be removed completely at some point - Add UI Edit Mode toggle to the settings (under User Interface) (requested by @epiceaston197, @zyro1331, issue #290) - Added "Set Values" to DataPreset in inspector UI (requested by @_amplified_, issue #1338, implemented by @probableprime)
Tweaks:
- Grabbing UIGrabbable elements is now NestedCanvas aware -- This means you can now grab UI elements that are part of nested canvases -- This fixes the individual setting facets not being grabbable (reported by @stiefeljackal and @jackthefoxotter, issue #1706) - Canvas laser pass through is now aware of nested canvases and will block the laser appropriatelly - Avatar equip option is now shown when the avatar is held in addition to clicking on it (requested by @epiceaston197 , issue #2111) - UserInterfaceEditModeSync now respects the Enabled status -- When disabled, the value will always be false - this can be used to disable anything that reacts to the Edit mode state - Settings UI facet grid is no longer editable by default -- This prevents accidentally grabbing and removing settings -- This allows setting facets being grabbed from the settings -- If you want to replace the settings with custom ones, you can temporarily enable editability under User Interface -> Dash Settings - Allow Replacing Settings
Locale:
- Merged Japanese locale update by @.aesc - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec
Security:
- Uninitialized enders will no longer grab world focus, preventing them from locking user into a world (reported via security ticket by kaylie, fixed by @probableprime)
[ 2024-05-28 01:46:11 CET ] [ Original post ]
A quick hotfix for an issue that popped up, sorry! Compatible with current build.
Bugfixes:
- Fix exception when processing strings with sprite glyphs, for which the font set isn't initialized yet or when the sprite glyph cannot be found yet -- This fixes the Users tab on Session menu breaking (reported by @shininghero, issue #2081)
[ 2024-05-24 03:32:29 CET ] [ Original post ]
Hello everyone! I'm still recovering a bit, so I went through some smaller funner things today. So here's a few small cool things! Oh I also managed to fix the freezing thing when connecting/disconnecting audio!
New Features:
- Add ability to tint sprite glyphs (requested by @_deltawolf, issue #1469) -- You can mark sprites to be globally tintable on DynamicSpriteFont, by checking "Tintable" on each glyph -- You can also override tinting behavior using "tint=true/false" syntax for the sprite tag - Add BooleanUserOverrideGather (requested by @jackthefoxotter, issue #1014) -- This functions like normal ValueUserOverride
Tweaks:
- Parameter parsing for RTF tags is now more robust and able to skip starting & ending whitespaces - Add mechanism that inherits setting values from the machine settings when the setting first initializes for a logged in user -- Some setting types are excluded from this - notably host access & bans -- This fixes new user settings set in the intro wizard not persisting after user registers account (reported by @zbossgamer, issue #1951)
Locale:
- Merged Korean locale update by @mirpasec - Merged Russian locale update by @shadowpanther - Merged German locale update by @muppeq - Merged Japanese locale update by @.aesc - Merged Chinese locale update by modimobeikete
Bugfixes:
- Fix a deadlock when re-scanning audio devices on change, resulting in random freeze when audio devices are connected or disconnected (reported by @mrkbx, @shiftyscales, @ohzee, niddey, @dustysprinkles, dragos240, @inucune, issue #1739)
[ 2024-05-23 23:53:48 CET ] [ Original post ]
Hello everyone! This is more of a "personal" update, since I've been sick with COVID for past several days >///> I decided to pick up a thing I wanted to do for a good bit, adding the native face & eye tracking support for Quest Pro since I have it with me right now. This builds integrates the Quest Pro face tracking into our general face & eye tracking system. Since it supports more parameters, the general system has been expanded with new expressions and capabilities! If you got avatar setup already, it'll work out of the box, since most got mapped to the existing parameters. But there's also whole bunch of new ones too. If you're using Vive Pro Eye + Vive Face tracker, the system will also optionally estimate some of them for you as well - you're given some new controls to determine if certain expressions should be estimated or not. Anyway I hope you'll enjoy this update regardless, there will be more cool stuff coming soon! :3
New Features:
- Added native support for Quest Pro eye & face tracking over SteamLink OSC -- It should work out of the box as long as it's enabled in SteamVR -- You can select which port to receive data on (9000 or 9015) in Settings under Devices - Expanded generalized face & eye tracking support with new parameters (available on AvatarExpressionDriver) -- Mouth Dimple (left & right) -- Cheek Raise -- Lip Overturn (Funnel) has been split between left & right -- Lip Overlay / Underlay (suck in) has been split between left & right -- Lip Stretch / Tighten -- Lips press -- Pout (pucker) has been split between left & right -- Nose Wrinkle (snarl) -- Chin Raise (bottom and top) -- Eyebrow vertical offset for inner & outer side - Eye tracking system is now aware of whether pupil tracking is supported or not -- For eye tracking hardware that does not support pupil tracking (e.g. Quest Pro), EyeManager will automatically simulate it as normal -- If you're accessing the raw data, the value will be less than 0 (-1) - Face tracking system now communicates which sets of parameters it tracks -- This ensures that data streams are setup only for the ones that are needed -- AvatarExpression driver will try to estimate parameters that are not tracked when enabled - Added EstimateIfNotTracked to expression drivers on AvatarExpressionDriver -- Disabling this will not drive given expression if it's not directly tracked -- Note that some expressions are never directly tracked at the moment, so they will never be driven if you disable this
Tweaks:
- SRAnipal will not be automatically started when running over SteamLink
Locale:
- Merged Japanese locale update by @.aesc - Merged German locale update by @muppeq - Merged French locale update by @j4.lc - Merged Russian locale update by @shadowpanther - Merged English locale fix by @_deltawolf and @muppeq - Merged Finnish locale update by @airride91 - Merged Chinese locale update by modimobeikete
[ 2024-05-22 21:21:56 CET ] [ Original post ]
With the Settings UI update implemented, we are now considering what is the next major project for Resonite. Our original plan was to rework the IK system, but after re-evaluating the current state of the platform, we feel that we might consider another goal: major performance improvements. Wed like to ask you, the community - both new, old, both regulars and everyone watching Resonite from afar - what is most important to you, to help us make the decision on the path forward. We will keep this survey open until June 4th, because we want to give you enough time to read through it, digest it, discuss it with your friends and community before submitting answers. We will send a reminder two days before it closes. Our current focus is on smaller bug fixes and additions. We will give you, the community, sufficient time to provide feedback before making a decision on which of these major updates will happen first and which one will be done after that.
View the survey
You can find more details on what would each priority entail in the survey itself as well as number of questions. https://files.yellowdogman.com/apps/forms/embed/z8YB9CNpEZYSaTxDBm6i6zEf
Before you fill it out
If you'd like to ask us any questions about the priorities before you answer, we created a GitHub discussion here. https://github.com/Yellow-Dog-Man/Resonite-Issues/discussions/2066 You can also discuss it here on Discord, but we might not check this as often as the GitHub discussion: Next Development Priority Thread Anyway, thanks all for now! Thank you for your time reading this and filling it out, it will help us a lot to know where it's best to direct our focus to make most impact and help this platform grow and make it more enjoyable!
[ 2024-05-21 20:07:48 CET ] [ Original post ]
Hello! Just a few smaller things from me today + a batch of cool stuff from @probableprime I've been a bit dizzy through most of today, so I decided to tackle some smaller additions and fixes. This week might be a weaker on updates (and following that there will none for a bit), because I'll be travelling to the US at the end of the week and I'm preparing stuff!
New Features:
- Added Discord integration settings (implemented by @probableprime, issue #1738) -- This currently allows controlling level of rich presence data shared - Added Steam integration settings (implemented by @probableprime, issue #1738) -- This allows controlling the levle of rich presence data shared -- You can also toggle if you want in-game screenshots to be shared with Steam or not - Added TeleportBlock component which prevents teleporting onto objects tagged with it (requested by @pollygeist, implemented by @probableprime, issue #1921) - Added mechanism to manually register GigglePucks & always treat them as connected even if they're not detected on the network (based on report by @ryuvi, issue #1839 and request by @me_sideways) - Add MinSize on StaticTexture2D which allow specifying the minimum size that the texture should be at (based on request by @gareth48, @shrikealvaron, @dustysprinkles, @flamesoulisand @spexcat, issue #1979) -- This size overrides user's minimum texture setting -- IMPORTANT: This is only for cases when it's absolutely necessary for the texture to be at this resolution - e.g. textures that encode data for ProtoFlux or when the texture would result in ineligible text that's important. You SHOULD NOT use otherwise - let the users choose their level of detail when they can -- The loaded size will never be larger than the original texture. You can specify large number to ensure it's always at original resolution - Add setting for auto-loading cloud home on start in the Profile section (requested by @shrikealvaron, issue #1986) - Added internal command for granting storage awards from competitions and other events (implemented by @probableprime)
Tweaks:
- Added warning to the account website about missing functionality (implemented by @probableprime, requested by @dantetucker) - Split new session notifications between contact & public sessions (requested by @epiceaston197, issue #1966)
Locale:
- Merged Chinese locale update by @flower_elf and modimobeikete - Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc
Bugfixes:
- Fix interactive/streamer camera not hiding custom badges (reported by @tahvostudio, @grayboltwolf, @shadowpanther, issue #1992) - Fix package collision for Hardware.Info & update to the latest version -- This might fix users getting randomly logged out due to this library failing to load, resulting in different UID, which invalidates current login token (reported by @j4.lc, @ohzee, @readun, @banane9, @shadowpanther, gameboycjp, @grayboltwolf and @exothewicker, issue #1924)
[ 2024-05-07 08:34:44 CET ] [ Original post ]
A few more bugfixes! Compatible with last build, feel free to update at your leisure.
Locale:
- Merged French locale update by @j4.lc - Merged German locale update & English fix by @muppeq - Merged Russian locale update by @shadowpanther
Bugfixes:
- Fix Default Hand Grab Type element being incorrectly named (reported by @.aesc, issue #1946) - Disable VSync and framerate limit options when VR is active due to these settings interfering with the VR SDK (based on report by @zyro1331, issue #1927) -- This fixes potential performance issues when in desktop mode with VR active -- The options are now disabled while VR is active to indicate that they cannot be used
[ 2024-05-04 11:26:25 CET ] [ Original post ]
Another small patch fixing up a few more issues! Compatible with last build so you don't need to update immediatelly! Though if you can, update recommended as it will fixup a few things.
Locale:
- Merged Polish locale update by @art0007i - Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc - Merged Chinese locale update by modimobeikete
Bugfixes:
- Fix Join/Leave notifications being triggered for currently unfocused worlds (reported by @epiceaston197, issue #1933) - Fix texture 2D variant size validation considering certain variants valid, even though they are not -- Specifically variants that are power of two would be valid even if they are bigger than the nearest power of two - Fix directionality setting for Earmuff being inverted (reported by @epiceaston197, @koneko_ch, @defhammer, Alex Depry Fox, issue #1940) -- Note that we haven't updated the setting value, so if you already adjusted your setting to compensate for this bug, you'll need to adjust it back
[ 2024-05-03 20:38:39 CET ] [ Original post ]
Another hotfix for headless! Compatible with current. Only need to update if you're running healdess. Sorry! Aaaa!
Bugfixes:
- Fix world crashing when user joins on headless due to notification system not existing (based on report by @bredo, @t.o.a.s.t.e.r. and @ohzee, issue #1925)
[ 2024-05-03 09:27:07 CET ] [ Original post ]
I noticed a small thing, where new textures would still default to bilinear, so this is a quick hotfix for that. Compatible with previous build. Update STRONGLY recommended if you're building any new content (or just manually set all textures filtering to null, otherwise they'll be stuck at bilinear)
Tweaks:
- Default new textures filtering to null -- This makes them use the user default filtering in settings
[ 2024-05-03 08:51:13 CET ] [ Original post ]
Even more settings! You can now control the texture resolution to save VRAM and change the filtering options (default is now anisotropic!). There's improvements to Earmuff (added directionality), gamepad otpions, tracker freezing and framerate limiting when in background. There is now also official support for user join/leave notifications, you can enable it in the notification settings! There's a bunch of other fixes and improvements too. Sorry this build took a while. Combination of dealing with my PC not wanting to boot and hitting a nasty Unity bug with something that seemed that would be quick (disabling VSync when the app is not focused makes it think it's focused again, which makes the background frame limiting not work if VSync is on... this took me like 2 hours to figure out and find a workaround, by importing native Windows method, since the Unity one just doesn't work right >///< ) Anyway, I hope you enjoy! [previewyoutube=kvslXp7cls4;full][/previewyoutube]
New Features:
- Implement Texture Quality settings, which allow controlling the resolution & filtering of textures (requested by @ultrawidegamer, issue #1658 and iamgreaser, issue #259) -- You can set the relative texture resolution (e.g. load textures at half or quarter of original resolution) -- You can also limit the maximum resolution of textures -- You can configure minimum texture size - any textures under this size won't be limited -- Any setting changes only apply to newly loaded textures. There is a button that will force all the textures to reload intermediately, which can be heavy process -- This utilizes the asset variant system - limiting the maximum size will skip loading the higher resolution mips and save on download size/time as well -- Default filtering is now Anisotropic (this might be different on systems where this might be too expensive) -- The defaults on each machine are initialized based on amount of VRAM detected. Settings will be appropriately lowered for machines with less (or equal) than 6 GB, 4 GB or 2 GB of available VRAM -- These settings are per-machine -- Procedural textures are not affected - Add Directionality setting to Earmuff mode (requested by @bluetera, @chris_blackpaw, @epiceaston197, issue #1917) -- This allows you to control how much you hear behind you - the lower the value, the more users behind you'll hear -- The distance setting affects both the cone distance and the sphere distance - Add settings for limiting background framerate and VSync for desktop (requested by @kulza, issue #1784 and NimbusHeartstriker, issue #1052) -- This is useful if you need to conserve system resources when using Resonite alongside other programs and games - Filtering options on texture providers are now nullable and used to override the filtering options from the default -- All existing textures have their values set to null to use the new defaults, unless they were specifically set to Point filtering - Added Use Gamepad When Unfocused setting (default on) -- This allows you to disable gamepad inputs when Resonite is unfocused (requested by @flamesoulis, issue #105 and @vrbat, issue #1675) - Added Freeze Tracking setting for individual trackers -- This lets you keep using the tracker for tracking, but freeze it current position temporarily -- This is non-persistent setting and will be reset on next launch - Add default grab type setting (requested by @electronus, issue #1815) - Added notifications for users joining & leaving current session (requested by @readun, issue #1902) -- This is off by default, you can turn it on in Settings - Add support for search phrase to WorldUsersFeed (requested by @jackthefoxotter and @nordwick, issue #1889) -- This filters all users who contain given substring in their name -- The filtering is not case sensitive at the moment -- We can extend this to more advanced syntax if necessary
Tweaks:
- Make Port field on OSC_Receiver not parse continuously to prevent host access dialog spam when editing the port (reported by @probableprime, issue #1891) - Session started notifications will now always how the name of the host, rather than N/A - Added UserObjectNetworkStatistic to allow accessing statistics of type string (based on report by @lexevo, issue #1833) -- The previous node has been renamed to UserNumericNetworkStatistic
Locale:
- Merged German locale update by @muppeq - Merged Chinese locale update by modimobeikete - Merged Japanese locale update by @.aesc - Merged Russian locale update by @shadowpanther
Bugfixes:
- Fix UserJoin/Spawn/Leave events not firing at all on users other than host -- This should fix WorldUsersFeed not updating user list properly when updated by users other than host (reported by @jackthefoxotter and @nordwick, issue #1886) -- This should also fix dynamic bones persisting after user leaves (reported by @art0007i, @readun and @starz11222 issue #710) -- This also fixes small memory/resource leak for auto-injected haptic triggers, due to those not being cleaned up from internal structures properly -- ProtoFlux event nodes now have OnlyHost (default true) input, which allows receiving those events on all users - Fix DistanceFromCone node being malformed, resulting in crash (based on report by @mirpasec , issue #1898) - Fix decimal values not being parsed properly in fields (reported by Hennnatori, issue #1853) - Fix Resonite capturing the mouse cursor when not focused (reported by @leocatto and @flamesoulis, issue #242)
[ 2024-05-03 07:58:35 CET ] [ Original post ]
Even more settings! Based on popular request, Resonite now has earmuff mode! This will help deal with busy worlds with lots of overlapping voices. After motion blur, this has been the second most requested setting on our GitHub. Thanks to the new Setting UI & subsystems, it was quite easy to add! This is the initial release, but I expect there might be some need for iteration, so give it a try in busy worlds and see how well it works! If you feel there's some things not working well or lacking, open an issue and we can do some tweaking! The bug with some users being randomly very loud should also be fixed now! There's also some new ProtoFlux nodes for 3D geometry computations with lines and cones as a bonus byproduct of the earmuff!
New Features:
- Implement Earmuff mode which allows applying additional voice attenuation (requested by InconsolableCellist, @kulza, MegaShinySnivy, @_deltawolf, @adamuszynski, @the_furf_of_july, Punkyyyy, @www.sizemo.re, @akiram_, @epiceaston197, @catboy.slim, @hayden_fluff, @jackthefoxotter, @flamesoulis, @waya, @ultrawidegamer, issue #26) -- This can be enabled in the settings under "Audio" -- Currently this is modeled by a distance to the surface of a cone, which is projected from user's view. This effectively forms a "soft shape" wrapped around that cone within which the volumes will be at normal level -- You can control the distance of the cone, angle, distance from the surface of the cone at which attenuation stats and the attenuation range -- You can also configure attenuation volume outside the listening area. Setting this to 0 % will completely mute users outside -- Users in broadcast are excluded -- Please give this a test in busy worlds, experiment with the settings and see how it works. I expect some iteration on this on how it's parametrized and such, so if it doesn't work well in some situations, please make an issue! - Added ClosestPointOnLine node (under Math/Geometry 3D) -- This gives point on a line defined by two points that's closest to a 3rd point - Added ClosestPointOnConeSurface node (under Math/Geometry 3D) -- This finds a point on a surface of a cone that's closest to a 3rd point -- It will also indicate if the point is inside the cone or not - Added DistanceFromCone node (under Math/Geometry 3D) -- This computes shortest distance to a cone for an arbitrary 3D point -- If the point is inside of the cone, distance will be 0
Tweaks:
- Do not allow setting resolutions that would result in a vertical aspect ratio, as this can make the UI unusable
Locale:
- Merged Russian locale update by @shadowpanther - Merged Japanese locale update by @.aesc - Merged German locale update by @muppeq
Bugfixes:
- Compute avatar's voice output scale compensation continually to adjust to any potential changes in scale (based on report by @duskitten, @ohzee, @nutcake, issue #73 -- This should fix some users being overly loud in some cases when they load into the world
[ 2024-05-01 01:15:17 CET ] [ Original post ]
A whole bunch of new goodies! This build introduces native support for the OSC protocol! Both receiving and sending values is supported! This makes it very easy for everyone to integrate Resonite with software and hardware that uses this protocol and prototype with this. This is a bit of bonus a "byproduct" of adding the GigglePuck support, since it uses OSC internally too and it was simple enough to add! There's also a bunch of new settings! You can now fine tune your notifications, resolution/fullscreen or hide nameplates in photos. I've also added a new data feed which manages a feed of users in the session! You can use this to very easily build UI's that list users in the session - the data feed will automatically manage adding/removing items for you! Typing in types is also now much easier! Instead of the .NET syntax, which is usually pretty verbose, you can use the C#-like syntax for the types, which is much easier to work with! [previewyoutube=AS87ymvZhoM;full][/previewyoutube]
New Features:
- Added native generic OSC protocol support for easy integration with 3rd party apps & devices -- OSC_Receiver will listen on a given port and update any linked OSC values --- User will be asked to allow receiving OSC data on each individual port -- OSC_Sender will send any changes on linked values to target IP & port --- It supports automatic resend interval, which will periodically send the values at given interval even if they haven't changed --- Values can be send either as OSC Bundle or as individual messages --- URL must be in format osc://ip:port --- User will be asked to specifically allow sending OSC data to given host and port -- OSC_Value
Locale:
- Merged German locale update by @muppeq - Merged French locale update by @j4.lc - Merged Japanese locale update by @.aesc - Merged Chinese locale update by modimobeikete - Merged Korean locale update by @mirpasec
Bugfixes:
- Fix host access requests sometimes throwing exceptions due to multiple concurrent requests - Fix DebugDataFeedView not respecting the UpdatingUser field - Fix DebugDataFeedView not immediately updating when items are removed or updated - Do not use legacy user height values if the decoded height is zero -- This should fix some users having their height reset to zero on conversion of legacy settings (reported by @nordwick, @_deltawolf, @shiftyscales, issue #1794)
[ 2024-04-30 08:25:38 CET ] [ Original post ]
Some more tweaks, improvements and fixes for the haptic system & GigglePuck. Keeping it light today, since it's Friday, I got some more things on a branch (official OSC support!), but they're not ready yet. Compatible with previous build!
New Features:
- Add ability to Reset mapping or Remove tracker entries in the settings (requested by @ohzee, issue #1848) - Add ability to remove GigglePuck entries from the settings - Add Minimum Intensity & Initial Activation Intensity settings for the GigglePuck -- This can help prevent the haptics from not activating or stalling due to intensity being low
Tweaks:
- Improved auto-injected avatar-to-avatar haptics (thanks to @darkysabertooth, @aegis_wolf and @shiftyscales for helping test) -- Fixed the radius-intensity modifier calculating from origin, rather than center of collider, resulting in hand haptics being strongest at the wrist, rather than palm -- Tweaked strength and shaping of the distance based modulation -- Added velocity based modulation, so moving faster triggers stronger haptics and vice versa -- This applies to all haptics - bHaptics, controllers, GigglePuck, as this is a generic haptics system - Change the GigglePuck disconnect detection logic to only consider it disconnected when it's not found on the network several consecutive times -- This fixes it randomly being considered disconnected in some cases
Locale:
- Merged Korean locale update by @mirpasec - Merged French locale update (and Chinese locale fix) by @j4.lc
Bugfixes:
- Fix exception when updating packed state on display nodes when the node hasn't been instantiated or the group built yet - Fix GigglePuck not working when it's initially detected, requiring a restart (meaning you don't need to restart for it to start working) - Fix GigglePuck settings breaking when there's a setting entry for device that wasn't connected in given session - Fix default stereo separation setting being 6.5 mm instead of 65 mm (reported by @shadowpanther and @banane9, issue #1759) - Fix Horizontal Torso Position being restricted to 0.0 ... 1.0 range rather than -1.0 ... 0.0
[ 2024-04-26 21:03:46 CET ] [ Original post ]
An extra build with hotfix for a blocker for the content team. Compatible with previous.
Locale:
- Merged French locale update by @j4.lc - Merged Chinese locale update by modimobeikete
Bugfixes:
- Fix reflection probes failing to bake (reported by @rueshejn, issue #1629) -- This is due to Compressonator wrapper getting out of sync with the native version:
[ 2024-04-26 00:16:12 CET ] [ Original post ]
A few more things for the haptic system I wanted to add. I'm feeling really dizzy today again, so there's not more, I'm sorry :(
New Features:
- Add support for mapping haptic points using a tag -- Full body avatars are automatically instrumented with TagHapticPointMapper component -- You can define list of Slots with associated HapticTag on the component, which determine where will haptic points be mapped to -- You can specify that haptic devices (e.g. GigglePuck) can be mapped to a specific tag in the settings -- This gives you flexibility to customize the mapping when it doesn't fit the standard body parametrization, but it requires manual setup on the avatar to configure locations for each tag - Add DirectTagHapticSource component -- This allows driving haptic sensations for a given haptic point directly, rather than using the haptic volume system -- It works only with tagged haptic points. The component must have a matching tag to a configured haptic device and must be present under the user to work -- It doesn't prevent the haptic volumes from sending haptics - the effects are additive. If you want only this component to control the haptics, do not setup a corresponding tagged haptic point -- This can be useful to drive haptics using arbitrary mechanisms (e.g. driving with ProtoFlux), such as grabbing ear/tail dynamic bones, syncing them to world audio reactivity and so on - Add HapticPointData component -- This provides the current haptic intensities for a given haptic point for the user -- This is mostly useful for diagnostic and indication purposes - Add indicator showing the current activation intensity for GigglePuck in the settings - Added "Rect" and "rect" type aliases (based on report by @epiceaston197, @shdw_x, issue #1847)
Locale:
- Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc - Merged English locale fix by @.aesc - Merged Chinese locale update by modimobeikete - Merged Russian locale update by @shadowpanther
[ 2024-04-25 23:27:17 CET ] [ Original post ]
Just a small update, I'm not feeling too well today and I couldn't focus too much. I've mostly worked on a more personal issue I wanted implemented for this reason. Resonite now has native support for the GigglePuck haptic device! This can be used for headpats or any other haptics. All you need to do is connect the device to the same network and Resonite will pick it up. Then you configure where you want it mapped on the new Settings UI. It works with our generalized haptics system (which is used for controllers, bHaptics vest and such), so anything - avatar to avatar interactions and haptic triggers in the world will work! There are some general improvements to the data feeds, setting UI, the haptic system and such, so even though this is more niche addition, it helped improve general versatility of these systems! There's a few bugfixes too. Also compatible with current!
New Features:
- Added native support for the GigglePuck native device (requested by me based on demo by @zenuru, issue #1751) -- Resonite communicates with the device directly over network, the OSC Router is not required -- To use this, simply make sure that the GigglePuck is connected to the same network as Resonite to automatically detect it -- When detected, new settings will be added in the "Devices" category, you can use this to configure where will the GigglePuck be mapped on your avatar (head, torso, arms, legs or controllers) -- Multiple GigglePucks are supported! Each one will have its own entry in settings -- I'll make a video demonstrating this later - Add ability for data feed items (e.g. settings) to be dynamically toggled visible or invisible depending on other fields -- This is useful in cases where some settings are only relevant when some other settings are shown (e.g. haptic mapping settings show only properties relevant to the currently selected mapping, rather than showing all of them all the time) - Implement shared HapticPointMapping group of settings -- This allows specifying how should any single-point haptic device be mapped onto the avatar in a generic manner -- This will greatly simplify adding more configurable haptic devices in the future
Tweak:
- Ensure that Settings UI is updated to latest version from the preset
Locale:
- Merged Japanese locale update by @.aesc - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete - Merged French locale update by @j4.lc - Merged German locale update by @muppeq - Merged Russian locale update by @shadowpanther
Bugfixes:
- Fix setting components misbehaving due to being disabled due to an exception -- Any disabled setting components will automatically be re-enabled - Fix Tracker status (battery & charging) not updating properly
[ 2024-04-24 23:57:16 CET ] [ Original post ]
More settings! The full body trackers have been now moved to the new setting system, which comes with a number of benefits! You can now toggle them on/off easily, check how they're mapped and your full body calibration will sync between devices too! There's also a few bugfixes for some more issues that were discovered. There's more to come soon!
New Features:
- Add TrackerSettings which allow controlling Vive trackers -- You can turn all trackers off globally without unmapping them (this is useful when they're charging in the corner) -- You can also manage each tracker individually. Though for actual calibration it's recommended to use the full body tracker -- Your existing full body calibration will be auto-converted to the new system -- This system will now sync the tracker setup between machines. If you move the same trackers from one machine to another, your full body setup will be preserved - Add Format field to data feed indicator item (including the FeedIndicatorInterface) -- This allow specifying how the displayed value should be formatted, which is determine by the data feed
Locale:
- Merged Russian locale update by @shadowpanther - Merged French locale update by @j4.lc - Merged Japanese locale update by @zozokasu, @baru14 - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete - Merged German locale update by @muppeq
Bugfixes:
- Fixed avatar & mutual blocking not responding immediately, but requiring the user to be respawned instead (discovered with @veercollie and @glavingkya) - Camera preview for quick photo capture will now render private UI when capturing private UI is enabled in the settings (reported by @jackthefoxotter, issue #1823) - Add Stereo Separation option for quick photo capture (requested by @paradoxical_autumn, issue #1759) - Fix regression where global volume attenuations (e.g. whisper volume or recording message volume) wouldn't apply (reported by @shiftyscales, issue #1779)
[ 2024-04-24 00:39:36 CET ] [ Original post ]
A bunch more settings! I was going to do more today (like the trackers), but I got busy with meetings. More to come soon!
New Features:
- Add Voice Settings, which allow specifying the voice status when user logs in (requested by @akiram_, issue #1767) -- Start Unmuted (default) - when logged in, you start unmuted -- Start Muted - when logged in, you always start muted -- Remember Last - remembers last mute status across logins - Add "Opt out of media metadata" privacy setting (based on some historical feedback and concerns from users, issue #1736) -- When you enable this option, you will be excluded from metadata in captured media (typically virtual photos & audio clips). You will still appear in those media assets, but no information, such as your UserID and position in the scene will be stored alongside it. -- If you become aware of any users are modifying their clients to ignore this opt out, please report them to the moderation team, as this would be considered harassment. - Added "Do not show me in screenshots" privacy setting -- When enabled, you will not be rendered in screenshots captured in-game. -- IMPORTANT: Please note that this does not affect realtime cameras, screenshots taken by methods outside of the game or captures done through other methods in-world that might be part of the world's mechanics.
Locale:
- Merged Japanese locale update by @.aesc - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec - Merged English locale fixes by @lexevo, @shadowpanther and @_deltawolf - Merged missing English Gamepad setting locale strings by @.aesc - Merged Russian locale update by @shadowpanther - Merged German locale update by @muppeq - Merged Chinese locale update by modimobeikete
Bugfixes:
- Fix invalid packet loss calculation for LNL resulting in numbers that are too large -- The packet loss % is now also more accurage, including full decimal points, rather than being rounded to nearest percent
[ 2024-04-22 23:00:03 CET ] [ Original post ]
I was going to do more new settings today, but my computer decided to BSOD and then not boot, so this is all you get, sorry >///> But still... more settings! Compatible with previous!
New Features:
- Added Rendering Quality Settings (some requested by InconsolableCellist, @atakku, @_deltawolf, issue #13) -- Per Pixel Lights (lowering this will help performance, especially with mirrors/portals, but more likely to cause flickering when there's too many lights) -- Shadow Cascades, Shadow Resolution and Shadow Distance -- Skin Weight Mode -- There will be more added soon!
Locale:
- Merged missing English Twitch setting strings by @stiefeljackal - Merged German locale update by @muppeq, @jackthefoxotter - Merged Russian locale update by @shadowpanther - Merged Japanese locale update by @zozokasu and @.aesc - Merged Korean locale update by @mirpasec
Security:
- Ensure that SettingDataFeed doesn't generate subcategories when in worldspace (unless world is opened as Unsafe) -- This prevents leaking potentially private information, like list of allowed hosts or user's audio devices (based on report by @eldritchkaiju, @chundelac, @amunak, issue #1711)
Bugfixes:
- Cleanup Cuteness Settings for non-@glitchfur users (based on report by @j4.lc, issue #1756)
[ 2024-04-19 00:29:46 CET ] [ Original post ]
THE TIME HAS COME! The Setting UI rework bears its fruit! You can now configure/disable Motion Blur, Bloom, AO, SSR and Antialiasing! Thanks to the new system these settings were very easy to add to the system, I've literally implemeneted all of it just today, along with a few other things. I know it took a while to get to this point, but the journey was worth it if you look at all the other things that got improved as well and the good foundations for reworking more UI's that we now have! With this, the most upvoted GitHub issue is now resolved! There's still a whole bunch more Setting stuff to come though, so we're not quite done, I just wanted to do these as one of the first. Hope you all enjoy! And who couldn't enjoy before, you can enjoy now (and maybe support us so we can keep doing this ;) [previewyoutube=LSQiQ5JbSgs;full][/previewyoutube]
New Features:
- Added post processing settings (under Graphics) -- Motion Blur intensity (requested by @namminamm, @rellik66, @kulza, @enverex, @troyborg, Meister1593, CakePost, @flamesoulis and others, issue #178) -- Bloom intensity -- Ambient Occlusion intensity (requested by InconsolableCellist, Sarniwoop, @namminamm, @gawdl3y, @the_furf_of_july, @kazu0617, issue #21, ) -- Screen Space Reflections -- Antialiasing (Off, FXAA, CTAA, SMAA and TAA) (requested by @zyro1331, issue #244) - Added "Capture Private UI" setting for quick photo capture (requested by @troyborg, issue #139) - Added encode format setting to Quick Photo Capture settings (requested by @shadowpanther, @banane9, @epiceaston197, issue #870) - Added LocaleActiveDriver which allows driving target boolean based on a match of current locale -- You can either drive exact locale (e.g. en-US) or the main language (just "en", which will match to both "en-US" and "en-GB" for example) - Added Highlight support to DataFeedAction items -- This includes appropriate field on FeedActionInterface -- This allows certain action items to be highlighted - e.g. when they indicate that they represent an option that's currently active
Tweaks:
- Currently selected locale is now highlighted (based on feedback by @luxkitty, issue #1701) -- Note that we'll need to update the template first, so it might take a day or so before this update is reflected in content
Bugfixes:
- Hand(Position/Rotation)Smoothing now affects the controller nodes as well (based on report by @shiftyscales, issue #1691)
[ 2024-04-17 23:52:30 CET ] [ Original post ]
Here's a new setting that I added today! I was going to do a few more, but then we had Blood On The Clocktower game, so I just finished up this one and a bugfix. Compatible with previous!
New Features:
- Add Relay Settings (requested by @sveken, @bredo, @knackrack, @stellanora, issue #219) -- You can specify if you want to be always connected through a relay -- You can select if you want to automatically connect through closest relay or if you want to force connection through specific relay -- This now replaces the -ForceRelay launch argument
Bugfixes:
- Fixed color & colorX not parsing properly (reported by @jaykubjk, @pyroboy and @whippersnatchpumpkinpatch, issue #1715)
[ 2024-04-17 03:37:59 CET ] [ Original post ]
A bunch more bugfixes for the settings! Thanks for the reports everyone! There's more coming soon! Compatible with previous, but update strongly recommended as it resolves some crashes and such!
Locale:
- Fixed extra space in English locale (fixed by @sveken, reported by @amasteramaster)
Bugfixes:
- Ensure that default allow host entries are initialized only once, rather than on every startup (reported by @j4.lc, issue #1712) - Reverted GrabInstancer to create the new instance under its own parent to fix content depending on this (reported by @aritosuits) -- If the template or container template contain the GrabInstancer in their hierarchy, it will instead put the new instance under LocalUserRoot - Fix exception and crash when checking host access with ProtoFlux where the host is null (based on report by @sveken and @faeyth, issue #1710, @amasteramaster issue #1723) - Fix audio input change event not being properly triggered, resulting in a number of systems not responding to changes in the audio input immediatelly (e.g. user's voice in the world) (reported by @orange3134, issue #1719) - Fix dash breaking when the animation speed is set to 0 or negative somehow (based on report by @rueshejn, issue #1699)
[ 2024-04-16 19:17:09 CET ] [ Original post ]
Just a small patch before I go to sleep, this fixes a few reported issues. I'll be tackling more stuff tomorrow! Compatible with previous!
Tweaks:
- Add packet loss to the DebugUsers string
Bugfixes:
- Fix int/float text editor parsers throwing exception when formatting is null -- This fixes a number of input number settings (such as gather asset count) not saving (reported by @j4.lc, issue #1695, @modernballoonie issue #1696) -- This also fixes registration DoB entry being broken (reported by @dantetucker, issue #1698) - Fix UserNetworkStatistic resulting in crash when the given key does not exist (reported by @tabithamoon, issue #1705)
[ 2024-04-16 08:45:22 CET ] [ Original post ]
It's finally here! After months of work the very first public version new Settings UI is out! If you go to the Settings page, you'll find brand new snappy Settings UI. But wait, there's more! Most of work so far went into building brand new systems and frameworks (notably the data feeds & data feed views) for designing new UI's, on which the new settings is built. This provides us with very solid foundations to build upon, not just for the setting UI but most other pieces of UI as well in the future! The Setting UI has become the "pilot project" for these new mechanisms, but all future UI's will hugely benefit from this as well. The work on the Settings UI is not yet finished! The goal of this release is to rework all existing settings on the new system and not much has been put into adding brand new settings and functions (there's a few, but not much yet). In the upcoming days, expect lots of the settings to be added (yes including the motion blur toggle!) and new features as we finish this up! This will now go a lot faster! There's lots of other goodies in this, the changelog is big and doesn't even cover everything - I skipped most things that were relevant only to the pre-release builds to keep things shorter - you can check #devlog if you'd like more details. There are some non-setting related additions and fixes as well, for UIX, grab instancers, inspectors, parsing, networking and more! And before we get into the details of this update, I'd like to extend a huge thanks for everyone in the community who has helped us test the prerelease builds and provide feedback! You helped us get this across the finish line for the initial version and get it as polished as it can be for the wider community. All the pre-release contributors are: @mpmxyz, @probableprime, @bluecyro, @troyborg, @kierdran, @nytra, @shininghero, @art0007i, @sveken, @stiefeljackal, @cerealbowlsystem, @dustysprinkles, @ohzee, @jackthefoxotter, @foolishsnowmew, @kulza, @zyro1331, lxw404, @readun, @rellik66, lyoth13, @shrikealvaron, @zyzylian, @electronus, @modernballoonie, @epiceaston197, 5H4D0W-X, @orange3134, @decoybird, @akiram_, @kodufan, Mr-CostlessClaw (and possibly others, poke us if we missed someone, as GitHub makes it hard to get list of contributors! ;_;) But of course this doesn't mean that you can no longer provide feedback! If you have issues or feature requests, feel free to make an issue! Anyway, I hope you all will enjoy this update and what's to come in the upcoming days! I'm really glad this is finally out, which now frees our hands and makes lots of things significantly easier going forward!
New Features:
- Implemented completely new Settings UI & Setting backend (handled by @frooxius and @ryuvi for UI template side) -- New Setting UI is now handled by a more flexible dynamic system with support for categories and better organization and a number of upcoming features -- The old Setting UI, related components and setting system were completely removed -- All existing settings were reimplemented to this new system -- IMPORTANT: Select legacy settings will automatically convert, but a number of settings will reset and you will need to reconfigure them -- The new setting system is dynamic. As new features and settings are requested, they are automatically registered with the UI -- You can now configure sideways motion between turn, strafe and off independently for both left and right hand -- Photo gesture resolution is now configrable -- Added support for capturing sterescopic finger photos via a setting -- You can configure mouse & gamepad input sensitivity now - Introduced new framework for building flexible & dynamic UI's - data feeds -- This separates concerns between sources of data & interactions & UI's and allows the actual building blocks of UI to be designed in-game -- The sources of data are Data Feeds -- The data from a data feed source can be displayed using Data Feed View components, which will typically use type-based mapping to pick a template -- Each template piece contains an interface, through which the piece of UI is configured and hooked into proper actions -- Data feeds provide interface that supports searching/filtering as well as events for when items are added, updated and removed - data feed views are aware of these and will automatically update the elements - Added SettingsDataFeed -- This provides category based access to all the settings currently registered with the setting system - Added EnumFeed
Tweaks:
- Disabled IUIHoverable components will no longer receive hover events
Locale:
- Merged Chinese locale update by modimobeikete - Merged Russian locale update by @shadowpanther - Merged Japanese locale update by @.aesc, @zozokasu - Merged Spanish locale update by Ruzeh3D - Merged Swedish locale update by @_schabo - Merged Korean locale update by @mirpasec - Merged French locale update by @j4.lc - Merged German locale update by @muppeq, @jackthefoxotter
Bugfixes:
- Fix exceptions due to calling EndHover events on destroyed elements - Fix cloud variable linking not updating properly in some cases when user logs in, resulting in the values being stuck - Add type validation to
Sponsors:
Also huge thanks to our Sponsors without who this project wouldn't be possible!
Hikari Akimori, BigRedWolfy, Tekno Catron, ThomFox, DoubleStyx, Earthmark, StiefelJackal, noraneko, AdroitTheorist, dandicoot, GabrielSerealia, SiderealScout, Lagos, Conicaw, Creator Jam, Trittyburd, Komdog, Xekri
Biggest supporters:
And our biggest supporters: KierDran, AjaxWolf, brodokk, kazu, Ryn Fluff, Rucio, jason, rhenium, MIRA_sk, 1amnick, JackTheFoxOtter, Sveken, badhaloninja, Rixx, Bashscript, yohoheyho, Derpicidal, MkE, e1ght3, ChevronSeven, OrionWolf, Micro, InnocentThief, Xyphurr, Zyzyl, vizi, Skielsthear, , TomTom20!, holmebrian, Major Remp, hinano.aira, emmi_official, raido, Aniki355, Lenrui, bd_, LotusGaming, , Trev, VRxist
Prominent supporters:
zangooseoo, Voldrak, Lucaedr, Ethandarkeco, Jewel, Emma, Alice, aesc, Sani-sensei, Kulza, ScarsTRF, IceCreamPie, Rabbuttz, Conduit, Tacusin, VBunnyGo, shizuku, Shrike, orange, R3C0D3r, Duskitten, SecondaryCell, Sharkmare, sirkitree, bredo, p0c0p0c0, Fuzy Sidwell, xlinka, ingreum, ElizabethDayax, Pyroboy5000, kiantis, Gawdl3y, Tatsu Kimiero, Kodu, MaddMaxKZ, Garfflesnark, Ikani, JackieAlexender, Kal, Readun, -Duff, FRICK, Chayste, toritori, Nordwick, SHFR, Elektrospy, TheBasementNerd, Sykes, Celeste Snow, FoxBox, Kamila_Avali, Hopfel, Spex, Snooper, Rustybot, Hambone, ZoralThePirate, Axel, Glavin, MyriadSubprocess, MirPASEC, foxworth, Zandario, Mera, darbdarb, Lyokanthrope, Delphin Epsilon, KajumaFox, IcyWafflebun, Freyar, skooch, Lydia_Whyte, Azavit, NickiPanna, Caldoric, Flame Soulis, yisto, Wolf Seisenbacher, FluffyTail, FluffySnowKitty, Kronas, Knackrack615, Nargle, SpaceGaytor, Floximo, NVhun7er, shiri yuki, bunnyconda, Rockman Rock, Raxoron, Bisc, Alca, Flute, DingoYabuki, Arion Silverhoof, Joshtiger, Mr.MegaTronic, AmriaLeiah, J4, Renarikun, Jinxtiest, AmethystFox, Plaster, Drison64, Archie, kokoa0429, Shello, bwgi, Feyyore, Wolfox, cj2x, Northern_Lights, Gourry, BlueTera, TriVR, cadyn, dasnull, zayrefox, Jackalgirl, Darius Sergal, Tiky8192, cleafspear, Nier Photon, Arkie, TheCrowDevilsBK, akahanehan, Brie, Natbard, I'm Erin., Salira, twodimensional, Beagle, The Honeybee, Vulpeta, isotach, SnepGryphon, TypicalSerp, Water, Lance the lich, Death Site, Towneh, Nullmatic, Aoutful, Talakai, Balros, BabyMiku, Nuka, KT, SkyDeltion, harumaki021, usaturn, Korbloxity, Lone Wolf, KitKat42, Magglor, Marstruc, LavenderFox2430, Konshu, Ventus The Sox, Sigil, Jolen, Himawari_Sakura, nanotopia, Toastie, icedglitch, Syber, moralevi, SpookyCodex, Jonasmh, Kirin_Sage, Tiny Plume, Magick, rizlysander, OrangeStripyDog, Jam10o, imotchi0112_vr, Zephyr_Cyenta, Daddy Shorki, MaxGates, Drazion, esnya, Nahmii Vuh'uni, Wally0623, Sense, Ultranique, Draky, Sokar, vaporub-, Storm_DPD, Barley Southpaw, shininghero, Bellimora, EclipseZeDragon, r_ptor, SparkzTehDragon, HybridKith, Ekkoklang, Uisce, Phantom_PXL, Half, HotChomper, fulgens, Daon, Lyncis, Sui, X RustySniper X, Aster, Twaininduo, Zero_Dom, Wishdream, JaekSmith, H3BO3, udyne, ZoneBeat, Krazen, Sneaky Kobold, T3K, Darth Malakor, Dexy, Xerroz, WallTack, Afromana, Ecafymtoohs, SordaSuperDude, Lexevo, Corric, R3ido101, naka, raz, DartKitten, ForgottenSin, ChameleonO2, HaVoK, GriffinPhillis, dy, KASIL, Johnny Vulpine, Lurky, Patrick Horn, NovaVoidHowl, Chaiya, ZachTheMicroHybrid, Saphiza, All Caps, EmberTheSergal, SnowKittey, Astro, Comeino, V-343, Aelicien, EdenAngel, MilkTheCow, DanKirsch, SolidusSnake, mzx987, nitedragon, Shaman.EXE, BrandonDucky93, Pile, Klaus, SteelTheWarrior, VictoriaSpe, LunaFolf, Faeith, Corey Hushtail, Nemnomi, Zagroseckt, ToasterFox, laizze, Kaleb Pounds, K2JO3, Waterfox, Tigereye, RJ, Keiko, Ninetales, TheDKG, George.T420, Azzurol, Weslie, Arcadia Wolf, Zoobenoo, Santus_lupinus, LeaChim, emeryrocks, Rocky Husky, LoliGoddess, FluffyDraco, Zenuru, CalebOWolf, RekoRed_, soronorjs, yui, reversed, TiGWolf, Ferret Cyan, BearsTheFox, Ki'tal Stargazer, Project., Preasul, ZeeMakesThingsGo, TSBladez, TehSharkWolf, char1ika1, Faroox, Owens Whitcroft, Etoxxy, JenreyDominos, Omnyx, MintiThorn, ParagonIsaac, PlasmaRaven, XyspX, Gocko, , NyxxTheWolf, karathkasun, MONIKER, DemiEllesh, PannyMan, Finley, Asriel Dreemurr, MEESTER_SoupCan, Nicholas Bennett, Killa, Anil Jason, ipie4fun, JuiceBoxsVR, WolfSkin, koimono, Player Kode, Supreme Power, Naomi Humin, VibrantPolygons, bug_, SimanSama, SaltyToast, Neosmotic, joshfluffy, sparkle cloud, air_smellbad, Kitarra_Fox , Dr_Dangable, holy_, Mogi Kim, satanasov, GONT_3, rubikr16, Talii, t.o.a.s.t.e.r., laira otter, Skeeva, fukuro, irick, DarkSugar, Parker, Kung Fu Monkey, Zelena, Climber, Red Kitters, Brigantia, Replic, love kitten, Scrydan, lill, Yoko1, Skeeva, holy, Dann., SchurikUwU, BusinessLawyer, AwesomeOpossum, Plinth, CuddleWyvern, DNA, telneko, toritori01, Midnight Myth, navy3001, Zoobie, stabs, torch89, Jamie Canavi, Mahi, kakious And everyone else supporting this project!
[ 2024-04-15 23:43:00 CET ] [ Original post ]
Hello everyone! This is just a tiny update, most of my time has been going into the settings UI (see #devlog for more!), but the MMC24 badges are here! There's a few smaller things that accumulated in the meanwhile too. Compatible with previous build, but you won't see the new badges unless host is running updated version.
New Features:
- Added MMC24 participant, honorable mention and winner badges (requested by @medravr) - Added UniFesta2023 participant badges
Locale:
- Merged general locale fix for broadcast audio key by @chundelac - Merged French locale update by @j4.lc - Merged German locale update by @muppeq
Security:
- Prevent connections to seesions hosted by a hard banned host user (based on internal report by @probableprime and @veercollie)
Tweaks:
- Do not log whole stack trace for API requests that time out to reduce log noise (implemented by @probableprime)
Bugfixes:
- Fix enums using obsolete names instead of current ones in some cases
[ 2024-04-03 19:48:04 CET ] [ Original post ]
Hello everyone! Just a small build with some polish for the previous one and merging in some more fixes from Prime. Compatible with previous, but update recommended!
Security:
- Fixed headless crashing when non-builders pick builders who have equipped tools (fixed by @probableprime, reported by @bredo, @bigredwolfy, @nytra via security ticket) -- This fixes being able to equip already equipped tools -- This fixes permission cleanup running on headless host throwing exception because they do not have head -- This also fixes the permission system checking InteractionHandlers for users who don't own them
Bugfixes:
- Fix ParticleBrush not assigning duplicated ParticleStyle reference when in "CloneComponent" mode (reported by @orange3134, issue #1480) - Fix brush tools throwing exceptions and generating large number of slots when the assigned ParticleSystem doesn't have an assigned Style (reported by @orange3134, issue #1481) - Fix crash when checking CanBeGrabbed on root slot (reported by @lill.la, issue #1478) - Fixed protected slots not having their parent properly assigned, resulting in being "null parented" (fixed by @probableprime) -- This fixes permission roles sometimes not existing if the user is not the host (reported by @nytra, @code807, @luxkitty issue #473) -- This fixes two UndoManagers being sometimes created in the world (reported by @nytra, issue #490)
[ 2024-03-12 19:33:56 CET ] [ Original post ]
Here's a whole bunch of bugfixes and tweaks (most of them from @probableprime who's been working on them for past few weeks)! Also few neat new things. You can now make particle system brushes, which can create all kinds of pretty effects and be useful for other things. Most of my time still goes into the new Settings UI still, you can watch progress in #devlog, but I wanted to pull in a bunch of the improvements and have a little intermission, so here it is!
New Features:
- Add support for particle systems to the brush system, which allows drawing strokes that emit particle from the stroke geometry (this has been added as "Froox fun" feature, see here: https://github.com/orgs/Yellow-Dog-Man/projects/18/views/1, issue #1474) -- For this to work, you need to assign ParticleSystem & meshEmitterTemplate on the brush -- You can control how the template is duplicated (or not) via ParticleTemplateHandling -- By setting optional EmissionRatePerUnitLength, the emission rate will be auto-computed based on the length of the stroke -- By setting the CurrentMaterial to null, no visible mesh will be instantiated - Added CanBeGrabbed node -- This allows you to determine if a given object can be grabbed by a given grabber or not -- This automatically determines if there's an active grabber
Tweaks:
- Update AMD Compressonator libraries to latest (v.4.5.52) to potentially fix errors when processing certain assets (based on internal bug report by @probableprime) - Allow network relays/bridges to override the address they're accessible at (implemented by @probableprime) -- This allows better support for using bridges/relays in internal company networks - Updated yt-dlp to latest version (from 2023.11.16 to 2024.03.10)
Security:
- Fxied being able to export items in worlds that do not allow saving them (fixed by @probableprime, reported by @yoshi1123_ via security report ticket) - Fixed crash from SimplexNoise2D when it's fed certain negative values (fixed by @probableprime, reported by @euphieeuphoria via security report ticket) - Importing `.log` files will now not use RTF parsing to improve performance and fix crashes (fixed by @probableprime, reported by TheAutopilot via security report ticket)
Locale:
- Merged Korean locale update by @mirpasec
Bugfixes:
- Fixed OnGrip(Start/Stay/End) nodes throwing an exception when evaluated (fixed by @probableprime, reported by @zyzylian, @marsmaantje, @beaned and @rukio, issue #147) - Fixed OnLocomotionGrip(Start/End) nodes not working properly (fixed by @probableprime, reported by @zyzylian, @marsmaantje, @beaned and @rukio, issue #153) - Fixed division of int/long MinValue by -1 resulting in crash (fixed by @probableprime, reported by GreaseMonkey via security ticket and @r3c0d3r and @mirpasec, issue #1425) - Fix NaN/Infinity metrics (e.g. when NaN is input as LayoutElement metric) causing UIX canvases to become corrupted (based on report by @ryuvi and @aegis_wolf, issue #1374) - Implemented detection of corrupted mesh files to prevent repeated failures in the asset variant system
[ 2024-03-12 01:33:07 CET ] [ Original post ]
Hello everyone and congrats on getting on the finish line with MMC! I've seen bits and pieces so far and it's looking amazing so far! I can't wait to start going through all of the entries myself. To make the browsing easier, here's a small update which includes filter for MMC24 entries to make browsing easier for everyone. There's a few small tidbits too that were done. I've been mostly heavily focused on the new Settings UI and systems needed for that, so there hasn't been much other stuff. Also compatible with previous build!
New Features:
- Add MMC24 category to the world browser -- Note that the ordering is randomized and shuffles constantly to ensure fairness - LNL Bridges & Relays are now universe aware, allowing businesses and other commercial users to host their own (implemented by @geenz) - LNL Relays can now be constrained to use a specific port range (implemented by @geenz) -- This is also useful for commercial users who need to configure their firewalls -- We might configure our official relays to also use more predictable range - Include ProtofluxBindingGenetator with the builds (requested by moonheart08, @xlinka, @shfr_h, @art0007i, @banane9, issue #37) -- Note that we are providing this tool AS IS and we will provide NO SUPPORT for this tool (the only exceptions we might make is if it's not usable at all, but generally making this part of your modding pipeline is on modders) -- This can be found under the "Tools" folder on the Steam distribution -- This will generate C# source files that provide bindings to ProtoFlux nodes, which can be useful for mods -- The first argument is path where the bindings should be generated into -- Other arguments are paths to assemblies that the bindings should be generated for
Locale:
- Merged Finnish locale update by @airride91 - Merged German locale update by @cameron5 - Merged Russian locale update by @shadowpanther
Tweaks:
- Changed default number of items in the world browser to 60 to help fill rows properly (based on feedback by @epiceaston197, @nytra, @muppeq and @banane9, issue #1424)
[ 2024-03-01 20:40:48 CET ] [ Original post ]
Hello everyone! I got just a small build today for you, I spent some time in meetings, processing some business and catching up, but there's a few improvements. Compatible with previous build, but update recommended - you might run into some weirdness otherwise (e.g. if one user imports Instagram video, it won't load for users who are on older build).
New Features:
- Improved Web Proxy support (implemented by @geenz) -- Proxy settings are automatically looked up and detected on Windows -- Kerberos configuration is supported -- SignalR now properly supports proxy - Add support for importing Instagram videos directly (requested by @flamesoulis, issue #385)
Locale:
- Merged German locale update by @cameron5 - Merged French locale update by @j4.lc
Tweaks:
- VirtualParent default scale now defaults to [1;1;1] (based on report by @emergencytemporalshift, issue #1336)
Bugfixes:
- Fix UI interfaces breaking in certain worlds due to incompatible shared components for UI sprites (based on report by @#0890, issue #1329) - Re-broadcast user's online status when SignalR reconnects -- This might fix contacts randomly appearing offline (reported by @pyroboy, @nexustwg, Drazion, @rawpie, @its_sox, @989onan, @liny_fox, @nytra, @flamesoulis, @skywind.kitsune, @shadowpanther, win189 and @zahndy , issue #739)
[ 2024-02-12 23:59:17 CET ] [ Original post ]
Just a small quick bugfix, the updated BepuPhysicsV2 had forgotten debugging code in it, which caused memory leaks when computing convex hulls. This pulls in updated version which should fix that! Compatible with current.
Bugfixes:
- Removed debugging code from BepuPhysicsV2 library which resulted in memory leaking when computing convex hull colliders (reported by @medravr, @probableprime, @lecloutpanda, @bredo, @sveken, @charlie_san, Beef, @unintentional, @canadian_redz, @ocelot342, issue #1291, BepuPhysicsV2 update commited by @nutcake)
[ 2024-02-05 14:23:16 CET ] [ Original post ]
Just a small bugfix release, fixing a few issues. Compatible with previous.
Bugfixes:
- Fixed world browser showing incompatible sessions, even when this is disabled (reported by @epiceaston197, issue #1182, fixed by @probableprime) - Fixed world browser not filtering sessions properly by universe (fixed by @probableprime) - Backported convex hull computation fix for BepuPhysicsV2 from upstream (https://github.com/bepu/bepuphysics2/issues/301) -- This should fix cases of some convex hulls causing memory access violation and crashes (reported by @stiefeljackal, issue #1198) -- This also fixes some asset variants failing to process due to same error, resulting in the asset variant worker crashing - Restructure session token swap mechanism into two phases to prevent current session from being invalidated, when the new token doesn't get updated properly -- This fixes active sessions breaking in some cases when logged for longer than 12 hours, including "Remember Me" functionality (reported by @slythefloof, @nytra, issue #1281)
[ 2024-02-02 17:05:42 CET ] [ Original post ]
Just a small bugfix release, fixing a few issues. Compatible with previous.
Bugfixes:
- Fixed world browser showing incompatible sessions, even when this is disabled (reported by @epiceaston197, issue #1182, fixed by @probableprime) - Fixed world browser not filtering sessions properly by universe (fixed by @probableprime) - Backported convex hull computation fix for BepuPhysicsV2 from upstream (https://github.com/bepu/bepuphysics2/issues/301) -- This should fix cases of some convex hulls causing memory access violation and crashes (reported by @stiefeljackal, issue #1198) -- This also fixes some asset variants failing to process due to same error, resulting in the asset variant worker crashing - Restructure session token swap mechanism into two phases to prevent current session from being invalidated, when the new token doesn't get updated properly -- This fixes active sessions breaking in some cases when logged for longer than 12 hours, including "Remember Me" functionality (reported by @slythefloof, @nytra, issue #1281)
[ 2024-02-02 15:24:45 CET ] [ Original post ]
Pushing a security hotfix and some more diagnostics. Compatible with previous, but update recommended.
Security:
- Prevent LocalVariableSync from accessing variables in worldspace, which could leak sensitive data (based on security report by @art0007i and @knackrack, implemented by @probableprime)
Debug:
- Implemented additional diagnostics for contacts appearing offline all of sudden (issue #739)
[ 2024-01-31 12:33:01 CET ] [ Original post ]
Just a small build, I'll be working more on the Settings UI systems, but this gets one important bug out of the way - the sessions reverting to a world randomly and few other things. Compatible with previous build.
Bugfixes:
- Fix active sessions sometimes reverting back into worlds in the world browser (reported by @shadowpanther, @gawdl3y, @kazu0617, @nytra, @akiram_, @e1ght3, @skywind.kitsune, iamgreaser and @_deltawolf, issue #164) - Remove OS Check at startup using System.Runtime.InteropServices.RuntimeInformation which causes crash on Linux (reported by @s3rgal, @scary_guy_255, ljoonal, @scary_guy_255, coolymike, issue #1230)
Debug:
- Add diagnostics for contact list bugging out (issue #739) -- If you notice some contacts randomly appearing offline, please note their name and send the log -- Ideally when you notice this has just happened, make sure the Resonite window is focused and press F3 key, which will put a marker in the log
[ 2024-01-30 12:20:53 CET ] [ Original post ]
Hello everyone! Just a small build sorry! This implements the last part of the security improvements mentioned in the incident report, tying the session tokens into specific machine info. This improves the security. For example if someone managed to extract your token from your local database, they would not be able to use them to access your account even when the token is still valid, because we mix it in with additional machine details at runtime now. It doesn't stop someone from accessing your account if they got full access to your machine, but little can at that point (other than not using "Remember Me"). The build is compatible with last. Don't need to rush to update, but you'll get a bit better security and few small tweaks if you do.
Security:
- Add mechanism that more strongly binds user session tokens to the particular machine that user logged from -- This prevents the raw session token leaking from being able to be used to access user's account (e.g. by leaking user's local database) -- With this change, if you make significant changes to your system hardware (CPU, motherboard, BIOS update...), you might get logged out as a result. This is expected behavior. -- Note that the verification of user's machine was already done on login process before, preventing a new token from being obtained without knowing the user's secret machine ID. This change makes it harder to use a lkead token while it's still valid, without having other pieces of information about user's computer
Tweaks:
- Devices providing mouth tracking data are now ignored as source of mouth tracking data when they indicate that they do not currently track (implemented by @probableprime) - Add diagnostic for session info disappearing (for issue #164) -- If you notice sessons becoming worlds when they shouldn't, please take a note of the name of the world and send the logs
Locale:
- Merged French locale additions by @j4.lc
[ 2024-01-29 21:52:34 CET ] [ Original post ]
Just a small update! This has some more security improvements based on the recent incident. Also cleaning up a few small issues. Compatible with previous.
Security:
- Mark entities that contain session token as sensitive and add mechanism that will never print them out to log, to prevent sensitive data being written to log even if it's accidentally logged in - Regenerate session token for long running client/server sessions at regular intervals (currently 1 day)
Tweaks:
- Context menu will show options for "Copy Texture", "Export File", "Import File", "Copy Link" only when a single item is held, to avoid too many items appearing
Locale:
- Merged German locale update by @muppeq - Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc
Bugfixes:
- Re-added missing Resonite profile for migration -- This allows migrating one Resonite account to another (based on request by @slythefloof) - Fix SystemHelperServer preventing from running multiple instances of Resonite client
[ 2024-01-27 18:39:15 CET ] [ Original post ]
As some of you might've heard, we discovered a security issue earlier today and asked users to update immediately. We apologize for the inconvenience this has caused. This is a report on what happened and how we have addressed the issue.
What happened?
Earlier today, we became aware that when a user logs into Resonite by typing their credentials and the login succeeds, the user's login token ends up written to the log file. If this log file is then shared with anyone by that user, it can be abused to get access to the user's account under certain conditions.
Why did this happen?
The original goal was to log in just basic information about the login process - mostly the server response status. However at some point we have extended the diagnostic to print out the entire entities coming from the cloud (this includes a number of entities that do not contain sensitive data as this), which affected the login entity, exposing its internal data by accident.
Who did this affect?
The session token system is designed to limit their lifetime and usability, to minimize the impact of accidental leaks like this. The tokens are made to be short lived if possible and will be invalidated in following conditions:
- When user explicitly logs in from the same machine
- When user checks Remember Me and starts their client again
- The token expires (1 day without Remember Me and 30 days with Remember Me)
- You have shared a log file from a client session where you logged in by typing your credentials (username/email and password)
- You have not logged in again on the same machine manually
- You have not started the client again since logging in
Was there a cloud data breach?
No. The only way the tokens leaked is by users sharing a log from their own machine from when they logged in. Additionally we do not store the actual session tokens on our cloud - instead we store a salted hash of those tokens. As a result, even in the event of a data breach on the cloud where the session information would get leaked, an attacker would be unable to use this data to access your account.
What did we do to resolve this issue?
We have published a new client which removes the logging from the login process and requested that any online users update immediately. Roughly 10 minutes following this, we have cleared any existing sessions in the database that only had a single login (meaning they were the original login session, which would be vulnerable). Users who have had Remember Me turned on and have restarted the client at least once were not affected, since the potentially leaked session token from login was already removed from the database by the subsequent launches of the client.
What are we doing to prevent this in the future?
To ensure that similar mistakes do not happen again, were making a few modifications to the system to tighten its security:
- Mark sensitive cloud entities and prevent them from being logged for diagnostics -- Entities containing the session token are now marked as such. The diagnostic systems respect this mark and will not print out their contents -- This prevents situations where we would accidentally end up printing out the entity to the log from revealing the sensitive information again
- Extending long running sessions will regenerate token at regular intervals -- For long running clients (e.g. headless), the original login token would be kept and its lifetime would be extended continuously for weeks or even months (depending on when restart occurs), but the token would remain same, allowing it to be potentially exploited if its leaked -- From now on, the token will be regenerated and the previous one invalidated at regular intervals - this is currently every day. As a result the potential window for exploitation of a given token is now much shorter for long running sessions
- Validating users secret machine ID -- Each instance of the client generates a unique secret machine ID which is used to identify that machine. This is used to differentiate multiple sessions from multiple machines / installs -- From now on, in addition to validating the token itself, the secret machine ID is used to ensure that the client trying to access the account is the same one as that originally logged in In case the session token ends up leaking, it will be insufficient to access the user's account without also knowing the secret machine ID. This would require both pieces of information to leak -- Note: This is different from the users Machine ID which is used to identity users machine to other users
[ 2024-01-27 17:09:23 CET ] [ Original post ]
This build fixes a security issue. To ensure you're not affected, please update to this version immediately if you're currently running older version. Details will come soon!
Security
- Fixed a security issue reported by @stiefeljackal and @probableprime - details will come soon
[ 2024-01-27 10:18:07 CET ] [ Original post ]
Hello everyone! This is mostly just small bugfix release, cleaning up a few things. I'm trying to put more of my focus now on the Settings UI rework, but these things were fairly important to cleanup and polish some recent changes.
New Features:
- Add "Replace from clipboard" button to StaticTexture2D (requested by lxw404, issue #1237)
Tweaks:
- When pasting texture from clipboard, the button will indicate that it's processing now and disable itself until processing is done
Locale:
- Merged Japanese locale update by @.aesc - Merged Korean locale update by @mirpasec - Merged German locale update by @muppeq - Merged French locale update by @j4.lc
Bugfixes:
- Fixed new instances of a record failing to sync after the original with same ID has been deleted in the cloud -- This fixes cloud home not syncing after the original is deleted (reported by @virerite, issue #1202) - Remove attempts to get stack trace from main thread when the engine is unresponsive & avoid aborting running ProtoFlux during startup if the engine freezes for longer than 10 seconds -- This is done to help diagnose/resolve issues reported by @thomassteve83, issue #1029 - Improve backwards compatibility for Linux client by lowering minimum glibc version -- Contributed by @nutcake
[ 2024-01-26 10:33:59 CET ] [ Original post ]
Hello everyone! There's a bunch of goodies in this build! You can now copy images/textures into clipboard directly and paste them to MSPaint, Photoshop, GIMP, Telegram, Discord or whatever right from Resonite! It's easier to paste them back too if you want to make edits outside. A bunch of other things got improved - grab instancers, ProtoFlux wires are nicer now, storage sharing gives more info, encoding WebP was switched to faster (thanks to a community contribution to our fork of FreeImage!) and lots of things got fixed up. I think this is probably last build where I focus on cleaning up a bunch of "random" stuff and will switch back to working on the settings again, so it might be a bit quieter with the builds for a bit, but I'll keep you posted in #devlog!
New Features:
- Implemented support for copying textures/images directly into the clipboard (issue #1164) -- This allows you to paste the texture into image editing tools like MSPaint, GIMP, Photoshop and more without needing to export -- It also allows you to copy & paste screenshots and other images from in-game into other places - Telegram, Discord, social websites and so on -- You can copy textures/images from the inspector by pressing the copy button on the texture references - Added support for replacting texture in the inspector straight from the clipboard -- This will transparently import the texture and replace the reference - Implemented UI for TypeInput node (based on report by @marsmaantje, @zyzylian, issue #679) - Add element Xor node for boolean vectors -- This is similar to the None, Any and All operations, except it performs Xor operation on all the elements - Added "SetInstancePersistent" to GrabInstancer, which allows overriding the persistent status of instanced items (implemented by @probableprime, requested by @marsmaantje, issue #1055)
Optimizations:
- Update FreeImage library with version using faster compression setting for WebP files -- Contributed by @nutcake at https://github.com/Yellow-Dog-Man/FreeImage/pull/9 -- This makes photos and other images that require encoding spawn much faster at cost of somewhat bigger file size (20-30 %) (reported by @zyzylian, @ohzee, @virgilcore, @shiftyscales, issue #874) - Reworked mechanism for copying images from the clipboard, which skips unecessary encoding to temporary PNG file, decoding back and copying, but transfers the data in-memory
Tweaks:
- Improved message when sharing storage with users, informing of how much is currently shared (implemented by @probableprime) - Improved internal commands for managing users and diagnosing issues (implemented by @probableprime) - Add logging to the SystemHelper to help diagnose potential issues -- This only keeps a single log file from the last run, since the logging isn't as important for this
Bugfixes:
- Fix 3D texture metadata failing to transfer on peer to peer connection, resulting in locally imported 3D textures not transfering to other users (reported by @luxkitty, @nytra, issue #1193) - Reworked StripeWireMesh (used for ProtoFlux wires) and TubeWireMesh orientation computation to prevent them from twising badly (based on report by @jackthefoxotter, @shrikealvaron, issue #1181) - Fix NearestUserFoot node not working properly (reported by @art0007i, issue #859) - Mark GetActiveLocomotionModule as continuously changing, ensuring that anything depending on this node will respond to when the user changes their locomotion module - Fix deleted item/world recovery generating files with the wrong extension, resulting in those items not being able to be imported (reported by @989onan and @shiftyscales, issue #656 and support tickets) -- The extension is now .frdt, which will perform auto-detection of the actual compression format, rather than assuming it from the extension - Fix raw Bitmap2D decoding cutting off data early when the underlying stream is not able to provide all data at once (e.g. when being transferred over the network)
[ 2024-01-24 14:08:37 CET ] [ Original post ]
Small hotfix, looks like the native sockets in LNL are causing problems, so we're disabling them for now. Compatible with previous, though update recommended to avoid networking issues.
Bugfixes:
- Disabled native sockets in the new LNL library -- This should fix direct IPv6 connections not working (reported by @bredo, @ocelot342, @canadian_redz, issue #1228) -- This should fix LNL connections not working on Linux native client (reported by yosh and @sveken, issue #1226)
[ 2024-01-23 10:24:09 CET ] [ Original post ]
Hello everyone! This is relatively small build, we're updating the LNL library used for network transport! This should bring some improvements for overall performance. We're still bringing up new bridges and relays, so some connections might be sub-optimal, but things should work. There are also some new network statistics and corresponding nodes to help diagnose networking issues.diagnostics.
New Features:
- Add statistics for total number of delta, stream & control messages generated by each user & protoflux nodes (under Users/Info) to access these (issue #1112)
Optimizations:
- Updated LNL network transport library from 1.1.0 to 1.2.0 & switched to native sockets (issue #1163) -- This includes a number of optimizations in the library, which should help improve overall performance (both client and networking) -- Thanks for report by report by @bredo, issue #1200, we fixed relays not working properly during prerelease -- Thanks to @aritosuits, @.panpan, @rucio, @stiefeljackal and others for helping us test the stability during prerelease!
[ 2024-01-23 03:58:00 CET ] [ Original post ]
Hello everyone! This is mostly a bugfix release, cleaning up a few issues that were quick to fix. There's also a new internal feature, which is a pre-work for updating the LNL networking library, which will come soon (I'll probably have a pre-release build tomorrow) This build is compatible with previous, but update reocmmended to get the bugfixes!
New Features:
- Add network protocol version to network node system - this allows updating network protocol with new potentially incompatible versions, without the clients trying to communicate with the work network relay/bridge -- This is done in preparation to update the LNL library
Locale:
- Merged Japanese locale update by @.aesc - Merged German locale update by @muppeq
Bugfixes:
- Fix null Url input causing an exception on the IsHostAccessAllowedUrl node (reported by @rabbuttz, issue #1180) - Make internal input and display node types not being able to be instantiated and cause potential crashes (based on report by @989onan, issue #1159) - Fix bool & Rect datatypes missing generic unclamped lerp methods, causing crashes when ValueLerpUnclamped
[ 2024-01-19 11:45:40 CET ] [ Original post ]
Hello everyone! This build is quite focused on specific issue, but I'm pushing it now, because I don't want it to be held up by other things and the changes were pushed to cloud already as well, so it's best the build matches it. Sorry it took a bit, this issue ended up being a bit of a rabbit hole. This reworks how 3D textures are implemented and handled, in order to simplify some things in the engine and resolve a number of errors with those textures - notably LUT's being darker than expected, which broke color grading and number of other effects (e.g. colorblind filters and such).
Refactor:
- Unified implementation for Texture3D assets with the Texture2D and Cubemaps (implemented by @geenz and myself (@frooxius)) -- The new implementation uploads the texture data from raw data and allocates sRGB data format when the preferred profile is sRGB, fixing cases where texture is sampled incorrectly -- 3D textures are now supported by the asset variant system properly - however BC compression algorithms are not - they will be only in raw format -- This makes per-pixel texture processing options avaiable in the inspector and to ProtoFlux (e.g. inverting/swapping color channels and so on)
New Features:
- Added generic support for procedural 3D textures (meaning more can be easily implemented now) - Added UVW Procedural 3D Texture (this fills the pixels with values coorresponding to the UVW coordinates, mostly useful for debugging) - Added Texture3DAssetMetadata component, which provides metadata for 3D textures -- The texture information is now also shown in the inspector - Added sRGB support to LUT Material, which allows using LUT 3D Textures in sRGB space (which can be often prefered, because it gives more details for dark colors) -- This also fixes legacy LUT's appearing significantly darker than expected (reported by @code807 and @luxkitty, issue #339)
Tweaks:
- Improved HDR handling for the LUT material -- HDR values are no longer clipped, but they're normalized, processed through LUT and then scaled back to normal (we'll see how well this works in practice, we might change the approach potentially if needed) - The cloud API will no longer try to fetch variant jobs at all if the requesting worker is too old -- This should fix asset variant queue goign high due to variants being moved to poison queue, because of a stray older worker that keeps running
Locale Update:
- Merged Japanese locale update by @.aesc - Merged German locale update by @muppeq - Merged English locale tweak by Redcyberhawk
[ 2024-01-18 13:20:56 CET ] [ Original post ]
Another hotfix, fixing some more startup issues for Linux headless. Compatible with previous. I go get food now >///>
Bugfixes:
- Fix .NET 4.6 version of Brotli.Core library assuming it runs on Windows, rather than detecting the platform, resulting in issues on Linux, particularly with headless startup (reported by @sveken, @stiefeljackal, @bigredwolfy, and @bredo, issue #1134) -- See release to the library:
[ 2024-01-13 01:31:48 CET ] [ Original post ]
A quick hotfix for some issues with the updated build process, sorry for the issues! This is compatible with previous.
Bugfixes:
- Fix native Assimp.dll library missing in the build process (reported @sveken, @gabriel192, @rawpie, @bigredwolfy, @charizmare, issue #1132) - Fix Linux native opus library missing from headless with updated build process (reported by @scarstrf, issue #1134)
[ 2024-01-13 00:18:55 CET ] [ Original post ]
Hello everyone! This build is relatively small, I've been re-setting up my build environment and getting back into the swing of making builds on my main PC since I've returned from travels, so I haven't started on some of the heavier stuff yet. However there are some important bits. Importantly, we switched out open source dependencies to use NuGet packages built by CI/CD! This doesn't change anything directly on your end, but it saves a lot of time on our end - we'd sometimes spend literally days just getting the environment ready to build Resonite - which means days of not being able to work on other, more useful things. With the upcoming Metaverse Maker Contest 2024, there's now a sponsor badge! You can still get yours if you sponsor the event! There are also some optimizations to ProtoFlux wires, which should help improve performance when you're working with lots of nodes! I've implemented optimization to RenderTransformOverride too with skinned meshes, which should improve performance and stability a bit. It's not the main fix yet, but it should help. Anyway, there's more coming now that I'm back home, so keep a lookout for more stuff!
New Features:
- Added MMC24 sponsor badge (requested by @medravr on behalf of Creator Jam) - Added new contact request sound effect (created by @lacydoes) - Add ProceduralAssetMetadata component, which allows determining how many times has the procedural asset updated -- This is now also automatically shown in the inspector for procedural meshes and textures - Improved internal moderation tools (implemented by @geenz, requested by @dantetucker) - Improved internal tools to allow mass assigning/removing of event badges easily
Refactoring:
- All open source dependencies have now been switched to NuGet packages compiled with CI/CD, instead of locally compiled versions (this has been implemented primarily by @probableprime) -- This significantly simplifies our build process and makes it more reliable, allowing for better development turnaround and reduce rate of error when updating dependencies
Optimizations:
- Reduced number of steps for wire meshes for ProtoFlux to 16 from 128 (based on suggestion by @zyro1331, @lucasro7) -- This slightly reduces smoothness of the wires, but should heavily improve performance and memory usage for unpacked ProtoFlux - Small ProtoFlux wire parameter changes are better ignored now, preventing unecessary recalculations when moving whole wire setup (e.g. when moving the whole object with lots of flux parented under) (based on report by @banane9, issue #1104) - RenderTransformOverride skinned meshes will now only be flagged to be recaculated on each render when the render transform is actually overriden for given user -- This improves performance, as RenderTransformOverrides which are visible only to a specific user will not cause performance overhead for other users -- Similarly, this should improve stability due to a bug in Unity (issue #269)
Bugfixes:
- Fixed internal moderation tools for submitted worlds not working correctly - Marked MulDeltaTime and DivDeltaTime as continuously changing (based on report by @nytra, issue #1070)
[ 2024-01-12 22:36:54 CET ] [ Original post ]
Pushing out a small hotfix for the last update, which should get rid of a number of crashes. Compatible with previous, but update recommended.
Bugfixes:
- Fix null reference exceptions when updating listening state of nodes, resulting in a world crash (reported by @uruloke, issue #1062)
[ 2024-01-03 21:20:28 CET ] [ Original post ]
This is the first build of 2024, hope everyone had a happy new year and overall holidays! The major thing in this build changes how ProtoFlux updates in disabled or inactive hierarchies. This improves behavior and should provide a performance bump, particularly in worlds or with items/avatars that use culling. Since this is a change in behavior, there might be some breakage, but generally this should be better behavior overall and fix some legacy content that was designed with this behavior. We did some testing too with the community, so hopefully things will run pretty well!
Optimizations:
- ProtoFlux displays will no longer cause updates and evaluations when they are packed (based on report by @nytra, issue #886) - A number of ProtoFlux nodes will no longer keep updating when disabled or part of inactive hierarchy, fixing some legacy content and improving performance (particularly when culling systems are employed) (reported by @ohzee, @zyzylian, @shadowpanther, @shrikealvaron, @foohy, @rucio, @nytra, Issue #814) -- Drive & Hook nodes -- FireOn True/False/Value change and their local variants - ProtoFlux node changes are temporarily ignored when the change tracking is invalidated and will be rebuilt
Tweaks:
- Added the key Y as alternate binding for primary action in desktop
Security:
- Fix custom access verifier taking precedence over ban checks (from internal moderation team report by @dantetucker)
Locale:
- Merged Korean locale update by @mirpasec - Merged Russian locale update by @shadowpanther - Merged German locale update by @muppeq
Bugfixes:
- Fix DocumentPageTexture not updating the texture resolution when the PageRegion changes the aspect ratio (reported by @ryuvi, issue #982) - Fix sprite rendering with PreserveAspectRatio not sizing images correctly in all cases, resulting in them being stretched as a result (in some cases, significantly so)
[ 2024-01-03 06:40:44 CET ] [ Original post ]
Just another quick fix for the document display. Compatible with previous.
Bugfixes:
- Add favorite button to the Inventory for Document Display (reported by @jaykubjk, @luxkitty, issue #960)
[ 2023-12-21 19:13:50 CET ] [ Original post ]
Just a small hotfix for the PDF import. Compatible with previous build.
Bugfixes:
- Fixed PDF's not importing correctly from http(s) URL's (reported by @kokoa, issue #948)
[ 2023-12-21 06:00:12 CET ] [ Original post ]
Resonite now officially supports PDF files, based on popular demands from our educational users! You can import .pdf files and navigate the pages, very large documents are supported too - you can view PDF's with thousands of pages without severe performance impact. IMPORTANT: In this build, the viewer UI is very barebones, content team will be working on a much nicer UI soon, so there's still more to come! This introduces new internal asset type - Document, of which PDF's are only supported format right now. There is component for rendering the document pages into texture (you can have multiple pages rendered out of the same document at the same time) as well some metadata. We will add more as time goes (e.g. access to bookmarks and other metadata). The document viewer UI also uses the same entity interface system as video/audio players - meaning you can make your own (or customize the official one) and set it as your favorite! There are some other additions in this build too, like proper support for Cubic Bezier curves for animations (and exposing it as nodes too). [previewyoutube=cOP2Cc3vRWE;full][/previewyoutube]
New Features:
- Added native support for PDF documents (requested by PatriceFRey, @mpmxyz, @gamethecupdog, @pek2442 and number of other educational institutions/users, issue #708) -- Added StaticDocument component, which loads the document asset data (in this case PDF) -- Added DocumentPageTexture, which allows rendering individual pages of the document into a texture --- Size configures the larger side of the texture (the smaller side is computed automatically) --- PageRegion allows rendering a subregion of the page (e.g. when zooming in) -- Added DocumentAssetMetadata component - this provides metadata (currently number of pages) for given document -- Added DocumentPageMetadata component - this provides metadata of individual page of the document (currently the reference size) -- Added DocumentInterface which allows creating custom document (PDF) viewers for importing - you can use this same way as custom video/audio players and other interfaces - Implement ValueLerpUnclamped
Locale:
- Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc - Merged Russian locale update by @shadowpanther - Merged German locale update by @muppeq - Merged Polish locale update by @foxobread - Merged fix for Esperanto, Dutch and Polish locales by rassi0429
Tweaks:
- Imported/generated images are now always setup with TextureSizeDriver, which will make the quad update its aspect ratio when the image changes
Bugfixes:
- Add handling for invalid parsing arguments/flags when parsing numbers, resulting in crashes (reported by @zandario and @ukilop, issue #922)
[ 2023-12-21 02:00:38 CET ] [ Original post ]
Just a tiny build today, I've spent most of the day wrangling accounting stuff, business stuff and team meetings, sorry! There's a few bugfixes at least that I don't want get held up.
New Features:
- Add DebugTangentSpace component for diagnosing tangent space on meshes (note this is for debugging use only! The component might go poof or its behavior change at any time)
Tweaks:
- Updated yt-dlp from 2023.10.07 to 2023.11.16 **Locale:** - Merged new English locale strings from @probableprime - Merged Polish locale update by @foxobread - Merged Korean locale update by @mirpasec
Bugfixes:
- Fix Assimp library not loading on Windows when non-ASCII characters are used in the path (reported by @frick_no96, issue #758) - Fix TangentSpace on MeshEmitter making the particles emit along wrong directions (reported by @marsmaantje and @elektrospy, issue #883) - Fix API server returning 500 when SecretMachineId is missing from the request (reported by @probableprime)
[ 2023-12-15 01:11:23 CET ] [ Original post ]
Hello everyone! Today is mostly a bugfix build, fixing some issues that people had with syncing, contacts and crashes with ProtoFlux (particularly with heavy websocket usage). I'll try to refocus back on settings UI soon, but there's still some priority issues that are affecting the platform usability for some people. IMPORTANT: You might see a bunch of contact requests pop in your contacts list as a result of this update (might happen a bit after too, as it's a job that's running on the cloud). This is for people who have migrated you as their contact, but you haven't migrated them. You can either accept or ignore those as any other contact request.
Bugfixes:
- Fix records failing to overwrite when forcing sync, when the cloud has a newer version from the same machine, rather than a different one (reported by @flamesoulis, issue #852) - Fix reference input nodes returning instances that have been destroyed, resulting in a crash (based on report by @luxkitty, @nytra, issue #821) -- This also fixes an issue, where changes are not triggered on deletion - however this only works when a higher level item is referenced - e.g. a component or a slot - Fixed issues with Bridge & Relay nodes on Linux (fixed by @probableprime) - Fix race condition when scheduling ProtoFlux node events from background threads, resulting in random crashes -- This fixes crashes when sending lots of WebSocket events (reported by @hazre, @art0007i, @kulza, @orange3134, Issue #19) - Add lower level exception catching when fixing contacts to help diagnose particular issues and prevent the entire fix job from failing -- This should help fix some contacts still showing as "Contact has not migrated" (reported by @draconas_rayne, @ikani , issue #472) - Convert contacts that have not migrated their contacts into contact requests, so they are not stuck in a "limbo" state -- This fixes additional cases of some contacts getting stuck as "Contact has not migrated" (reported by @draconas_rayne, @ikani , issue #472) - Add additional Contact entity validation, to prevent creation of invalid entities that cause issues - Fixed SkinnedMeshRenderer blendshape list not adjusting number of blendshape weights when the mesh is changed (reported by @zangooseoo, issue #872)
[ 2023-12-13 01:40:15 CET ] [ Original post ]
Ooof, I'm finally getting this build out, sorry it too so long! This has a lot of bugfixes for asset processing, particularly for the asset processing system. This should fix a number of crashes that have been happening recently too. This started over a week ago, when I noticed issues popping up with asset processing. Turns out, there has been a whole bunch of them! But they should all be sorted out now. And one good feature that comes out of this - we have significantly improved DDS support now! If you got DDS files, you should be able to import a wider variety of them with different encoding. The support is not 100 % - there's a lot, but it's been increased. A big feature from this is that if the DDS includes pre-computed mipmaps, the asset variant system can now use those, instead of computing its own, which lets you make a lot of cool effects. IMPORTANT: Also note, since this updates the asset variant system, textures might take a bit longer to load for a bit, as new metadata/variants might need to be computed.
New Features:
- Implemented alternate decoder for DDS files, which has better support for variety of formats and supports decoding included mip maps, instead of just generating them from the first image -- You can now check "Keep Original Mip Maps" on StaticTexture2D, which will use the mip maps included in the DDS file -- It is recommended to use more common formats, like RGBA32, or RGB24. BC1, BC3, RGBA5551, RGB555 and so on, while supported, are discouraged, as the textures will be recompressed anyways - Added support for additional texture data formats: -- RGB565 (this is mostly internal and not recommended to use for procedural textures and such) -- R8 (single channel 8-bit format) -- RHalf, RFloat (single floating point channel) -- RGHalf, RGFloat (two floating point channels) - Expose OriginalRegistrationDate on CloudUserInfo - this is the original registration date of user account that has been imported from another service (requested by jligeza, issue #822)
Bugfixes:
- Fixed texture asset variants failing to encode as uncompressed, when one of the sides is 16K or higher - Fix ConvexHull colliders failing to compute for very tiny meshes (this also fixes asset variant system not being able to process those variants) - Fix encoding of Alpha8 textures to files not working - Fix bitmaps without flipped Y getting flipped vertically when the texture format is converted - Fixed incorrect byte ordering for floating (32-bit) textures when reading and writing pixels - Implement handling for corrupted assets (notably textures) - if the texture file is corrupted and fails to load, it will not be processed and will not load - Implement graceful handling of extremely large images files, instead of throwing exceptions and failing to process repeatedly -- The maximum number of allowed pixels is 16K times 16K. 32K by 8K is allowed and will be processed, but will be downscaled to 16K by 4K. If the texture exceeds number of pixels, it will fail to process and load at all - Implement convex hull mesh complexity reduction, to ensure that convex hull colliders are not created with excessive amounts of points -- This also works around a bug in BEPUv2, which results in severe memory corruption and results in crashes on the client or of the asset variant worker - Fix resize filtering being forced to Bilinear for small textures (128px or less), rather than provided filtering being respected - Fixed typos in the headless command help text (because @glitchfur made fun of me for those while we were at furmeet in a diner) - Fixed exceptions in ValueTextFormatDriver
[ 2023-12-11 21:14:27 CET ] [ Original post ]
This build is same as previous, but fixes issues with AccountDump not working, due to some files not making it into the Steam build (reported by @hazre and @j4.lc)
[ 2023-11-28 23:52:36 CET ] [ Original post ]
Hello everyone! Sorry for the lack of builds lately, things have been fairly busy on the business/administrative side, which took a fair bit of time away from actual development. We've had to temporarily put the Settings UI rework on pause too to address some requests and issues relating to GDPR, to ensure that users can get full access to their data. This build introduces a new tool - AccountDump, which lets you download all your personal data to your machine! We have more tools coming in the pipeline, with graphical interface and customizable options, but those will take a bit more to finish.
New Features:
- Implemented AccountDump tool, which allows creating a dump of all user data stored in the cloud (for both local backup purposes and transparency on what is stored, which is required for GDPR and similar regulations) -- You can find it in the "Tools" folder where Resonite is installed -- Please check the README.txt file or HOW_TO_USE_ACCOUNT_DUMP.txt (they're identical) -- It requires .NET 8 runtime installed to run -- This includes data that was previously unavailable, which is now exposed through the API to authenticated users, such us: Patreon funding data, Exit messages or Record Audit Log
Bugfixes:
- Fix state of the "Unshare" button in the inventory being inverted (reported by @stellanora, @enverex and @teknocatron, issue #126)
[ 2023-11-28 22:57:52 CET ] [ Original post ]
I overlooked another thing, sorry! Another hotfix. Compatible with previous, but strongly recommended to update to this one!
Bugfixes:
- Fix exception when saving items (reported by @j4.lc, issue #781)
[ 2023-11-25 00:57:52 CET ] [ Original post ]
Quick hotfix, makes new assets load properly. Sorry for the inconvenience!
Bugfixes:
- Fixed regression causing the local database not being able to store any newly downloaded assets, causing them to not load (reported by @j4.lc, issue #780)
[ 2023-11-25 00:19:42 CET ] [ Original post ]
This is relatively small build, with some bugfixes and notably adding ability to export data from your local database. There is more you'll be able to do with this later, but this is a step to get it out in a human readable format (for the records), which is necessary for some GDPR compliance. I've been focusing on the setting system and we had a number of other administrative things come up that we've been dealing with, so things are a bit light on builds unfortunatelly, sorry! But hopefully these few fixes and tweaks help a bit in the meantime.
New Features:
- Added ability to export data from the local database through command-line arguments (this provides a backup option for locally stored data and helps us comply with some GDPR requirements) -- ExportDatabaseAll
Tweaks:
- Added additional diagnostics to startup (to help diagnose issue reported by @spacegaytor, issue #629) - Add .ogv extension as recognized video format when importing assets - Online user count facet now shows the correct number of users (changed by @ryuvi) - Clicking version number facet now copies the version to clipboard (requested by @cameron5, issue #211 changed by @ryuvi)
Locale:
- Merged Russian locale update by @shadowpanther - Merged Japanese locale update by @.aesc - Merged Korean locale update by @mirpasec - Merged German locale update by @muppeq
Bugfixes:
- Fixed local database sometimes providing records for assets that were deleted or relocated, instead of the newer records with updated path - Added mechanism that will always delete the startup animation after 30 seconds, if the fade out animation fails to play for some reason (this might fix issue reported by @spacegaytor, issue #629) - Fix MatrixElement nodes having wrong label (reported by @imerin. and @epsilion.cat, issue #769) - Fixed not being able to switch back to Welcome screen after switching away from it (reported by @_deltawolf, @errorjan, issue #691) - Fixed SRAnipal not being properly released on exit (reported by @baru14, issue #746)
[ 2023-11-24 23:09:05 CET ] [ Original post ]
Mostly small build, I spent quite a bit of time updating our dependencies and cloud to .NET 8 which released recently. There's new function for sorting blendshapes now too! This should make it easier to deal with blendshapes being in different order when transferring meshes and such.
New Features:
- Added "Sort Blendshapes (by name)" processing to SkinnedMeshRenderer -- This will sort and remap blendshapes, which allows ensuring a consistent ordering of the blendshapes - Add "Sort Blendshapes (by name length, then name)" -- This is similar, but will sort blendshapes by the name length first - this is useful if you want to group them by short names first
Locale:
- Merged Japanese locale update by @eai - Merged German locale update by @muppeq
Tweaks:
- "Reset to default" field inspector action is now undoable (requested by @nytra, issue #713) - Updated cloud infrastructure to .NET 8 from .NET 7 - Updated number of libraries to .NET 8 related versions (e.g. System.Text.Json) - Updated additional dependencies and libraries to newer versions - Blendshape names in the inspector will now auto-update when the target mesh is changed (e.g. when recomputing or sorting blendshapes) - Updated native Assimp library to latest version from the source
[ 2023-11-18 21:24:21 CET ] [ Original post ]
The last build is not actually compatible with previous, I didn't realize that some embedded type references have changed with the refactoring. I'm sorry for the trouble! Please update to this build ASAP if you're on previous too, as some things might not load properly.
Bugfixes:
- Fix compatibility issues with last build due to move of MeshX and related classes (based on report by @brodokk)
[ 2023-11-15 19:25:45 CET ] [ Original post ]
Just a small build, want to get a few fixes out. Currently my main focus is on the new setting system. This one's compatible with previous build!
New Features:
- Added support for floatQ/doubleQ values to AnimJ format (based on request by @stiefeljackal, @rucio, Rixx, Stella, Storm_DPD, issue #686)
Tweaks:
- Tweaked laser priority rules to always prefer the context menu when it's open -- This fixes not being able to click some options when in UI aligned mode with the inspector (based on reports by @_deltawolf, @eai, issues #634 and #693)
Refactor:
- Moved MeshX class from Elements.Core to Elements.Assets
Bugfixes:
- Fixed regression in mapping for Timer node for legacy content (reported by @orange3134, @motomaid, @0_vex_0, issue #694) - Marked GetParentSlot as continuously changing, as the parent slot can change at any time (reported by @enverex, issue #671) -- Note that when possible, it's recommended to structure your logic to fire when changes occur and only evaluate once, rather than evaluating continuously, as this has performance impact - Fixed missing Discord native library in the build, resulting in the Discord integration not working properly (@shadowpanther and @probableprime, issue #646)
[ 2023-11-15 18:26:59 CET ] [ Original post ]
I'm pushing a few more things that I wanted to get out of the way before I start coding the new settings system. This should fixup some crashes and other issues. I'll be starting coding work on the new settings system now! It'll take a bit before there's anything visible, there might be some more smaller builds in the meanwhile.
New Features:
- Implemented ability to directly edit bool and string GlobalRef's through the node UI (requested by @shrikealvaron, issue #303)
Tweaks:
- ProtoFlux tool will no longer offer creating incompatible types of stores - Holding Ctrl+V will result in repeated pasting (requested by @cameron5, issue #481) - Global fields will now accept dropped value sources
Locale:
- Merged English locale tweak by @enverex - Merged Russian locale update by @shadowpanther - Merged German locale update by @muppeq - Merged Japanese locale update by @.aesc
Bugfixes:
- Fix build script not copying files in some cases, typically on version downgrades -- This re-fixes issue #592 (based on reports by @rucio, @zahndy, @readun) - Fixed Discord being required, causing crashes on headless and other machines (reported by @nytra, issue #640, fixed by @ProbablePrime) - Fixed generic node selectors creating invalid generic types, resulting in crashes (e.g. DataModelStore with Guid as reported by @orange3134, @zozokasu, issue #467) - Fix crash when feeding NaN as Lerp into the MultiCubicLerp, MultiCosineLerp and MultiSlerp nodes (based on report by @marsmaantje, issue #443) - ToString node will now catch format string exceptions (preventing crashes) and output the error as a string (based on report by @snerfoil, issue #542) - Important: The format of the error message can change. You should not parse it programmatically, but instead read it and fix your code based on it
[ 2023-11-13 22:33:18 CET ] [ Original post ]
A bunch of small additions and bugfixes. You can now override materials in rendering contexsts, we support HTTP proxies, have Discord integration there's some new nodes and inspector options. Sorry that there's not more for past few days, writing up the issues and everything took a good chunk of time away from working on the build itself.
New Features:
- Add RenderMaterialOverride component, which allows overriding materials on MeshRenderer depending on the view context -- This component can be more desirable to use with SkinnedMeshRenderer in particular for now, as it does not require forced recalculation of matrices, which currently has some stability issues and additional performance cost - Added support for HTTP proxies through configuration file (implemented by @geenz) -- This can be done by adding `proxy` entry to the Config.json file, which has following subentries: --- `autoDetect` - whether to autodetect proxy settings (default false) --- `localBypass` - local bypass on local domains (default true) --- `bypassDomains` - list of domains to bypass --- `address` - HTTP/S proxy to use for all web requests --- `credentialStore` - source for proxy server credentials. Can be `DefaultSystemCache`, `NetworkCache` or `UsernamePassword` --- `username` and `password` for the credentials - Added UpdatesTimer node, which fires update every n updates (requested by @azavit, issue #334) -- Note that the rate of updates is variable and will change depending on framerate!) - Add ValueFieldProxySource
Tweaks:
- Dropping values onto fields into inspectors is now udoable (requested by @ohzee, issue #555) - Resolving types is no longer case sensitive -- This makes "slot" work instead of just specifically "Slot" (based on request by @code807, issue #620) - Nodes will now spawn with 1.0 scale instead of 1.25. The scale of the visual has been increased by 1.25 to compensate (based on request by @art0007i, issue #575)
Locale:
- Merged Esperanto locale update by @jackalgirl7, RobertBaruch, @_deltawolf and behilam - Merged Japanese locale update by @.aesc - Merged English locale tweak by @enverex 1 - Merged German locale tweak by @muppeq - Merged Korean locale update by @mirpasec
Bugfixes:
- Fixed Twitter video URL's using the x.com domain not importing (reported by a big cutie @glitchfur, issue #615) - Added explicit reference to TwitchLib packages for the headless to ensure proper versions of the libraries get copied -- This odd crashes reported by @liny_fox, @zahndy, @readun, @raithsphere, issue #592 - Fixed crash when writing local reference target to non-local reference (based on report by @orange3134, issue #595) - Fixed crash due to bobool3ol dispay (reported by @art0007i, issue #588)
[ 2023-11-11 20:38:30 CET ] [ Original post ]
A whole bunch of bugfixes, many of them for ProtoFlux and did a fair bit of work on on the display nodes and a bit on input ones to make them a bit better. There's more to do still, but hopefully this helps! Also you can now drag/drop actual direct values in some cases now. It's testing the waters a bit with that, right now you can't grab those values in the inspector yet, I'll have to add a thing for that later and see what fits there nicely, but it's a start.
New Features:
- Added ValueReceiver
Optimizations:
- Switch ProtoFlux stack layout management to use native stack, rather than heap allocated structure
Tweaks:
- Improved Linux cache path selection for graphical client (based on feedback by yosh, iamgreaser, @banane9 and @enverex, issue #54) - Increased size for display nodes when they are displaying vector or matrix values to avoid text becoming too small - Fixed colorX input node being too narrow
Locale:
- Merged Icelandic locale update by @namminamm - Merged English locale tweak by @namminamm
Bugfixes:
- Fixed null reference exception when checking for SystemHelper support when one hasn't been instantiated - Fixed UserRef not being deep cloned when duplicating, resulting in references to its internal members being lost (reported by @art0007i, issue #12) - Fixed references to Parent field on slot being lost when duplicateing (reported by @mpmxyz, issue #27) - Fixed "Continously" being mispelled in some node names and attributes (reported by @_deltawolf, issue #248) - Fix Continous field being mispelled on ButtonPlaybackSeeker (reported by @_deltawolf, issue #248) - Add guard against writing references to local elements to non-local dynamic variable spaces. -- This fixes crash when writing haptic sampler output to dynamic variables (reported by @marsmaantje, @elektrospy and @zyzylian, issue #18) -- Dynamic variable nodes now have a new continuation OnFailed. This will fire when invalid write has been attempted - Fixed regression causing missing RuntimeData folder for Linux headless build (reported by TisFoolish, @shadowpanther , @bredo, @foxworth and @liny_fox, issue #543)
[ 2023-11-08 05:44:21 CET ] [ Original post ]
First build that I made on my laptop while in the US! I'm sorry it took so long, it took a bit to sort out the build issues, go through our dependencies and update them, but now I'll be able to make builds way faster that everything is working again, plus we're a fair bit closer automating the builds completely in the future as well. There's been a lot of changes in the background too to cleanup and improve our build process, which you can't directly see, but that will make stuff easier for us going forward. This build is mostly dependency updates - some libraries got updated to latest versions (like Assimp for model importing, MessageFormat.NET, which now includes more comprehensive set of pluralizers) and so on. I'll start working on a number of issues and features tomorrow now that build process is out of the way. Keep an eye out on any issues, since a lot of stuff got updated, some things might've broken. I did a pretty thorough testing, but it's possible I missed some things.
New Features:
- DestroyPreservingAssets() on a Slot method has been exposed to the data model (exposed by @probableprime) -- Note if using ProtoFlux you should use appropriate destroy nodes instead of calling this method
Tweaks:
- Updated Assimp library (used to import and export 3D models) to latest from the source -- This includes hundreds of commits of updates to the library since the previous version - Updated AssimpNet wrapper to a different version of the library and reimplemented some changes needed on our end - Updated MessageFormat.NET library to latest from source and reimplemented custom modifications - Updated Mono.Cecil to 0.11.5 - Updated LZMA SDK library to latest from NuGet - Updated Graph3D.Vrml library to official NuGet - Updated TwitchLib library to latest version from offficial NuGet -- Please note that a lot of the functionality is currently still broken, due to discontinued API's on Twitter. We will need to redesign and reimplement those features so they work again. Chat should still work though. - Recategorized some ProtoFlux nodes (based on feedback by @shrikealvaron, categorized by @probableprime)
Locale:
- Merged Polish locale update by @foxobread and @alex_2pi - Merged Japanese locale update by eai04191 - Merged Korean locale update by @mirpasec - Merged English locale fixes by @adamski2003 - Merged English locale fix by @probableprime (based on report by Armored Dragon) - Merged Russian locale update by @shadowpanther - Merged German locale update by @muppeq - Merged Finnish locale update by @airride91 - Merged British English locale update by @enverex - Merged Norwegian locale update by Reborn
Bugfixes:
- Fixed color to short hex conversion returning invalid values at bounds (reported by @imerin., fixed by @probableprime)
[ 2023-11-07 05:28:55 CET ] [ Original post ]
Just a tiny build sorry! Spent a lot of time busy with errands, sorting out some dependencies (which shouldn't have any user facing changes) and I just got my COVID shot earlier today, so I want to get some of these changes out of the way, because I don't know how I'll feel over next few days. There's bugfix for a crash, another fix for the exit screen and bunch of locale updates.
New Features:
- Added DataModelTypeStore node for storing values of Type type in the data model -- This fixes crash when creating data model store for this type (reported by @zandario, issue #45)
Locale updates:
- Merged English locale update with support URL's being provided by variable by @probableprime - Merged Korean locale update by @mirpasec - Merged Japanese locale update by @.aesc and eai04191 - Merged German locale update by @jackthefoxotter and @muppeq - Merged Finish locale update by @airride91 - Merged Russian locale update by @shadowpanther
Bugfixes:
- Fixed exit screen Patron small text list being duplicate of the bigger text list (reported by @sloppymcfloppy, issue #273)
[ 2023-10-20 14:12:39 CET ] [ Original post ]
Sorry, a bit smaller build today. Was sorting out some administrative/business stuff and one of the additions turned out to be a bit of a rabbit hole. But this should fixup a few more things and adds a new ProtoFlux node for async!
New Features:
- Added support for AsyncCallLists elements to ProtoFlux - Added AsyncSequence node (requested by @jackthefoxotter, issue #257)
Tweaks:
- Moved local variables up a folder in the category (requested by @shrikealvaron, implemented by @probableprime)
Locale:
- Added new locale strings by @ryuvi - Merged Czech locale update by @chundelac and @rampa_3 - Merged Korean locale update by @mirpasec - Merged German locale update by @muppeq - Merged Russian locale update by @shadowpanther
Bugfixes:
- Fix exception when searching for a parent is invoked on the root slot (reported by @shadowpanther, @demonzla, issue #56) - Fixed GlueTool locale strings not being used properly (reported by @lill.la, @zozokasu and @aetoriz, fixed by @probableprime) - Fixed "Local" having the machine ID in its name (reported by @leocatto, fixed by @probableprime, Issue #131) - Fix gizmo's ignoring switch to global space (reported by lxw404, @gawdl3y and @banane9, issue #53) - When VR hotswitching is disabled during startup, esnure that app starts in VR mode, instead of switching to desktop (reported by @ikani, @ardescar, @glavingkya, issue #247)
[ 2023-10-18 07:35:33 CET ] [ Original post ]
🕹️ Partial Controller Support
🎮 Full Controller Support
- [0 B]
Thanks to our advanced engine, we ensure that multiplayer experiences stay perfectly synchronized between players with zero effort for our community content creators. Whether you're just hanging out with people or building complex worlds and contraptions with other creators, Resonite will make sure every details stays in perfect sync and keeps you in control of your experience.
Socialize with anyone
Online socialization and real-time communication whether you're in desktop or VR is the foundational layer of everything in Resonite. Being able to communicate and be yourself is an important part of the platform. To make this possible, we offer a number of key features:- Low latency voice - communicate in real time with other users in session with latency rivaling that of other messaging applications
- Fully custom avatars - import, build and customize any avatars in-game and in real-time to look like the best version of you
- Full body tracking, eye & face tracking - to maximize your avatar's expressivity we support 8 trackers (feet, knees, hips, chest and elbows) as well as eye and face tracking
- Haptics support - with support for haptic vests such as bHaptics, you can increase your immersion and become part of the virtual world
- Instant messaging - chat over text, send invites, voice messages or even arbitrary items to your contacts
- Flexible session visibility & security - you are in control of the visibility and accessibility of your sessions, anywhere from public to fully private, with an access list you control. All validation and verification of joining users is done on your client - if you set your session to Private, you can be sure that it is private
- Customizable UI - the user interface is your gateway to using the platform and just like everything else in Resonite, it can be customized and extended to better suit your needs and make your daily experience more comfortable
- Self-moderation tools - we understand that not every interaction on the platform will be good and that's why we want to empower you with a number of self-moderation tools - moderate your own worlds with silence, kick and ban functions or easily mute and block individual users avatars or their entire presence. Our goal is to give you as much control over your virtual experience as we can.
- Multi-world presence - just like tabs in a web browser, you can be present in multiple worlds and switch between them in a fraction of second
Play, explore and share
Socializing does not have to end at chatting with your fellow users. Resonite is a universe full of fun gadgets, avatars and games to explore, with features to make any session fun and exciting.- Easy media sharing - drag & drop pictures, audio/music or videos into any world to share with other users with synchronized playback - it's that easy!
- Inventory system - did you find or made something cool? Save it to your inventory! You can spawn any items, gadgets and tools in any world (as long as you have permissions to do so) - everything is fully synchronized too!
- Dynamic avatar scaling - exploring the world or interacting with users at different scales can give you quite a different experience - you can change your avatar's scale anywhere, at any time (unless it's limited by the host of the session)!
- High quality audio streaming - want to host a party and be the DJ? Streaming your system audio in full stereo in high quality is a few clicks away
- World search & session discovery system - looking for a cool world to visit or what your friends are up to? Searching worlds by their names and tags as well as seeing which worlds your contacts are in will help you there
- Stream to your audience - our in-game recording and streaming tools make it easy to produce captivating and dynamic camera shots, whether you're streaming or filming videos for social media
- Custom locomotion - we don't limit you to just walking around - you can fly, noclip switch to zero-g or build your own customized locomotion system - ever tried to walk on a surface of a Möbius strip?
Build and create
If you have a creative itch, you may enjoy the powerful toolset that Resonite offers to you. Not only you can build and edit absolutely anything - from your avatar, items, to the entire worlds or even making your own tools, you can collaborate with others in real time and achieve true creative resonance!- Realtime collaboration - the collaboration on our platform is so seamless, that you will often forget it's there - our powerful engine ensures that the world and everything in it starts in perfect sync, no matter what you do - you'd be hard pressed to find any feature or functionality that'd be visible only to you (unless it's your private UI of course!)
- Edit anything - everything you see in the world can be edited and customized with the game tools - in fact, we built a lot of the official functionality in-game with the same tools that are accessible to you - from the home world, default avatars, to video players, color picker UI or progress bar - you can take them apart or build your own from scratch and favorite them
- Save anything - you can save literally anything on the platform! Whether you built a new item, an avatar or a world, or made modifications to an existing one, everything can be persisted with a single click of a button. You can efficiently store multiple copies as well - our deduplication system will ensure that any shared assets only get counted once
- Development tools - our development tools range from simple brushes and procedural meshes to more advanced and powerful ones, similar to ones you find in classical game development tools - except that you can use them in VR with real time collaboration!
- Cross-world synchronization and persistence - with our integrated cloud tools, you can easily preserve user data between sessions or synchronize state across multiple different worlds
- Import 3D models - thanks to open source libraries, it's extremely easy to bring in large variety of 3D model formats - simply drag and drop your FBX, OBJ, GLB or other files and bring them in
- Texture/Audio/Model processing - need to make a quick edit to a texture, audio file or 3D mesh? Basic editing functions are fully accessible in-game - from hue-shifting textures, normalizing and clipping audio to recalculating normals and tangents on meshes or baking them
- Export content for external tools - as easy as it is to bring content in, it's just as easy to take it out! With this, you can make edits using external tools or make Resonite part of your workflow
Code and develop
- ProtoFlux - ProtoFlux is the crown jewel of our creative tools - the most powerful visual programming language that our experienced team has designed to date, which lets you quickly prototype and build anything from simple interactions to complex games and systems - with full real-time collaboration support and immediate feedback
- Script anything - ProtoFlux can interact with anything - the world, the items, your avatar and any combinations of these!
- Websockets - thanks to built-in websocket support, you can easily communicate with external applications and scripts and build extensive functionality, such as your own game servers, fetching external data to integrating new and custom hardware, without having to depend on official integration
- Async Flows - creating code that needs to yield or wait across different frames is a native feature of ProtoFlux, with full execution scope preservation - you can even have multiple async flows running off the same code, each with their own unique context, which is a highly powerful and flexible tool for simplifying your logic
- Flexible storage system - locals, stores and data model - pick where you store your computational data depending on the desired scope and context, to build highly efficient systems
Resonate with anything, anyone, anywhere...
We are a team of passionate developers, who are developing more than just a piece of software, but something that we call a second home. We are committed continuous development, with frequent updates and community driven focus. This project is a combination of our dreams and visions of what digital spaces like this should offer and the collective needs, desires and aspirations of our community.Much of our focus and vision is on giving you, the users and inhabitants of this virtual universe, as much power and agency as we can, whether it's over controlling your experience on the platform or being able to (re)build anything we do.
It would be our honor if you decide to join our universe and help us build it together. Whatever your background or interests are, we want to build a place where everyone can resonate together.
- OS: Ubuntu 18.04
- Processor: Dual-core CPU or higherMemory: 8 GB RAM
- Memory: 8 GB RAM
- Graphics: GTX 750 (or equivalent)Network: Broadband Internet connection
- Storage: 2 GB available space
- OS: Ubuntu 20.04
- Processor: Octa-core CPU or higherMemory: 16 GB RAM
- Memory: 16 GB RAM
- Graphics: RTX 2070 (or equivalent) and higherNetwork: Broadband Internet connection
- Storage: 20 GB available spaceVR Support: SteamVR
[ 6076 ]
[ 1223 ]