2021.5.13.384 - Freeform Camera in Desktop mode, UI camera tweaks, bugfixes
Hello everyone, sorry this build took a while, but here's the Freeform camera for Desktop, completing the basic set of camera modes and the first phase of Desktop development! :smile: I'll be refocusing on some other things after this one, but there will still be probably some more tweaks and additions over following days to polish it up a bit. The keybinds are currently tentative, so expect those to shake up a bit in the future as we figure out a good way to set them up.
There's a bunch of other improvements too. I've been working on migrating our build process to Azure Pipelines to reduce the amount of manual work and potential mistakes, got a first little fruit from it - upgraded Assimp library for model import! Getting new builds of the library is now going to be much easier and faster thanks to this.
The UI aligned mode and other desktop features have also received some bugfixes and polish too as well as some other stuff too. Got a few new LogiX nodes, improvements for LogiX and so on. The desktop camera modes can now also be controlled with permission system, so you can disable Freeform camera or Third person if you need to (e.g. for game worlds), the system will auto-upgrade existing worlds based on your Camera permissions, which should be a good basis, read the notes for details!
[h2]New Features:[/h2]
- Added initial version of Freeform Camera mode, which allows to freely move view around independently of the character
-- To activate/deactivate, press the F6 key (note this is tentative and the keybinds will change in the future)
-- When activated, the mouse cursor is freed, allowing you to freely interact with items, gizmos and other elements
-- To pan/move around, first hold the Ctrl and then the Right Mouse Button. You can use WASD, C and Space to move the camera in this mode
-- Note that you can let Ctrl go after holding the right mouse button, it will keep the pan/move mode active
-- By holding left mouse button you can make the character turn towards the current cursor hit and use locomotion to walk around (movement in this mode is relative towards the cursor, meaning W will walk towards where your cursor hits on the screen)
-- More behaviors are planned:
--- Focusing a specific object in the world and being able to orbit it around
--- Having the voice come out of the view proxy when it's sufficiently far away
- Added View avatar visual that indicates where user's viewpoint is when it's decoupled from their head
-- Currently it's always activated when in Freeform camera mode
-- In UI aligned camera mode, it will appear only if the viewpoint is either at significantly different angle from the avatar head or sufficiently far away (6 meters at the moment), to avoid it from popping up when interacting with close by UI's
-- The current default visual is tentative and will be replaced with a better one soon
-- You can customize the visual by adding a new part to your avatar, using the new "View" BodyNode. This works on same principle as filling in default avatar hands/head
-- The visual is scaled up / down as it activates and deactivates and its root is disabled when not active
- Added ScreenViewPermissions permission component that allows controlling which view modes can be used by a user
-- New worlds allow any view mode to be used by default
-- Existing worlds are automatically upgraded based on the CameraPermissions component with following rules:
--- If Streaming Camera Third Person is disabled, the third person view mode will be disabled as well
--- If Streaming Camera Group, World, Manual or Framing of Other Users is diabled, Freeform and UI cameras will be disabled as well
-- To allow/disallow specific mode, you use following datatypes:
--- FrooxEngine.FirstPersonTargettingController (first person)
--- FrooxEngine.ThirdPersonTargettingController (third person)
--- FrooxEngine.UI_TargettingController (UI targetting)
--- FrooxEngine.FreeformTargettingController (Freeform Camera)
- Added character constants (under String/Special Characters) (based on request by RobertBaruch, @Zyzyl, @Shadow Panther [RU/EN, UTC+3], @Alex from Alaska and @Jack)
-- \n, \b, \a, \t (tab), \r, \v, \f, ' ' (space)
- Added "Total Visists" as sorting parameter to the Worlds interface
- Added "RunAfterInputUpdate" to AvatarPoseNode which will run posing after all input interactions update
-- This is necessary for the View node, so the pose doesn't lag a frame behind
- Added simple OAuth API endpoint to fetch user profile information: https://cloudx-account.azurewebsites.net/api/user/profile
-- This requires at very least the profile scope and email and patreon scopes in order to include information about those two respectively
[h2]Tweaks:[/h2]
- Upgraded to the latest version of Assimp (3D model import library) from the source for Windows and Linux
-- This includes about 400 commits of additions, tweaks and fixes which should improve the general format support
-- This should potentially fix crashes on Linux when importing models with no armatures (reported by @Roxas)
- UI Aligned Camera can now be activated on objects that don't have any other interactable on them (e.g. Grabbable or Touchable) (based on report by @Shifty | Quality Control Lead)
- Improved head aiming in the UI Aligned Camera mode, to avoid the avatar hand pointing at awkward angles
- 'char' datatype is now implicitly cast to 'string' when connecting LogiX inputs
- Various security improvements (based on moderation team reports)
- Generating Bone Data diagnostic in the inspector now formats the matrices to avoid overly tiny numbers from hampering readability
- "Create New" dialog positioning is now consistent with other dialogs (this fixes it spawning at wrong point in UI Aligned camera mode and similar)
- Horizontal and Vertical expression Min/Max are now defaulted to -1...1 when assigning with heuristics on the AvatarExpressionDriver (based on report by @3x1t_5tyl3)
- AvatarExpressionDriver now resets all blendshapes to 0 when data source is null, rather than the Min value (based on feedback by @3x1t_5tyl3)
- Merged Spanish locale additions by @Ruz
- Merged Esperanto locale overhaul by @Yellow
- Merged Czech locale tweak by @rampa_3 (UTC +1, DST UTC +2)
- Merged Korean locale tweaks by @MirPASEC
[h2]Bugfixes:[/h2]
- Fixed items jumping to origin when in UI Aligned Camera mode, clicking to align the item and immediatelly letting go (reported by @Shifty | Quality Control Lead and @Snooper)
- Fixed input groups now resetting when disabled, causing inputs to get stuck in the last state in some cases
- Fixed grabbed items in desktop mode sometimes getting rotated relative to the view due to the character turning from a procedural animation
- Fixed Undo steps not working for LogiX input nodes (reported by @AshtonSparx and @H3BO3)
- Fixed Tool shortcuts in Desktop mode leaving behind "Holder" slots (reported by @3x1t_5tyl3)
- LogiX Interfaces, Drive and Reference nodes now spawn properly when in UI Aligned camera mode (based on report by @Shifty | Quality Control Lead)
- Fixed exceptions when saving items that have no children (found in a log from @Shifty | Quality Control Lead)

