Brekel Body v3 retail downloads

Known issues:

  • Sensors mounted upside down or sideways may not align correctly

Main installer 64 bit versions

v3.081 BETA 64bit
v3.08 64bit
v3.07 64bit
v3.06 64bit
v3.05 64bit
v3.04 64bit
v3.03 64bit
v3.02 64bit
v3.01 64bit
v3.00 64bit

Changelog

-------------
 v3.081 BETA
-------------
- fixed issue with sensor state not always being saved
- fixed issue with list of supported resolutions for WebCam through "Advanced Sensor Settings" didn't work
- fixed issue with some video codecs not working
- refined joint confidences for RGB a bit
- refined deep body joint confidences
- improvements in solver when running in upper-body only mode
- added first (experimental) support for Face expression tracking
	- tracks up to 53 shapes, including assymetric shapes, eye blinkg and eye direction
	- can be enabled on one or more sensors at a time
	- visualized in the 2D viewports and 3D viewport on solved bodies
	- runs on the GPU (requires NVIDIA RTX GPU)
	- exports face mesh with animated blendshapes and eye rotations (only exported to FBX files)
	- streaming to UDP/TCP/OSC/MotionBuilder/UE/Unity not supported yet (coming soon)
	- quality dependent on pixel size, check the new chapter in the PDF documentation for more info

-------
 v3.08
-------
- improved efficiency of deep detector for depth sensors
- improved NVIDIA RTX GPU detection for Deep Detector
- Switch for toggling between Azure Kinect & Orbbec Femto now also works when it's just clicked (not just slided)
- fixed issue with Deep Tracker on sensors that only supported a subset of engines (like Webcams)
	- UI selection could internally set the wrong engine (None/CPU/GPU)
	- loading from settings could internally set the wrong engine
	- network sensor could could internally set the wrong engine
- fixed issue with sensor state not always being saved
- fixed potential rare crash in deep body detector
- fixed potential crash when starting a pointcloud recording with Azure Kinect sensor
- optimizations based on static code analysis
- updated to latest OrbbecSDK v1.9.4
- updated to latest OrbbecSDK K4A Wrapper v1.9.1

-------
 v3.07
-------
- improved 3D joint projection for Deep Tracker on cameras with non-widescreen aspect ratio
- improved stability for Deep Tracker when depth/pointcloud data is available for reference
- improved depth estimation stability for Deep Tracker for webcams
- small speed optimization of skeleton drawing
- cleaned up GUI for Deep Tracker tab
- internally changed how deep tracking settings are passed around
	- for better flexibility with more options for future versions

-------
 v3.06
-------
- added option to the top Settings menu to reset settings
- moved save/load settings from File menu to Settings menu
- fixed issue with some settings not being saved/loaded to/from file (while Windows registry did store/load them)
- fixed issue with time/fps not updating correctly in GUI
- fixed issue with Deep Tracker settings not being loaded correctly at startup (possibly other sensor specific settings as well)
- fixed issue where Deep Tracker could crash if no simultaneous body was seen by the driver/SDK tracker (most commonly in CPU mode)

-------
 v3.05
-------
- rewrote deep tracking integration from scratch
  - better usage and integration with pointcloud and driver/SDK-based body tracking data
  - much more flexible and extensible for the future with new tracking models for example
  - now has much improved ability to adjust and improve SDK/driver-based bodies before data fusion
  - improved quality & stability
- fixed issue with console version not detecting between Azure Kinect and Orbbec Femto properly
- compacted console drawing a bit
- updated to OrbbecSDK v1.8.3

-------
 v3.04
-------
- made internal changes to how Azure Kinect initializes some calibration data to better suite Femto Bolt compatibility
- added support for Orbbec Femto sensors, using the Azure Kinect (K4A) Wrapper and Azure Kinect Body Tracker
    - unfortunately you can't currently use both Azure Kinect & Orbbec Femto sensors on the same machine
        - both sensors use the k4a drivers but each needs it's own k4a.dll file
        - both versions of this k4a.dll files are included in subfolders of the application folder
    - added toggle switch in the sensors tab that allows switching between Azure Kinect & Orbbec Femto sensors
        - this will copy the appropriate k4a.dll into the application folder (requests administrative privileges and closes the app)
    - added option from the top "Drivers" menu to switch between Azure Kinect & Orbbec Femto k4a.dll file (same as switch mentioned above)
    - Orbbec Femto driver install will both download/install the Orbbec drivers as well as the Azure Kinect Body Tracker

-------
 v3.03
-------
- moved "Show Advanced Options" from top menu to Settings tab so it's more visible for users
- fixed issue causing a crash on sensor discovery on some (Win11) systems, depending on other installed programs
  - added more logging when discovering sensors to help identify and isolate such crashes in the future
- fixed issue of GUI would sometimes not re-enabling until timeout when no (valid) sensors were selected upon "connect sensors"
- fixed issue where sensors disabled in "advanced sensor settings" remained disabled even when not using advanced settings
- fixed issue with Orbbec drivers not always being detected


-------
 v3.02
-------
- deep learning based GPU tracker now supports multi-person tracking
  - up to 8 people (per sensor) can be tracked per frame
- internal body buffer cleanup should now work a bit more intelligent
  - by removing old & low quality bodies first to meet max desired buffer size
- Azure Kinect Body Tracker now defaults to DirectML since it's more accurate and more compatible than CUDA
- improved marker type detection
- fixed issue with deep learning based GPU tracker not always starting up correctly
- fixed issue with "Advanced Sensor Settings" dialog crashing on subsequent uses
- fixed issue where sensors that a user disabled in the "Advanced Sensor Settings" dialog could still show up in the sensor table
- updated internal libraries to latest versions
- updated to OpenCV 4.8
- updated to latest Intel RealSense SDK v2.54.2


-------
 v3.01
-------
- various small code optimizations based on static code analysis
- added option for Unreal Engine compatibility in FBX recorder
  - this adds a (tiny) cube mesh to the hierarchy so that UE can load the FBX file
  - note that you may need to enable the following option in the FBX Import Options window in UE:
    "Animation > Snap to Closest Frame Boundary"
- some efficiency optimizations for Kinect v1 (XBox 360) sensors
- ffmpeg no longer pollutes console with lots of debug messages during video output
- added option to save in FBX 2020 file format
- updated to latest FBX SDK 2020.3.4


-------
 v3.00
-------
- first official non-Beta release
  - installer no longer expires (when new beta was available)
  - v1/v2 are required to buy a v3 license (30% update discount available, just drop me an email)
- added option to switch between "Advanced Sensor Settings" and regular setting selections
  - when advanced is enabled you can specify per sensor to
    - use it or not
    - use color or infrared (depending on sensor support)
    - which resolution to use (depending on sensor support)
- fixed some issues with using advanced sensor settings in some cases
- fixed some issues with UI widgets when using advanced sensor settings in some cases
- tested streaming into UnrealEngine 5
  - works the same as UE4
  - adjusted some GUI labels and documentation
- updated to latest compiler
- updated internal libraries to latest versions


------------------------------
 v3.00 Release Candidate 10.2
------------------------------
- updated to latest Stereolabs ZED SDK v3.8.2

------------------------------
 v3.00 Release Candidate 10.1
------------------------------
- fixed issue with ZED & webcam sensors initializing when running in headless/console mode
- fixed issue with virtual network adapters not being considered in cases where they could be a valid option
- fixed issue with network timestamp warning on dropped frame

----------------------------
 v3.00 Release Candidate 10
----------------------------
- minor efficienty improvements for internal processing of several sensors
- updated to NVIDIA MAXINE AR SDK v0.8.2
- updated internal libraries to latest versions
- extended installer to 1st of July

---------------------------
 v3.00 Release Candidate 9
---------------------------
- improved quality and reliability of GPU deep learning detector
- fixed issue with StereoLabs ZED body tracking not starting properly on latest driver/SDK version
- added download links for NVIDIA AR SDK for RTX 400 series cards
- changed a string conversion routine in record triggering class to be more robust for certain unicode characters
- updated to latest Stereolabs ZED SDK v3.8.0
- updated to latest Intel RealSense SDK v2.53.1

---------------------------
 v3.00 Release Candidate 8
---------------------------
- fixed issue with Azure Kinect sensors running on headless client didn't send data to GUI
- fixed issue with timetamp being displayed as 0.0 if sensor was selected while running infrared instead of color
  - this also fixes a warning in the message log about timestamps not matching in multi-sensor setups
  - this could potentially fix some issues with alignment too
- added mutex to headless version to avoid (rare) multi-threaded race condition
- when clocks of network clients and GUI are synchronized this is now logged in the GUI
- we now retry if NVIDIA AR SDK doesn't initialize properly on the first try
- updated to latest NVIDIA AR SDK v 0.8.6
- extended installer to 1st of January

---------------------------
 v3.00 Release Candidate 7
---------------------------
- for Azure Kinect multi-sensor sync is now automatically disabled when using Infrared stream (since drivers only support this for color)
- fixed memory leak (eventually causing a crash) for Kinect v2 when using infrared in headless mode
- added color whitebalance controls (for sensors that support it)

---------------------------
 v3.00 Release Candidate 6
---------------------------
- added "Advanced Sensor Settings" window
  - finds and list all sensor types found on your machine
  - allows to enable/disable usage of each sensor
  - allows switching between color/infrared when supported/applicable
  - allows to switch video/depth resolution when supported/applicable
- added critical warning message when USB2 cable is detected on RealSense sensor
- added Desktop, My Documents and Home shortcut locations to sidebar of file/folder dialog windows
- added option (from File menu at the top) to save/load program settings to/from .ini file
  - settings are also still automatically saved/loaded to Windows registry on application close/start