There's a bunch of other improvements too. I've been working on migrating our build process to Azure Pipelines to reduce the amount of manual work and potential mistakes, got a first little fruit from it - upgraded Assimp library for model import! Getting new builds of the library is now going to be much easier and faster thanks to this.
The UI aligned mode and other desktop features have also received some bugfixes and polish too as well as some other stuff too. Got a few new LogiX nodes, improvements for LogiX and so on. The desktop camera modes can now also be controlled with permission system, so you can disable Freeform camera or Third person if you need to (e.g. for game worlds), the system will auto-upgrade existing worlds based on your Camera permissions, which should be a good basis, read the notes for details!
[h2]New Features:[/h2]
- Added initial version of Freeform Camera mode, which allows to freely move view around independently of the character
-- To activate/deactivate, press the F6 key (note this is tentative and the keybinds will change in the future)
-- When activated, the mouse cursor is freed, allowing you to freely interact with items, gizmos and other elements
-- To pan/move around, first hold the Ctrl and then the Right Mouse Button. You can use WASD, C and Space to move the camera in this mode
-- Note that you can let Ctrl go after holding the right mouse button, it will keep the pan/move mode active
-- By holding left mouse button you can make the character turn towards the current cursor hit and use locomotion to walk around (movement in this mode is relative towards the cursor, meaning W will walk towards where your cursor hits on the screen)
-- More behaviors are planned:
--- Focusing a specific object in the world and being able to orbit it around
--- Having the voice come out of the view proxy when it's sufficiently far away
- Added View avatar visual that indicates where user's viewpoint is when it's decoupled from their head
-- Currently it's always activated when in Freeform camera mode
-- In UI aligned camera mode, it will appear only if the viewpoint is either at significantly different angle from the avatar head or sufficiently far away (6 meters at the moment), to avoid it from popping up when interacting with close by UI's
-- The current default visual is tentative and will be replaced with a better one soon
-- You can customize the visual by adding a new part to your avatar, using the new "View" BodyNode. This works on same principle as filling in default avatar hands/head
-- The visual is scaled up / down as it activates and deactivates and its root is disabled when not active
- Added ScreenViewPermissions permission component that allows controlling which view modes can be used by a user
-- New worlds allow any view mode to be used by default
-- Existing worlds are automatically upgraded based on the CameraPermissions component with following rules:
--- If Streaming Camera Third Person is disabled, the third person view mode will be disabled as well
--- If Streaming Camera Group, World, Manual or Framing of Other Users is diabled, Freeform and UI cameras will be disabled as well
-- To allow/disallow specific mode, you use following datatypes:
--- FrooxEngine.FirstPersonTargettingController (first person)
--- FrooxEngine.ThirdPersonTargettingController (third person)
--- FrooxEngine.UI_TargettingController (UI targetting)
--- FrooxEngine.FreeformTargettingController (Freeform Camera)
- Added character constants (under String/Special Characters) (based on request by RobertBaruch, @Zyzyl, @Shadow Panther [RU/EN, UTC+3], @Alex from Alaska and @Jack)
-- \n, \b, \a, \t (tab), \r, \v, \f, ' ' (space)
- Added "Total Visists" as sorting parameter to the Worlds interface
- Added "RunAfterInputUpdate" to AvatarPoseNode which will run posing after all input interactions update
-- This is necessary for the View node, so the pose doesn't lag a frame behind
- Added simple OAuth API endpoint to fetch user profile information: https://cloudx-account.azurewebsites.net/api/user/profile
-- This requires at very least the profile scope and email and patreon scopes in order to include information about those two respectively
[h2]Tweaks:[/h2]
- Upgraded to the latest version of Assimp (3D model import library) from the source for Windows and Linux
-- This includes about 400 commits of additions, tweaks and fixes which should improve the general format support
-- This should potentially fix crashes on Linux when importing models with no armatures (reported by @Roxas)
- UI Aligned Camera can now be activated on objects that don't have any other interactable on them (e.g. Grabbable or Touchable) (based on report by @Shifty | Quality Control Lead)
- Improved head aiming in the UI Aligned Camera mode, to avoid the avatar hand pointing at awkward angles
- 'char' datatype is now implicitly cast to 'string' when connecting LogiX inputs
- Various security improvements (based on moderation team reports)
- Generating Bone Data diagnostic in the inspector now formats the matrices to avoid overly tiny numbers from hampering readability
- "Create New" dialog positioning is now consistent with other dialogs (this fixes it spawning at wrong point in UI Aligned camera mode and similar)
- Horizontal and Vertical expression Min/Max are now defaulted to -1...1 when assigning with heuristics on the AvatarExpressionDriver (based on report by @3x1t_5tyl3)
- AvatarExpressionDriver now resets all blendshapes to 0 when data source is null, rather than the Min value (based on feedback by @3x1t_5tyl3)
- Merged Spanish locale additions by @Ruz
- Merged Esperanto locale overhaul by @Yellow
- Merged Czech locale tweak by @rampa_3 (UTC +1, DST UTC +2)
- Merged Korean locale tweaks by @MirPASEC
[h2]Bugfixes:[/h2]
- Fixed items jumping to origin when in UI Aligned Camera mode, clicking to align the item and immediatelly letting go (reported by @Shifty | Quality Control Lead and @Snooper)
- Fixed input groups now resetting when disabled, causing inputs to get stuck in the last state in some cases
- Fixed grabbed items in desktop mode sometimes getting rotated relative to the view due to the character turning from a procedural animation
- Fixed Undo steps not working for LogiX input nodes (reported by @AshtonSparx and @H3BO3)
- Fixed Tool shortcuts in Desktop mode leaving behind "Holder" slots (reported by @3x1t_5tyl3)
- LogiX Interfaces, Drive and Reference nodes now spawn properly when in UI Aligned camera mode (based on report by @Shifty | Quality Control Lead)
- Fixed exceptions when saving items that have no children (found in a log from @Shifty | Quality Control Lead)