- removed option to switch resolution while sensor is running (as this didn't work well on all sensor types)
- removed "Edit Sensor Blocklist" since this functionality is now handled by the "Advanced Sensor Selection" window
- removed "Force using Color for video" from top menu since this functionality is now handled by the "Advanced Sensor Selection" window
- fixed a crash that could happen on sensor uninitialize
- preferred network adapter window will now open up with previous setting instead of always reverting to Auto
- updated to latest Intel RealSense SDK v2.51.1
- extended installer to 1st of November

---------------------------
 v3.00 Release Candidate 5
---------------------------
- at application start we now inform Windows OS to prefer not to go to sleep (released at application stop)
- small additions and corrections in documentation
- when running an Intel RealSense sensor on USB2 we now print a warning in the message log
- override default depth units for Intel RealSense D4xx sensors to increase depth fidelity
- fixed issue with some of the lens calibration data of Intel RealSense sensors not being read correctly from drivers/SDK
- fixed issue with marker detection on some Intel RealSense sensors
- added download/install button for NVIDIA AR SDK for Intel RealSense/Webcams sensors and in top menu
- updated to latest Stereolabs ZED SDK v3.7.6

---------------------------
 v3.00 Release Candidate 4
---------------------------
- fixed link to official Microsoft site for Kinect v1/v2 drivers
- added link to Discord in the Help menu
- updated to FBX 2020.3.1
- updated to Aruco 3.1.15
- updated to FFmpeg 5.0.1
- updated to Visual Studio 2022 with all the latest compiler optimizations
- extended installer to 1st of September

---------------------------
 v3.00 Release Candidate 3
---------------------------
- StereoLabs ZED2i sensor should now be recognized
- refined driver detection
- updated internal libraries to latest versions
- updated to latest Stereolabs ZED SDK v3.7.4
- updated to latest Azure Kinect v1.1.2 SDK

---------------------------
 v3.00 Release Candidate 2
---------------------------
- added MotinoBuilder 2023 plugin
- extended installer to 1st of July

---------------------------
 v3.00 Release Candidate 1
---------------------------
- fixed issue with marker detection points
- improved visual quality of network sensor data
  - especially noticable on lower quality settings
  - more aggressive edge filtering on 3D pointcloud and color video streams
  - has no effect to tracking/recording quality (since that is all done on the remote machine on uncompressed data)
- added button to reset all skeleton settings to their defaults
- added option to draw total confidence score for solved bodies in the 3D viewport
- added "Max Num Bodies" option on "Skeleton Settings" tab
  - indicates how many bodies you want to track
  - when more bodies are seen the bodies with the highest number of confidence will be kept
  - can be used when you know how many bodies you want to track and for example filter out people in the background or walking by
  - a value of 0 will pose no restrictions (the default and previous behaviour)
  - this will be used for 3D viewport drawing, recording and live streaming
- added "Minimum Confidence" option on "Skeleton Settings" tab
  - will reject any (solved) bodies with a total confidence score below this value
  - can be used to reject bad quality (or partial) skeletons and only keep known good ones
  - a value of 0 will pose no restrictions (the default and previous behaviour)
  - this will be used for 3D viewport drawing, recording and live streaming
- changed version number to v3.0 RC1 in anticipation for release
- updated to latest Azure Kinect v1.1.1 SDK

---------------
 BETA v0.99997
---------------
- added option to enable hardware acceleration for video exporter for faster video encoding
	- attempts to use NVIDIA, AMD and INTEL acceleration and automatically falls back to CPU mode when not available
- fixed a bug where MJPEG video codec did not work due to unsupported video header setting
- H264/H265 now explicitly use "main profile" making files potentially more compatible with various players
- OSC network send class now checks timestamps
- fixed issue where OSC timestamps could get too high leaving not enough digits of precision left for meaningful data
  - instead of using system clock the time since start of the application is now used to leave more fractional digits for usefull data
  - attempts at sending data as double (instead of float) would result in some OSC readers not being able to handle the data correctly
- updated to latest Stereolabs ZED SDK v3.7.0
- extended beta to 1st of May

---------------
 BETA v0.99996
---------------
- added option to switch 3D view to fullscreen by double clicking on it
  - can be disabled by toggle from the Settings menu at the top of the app
- extended beta to 1st of March

---------------
 BETA v0.99995
---------------
- fixed issue with JPEG compression/decompression that could cause a crash on recording and possible at other points on some machines
- updated to latest Intel RealSense v2.50.0

---------------
 BETA v0.99994
---------------
- added experimental support for body tracking on regular 2D webcams
  - can be combined with depth sensors for providing higher quality from additional viewpoints
  - only works with NVIDIA RTX 2xxx/3xxx GPUs
  - 2D & 3D skeletons will be generated but no pointclouds
  - only supports body based alignment (not marker/pointcloud)
  - user will need to set lens field of view for accurate 3D coordinate estimation
  - logitech webcams will be autodetected and field of view will be set automatically
- GPU based tracker now rejects points close to the edge of the screen which helps with scenarios where lower body is not visible
- alignment files are now saved with full transform matrix for added precision when loading them
- fixed issue where Intel RealSense sensors could invoke deep body tracker even when not requested on a frame
- fixed incorrect warning that "timestamps vary too much" when sensors took a while to initialize
- start recording will now switch lower tab to "Sensors Table"
- added extra info and chapters to the manual regarding
  - USB bandwidth
  - Webcam specifics
  - tracking multiple people
- updated to latest Stereolabs ZED SDK v3.6.1
- extended beta to 1st of January

---------------
 BETA v0.99993
---------------
- fixed potential crash in body time interpolation that could happen on rare occasions
- updated to latest Stereolabs ZED SDK v3.5.5
- extended beta to 1st of November

---------------
 BETA v0.99992
---------------
- fixed issue with internal handling of previous timestamps and velocity calculation for bodies
  - resulted in body solver not running in certain situations
- fixed cosmetic issue with Azure Kinect body tracker being called before initialization finished
  - resulting in a bunch of warnings in the black console box
- updated NVIDIA AR SDK to latest version for GPU based deep tracker
  - requires downloading latest version from NVIDIA site (or through the button in the Brekel app)
  https://www.nvidia.com/nl-nl/geforce/broadcasting/broadcast-sdk/resources/
- solved body boxes are now drawn on top of pointcloud in 3D view

---------------
 BETA v0.99991
---------------
- fixed possible multi-threading race condition in body data processing and face detector that could cause a crash on some machines

---------------
 BETA v0.99990
---------------
- optimizations for GPU deep learning tracker and hot it uses joint confidences
- various small bug fixes and optimizations
- updated internal libraries to latest versions
- updated to latest Intel RealSense v2.49.0
- extended beta to 1st of October

---------------
 BETA v0.99989
---------------
- implemented a new internal threading model for handling sensor data
  - fixes issue of AMD processors reporting 100% utilization even when many CPU cycles were simply idling
  - better compatibility for Intel & AMD CPUs
  - slightly more efficient in some cases
  - also implemented for network data compression
- updated to latest Stereolabs ZED SDK v3.5.2

---------------
 BETA v0.99988
---------------
- added option to select coordinate system when recording to TXT/CSV
- small internal change for Azure Kinect on how valid frames are checked and released to prevent chatty SDK messages to appear when computer can't keep up processing fast enough
- updated CPU body detection deep learning model and platform to latest version
- updated some libraries to latest version
- updated to latest Intel RealSense v2.48.0
- extended beta to 1st of September

---------------
 BETA v0.99987
---------------
- made camera panning speed proportional to camera distance so when the camera is far away it visually moves a similar distance when panning
- fixed issue with GPU based deep tracking on large resolutions
- fixed issue with Kinect v2 sensor occasionally crashing on unitialize
- fixed issue with printing sensor calibration values
- network server thread now caches incoming UVs where possible

---------------
 BETA v0.99986
---------------
- fixed issue where headless/console version would crash when checking GPU support (since OpenGL context was not valid)
- fixed issue with internally selected sensor not being reset on sensor disconnect
- extended beta to 1st of August

---------------
 BETA v0.99985
---------------
- fixed regression issue from last version when recording multiple FBX files in succession

---------------
 BETA v0.99984
---------------
- FBX SDK is now initialized at first sensor connect
  - previously it was initialized when processing the first recording but with the latest SDK release this could stall things due to threading and cause the app to hang and/or eventually crash
- moved processing of NVIDIA body tracker to separate thread
- updated internal libraries
- updated to latest Autodesk FBX SDK 2020.2.1
- updated to latest Intel RealSense v2.45.0

--------------
 BETA v0.99983
--------------
- added support for running deep body tracker on NVIDIA RTX 2xxx/3xxx cards on Tensor Cores
  - helps to improve tracking results especially on low sensor counts
  - works in conjunction with existing (machine learning) based tracking
  - offloads deep tracking to the GPU and is an order of magnitude faster than CPU implementation
  - runs in realtime on NVIDIA RTX 2060 or higher GPU
  - currently only supports tracking a single person
  - although it's faster than the CPU implementation it's slightly less accurate for difficult to estimate poses
  - not supported on AMD or Intel GPUs (note that CPU implementation does works on both AMD and Intel CPUs)
- deep body tracker is now initialized at the last minute so it doesn't slow down sensor init when not needed
- added text label to 3D viewport indicating if deep tracker is running
- added chapters to the documentation with some sensor specific information
- extended beta to 1st of July

--------------
 BETA v0.99982
--------------
- fixed bug that produced noise on Kinect v1 color stream
- switched to different debayering method for Kinect v1 producing faster and slightly better results
- network pointcloud processing will now drop frames if there are more than one in the queue
  - which can potentially happen when a machine cannot keep up with decompressing frames
  - this will only affect visuals in the 3D viewport and does not affect body data or pointcloud recording
- if the software detects timestamp mismatches the table will reflect this with colors
- added additional check for invalid image buffer size in memory management
- machine and sensor info is now logged to help debugging
- timestamps are now periodically logged to help debugging
- updated several internal libraries to latest versions
- updated to latest Stereolabs ZED SDK v3.5.0

--------------
 BETA v0.99981
--------------
- when using upper-body mode the body solver will not only reference the shoulders for the lower spine orientation instead of blending shoulders & hips
- added toggle to sensors table to toggle visibility per sensor (they will still be used for skeleton solve and recording)
- when attempting to use CUDA/TensorRT for Azure Kinect on non-NVIDIA GPU a warning will now be logged and the app will fall back to DirectML for the computation platform
- added additional info in the PDF documentation and tooltip regarding computation platforms for Azure Kinect sensors
- improved internal body time interpolation algorithm
- fixed cosmetic issue where sensor ID in "Selected Sensor Settings" tab was 0-based, and not 1-based like in "Sensor Table"
- fixed memory leak in BPC recorder for Azure Kinect sensors
- driver download progress window is now 'always on top'
- new version available window now correctly adjusts number of decimals if needed
- console/headless version now logs the first 5 timestamp offsets to help with debug reports
- console now resets clock offset when server disconnects
- timestamp synchronization algorithm for clients will now automatically fallback to using TCP packets when UDP failed somehow
- updated to latest Intel RealSense v2.42.0
- updated to latest Orbbec SDK
- extended beta to 1st of June

--------------
 BETA v0.9998
--------------
- latest Azure Kinect Body tracker brings:
  - support for NVIDIA RTX 30xx series GPUs
  - support for AMD and Intel GPUs
  - faster tracking model with lower hardware requirements
  - you can now switch these settings per sensor (on the selected sensor settings tab):
    - accurate or lite/fast tracking model (lite model trades ~2x performance increase for ~5% accuracy decrease)
    - internal processing engines (NVIDIA CUDA, DirectML, TensorRT and CPU)
    - default sensor orientation as well as 90 degrees clockwise / counter clockwise and upside down orientations
    - GPU ID (in case your system has multiple GPUs)
- added a warning message to the log on older CPU's that do not support AVX2 or AVX instructions
  - this may prevent some features to not be supported or work as excepted
- improved accuracy of timestamp synchronization between networked machines using a new and more sophisticated algorithm
- small optimization in joint center calculation
- HumanIK naming scheme for BVH files is now saving positions as well
- fixed a crash when an Intel T265 was connected as these sensors don't provide depth/pointcloud data
  - a mention in the message log is now added and these sensors will be skipped during initialization
- fixed issue where console version may not have read some of the more exotic sensor settings at startup
- lots of small bugfixes, prevention measures, optimizations and potential memory leaks based on static code analysis
- small optimization & bugfix in MotionBuilder plugins
- driver installer now writes to file during download, instead of flushing all data at the end
- updated to latest Azure Kinect v1.1.0 Body Tracker
- updated to latest Stereolabs ZED SDK v3.4.2
- updated Orbbec driver to latest SensorDriver V4.3.0.17
- extended beta to 1st of May

--------------
 BETA v0.9997
--------------
- marker alignment now automatically uses the 30% best frames instead of always using all frames to help robustness and quality
- marker quality now takes into account how many consecutive frames a marker has been seen
- tweaked internal joint refinement settings for Azure Kinect to be less conservative
- memory and speed optimization for smoothing filters
- fixed issue when marker alignment was stopped an internal thread to check data kept running
- fixed issue in marker time rotation interpolation code
- fixed potential memory leak with std::deque in various places
- speed optimization for texture upload to GPU for 2D views
- various small memory managment speed optimizations in math library, marker tracker & network sensor initialization
- lots of small bugfixes, prevention measures, optimizations and potential memory leaks based on static code analysis
- added warning in GUI that small marker sizes are not recommended (unless the volume is small)
- Some internal changes to hopefully avoid issues with false positives on some anti-virus/malware heuristics
- updated to latest Intel RealSense v2.42.0
- extended beta to 1st of April

--------------
 BETA v0.99961
--------------
- fixed a potential memory leak in the solved skeleton memory management
- Some internal changes to hopefully avoid issues with false positives on some anti-virus/malware heuristics
- removed undocumented "UE4_LiveLink_NamingConvention" file as it did not do anything anyway
  - unfortunately LiveLink is not flexible and only works when hierarchies and joint orients match *exactly*
  - so supporting anything else than the Brekel hierarchy is not possible at the moment
  - look into UE's (new) retargeting tools if you need to map motion to your own characters

--------------
 BETA v0.9996
--------------
- audio class now reports warnings/errors to message log (instead of console window only)
- setting audio device now logs what format settings were actually used
  (since if an invalid format is set in the GUI it will try to select the closest valid settings)
- removed internal behavior of limiting number of network packets to process in one go 
  as it could potentially prevent some crucial communication in rare occasions
- some minor cosmetic cleanup in headless/console mode output
- fixed cosmetic issue where markers in color view of sensor with mirrored color (like Azure Kinect) were drawn without mirroring
- fixed issue with headless/console mode not working and always starting full GUI on trial version
- fixed potential crash in body aligner
- fixed body aligner not working properly when primary sensor was not the first sensor
- fixed a potential (but rare) race condition for the GUI when passing bodies/markers to other classes
- fixed issue with multi pass marker alignment not working on some sensors (like Azure Kinect) when using IR instead of Color for video stream
- fixed issue with movie recorder only working once after sensor connect
- fixed issue where network sensor didn't start sending when GUI also had a local sensor
- fixed issue when running with multiple sensors on a network client
- fixed possible multi threading race condition when running with multiple sensors from a network client
- added additional debug info to the crash uploader to help isolate where exactly it crashed
- different way of compression used in installer, slightly bigger file but potentially better compatibility with anti-virus/malware scanners
- updated to latest Stereolabs ZED SDK v3.4.0

--------------
 BETA v0.9995
--------------
- rewrote audio device handling and WAV writer
- fixed a potential crash in the audio waveform display widget
- fixed cosmetic issue where headless version would only display data of the first sensor
- fixed potential race condition crash when receiving bodies/markers from network sensor
- fixed issue with network machine with multiple sensors only sending data from the first sensor due to server not receiving all init packets due to max_packets restriction
- added additional checks to catch rare crash in marker detector
- viewport text rendering will now be skipped on graphics cards / drivers that don't support it to avoid a crash
- cleaned up message log output of connected sensors to be more compact
- console/headless version now writes to a separate log file
- updated several internal libraries to latest versions
- updated to latest Intel RealSense v2.41.0
- extended beta to 1st of March

--------------
 BETA v0.9994
--------------
- completely rewrote marker aligner
  - now has option to work with a static marker or moving marker
  - now comes with a brand new mathmatical solver that uses more data to optimize to the most optimal solution
  - ability to run a two pass solve (based on moving marker) for tighter alignment
  - ability to detect markers and do alignment based on clips on the timeline
    - this can be more flexible and more accurate than doing everything on live sensors
- implemented a new marker pattern/detector
  - old markers are still fully supported
  - new markers are labeled experimental
    - detection is usually a bit faster and more efficient, especially with moving markers
    - corner refinement should be a bit more robust
    - should be a bit more robust during movement
    - still labeled experimental (feedback is welcome)
- improved internals of marker detector to more intelligently use sensor calibration and detect marker type/size/mirroring
- rewrote how paper size and marker length are passed around
- added a warning to the message log if multiple sensors are detected with one sensor not receiving any frames
  - suggesting that the computer may not have enough USB bandwidth for all the sensors
- added functionality to drag & drop alignment files onto 3D viewport to load them
- added some missing tooltips
- moved timestamp further to the left in the sensor table
- fixed a regression issue with mute/solo of track would hide the wrong clip in the 3D viewport
- fixed erroneous "Timestamps of sensors seems to vary quite a lot" message when GUI was displaying video or depth view
- fixed cosmetic issue where "Generate Marker PDF" window wasn't showing preview of the marker in release version
- updated to latest Stereolabs ZED SDK v3.3.3
- extended beta to 1st of February

--------------
 BETA v0.9993
--------------
- added an (advanced) option to blocklist sensors
  - allows user to specify a list of names
  - when initializing sensor names are checked against this list
  - if sensor name contains an item from the list it will be skipped and not connected
- added option to record video along with skeletons and BPC files
  - video output may not always be exactly frame accurate among sensors and skeleton data
- changed to a more robust and standard way of handling keyboard shortcuts
- small improvements in memory managment
- internal sensor code & compiler settings now align better for trial/retail version
- fixed issue with a few save dialog boxes stating "open" and not checking for file overwrite
- updated to latest Stereolabs ZED SDK v3.3.1

--------------
 BETA v0.9992
--------------
- fixed regression issue where joints in FBX (and possibly other) output files could get disconnected in the hierarchy
- fixed issue with installer not copying some files needed for Orbbec sensors
- changed memory managment for body velocity calculation
- increased number of internal buffers
- small string conversion optimization in UDP network message creation
- small multithreading optimization in OSC sender

--------------
 BETA v0.9991
--------------
- fixed issue with initialization of Orbbec Astra sensors
- added warning below record button if not all sensors are aligned yet and there are no bodies to record yet
- added a warning at the end of marker alignment if your marker is relatively small in relation to sensor resolution and distance to it
  - and a suggestion to print a larger one for better results
- added a few small memory initialization fixes
- explicitly set heap & stack reserve site in compiler to 4MB now
- updated deep tracker model and engine to latest model
- updated to latest OpenCV 4.5.0
- updated to latest Intel RealSense v2.39.0
- extended beta to 1st of December

--------------
 BETA v0.9990
--------------
- fixed issue where GUI got a lot of duplicate sections in the left panel (that weren't hooked up to anything)
- fixed issue in color to depth timestamp correlation used for recording BPC files
  - only seemed to occur when recording with video or depth window showing, not with 3D view
  - showed itself on Azure Kinect sensors but may have been prominent (to a lesser effect on other sensors too)
  - could result in frame stuttering between color & points when playing back in PointCloud v3

--------------
 BETA v0.9989
--------------
- added "Settings > Save Marker For Printing" option from the top menu so you can use it without connecting to sensor(s)+
- added extra check in raw body data buffer copy
- fixed issue with paper size not switching to "custom size" after setting a custom marker length
- fixed a potential out of bounds error in body & marker aligners
- fixed issue where OSC network sender could slow down or even stall the rest of the program on occasion
- OSC on Network Live Streaming tab is now disabled by default since the majority of users don't use it
- small change in internal buffer locking cadence
- "running multiple sensors on laptop" warning now only triggers if there are multiple local sensors (instead of local + network sensors)
- body and marker data for network sensors is now processed in background thread with double buffering, just like pointcloud data

--------------
 BETA v0.9988
--------------
- network  now uses a new internal buffering method to avoid race conditions especially on slower machines
  - similar to what was already implemented for sensors and BPC reader in previous versions
- added feature to use gamepads to remote controll certain features
  - works with any gamepad that is supported by Windows (for example XBox controllers)
  - works with wired and wireless controllers
  - buttons can be configured to start/stop recording and alignment functions
- console version now prints clock offset once connected to a server
- more verbosity when variation of (network) sensor timestamps suspiciously large
- fixed issue where marker length wouldn't change as it was internally tied to the wrong GUI widget element
- fixed cosmetic issue with fps counters in sensor table weren't properly colored for network sensors
- default setting is to toggle network sensors ON in the GUI now
- message log now automatically switches back to originally selected tab after 5 seconds, if it was brought to the front on an error/warning

--------------
 BETA v0.9987
--------------
- implemented a more robust and deeper integrated way to synchronize clocks between network machines
  - if clocks are not synchronized this may break alignment and data fusion
  - also automatically detects when device vs machine timestamps need to be re-measured
- fixed a possible crash that occur at the end of alignment calibration on some setups
- fixed some potential division by 0 problems
- fixed issue where disconnecting sensors while calibration was running didn't properly reset the GUI button states
- fixed small cosmetic issue with rotaton and timestamp overlapping at times in console output
- added A1 and A0 paper size presets for markers
- disabled LowDelay and enabled KeepAlive on network sockets to hopefully help with network congestion on some systems
- sensor details are now printed to the log after a few seconds to give network sensors a bit of time to send their stream details to the GUI
- internally now forces the use of desktop OpenGL drivers (which was the default on almost all machines anyway)
  - overruling a QT_OPENGL environment setting that a user or other program may have set
  - a QT_OpenGL setting of "angle" could prevent some GUI widgets from being drawn

--------------
 BETA v0.9986
--------------
- fixed issue with body timestamps on network sensors for some sensor types
	- which caused issues with alignment and data fusion not working properly or at all
- fixed issue with Intel RealSense calibration printing out errors
- fixed a crash that could happen when initializing an Orbbec sensor
- cleaned up Settings menu in the top menu by moving items to Network and Sensors submenus
- added additional checks to prevent invalid values in network body data
- fixed cosmetic issue with network bandwidth indicator displaying incorrect numbers
- improved Kinect v1 default calibration (unfortunately SDK for fetching data from device does not exist)
- improved Orbbec Astra default calibration (unfortunately SDK for fetching data from device is still broken and support staff is unresponsive)

--------------
 BETA v0.9985
--------------
- fixed regression issue with timestamps on network sensors not being adjusted properly anymore when synchronized with GUI
  - this could cause issues with alignment, pointcloud recording and data fusion with network sensors
- fixed an issue with Azure Kinect internal depth frame not being cleared properly before filling
  - causing weird trailing on the bottom half of the image when loading a BPC file into PointCloud v3
- fixed issue with Kinect v1 timestamp correlation getting out of whack in some multi-sensor cases
- added additional error checking for requesting calibration data for RealSense sensors as it could crash in some cases
- message that's displayed when beta version has expired should be a bit more clear now and suggest downloading latest version
- improved accuracy of 3D points for deep tracker
- added option to top Settings menu to print calibration data for connected sensors
- implemented a completely new way to handle sensor calibration data
  - no longer needs lens calibration files
  - automatically switches to fetching details from drivers/SDK where possible
  - new internal development tools to validate and create default calibration data
- fixed issue with Orbbec driver detection for latest driver versions
- updated to latest Intel RealSense v2.38.1 SDK
- ongoing research & development work on (marker) alignment code and math, not ready for release yet though
  (upcoming versions may need you to print a new marker btw)

--------------
 BETA v0.9984
--------------
- quick fix release since regression in previous version could fail to detect license in some cases

--------------
 BETA v0.9983
--------------
- fixed some missing data in network packets for markers
- fixed issue with marker set origin
- fixed issue where single sensor marker length and paper size weren't properly connected to internal functions
- moved single sensor marker length to advanced settings (just like multi sensor already was)
- added a mention to the license info window that it will only display v3 license info
- updated the PDF documentation regarding TCP/UDP network streaming to be a little more clear
  - it is now stated that the start/end strings contain an extra null termination character
  - it is now stated that all ints and floats are sent with 4 bytes each
  - it is not stated that all bytes are in little-endian order
- fixed issue with small amount of noise in Kinect v2 InfraRed stream
- fixed an issue with the TCP/UDP network packets sending one additional (not used) float
  - after the joint data but before the BRKL_E string indicating the packet end
  - this shouldn't really affect implementations that used the TCP/UDP packets though
- fixed issue with Licensing > Show License Info not properly working on beta before
- updated to latest ZED SDK v3.2.2
- lots of research & development work on (marker) alignment code and math, not ready for release yet though
  (upcoming versions may need you to print a new marker btw)

------------
 BETA v0.9982
------------
- added a Second Life naming convention file, haven't been able to test it though, so please let me know if you use it :)
- Deep Tracking tab now states if it's enabled or not
- made network class more robust against trying to decompress buffers with invalid size
- fixed issue with the BVH exporter that could cause weird joint flips/angles that didn't match FBX
- multi-core optimizations in the sensor frame processing (depending on CPU and core count up to several milliseconds per frame)
- multi-core optimizations in the network frame codec (depending on CPU and core count up to several milliseconds per frame)
- fixed issue with the new buffering causing pointcloud/floor alignment/refinement not to be able to fetch the latest buffer at times
- fixed some issues with pointcloud alignment (may still not be optimal, working on improving this for the future)
- fixed issue with floor leveling during pointcloud alignment using an old and much less robust algorithm than "Refine Floor Plane" did
- fixed issue where floor refinement didn't work properly for multiple sensors anymore
- pointcloud alignment is now more verbose in the message log
- removed "Slow" preset for pointcloud alignment/refinement as it didn't perform any better than the standard "Fast" one
- increased body angle towards sensor for confidence refinement to be less conservative
- last message log file is now moved to a _old folder at startup so we always keep the current and previous log for debugging / crash reporting purposes
- updated to new compiler profiting from new optimizations
- updated a bunch of internal libraries to the latest versions
- updated to latest ZED SDK v3.2.1

------------
 BETA v0.9981
------------
- added additional check in GPU load measurement to prevent crashes on AMD GPUs where measurement doesn't work
- optimized internal buffering algorithm
- fixed issue where app could get stuck in a loop re-writing registry settings in certain GUI configurations resulting in slowdown
- last message log file is now moved to a _old folder at startup so we always keep the current and previous log for debugging / crash reporting purposes

------------
 BETA v0.998
------------
- new memory buffering algorithm for live sensors to prevent race conditions
- improved Azure Kinect Body Tracker latency by 1 frame due to a bug in the SDK
- fixed some potential issues with Intel RealSense sensor model detection and potential initialization crash
- fixed issue where ZED settings would also show up for other sensors on selected sensor tab
- switched to slightly less aggressive compiler optimization regarding instruction set as it could cause a crash with pointcloud alignment
- updated to latest Intel RealSense v2.36.0 SDK

------------
 BETA v0.9971
------------
- quick fix release since I forgot to enable the StereoLabs ZED 2 GUI buttons, doh

------------
 BETA v0.997
------------
- optimized 3D pointcloud rendering speed
- message is printed to the log when a new firmware is available for Azure Kinect sensor
- several small bug fixes
- fixed potential bug in network server
- fixed issue with marker detection being unreliable on previous version on Kinect v2
- fixed issue with network sensor FPS readings not updating correctly in sensor table since previous version 
- fixed multi-threaded race condition in console/headless version when sending network data
- updated deep tracker model
- updated to latest Azure Kinect drivers/SDK v1.4.1
- updated to latest Intel OpenVINO SDK

------------
 BETA v0.996
------------
- added support for StereoLabs ZED v2 sensor (v1 and Mini do not support body tracking)
- fixed an issue with 3D viewport not drawing anything on some AMD graphics cards
- slightly tweaked internal marker detection parameters
- switched to using device lens intrinsics from drivers/SDKs that support it

------------
 BETA v0.995
------------
- added support for latest Intel RealSense L515 LiDAR sensor
- added option to set the number of threads for each deep tracker
- added option to top menu to enable/disable playing of beeps at recording/alignment start/stop
- added Remote Triggering option
	- all Brekel apps have this option to synchronize recording start/stop/filenames
- when no sensor is selected Selected Sensor Settings - ID now reads "Nothing selected in Sensors Table"
- deep tracker thread is now set to lowest priority
- fixed saving/loading BPC compression settings from Output Formats tab
- added option to Sensor Settings tab to allow for setting if current sensor is primary or not
- fixed crash in RealSense color to 3D lookup (could manifest during marker detection for example)
- extended beta license to 1st of August

------------
 BETA v0.994
------------
- improved timestamp accuracy for Kinect v1 & v2 bodies
- changed how FPS is calculated for display in the GUI
	- used to be based on system clock timestamps in the processing loops
	- now is based on the frame timestamps, which (on the SDKs that support it) better reflect the real device fps
- added a GPU usage percentage readout (NVidia only) to the bottom right of the GUI
- "Internal Solver Speed" and "Deep Tracking Speed" now displays an average value over the last 30 frames
- changed tooltip for "Internal Solver Speed" to read milliseconds instead of fps
- the "Install Drivers" options now read "Download & Install Drivers"
- added a warning message if after 15 seconds no data has been received when downloading drivers
- the sensor table and display settings are now greyed out at startup to pursuade new users to look at the "Connect Sensors" button
- increased "Connect Sensors" button a bit to help new users find it
- when the user hasn't connected sensors in 10+ seconds after startup a friendly reminder hint is displayed in the message log
- small cosmetic tweak for empty lines in the message log
- updated to latest Orbbec SDK v2.1.1

------------
 BETA v0.993
------------
- small fix for Intel RealSense sensors
  - old dll file was included in previous release causing sensor not to be recognized
  - deep tracking is now automatically enabled for RealSense sensors

------------
 BETA v0.992
------------
- moved deep tracker settings to it's own tab on the toolbar on the right
- small cosmetic tweaks on the deep tracker GUI widgets
- lightened the icon colors a bit
- Hyper-V and Virtual network adapters are now considered when selecting a suitable network adapter
- added some additional compiler optimizations
- prepared licensing system for a wider release
- prepared Trial version

------------
 BETA v0.991
------------
- no longer crashes when connecting a sensor on a CPU without AVX2 instruction support
- added a warning that Deep Tracking is only available for CPUs that support AVX2 instructions
  (generally Intel CPUs from 2013 or newer and AMD from 2015 and newer)
- fixed a potential crash in the body solver
- improved algorithms for filtering out low quality deep tracker joints
- fixed issue with Azure Kinect pointcloud being cropped in previous version
- you can now stop a running pointcloud alignment/refinement by clicking the button again
- made the sensor stall detector a little more conservative
- updated deep learning model
- updated to latest Intel RealSense SDK v2.34.0

------------
 BETA v0.99
------------
- numerous internal fixes for the body solver
- fixed some issues with time interpolation of values
- added advance option to enable/disable estimation of occluded joints for raw/solved skeletons
- small improvement on color image debayering on Kinect v1 for both speed and edge quality
- fixed issue with Kinect v2 InfraRed texture not showing up on pointcloud
- some fixes to help prevent deadlocks
- missing sensor drivers are no longer logged as warnings/errors
  - this would bring the message log to the front for users that may not be interested in some sensor types
- at startup "connect sensors" button will now slowly blink to attract attention from first time users :)
- Azure Kinect Body Tracker CUDA pre-check is now disabled and left to Microsoft's drivers/SDK/ONNX
- added Mixamo naming convention (not tested)
  - essentially the same as Autodesk's HumanIK
- CPU info now also includes AVX/SSE support
- added a "Deep Tracking" option on the "Skeleton Settings" tab
  - can be enabled/disabled on a per-sensor basis
  - runs an additional deep-learning based tracker alongside
  - helps in providing more data
  - helps by improving overall quality
  - helps by identifying left/right/front/back of a person, especially for older sensor types
  - runs asynchronously so will even help if it can't reach full framerate
  - can be quite CPU compute heavy but will split into background threads so ideal for modern multi-core CPUs
- added experimental support for Intel RealSense sensors 
  - only works when "Deep Tracking" on the "Skeleton Settings" tab is enabled
- extended beta license to 1st of July

------------
 BETA v0.98
------------
- fixed possible crash for Azure Kinect when switching to Video tab
- fixed issue with skeleton drawing toggles
- added a Processing Time readout in the selected sensor tab to help find bottlenecks
- body solver speed is now in milliseconds (was fps)
- more efficient color processing for Azure Kinect sensors
- added a warning when running on a laptop not connected to power
- added a warning when running multiple sensors on a laptop
- added a Slow/Fast preset for pointcloud based alignment/refinement (previously was always fast)
- different setup behaviour for Azure Kinect
	- when using a single sensor InfraRed stream will be used (for best speed)
	- when using multiple sensors without sync cables Infrared stream will be used (for best speed)
	- when using multiple sensors with sync cables Color stream will be used (needed for drivers to ensure sync)
	- menu option "Force using Color for video (on next sensor connect)" still works to overrule

------------
 BETA v0.97
------------
- more robust way to calculate average positions for function curve creation in exporter
- added option to toggle message log sounds for errors & warnings 
- improved timestamp accuracy for Kinect v1 / Kinect v2 / Azure Kinect and RealSense sensors
- added a stall detection background thread that checks for stalled sensors/solvers/etc and logs a warning when detected
- updated some internal libraries
- updated to latest Orbbec SDK
  - note that their body tracker now has a limit of 30 minutes per application launch
  - simply restart the app if it stops working
- extended beta license to 1st of June

------------
 BETA v0.96
------------
- updated documentation
  - more info in various places
  - new chapter on recommended minimum system requirements
  - new chapter on azure specifics
  - new chapter on sensor alignment using pointcloud data
- joint smoothing filter now does additional NaN check
- joint smoothing fitler now uses more accurate variable timestamps
- body data exporter now does additional NaN check
- network stream timestamps no longer wrap around at 1000 seconds but at numerical limits of float now
- added hint where to find Azure Kinect sync ports when running multiple sensors without sync cables
- added "Maximum Iterations" in skeleton settings
  - you may want to try lowering this number when the body solver freezes your system in some cases
- added a new background thread to check for body solver freezes
  - if this happens on your machine please report this with a copy of the message log / black console window
- added warning log if body tracker can't be started due to hardware not supporting CUDA
- added additional internal smoothing for floor detection
- updated to latest Azure Kinect SDK v1.4.0
- updated to latest Azure Kinect Body Tracker SDK v1.0.1

------------
 BETA v0.95
------------
- fixed issue with 3D viewport camera rotation
- text drawing in console is now more efficient
- text drawing in console doesn't flicker anymore
- text drawing in console now uses warning colors for
  - high CPU / memory usage
  - low frame rates
- marker tracker now runs on it's own thread instead of on the sensor thread
- added additional protection against multi threaded race conditions in drawing classes
- fixed issue with BVH output being broken
- fixed issue with possible crash in TXT & CSV exporters
  - TXT file format can now only export local euler angles, global coordinates and quaternions no longer supported unfortunately
- MotionBuilder plugin now has a manual "Max Num Skeletons" setting instead of trying to read it from the stream
- extended beta license to 1st of May

------------
 BETA v0.94
------------
- fixed a potential crash when connecting to a Kinect v2 sensor while it couldn't access one of the requested streams
- fixed issue where color mapping to pointcloud could be broken on Kinect v1 sensors
- speed optimizations for several internal math functions
- speed optimizations for Kinect v1, Kinect v2 & Azure Kinect sensors for multi-core machines
- marker based aligner now
  - uses best quality markers that got collected instead of rejecting potentially bad ones at the incoming stage
  - quality is determined by the angle to the sensor and velocity (lower is better)
  - user can tune the percentage of markers used
    - 0.00 is all markers used for alignment regardless of quality
	- 0.99 only the 1 percent best quality markers used for alignment
  - adjusted the defaults for "Detect Every Nth Frame" and "Align Every Nth Frame" to 5 (was 10)

------------
 BETA v0.93
------------
- small tweak for non-additive pointcloud drawing
- fixed issue with crash report generation/upload
- fixed issue where Kinect for XBox360 sensors depths were getting clipped
- fixed issue with settings being saved too often
- implemented a new architecture for brand/type specific sensor settings
  - dynamically adds controls to GUI
  - sends/receives them for network sensors
- added small error message to MotionBuilder plugin with suggestion if it can't connect
- added exposure control for Kinect v2, Azure Kinect sensors sensors (seems not supported on Kinect v1 & Orbbec)
- added tilt motor control for Kinect v1 sensors
- added near mode control for Kinect for Windows v1 sensors (not supported on Kinect for XBox 360)
- added color offset setting for Kinect v1 & Orbbec sensors
- added color mirror setting for Orbbec sensors
- added "custom size" option for marker size
  - in case you printed them and the measured size is slightly different
- improved mouse-over tooltip for alignment start/stop buttons for additional clarity
- initialization for azure kinect body tracker now automatically
  - detects if you have multiple NVIDIA GPUs
  - when using multiple sensors will associate different GPUs to them to spread the compute load

------------
 BETA v0.92
------------
- switched to more conservative/smooth skeleton solver settings
- added two buttons for skeleton solver settings
	- "Smooth" for more conservative settings with increased filtering producing smoother results (default)
	- "Low Latency" for more aggressive settings lowering filtering causing lower latency but also more noise
- CPU/Memory usage indicators now turn orange/red on high usage
- improved overall body segmentation quality and stability (internally used for pointcloud-based alignment)
- fixed issue with floor detection not being applied to body segmentation internally, which could cause less accurate results for refinement
- fixed memory leak in body segmentation code
- added option to limit marker detection to every n-th frame to reduce CPU overhead
- selected sensor's pointcloud now always draws on top while others are dimmed
- sensor frustums now draw in the same color as the sensor/pointcloud
- markers now draw a line to the sensors that detected them in the 3D viewport
- bodies now draw a line to the sensors that detected them during alignment
- increased internal threshold for marker interpolation time
- alignment now reports to the GUI:
  - which sensors were aligned to which
  - how many bodies/markers were used for the alignment
  - also logged when the alignment is finished
- added a popup dialog when loading alignment file which allows to specify per sensor what data to load from the file
  - you can specify to not load data for a specific sensor
  - you can remap in case current sensor names differ from what is in the file
  - if matches are found a one-to-one mapping will be the default (you can hit enter to immediately load)

------------
 BETA v0.91
------------
- 2D views now include sensor ID numbers along with their names
- reduced clutter in commandline window during initialization of Azure Kinect sensors
- fixed issue where new code for getting a unique id/name for Kinect v1 & v2 devices didn't end up in release code
- bones & boxes of joints with a confidence score below a certain threshold are now colored red in the 3D viewport
  - value can be set in the Solved Bodies Drawing Settings

------------
 BETA v0.90
------------
- added a "num skeletons solved" number to the 3D viewport
- started digitally signing executable to help alleviate anti-virus false positives

------------
 BETA v0.89
------------
- message are now not only displayed in 3D viewport but also 2D viewports and bottom status bar
- lowered "num history frames" from 5 to 2
- removed "variable timesampling" in the body solver settings as it didn't work well
- exposed "previous frame weight" option from the body solver to the GUI
  - higher values provide smoother results but increase latency
  - lower values favor current frame more increasing noise but decreasing latency
  - also lowered internal default value from 1.0 to 0.25
- improved internal body segmentation
  - helps for pointcloud alignment & refinement, especially for Azure Kinect
- when selecting a sensor the tab on the left now auto switches to "sensor settings"
- fixed issue where tilt settings didn't show up in the GUI for Kinect v1
- sensor IDs in table now start with 1 instead of 0
- primary and selected sensors are now indicated in the 3D & 2D viewports and sensor table
- fixed a bug where sensor names would dissapear in 2D views after selecting one
- fixed an issue where infrared texture would draw as black in 3D viewport for Kinect v2
- implemented better way to get a unique id/name for Kinect v1 & v2 devices
- updated internal libraries

------------
 BETA v0.88
------------
- exposed roll sensitivity controls as advanced Skeleton Settings
- added slider for Num History Frames
- moved skeleton smoothing responsiveness to advanced options
- small efficiency improvements in network encoding/decoding
- added some out of bounds security checks in body fusion solver
- investigated GPU (NVidia & Intel) compression/decompression
  - leaving things to CPU for the moment as the speed is comparable and it's compatible with all machines
- created a new algorithm for segmenting humans from pointcloud data without the need of joint data
- implemented a new pointcloud refinement method which is faster than the old one and now multi-threads across sensors
- implemented a new pointcloud alignment method
  - does an initial (rough) alignment based purely on pointcloud data (no bodies/markers)
  - will ask you to stand in the middle of the volume (an assymetric pose can help)
  - this is dependent on pointcloud overlap and may not be as robust as marker-based alignment for all setups
  - can automatically perform pointcloud refinement in succession for a tighter fit
  - can automatically perform floor leveling
  - not fully robust yet (see known issues) but a new version needed to be released due to expiration of the previous beta
- rewrote the floor detection and segmentation algorithm for refinement based on floor to be more robust
- rewrote internal timer so code can be reused more easily
- removed PCL dependency
- now sets OpenMP environment variable to prevent 100% CPU usage on some machines in some cases
- body & marker alignment now report how many matches they found in the log
- body solver now logs an error message if internal buffers grow very big
- added MotionBuilder 2020 plugin
- extended beta license to 1st of April

------------
 BETA v0.87
------------
- reduced outlier detection settings in skeleton fusion solver a bit as they were too aggressive, especially for lower sensor counts
- network communication read buffer is now set to 1MB instead of automatic
- network buffers are now polled and read at set intervals isntead of automatic
- network low latency flag is now enabled
- network keep alive flag is now disabled
- low frequency mode check is now disabled in network sensor
- fixed bug where stream fps wasn't correctly used from network sensors
- fixed issue where Reset Skeleton settings would set max angle to the same value as min value
- fixed issue where changelog wouldn't display when new version was available
- small speed improvements in sensor & network processing calculations
- added option to draw boxes for solved skeleton joints
- added "UE4_LiveLink_NamingConvention.txt" file in case you want to change the UE4 LiveLink naming scheme
  - change the names in the right column to what you want them to be in UE4
  - leave the first column as is, these cannot be changed as they represent the internal structure of the Brekel app

------------
 BETA v0.86
------------
- fixed cosmetic issue displaying driver download link when downloading from backup URL
- fixed issue when loading calibration files sometimes data was applied to the wrong sensor
- fixed problem where internal ids of multiple Azure Kinect sensors could become incorrect when using sync cables
  - causing potential cause issues for skeleton fusion solver
- reduced mirroring buffers in skeleton fusion solver
- stabilization for finger tips solving
- improved joint outlier rejection when solving from ambiguous poses form multiple sensors
- improved stability for joint rotation solving
- reduced internal skeleton distance matching in fusion solver for better multi-body solving
- updated to Azure Kinect SDK v1.3.0
- updated to Azure Kinect Body Tracking SDK v 0.95
- now supports multiple Azure Kinect's on a single machine with body tracking
  - (as long as you have multiple USB3 controllers and a beefy NVidia GPU)

------------
 BETA v0.85
------------
- added option to select preferred network adapter (Top Menu > Settings)
  - this will be used at startup of the GUI or headless version of the app
- updated to latest Orbbec SDK
- extended beta expiration date to 1st of February 2020

------------
 BETA v0.84
------------
- when downloading a driver links no longer display %20 for spaces
- 2D video widgets make a deep copy of incoming data again
- memory managment now drops frame data copy and sending it to GUI if that is still busy processing the previous frame
- updated Orbbec driver link to astra-win32-driver-4.3.0.10
- NVIdia GPU detection could fail on laptops with both an Intel GPU (connected to the display) and additional NVidia GPU
  - which would cause the Azure Kinect Body Tracker to not initialize
  - detection will be ignored for that and it will try to initialize in any case
- fixed cosmetic issue with sensor name/resolution text in 2D widgets when selecting a sensor
- fixed issue with network sensor saving it's resolution to the registry under it's network name instead of local sensor name
- fixed issue with the marker aligner not sending it's results to the GUI anymore in release version
- fixed issue with network client timestamps not synchronizing correctly in release version which could cause:
	- issues with potential sensor connection loss
	- issues with display flicker
	- issues with pointcloud recordings

------------
 BETA v0.83
------------
- changed how internally frames from the sensor processing threads are shared with the GUI
  - to prevent some rare crashes that occur when running the software for 20 minutes on some machines
- changed sensor initialization sequence for headless/console version
  - should now resemble GUI version
  - should now respect resolution settings read from registry
- number of bodies is no longer stuck at previous value when all bodies dissapear from view
- increased minimum network packet size for internal processor for better stability
- network sensors with disabled pointcloud streaming now continue to report fps & timestamp to GUI
- made top menu background a little darker for better contrast with rest of the app
- removed the need for some internal memcopies for frames, this should increase speed and efficiency
- removed the need for some internal multithreading mutex waiting, this should increase speed and efficiency
- fixed issue with flickering in 3D & 2D widgets for network sensor data
- fixed issue where sensor models were drawn reversed
- fixed issue where depth from network sensors didn't display in GUI anymore after a previous update
- fixed issue with setting transform on a network sensor did not affect the right sensor if there were multiple sensors on a network client
- fixed issue with internal face detector memory managment
- fixed cosmetic issue with network bandwidth display in the console
- fixed cosmetic issue with 2D viewers not always displaying sensor name
- fixed cosmetic issue with sensor frustums not drawing for network sensors

------------
 BETA v0.82
------------
- fixed a bug where marker tracking for Azure Kinect in InfraRed mode stopped working after a previous update
- fixed a bug where some sensors had a marker offset in 3D space
- fixed a (rare) potential crash in the 3D widget on startup
- fixed issue where sensor frustum's were inversed
- fixed issue when using network sensors only the first sensor would toggle marker tracking on/off
- fixed issue when using network sensors where tracked marker data wasn't applied to the correct sensor in the GUI app
- fixed issue with network sensor markers being rejected too quickly due to sensor transform being sent as position/rotation instead of matrix
- network communication now always sends full transform instead of position/rotation
- added additional array out of bounds check in BVH/TXT/CSV exporter to prevent possible crash
- when typing values into spinbox widgets internal value is only updated when editing has finished
- Resolution switch on Azure Kinect will now log a message that a connect/disconnect is needed
- TCP/IP sockets now set LowDelay and KeepAlive options
- added timeouts in the GL & texture widgets to drop frame if multithreading mutex can't be locked, in order to prevent deadlocks
- restricted Azure Kinect messages to critical only
- added a warning when using multiple Azure Kinect devices without using sync cables
  - includes link to Microsoft documentation web page on how to install such cables
  - https://support.microsoft.com/en-us/help/4494429/sync-multiple-azure-kinect-dk-devices
- added new commandline toggles for enabling/disabling mutex usage to control multi-threading
  -use_mutex_3d       turns mutexes ON for 3D view            -no_mutex_3d       turns it off		( default = ON)
  -use_mutex_video    turns mutexes ON for video/depth views  -no_mutex_video    turns it off		( default = ON)
  -use_mutex_sensor   turns mutexes ON for sensors            -no_mutex_sensor   turns it off		( default = OFF)
  -use_mutex_network  turns mutexes ON for networking         -no_mutex_network  turns it off		( default = OFF)
- added multi-threading deadlock detector that can hopefully help identify program hangs
  - a message will be printed to the black console window
  - a message will be added to the log file to your "\Documents\Brekel\Brekel_Body_v3.log" file
  - please drop an email to beta@brekel.com with a copy of the warnings as these are very hard to reproduce as it doesn't always occur on every system/setup/workflow

------------
 BETA v0.81
------------
- now using latest Azure Kinect Body Tracker v0.94
  - now uses the new hand & thumb joints for hand and forearm rotation solve
  - now uses the provided joint confidences in the SDK to aid the solver joint weights
  - now has a CPU fallback mode for systems without an NVidia GPU (most likely very slow)
- added option to change depth resolution on "Selected Sensor Settings" tab (for sensors that support it)
  - may cause a crash and/or restart of app requirement depending on sensor/driver/SDK/version
  - this means wide fov mode is now also works for Azure Kinect as it has improved significantly in the latest Body Tracker SDK releases
- tooltip and statustip descriptions now mention "locally connected sensors" explicitly
- when a certain sensor type was not found after trying to connect the checkbox is now automatically disabled in the GUI
  - so sensor discovery will be more efficient the next time only focussing on existing sensor types
- fixed a bug where text base file formats (BVH, TXT, CSV) did not respect framerate resampling correctly
- fixed a bug where some of the advances skeleton settings wouldn't save/load properly
- added option under Settings menu to force saving settings
  - as usual settings are saved to the Windows registry and automatically loaded at startup and saved when the app exits
- internal changes on how last used resolution is loaded & applied at startup
- app will now ask to upload latest crash report file at startup if it finds one
- improvements to marker tracking accuracy
- updated some internal libraries

------------
 BETA v0.80
------------
- crash uploaded was mangling description text on some machines
  - switched to new way of adding text to the report
  - hopefully this helps as I can't reproduce it on any of my machines

------------
 BETA v0.79
------------
- fixed a crash in the crash uploader tool that could occur on some machines (isn't that ironic)
- disabled network multi threading mutexes by default as it turned out to be that a previously fixed crash was not in the networking code after all
  - can be re-enabled using this commandline flag: -usenetworkmutex

------------
 BETA v0.78
------------
- added option to skip creating a bug report when a crash is detected
- added option to directly upload a bug report along
  - your name/email so I can contact you (optional)
  - a small description on when the bug happened (mandatory)
  - a description explaining how to reproduce the bug to help me recreate and debug it (optional)
- updated internal libraries to latest versions
- changed to a completely new way to detect GPU manufacturer
- fixed issue with NVidia GPU detection failing in console mode, causing Azure Kinect body tracking to not initialize

------------
 BETA v0.77
------------
- added some additional protection against multi-threaded race condition crashes
- increased speed & quality for face detector in InfraRed mode a bit (mostly used by Kinect v2)
- app now tries to keep track of which driver/SDK version you installed
  - tracks driver/SDK installed from any Brekel v3 app
  - compares to latest supported driver/SDK version 
- updated to Azure Kinect Body Tracker Preview v0.93 for improved tracking stability
- Azure Kinect sensor warning/error messages no longer play sound
  - especially during startup when acquiring sync it could produce a cascade of warnings.
- fixed issue when initalizing multiple Azure Kinect sensors on one machine
  - (not sure if the issue made it into previous releases actually)
- changed the mechanism on how the app checks if sensors have stopped recording
  - should prevent a signal not getting across and the GUI not resetting back ready for a new recording, especially on fast machines

------------
 BETA v0.76
------------
- added additional protection against invalid network video packets
- fixed an issue with some sensor network packages not being initialized properly which could cause a crash on first connection
- fixed an issue that could make the GUI crash on recording end in some cases
- fixed an issue when connecting to a headless client that got disconnected before
- fixed an issue with the Azure Kinect Body tracker not being released properly on disconnect, causing it to fail on the next connection
- small memory & performance improvements for network video compression/decompression by caching some things
- console/headless version now prints the last few messages from the log to the console
- errors/warnings from Azure Kinect drivers/SDK are now passed through to the message log
- cleaned up some leftover debug messages

------------
 BETA v0.75
------------
- improved performance of image mirroring
- further improved 3D marker lookup
- internal overhaul of the lens intrinsics class
- included new lens intrinsics files
- fixed small offset in marker axis for Kinect v2 sensor
- fixed problem where check for new version didn't work anymore
- fixed issue Azure Kinect color in BPC files due to internal memory manager not passing compressed buffer

------------
 BETA v0.74
------------
- fixed issue with data from network sensors being mirrored since the last version
- fixed issue with marker tracking on Kinect v2 color camera
- fixed issue where not finding network sensors before timeout would prevent connecting again
- added internal double buffering of data in some places to prevent multi-threading race conditions
- sounds for things like recording/alignment start/stop no longer cause the GUI to freeze for a frame
- updated to Qt 5.13.1

------------
 BETA v0.73
------------
- small improvement in 3D marker lookup
- small fix to prevent crash when running network sensors
- small fix for filenames containing a dot
- marker alignment now tries to prevent the main sensor from being tilted giving an overall beter floor plane
- changed internally coordinate system to better comply with OpenGL & export formats for PointCloud v3
  - you may need to redo your body/marker calibration
  - the X/Z axis text on your old printed markers may be inversed now
    - old marker still work fine for tracking
    - you can regenerate/print them if this bothers you
- changed some keyboard shortcuts as they were clashing, now:
  CTRL + Space	start/stop recording
  CTRL + 1		toggle display sensors
  CTRL + 2		toggle display pointcloud
  CTRL + 3		toggle display raw bodies
  CTRL + 4		toggle display solved bodies
  CTRL + 5		switch main viewport to 3D view
  CTRL + 6		switch main viewport to video view
  CTRL + 7		switch main viewport to depth view
  F1				switch to drawing settings tab
  F2				switch to selected sensor settings tab
  F3				switch to clip settings tab (PointCloud v3)
  F5				switch to sensors table tab
  F6				switch to message log
  F7				switch to timeline tab (PointCloud v3)

------------
 BETA v0.72
------------
- fixed regression where body alignment calibration didn't center the body anymore
- disabled Azure Kinect Body Tracker's internal smoothing as we do our own after fusing multi-sensor data
- tuned some of the internal parameters for Azure Kinect body jitter thresholds
  - this could cause body frames to be rejected by the solver in previous versions when they were actually valid (especially with multi body scenarios)
- added more lens calibration files for Orbbec Astra and Orbbec Embedded S modes
- Orbbec Astra Embedded S should now work and track bodies in 60 fps!
  - note that it only works with body alignment since the infrared channel projects a pattern making markers undetectable
    (and there is no 60 fps color mode)
- slight improvement for marker accuracy in InfraRed
- marked "Alignment Refine" tab as an advanced option
- updated Azure Kinect SDK to v1.2.0
- updated Azure Kinect Body Tracker to v0.92
- updated Orbbec Astra SDK to v2.0.17

------------
 BETA v0.71
------------
- fixed a (large) memory leak for the headless mode when sending network data
- 3D widget now renders in adaptive framerate mode, only repainting when data changes, wasting much less GPU power for drawing
- CPU, memory & disk usage is now displayed on the status bar (bottom right) instead of in the 3D viewport, so they are always visible
- added disk usage display to headless mode
- added functionality to copy the Message Log's contents to the clipboard, so it can be pasted into another program
- added functionality to open the Message Log text file in the system's default text editor
- added functionality to automatically bring Message Log to the front when an error and/or warning occurs

------------
 BETA v0.70
------------
- found a way to install the Azure Kinect Body Tracker dependencies from within the app at runtime like other sensors
  - removed the option from the installer
- added some extra safety precautions to prevent possible crash during alignment
- fixed memory leak in Kinect v2 body tracking processing code
- fixed small issue with network code not sending all internal body parameters
- fixed some issues with running GUI on lower resolution screens
- fixed cosmetic issue where GUI didn't update when sensor was selected and it's transform was updated internally
- if no sensors are found after 30 seconds the app will stop trying
- moved selected sensors to the top left dock (as it will leave more room for PointCloud v3)
- added item for sensor timestamp to the table
- added a warning when attempting to start the Azure Kinect Body tracker without having an NVidia GPU (as CUDA is required)
- removed check for the CUDA SDK & cuDNN as the needed dlls are now included with the Body Tracker installer

------------
 BETA v0.69
------------
- installer now has the option to automatically download & install the Azure Kinect Body Tracker
- rewrote part of the fusion solver algorithm to better deal with trackers that can reliably track front/back sitations (like Azure Kinect)
- fix in the underlying alignment math to prevent wrong/flipped results and improve overall calibration quality
- fixed internal Azure Kinect body timestamps they now match other sensors
  - this previously could cause issues when doing calibrations and skeleton fusion with other sensor types/brands
- reset button on skeleton tabs now resets all settings to defaults
- not all advanced skeleton settings were correctly saved/loaded, fixed now
- fixed memory leak in Fusion solver that would also cause solving to run slower over time
- updated to latesst Azure Kinect Body Tracker version (v0.91)
- updated some internal libraries to latest versions

------------
 BETA v0.68
------------
- added support for Azure Kinect sensors
  - note that Microsoft's Body Tracker for Azure Kinect is still in preview release state
  - see known issues above
- fixed a big memory leak in the BPC recorder
- fixed issue with loading lens calibration files for Orbbec sensors
- fixed a problem with Kinect v2 marker detection in the infrared stream (not sure if that bug made it into a public build)
- fixed potential crash in alignment code
- improved marker alignment accuracy
- internal overhaul on marker tracking & processing architecture
- consolidated code for saving/loading Sensor Alignment files
- some small speedups in network compression code
- lots of work behind the scenes for PointCloud v3

------------
 BETA v0.67
------------
- BPC file recorded in v0.66 didn't load in latest PointCloud v2 anymore (due to work specific for Azure Kinect)
  - should work again now for newly recorded files

------------
 BETA v0.66
------------
- some changes on how lens calibration files are picked and loaded
- fixed some issues with the licensing system preventing startup on some machines

------------
 BETA v0.65
------------
- pixels belonging to identified bodies are now colored in the depth view
- body ID masks are now recorded to BPC files
- not all drawing settings were applied at application start, fixed now
- improved network decompression speed/latency a little bit

------------
 BETA v0.64
------------
- added some keyboard shortcuts:
  CTRL + Space: toggles recording
  CTRL + 1:     toggle display sensors
  CTRL + 2:     toggle display pointcloud
  CTRL + 3:     toggle display raw bodies
  CTRL + 4:     toggle display solved bodies
  CTRL + 5:     switch main viewport to 3D view
  CTRL + 6:     switch main viewport to video view
  CTRL + 7:     switch main viewport to depth view
  CTRL + Z:     switch to connect tab
  CTRL + X:     switch to selected sensor settings tab
  CTRL + C:     switch to sensors table tab
  CTRL + V:     switch to message log tab
  CTRL + Q:     switch to align sensors tab
  CTRL + W:     switch to skeleton settings tab
  CTRL + E:     switch to 3D output formats tab
  CTRL + R:     switch to audio tab
  CTRL + T:     switch to network live streaming tab
- internal fixes to prevent duplicates in supported resolution lists
- internal fixes fixes for lens calibration
- internal cleanup for setting which streams are needed for certain GUI operations to prevent wasting compute power
- added functionality to align origin to a marker when running a single sensor
- removed lens calibration
  - this was overkill for most users and only needlessly complicating thnigs
  - doing it all in realtime was not such a good idea
  - I'm using a separate offline tool for lens calibrations myself now
- internal work on the licensing code
- lots of internal work to support the upcoming Azure Kinect sensor
  - (not ready for public testing yet as I'm waiting for my sensors to ship from the US to my country)

------------
 BETA v0.63
------------
- GUI now automatically shows single sensor or multi sensor alignment options based on amount of connected sensors
  - added single sensor aligning using detected floor
  - added single sensor aligning using T-Pose
- skeleton solver now also requires a single sensor to be aligned in order to run
- fixed a regression bug causing body-based alignment to not center the primary sensor anymore
- fixed a regression bug causing the body & marker aligners to not run on their own threads anymore
- added an (advanced) option to specify the size of your printed marker precisely
  - using the paper size presets will still set this value and the marker tracker will auto adjust
  - using this new setting you can set a more precise initial value by measuring your printed marker yourself
- client now checks it's version against the server's version and reports if they are not matched
- internal optimizations
- fixed offset of colored lines in log window
- added some cleanup handling for pruning old leftover data in the 3D & 2D viewports
- alignment state for sensors are now colored red/green in the sensor table
- if not all sensors are aligned yet there will now be a warning in the 3D viewport
- cleaned up and added more pictures in the sensor alignment calibration chapters of the documentation
- updated to latest Orbbec Astra v2.0.16 SDK

------------
 BETA v0.62
------------
- fixed a problem when searching for Orbbec sensors which could cause the program to crash
  - since the console/headless version searches for all sensor types by default this could cause it to crash at startup
- added preliminary support for Orbbec Astra Embedded S sensor
  - can do tracking at 60 fps
  - sensor drivers not very mature yet for this sensor type
- console/headless version now reads settings to determine which sensors to connect to (used to be all by default)
  - you can still overrule this with the commandline options (see manual)


------------
 BETA v0.61
------------
- added option to playback an audio file during recording (WAV file format only at the moment)
- recorder no longer hangs after stopping a recording where no bodies were seen or no output file formats were selected
- tweaked visual style of scrollbars, they used to be too thin to click comfortably
- fleshed out the PDF documentation
- added an About window under Help menu
- added an option to the top Settings menu to toggle using native Windows OS file dialogs (as previously) or not
- cleaned up log output formatting of "Print Network Interface Information" a bit (purely visual)
- fixed a small GUI issue where network sensor names could appear empty until selected at times
- when a sensor is selected the video/depth windows will now enlarge that, when nothing is selected they show data from all sensors
- started work on implementing Kinect for Azure sensor
- fixed issue when network client had more than one sensor of a certain type (for example Kinect v1)
  - send/receive of sensor settings would always be applied to first sensor, fixed now
- alignment no longer runs on every single frame as this could be quite demanding on the CPU especially when using a large number of sensors
  - by default a quick alignment (all sensors to primary sensor) is done every 15 frames
  - by default a full alignment  (all sensors to all other sensors) is done every 60 frames
  - this should still give visual feedback in the 3D window but not use as much CPU power
  - when alignment is done a final full and thorough alignment will be done using all collected data
  - there are now (advanced) options in both the alignment from bodies and from markers tabs to control this
- new behavior for dealing with sensor drivers
  - installer no longer downloads/installs drivers (done by app now)
  - app now checks if sensor drivers are present on system at startup
  - app has option to download/install drivers if needed
    - when a drivers is not present on the system a little download icon will appear next to the sensor type
    - downloads from official site or from a mirror as a fallback option
  - app can now start without drivers for sensor you are not intending to use
    - for example if you only own a Kinect v2 you don't need to install Kinect v1 or Orbbec drivers
    - when in the future you add a new sensor type you can install it's drivers at any time


------------
 BETA v0.60
------------
- added an indicator to the GUI that displays the length of the recording
- comboboxes in the GUI now have a bit more minimum height so it's easier to see other choices
- implemented new time interpolation algorithm to internally try to interpolate skeletons to align time samples before feeding them to the solver
- added time interpolation options to the GUI
  - None:                    no interpolation
  - Fixed Time Sampling:     uses FBX resampling rate to interpolate to a fixed frame rate
  - Variable Time Sampling:  interpolates to a variable frame rate based on incoming data
- small memory optimizations in BPC file writer
- improved BPC file compression for points (at the same level of quality)
- fixed some issues with Orbbec BPC files
- added some additional data in latest BPC file version to accomodate upcoming PointCloud v3
  - note that you will need to update PointCloud v2 to the latest version to read these


------------
 BETA v0.59
------------
- refactored some of the sensor discovery code
- cleaned up alignment GUI by moving things to tabs
- fixed start/stop alignment using bodies button (immediately turned stopped in previous release)
- ported some features from the marker alignment code back into the body alignment code for improved accuracy
  - now aligns all sensors to all sensors, instead of all to primary
  - now uses new time interpolation code


------------
 BETA v0.58
------------
- "Set Origin" now works as expected and adjusts all sensors so the center of a visible marker becomes the origin (0,0,0) of the world
  - also saves/loads correctly
- Set Origin countdown display is now correct
- Set Origin can now be canceled by hitting the button again during the countdown
- Set Origin now has an undo buttom
- Marker based aligner should now be a bit quicker to find a solution
- Alignment refinement using floor plane now has 2 additional advanced options
  - the first one allows switching between:
    - adjusting sensors individually using their detected floor planes (old behaviour)
	- adjusting sensors collectively, all at once as a whole 
  - the second one allows switching between an algorithm that works in global space versus one that works in sensor space
  - depending on your sensor setup and types you may want to experiment with these to see what works best for you
- fixed "missing prefab" in Unity package
- some tweaks to the solver to avoid flipping in single sensor use cases
- added advanced options to toggle "fixed bone lengths" for arms, legs, spine and neck/head individually
  - disabled arm & leg by default as in most cases retargeters in 3D apps can do a better job with it disabled


-------------
 BETA v0.571
-------------
- fixed small license check bug that would prevent the app to run on some machines


------------
 BETA v0.57
------------
- added option in the top menu to force usage of the Color stream (instead of default Infrared stream) for Kinect v2 sensors
  - this will take more compute power
  - this will allow you to record BPC files (for use in Brekel PointCloud) with color texture
  - note that the headless/console version will read this setting at startup but you will need to set by running the GUI on that machine
- added new way of aligning sensors (besides existing method using body skeleton data)
  - sensors can be aligned using a 2D printed marker now
  - the user walks around with the marker and sensors that can see the marker will automatically align themselves
  - the user can place the marker on the floor in the center of the volume and set this as the origin (0,0,0) of the 3D world
  - overall alignment quality can be more accurate than the method using body skeleton data
  - the user will have to print a (large) marker and attach it to a rigid surface (cardboard/foamboard/wood) so this method is a little more involved
  - this opens the door for PointCloud v3 with sensors that don't track bodies
  - see new chapters in the manual for more information
- added functionality to calibrate sensor lenses (advanced feature)
  - this is only used for marker based alignment (body tracking and pointcloud quality are not affected)
  - in general the app will automatically load default lens calibrations so most users shouldn't need to use this feature
  - in some cases marker tracking accuracy can be slightly improved by using custom per-device lens calibrations, as every device has slight differences coming from the factory
  - see new chapters in the manual for more information
- moved network packet preparation & compression from the main thread to the sensor thread
  - this should help speed things up on slower machines especially when using multiple sensors
- added toggle option to Settings menu at the top for turning High DPI Scaling On/Off on next application start
- internally cleaned up some of the alignment code
- fixed an issue with the solved setting incorrect tip joint confidences for sensors that don't have them (Orbbec)
  - this should clean up display and export
- console now prints which network interface and IP it uses
- log file location is not printed to the log
- added toggle option to automatically connect sensors at program startup

------------
 BETA v0.56
------------
- Kinect v2 BPC now correctly saves InfraRed data into the video channel (and can be loaded by PointCloud v2)
- pointcloud data was still being sent from network machines even if pointcloud drawing was turned off, fixed now
- fixed some of the code in "Remove Ghosts" to be less harsh for Orbbec sensors, not removing valid joints when not needed now anymore
- added an "Show Advanced Options" toggle in the top menu to show/hide some options for more advanced users in the GUI
- added new (advanced) options to the "Skeleton Settings" tab to toggle some additional solver options that used to be always on
- sensor names weren't always correctly refreshed in the table, fixed now
- added FBX 2019 file support
- BVH no longer exports a head tip joint at 0,0,0 for sensors that don't track that
- fixed rare crash in video widget
- fixed small issue with saving/loading sensor alignment files
- UI: moved "Selected Sensor Settings" to be besides the sensor table instead of in the right menu
- UI: moved "Drawing Settings" to it's own dock so it now stays visible and can be teared off and docked wherever you like
- UI: moved "Recording" to it's own dock so it now stays visible and can be teared off and docked wherever you like
- UI: added a "Window" menu to the top menu so you can easily show/hide windows and reset to the default state
- UI: cleaned up interface style a bit
- UI: added some more tooltips
- changed some things in network class so it doesn't need to lock internal threads anymore
  - this can potentially make things more efficient when using multiple network clients
  - if you experience crashes you can switch back to old behaviour by using "-useNetworkMutex" as a commandline flag
	
------------
 BETA v0.55
------------
- fixes for running multiple network clients
- console version now prints it's own local network ip address at startup
- server now logs ip of client when it connects
- added additional thread locks in the networking code to prevent multi threaded memory access
- added checks to prevent trying to send empty packets
- setting "Streaming Pointcloud Quality" to 0 now turns pointcloud network streaming OFF
- internally switched to a different library packaging system
- updated a bunch of libraries to latest versions
- cleaned up dll files

------------
 BETA v0.54
------------
- console now lists UDP or TCP when printing used network ports
- lowered CPU load for network packet compression
- updated to latest Orbbec V4.3.0.9 sensor drivers
- extended expiration data to (31st of March)


------------
 BETA v0.53
------------
- CTRL-A & CTRL-F keyboard shortcuts now only work when mouse is over the 3D viewport
- rewrote the way network packets are constructed, sent & received
  - there are now checks for packet validity and completeness
  - should be more robust for packet loss and/or corruption
- networking now works when client has more than one sensor connected to it
- updated to latest Orbbec Astra v2.0.14 SDK


------------
 BETA v0.52
------------
- fixed video/depth view being stretched when using multiple sensors
- fixed skeleton drawing in the video/depth when using multiple sensors
- added network preview quality setting to control amount of consumed bandwidth
- implemented a completely new network compression technique reducing the needed bandwidth
- networking is now explicitly set to IPV4
  - used to be automatic (v4/v6 auto detection)
  - which could be slow or possibly even not working on some network/machine configurations
  - use -ipv4 console parameter on client to force it to be in ip v4 mode
  - use -ipv6 console parameter on client to force it to be in ip v6 mode
  - use -ipvauto console parameter on client to force it to be in auto detection mode
- fixed some potential multithreading related crashes on a networked machine with multiple sensors
- added cpu/memory progressbars in console
- FBX/BVH naming convention setting is not saved/loaded at app exit/start
- BPC folders are now checked on networked machines
  - if folder does not exist it will be created
  - note that when recording to "C:/Recordings" each networked machine will create it's own local "C:/Recordings" folder
- changed Unity script to store bodies in a fixed length array instead of a List
  - now works correctly with builds
  - no longer fails to work in editor when CTRL object is not selected
- added MotionBuilder 2019 plugin
- rearranged MotionBuilder plugins page in the installer
- moved log and all other user settings file to Brekel folder in Documents folder
  - to avoid clutter when using multiple Brekel apps on a machine


------------
 BETA v0.51
------------
- fixed saving FBX/BVH with Poser/DAZ naming convention
- removed toggles for network streaming color/depth/points in the GUI, they are now toggled internally where needed
- added "Streaming Preview FPS" control
  - allows to set at which frequency data is sent from network sensors (in frames per second) for pointcloud/video/depth
  - this can be used to control needed network bandwidth
  - the network machine will always collect data from the sensors at full framerate locally, this setting only controlls communication between client/server
  - when recording BPC pointcloud files the network machine will always record at full framerate
  - body data will always be sent at the full framerate
- internally network sensors now correctly pass timestamps to server
- networking should be more robust against stalling in case of lost/corrupt packets
- updated to latest Qt libraries
- updated to OpenCV v4.01
- extended to 1st of March


------------
 BETA v0.50
------------
- added option for the solver to keep fixed bone lengths (enabled by default)
- added option to rename selected sensor to a custom name
- improved accuracy for sensor alignment using bodies
  - added toggles to select/deselect if upper/lower body is used during alignment
- removed sensor resolution selection widgets from the GUI
  - internally sensors will always be initialized with the optimal resolution for body tracking
- removed sensor texture selection widget from GUI
  - internally it will now always record the color or infrared stream (depending on the sensor) to BPC pointcloud files
  - the 3D window will never show textures to reduce clutter
- removed sensor cropping widget from GUI as it only affects pointcloud, not body data
- "near mode" now only shows up in the GUI on applicable sensors (Kinect v1)
- changed to a slightly more robust check for Orbbec drivers in installed
- fixed Orbbec driver download link in the installed
  (now mirrored on the Brekel site since Orbbec changed their link to DropBox)
- sensor tilt (for Kinect v1) is now saved/loaded in calibration files
- 2D viewports now display all sensors simultaneously (instead of just the selected one)
  - should be easier when physically placing your sensors to see the capture area
- added more tooltips for the widgets in the GUI
- small speedups in solver
- small changes in 3D drawing code
- numerous internal changes (hopefully no bugs/regressions) for PointCloud v3

------------
 BETA v0.49
------------
- updated to latest Orbbec Astra SDK
- extended expiration data to (30th of November)

------------
 BETA v0.48
------------
- many things refactored under the hood to share and split up code between Body/PointCloud/Tester v3 apps
  (actually a lot of work behind the scenes has been on PointCloud v3 lately)
- consolidated Color/Infrared 2D tab into a single Video tab
- added a Draw Faces toggle in the Video tab
- audio waveform widget is now automatically hidden when no audio device is selected
- pointsize wasn't saved/loaded correctly, fixed now
- drawing of sensor frustums was wrong, fixed now
- Kinect v1 color stream was not copying enough data, fixed now
- pointcloud rendering was wrong when not set to additive, fixed now
- changed T-pose detection algorithm
- disabled AVX compiler settings, as they may have prevented things to work on older CPUs
- extended expiration data to Halloween (31st of october)


------------
 BETA v0.47
------------
- console version now displays CPU & Memory usage
- added option to print network interface information to log (Top Menu > File > Print Network Interface Information)
- network server now tries to intelligently pick the pick the ideal network interface, instead of using the first one
- found a trick that allows deselecting a sensor from the table by simply left-clicking on it
- when no sensor is selected the items in "Selected Sensor" tab now get properly greyed out
- several internal/experimental things I'm working on byt nothing ready for release yet (sorry)


------------
 BETA v0.46
------------
- added stabilization for arm twist
  - note that this can only be detected properly on Kinect v2 when the thumbs are visible
  - on other sensors (or when the thumbs are not visible) an approximation will be used in the solve
- added stabilization for the head
- solver should now work even if only a single sensor is used
- low accuracy joints are now filtered out when creating T-pose for export
- fixed bug preventing loading of primary sensor from the registry
- BPC now records some raw skeleton data for debugging purposes
  - note that you'll need PointCloud v2.68 or higher to load these
- made some sections in the installer mandatory
- internal cleanup of alignment code


------------
 BETA v0.45
------------
- extended expiration date
- enabled some additional compiler optimizations
- views are now cleaned up when a recording starts
- changed internal logic on which streams need processing
- alignment using boies was always using the first sensor as the primary one, fixed now, should take the one set in the GUI
- increased accuracy for floor refinement algorithm
- several internal/experimental things I'm working on byt nothing ready for release yet (sorry)


------------
 BETA v0.44
------------
- save file dialog boxes now say "Save" on the button instead of "Open"
- added option to draw viewport axis
- small changes for internal ghost removal settings
- BPC file recording on networked clients got broken after internal changes on how recording settings were handled, should work again now
  - note that currently only points are recorded no texture information
- some other (newer) recording settings like audio weren't passed either, fixed now


------------
 BETA v0.43
------------
- alignment refinement should work much better now
- added toggle for "Keep Sensors Upright" during alignment
   - when enabled it checks if sensors are are the correct way up and flips them if not
   - this internally was enabled in previous builds already but may not actually help for some sensor setups
- removed "Adjust Floor Height" toggle switch from the GUI as it was non-functional since it was migrated to the "Refine Floor Plane" button
- sensor calibration files now store rotations in degrees rather than radians (in case you want to use them yourself)
- sensor calibration files now include a little header description on what the values mean (in case you want to use them yourself)


------------
 BETA v0.42
------------
- fixed potential crash at startup
- TXT/CSV formats weren't saving head and finger tips, fixed now
- fixed scale for CSV files
- cleaner rotations for CSV files


------------
 BETA v0.41
------------
- timestamp in TCP/UDP/OSC/UE4 stream sometimes wasn't accurate due to floating point precision
  - the timestamp now rolls around every 1000 seconds to leave more room for decimal precision
- implemented TXT (text) file export
  - timestamp, joint confidences, global & local position vectors, global & local rotation quaternions
- implemented CSV (comma separated values) file export
  - timestamp, joint confidences, local position vectors, local rotation euler angles in degrees


------------
 BETA v0.40
------------
- included a missing dll (would only error on some systems without DirectX installed)
- fixed problem with characterization setup in MotionBuilder plugin


------------
 BETA v0.39
------------
- updated Orbbec SDK to the latest version (old version's skeleton tracking license expired)
- default state of OSC and UE4 is now enabled
  (since some users forgot to turn it on and they don't send anything unless a client is connected anyway)


------------
 BETA v0.38
------------
- added "scaling" value to the naming conventions setting files
- changed the comment formatting in the naming convention files (purely cosmetic)
- header vs data scaling was different in BVH files throwing some programs off, fixed now
- BVH positions / hand tweak settings were not used from the selected naming convention files, fixed now
- added warning when attempting to export BVH files without setting a resampling rate
  - the 20 year old BVH file format can't handle varying timestamps, use FBX files instead!
  - added a fix so that the file at least is valid (but frames will drift over time)


------------
 BETA v0.37
------------
- added option to GUI to change colors for background and sensors
- fiddled a bit with the default sensor colors
- fixed potential crash when closing sensors
- cleaned up spacing for pos/rot in the table
- fixed memory leak in OSC code and included buffer overrun protection (could happen in rare cases on slow machines)
- changing OSC network port didn't work, fixed now
- [REC] is now displayed in the 3D viewport while recording
- added option to export sensor transforms in FBX (as cameras)
- added option to adjust the floor height at the end of alignment so that it is level and at Y=0
  - note this may fail if the floor is not in view of a sensor
- added "live streaming into Unity" chapter to the documentation
- added "live streaming into Unreal Engine 4" chapter to the documentation
- added "live streaming into MotionBuilder" chapter to the documentation
- added "OSC (Open Sound Control)" chapter to the documentation
- turned FBX - "Export Sensors (as Cameras)" feature OFF by default as some apps (Blender) can't handle cameras


------------
 BETA v0.36
------------
- Orbbec Astra sensors should work again (some files were missing from the installer)
- implemented audio recording (WAV file)


------------
 BETA v0.35
------------
- network protocol/port are now saved/loaded between sessions
- added live streaming in OSC protocol in the following flavors:
  - Brekel format (similar to Body v2, see manual for description)
  - Synapse format
  - OSCeleton, OSCeleton Kitchen, OSCeleton Quartz Composer formats
  - NI mate (Basic, Orientation & Basic+Orientation)
    - should in theory work with their scripts for
      - Blender (not tested)
      - Cinema 4D (not tested)
      - Maya (tested and working)


------------
 BETA v0.34
------------
- installer is now compressed more efficiently
- when loading a sensor calibration file sensors weren't flagged as being aligned, now they are
- network live streaming is now implemented
  - including MotionBuilder (2009-2018) plugins (installer will autodetect which MoBu versions you have)
  - including Unity example script (try "Help > Unity Live Streaming Example" from the top menu)
  - including chapter in documentation describing packet contents


------------
 BETA v0.33
------------
- fixed T-pose and FBX character node (they accidentally got scaled incorrectly in previous version)
- new stabilization algorithms added to the solver for spine, hips and upper legs
  - no longer needed to adjust the old hip fix value
  - auto adjust to optimal values based on available data
- adjusted neck/head rotational solving
- solver now also works with single sensor
- several minor improvements to the solvers
- confidences are now clamped to 0-1 range
- filtering settings are not internally set (previously they were always stuck at the defaults)
- fixed GUI issue so that when no sensors are found you can retry without restarting the app
- fixed a potential crash in the math library for calculating medians
- when saving sensor calibration it now suggests a default name
- installer now wipes previous settings by default (at least during the betas)


------------
 BETA v0.32
------------
- added option to select different naming conventions for skeletons in output files
  - you can edit the naming convention templates yourself
  - they are text files, located in the "namingConventions" subfolder in the installation folder
  - note that spaces are NOT allowed
- made some changes to neck/head/head_tip joints
- implemented BVH exporter (not all output formats tested yet)
- added suggestions for 2 sensor setup in the documentation (not as stable as 3, 4 or more sensors for 360 degree tracking though)


------------
 BETA v0.31
------------
- added some new logic in the sensor alignment code to deal with sensors that are facing the back of the person (compared to the primary sensor)
  should no longer flip the sensor upside down
- added functionality to lock a sensor (checkboxes in sensor table)
  this will prevent it from being moved during alignment
- added functionality to save/load sensor alignments to/from file
- added image to documentation and tooltip for starting alignment suggesting best pose
  which is one hand raised next to the head to resolve left/right ambiguity in the body


------------
 BETA v0.30
------------
- Initial public beta release