Releases: StereoKit/StereoKit
v0.3.9
Another release wrapped up! This time around, I'm extremely thankful for last release's CI/CD, which made shipping preview builds joyful, and made this release much easier to put together! I'm also really thankful to @ponugotimanasaqc @austinbhale and @0y8w1x, who all contributed to this release.
This release we spent a lot of time working on UI and theming! SK's UI has never looked better, and grows increasingly more customizable by the day! A spatial anchor API was added in this release for those devices that support the MSFT anchor extensions (sorry Quest, next release!). We also did a lot of meaningful refactors to the platform code to enable the new SKSettings.mode
options, as well as some exciting graphics features still down the road!
You can see the raw changelog here, but here's the high level overview:
Anchor API
- Added an Anchor API for persistent spatial anchors! See here for an example of how to use them. Right now this only supports MSFT anchors and a stage space fallback. FB (Quest) anchors will be coming soon.
UI
- Reworked the default StereoKit theme! #821 No layout values were changed, just art assets and shaders. If you still need the previous theme, it can be recovered like so.
- Added
UI.HSpace
andUI.VSpace
.UI.Space
is now deprecated. #751 UI.ButtonImg
now has an overload that allows tinting the image. #811- Added a "Grab Aura" to
UI.Window
elements that makes it easier to grab windows. #784 - Added
UI.Push/PopGrabAura
to turn the aura on and off, andUI.GrabAuraEnabled
to check the current state. - Added
UI.SetElementColor
, allowing you to override the default color category of UI elements. #795 - Added
UI.SetElementSound
, allowing customization of UI element sounds. #795 - Added
UI.GenQuadrantMesh
, a tool for generating more complex UI meshes easily. - Added
sk_eye_offset
to global shader variables for determining which eye is currently being rendered. #862
New API Features
- Added
SKSettings.mode
, this replacesSKSettings.displayPreference
, which is now deprecated. This change comes with a big rework of platform code, and new ways of running StereoKit!AppMode.Window
allows for a simulator free flat window, andAppMode.Offscreen
allows for running StereoKit without a display surface at all. - Added
SKSettings.omitEmptyFrames
, which tells SK to skip submitting a frame to the compositor if nothing has been drawn. This can be useful for performance of overlay applications that want to be listening for input, but don't always need to draw. #745 - Added
Device.Runtime
, for the current OpenXR runtime's name. #871 - Added signed/unsigned/float variants for the
Tex.R16
texture format. #841 - Added
Tex.GetColorData
for more format flexibility, this replacesTex.GetColors
, which is now deprecated. #859 - Added a collection of built-in default
Sprite
s.Sprite.ArrowLeft/Right/Up/Down
,Sprite.Backspace
,Sprite.Shift
, andSprite.Close
. - Added
Renderer.SkyMaterial
for easy overriding of the skybox material. #863 - Added
World.Tracked
, to tell if the device itself is currently tracking. #851
Changes
- Fallback file-picker now has a list-mode, and uses a scroll bar! #834
- Fallback keyboard has been refactored, and includes some visual improvements. #806
- Updated to OpenXR Loader v1.0.34. #865
- StereoKit threads now have an ID attached to them in debuggers.
- Major overhaul of platform code to increase sharing of platform code and enable future features. #802
Platform.ForceFallbackKeyboard
now applies even in the presence of a physical keyboard. #847- UI.Handle now will always FaceUser from the center of the Handle. #826
- Log tool now shows performance graphs in addition to debug logs. #808
- Overlay app now obeys explicit blend mode selection. #756, #757
Fixes
- Fix for
Tex.R8g8
textures on OpenGL platforms. #868 - Various texture format/size fixes for OpenGL. #841
- Fix
Font.FromFile
when referencing fonts in the Assets folder. #853 - Fix
UI.ButtonImgAt
binding calling the incorrect native function. #850 - Fix for no final audio effect when a UI element vanishes. #773
- Fix an EGL attribute error for NVIDIAs Jetson Orin NX #838
- Fix JNI cleanup errors on shutdown. #832
- Fix for MSFT secondary view configuration. #750, #830
- Fix for some bounds calculation issues. #769
- Fix for model_node_info_get when key does not exist. #736, #737
Install or Update
Installation is via the dotnet templates and NuGet, please refer here for instructions!
https://stereokit.net/Pages/Guides/Getting-Started.html
If you already have a project using StereoKit, go to Project->Manage NuGet Packages, and update to this version! Do a full rebuild of your project afterwards.
v0.3.8
It's finally here! After more than a year of development, v0.3.8 is ready at last! This release took way longer than expected, but includes a lot of really good work. Many thanks to all the contributors here with quite a variety of fixes and features!
Templates
New dotnet
powered templates are now available, and are the recommended way to develop going forward! These templates work both for Visual Studio 2022 as well as CLI environments like VSCode. And most notably, the templates now include an official Android compatible template! The getting started guide on stereokit.net has also been updated to use these templates.
Nightly Builds and CI / CD
StereoKit now uses GitHub Actions for nightly builds, releases, and verification of PRs! This helps catch and prevent certain bugs and build issues before they happen, and helps get you features and fixes sooner. All changes on the /develop
branch will be available the next day as a .preview build on NuGet! To get nightly builds, make sure to enable Include prerelease
in your Visual Studio NuGet Package Manager.
To help facilitate this, StereoKit's build tooling was also completely overhauled to make it easier to build the SDK from scratch. If you're interested in contributing to the core, things just got a bit easier for you :)
Demos, Samples and Tools
- Projects
- Demo project showing how to use Bepu 2 for physics with StereoKit.
- Demo project showing vertex light baking and static scene management in StereoKit.
IStepper
Tools- Added a Tool for displaying ReadyPlayerMe avatars.
- Added a Tool for displaying a Log window.
- Added a Tool for building and modifying UI Themes.
- Demos
- Cleaned up the StereoKitTest project, which now ships along with this release (see downloads below). The layout is more consistent and clean, with debug menus and tools now hidden away in the hand menu.
- Demos are now browsable with screenshots over on this page.
- Added an asset browser window demo showcasing the new
Asset
andUI.LayoutPushCut
APIs. - Added a small demo to show the new
Device
class. - Added an inverted shell outline material demo to illustrate the new
Material.Chain
feature. - Added a new Hand Pose editor demo for showcasing the new hand sim poses feature. #149
- Added a small render scale demo to illustrate usage of the new settings for render resolution.
- Added a UI 'tearsheet' demo that contains most of SK's UI elements.
- Added a UI grab bar demo, to illustrate moving a window via external handles.
- Added a new mic recording demo.
API Additions
Highlights
- Added the ability to change StereoKit's spatial reference point! Stage and Floor are now valid options in addition to Local. See:
SKSettings.origin
,World.OriginMode
andWorld.OriginOffset
. - Added a
Device
info class.Name
,GPU
,DeviceTracking
,DisplayBlend
,DisplayType
,ValidBlend
,HasEyeGaze
,HasHandTracking
. - Added
Material.Chain
for multi-pass materials. - Added
UI.LayoutPush
,UI.LayoutPushCut
, andUI.LayoutPop
for more flexible UI layouts.
UI
- Added overload to
UI.SetThemeColor
that allow for specifying separate colors for different element states. #506 - Added overload to
UI.ButtonBehavior
to provide the interacting hand. - Added parameter to
UI.Handle
andUI.HandleBegin
to allow configuration of the activating gesture. #601 - Added
UI.SystemMoveType
for configuring how SK provided UI windows move. #479 - Added
UIVisual.ButtonRound
,UIVisual.Panel
, andUIVisual.Carat
for customizing a few more UI elements. #484 - Added
UI.Toggle
overload with sprite arguments. #514 - Added a
UINotify
property toUI.HSlider
to change notification behavior between 'on changed' and 'on finalized'. #321 - Added
UI.VSlider
andUI.VSliderAt
. - Added
UI.TextAt
andUI.Text
with size. #540 - Added a read only
UI.TextStyle
for peeking the current style. - Added a getter for
UI.Settings
. - Added a
UIBtnLayout.None
option to image button UI elements. - Added
UISettings.rounding
andUISettings.margin
. #556 - Added
UIVis.SliderLineActive
andSliderLineInactive
. - Added overload for
UI.ButtonBehavior
that takes a depth and activation depth. - Added image overloads for
UI.Radio
, and addedUI.RadioAt
. #571 - Added
UI.LastElementHandActive
andUI.LastElementHandFocused
. - Added
UI.PopupPose
, a function for getting a good popup location between the user and what they're interacting with. #478- Fallback soft keyboard and file picker popup now use
UI.PopupPose
for their location. #478
- Fallback soft keyboard and file picker popup now use
- Deprecated
UI.LastElementHandUsed
.
Assets
- Added
Assets.All
,Assets.Type
, get/set properties for Id on assets, and all asset types now inherit from theIAsset
interface. #432 - Added
Mesh.SetData
for setting vertices and indices at the same time. - Added
Mesh.GenerateCircle
, and addeddoubleSided
toMesh.GeneratePlane
, thanks jackdaus! #503 - Added
calculateBounds
parameter toMesh.SetVerts
. - Added
Tex.Mips
,Tex.GetNativeSurface
, and a new overload forTex.GetColors
. #466 - Added
Tex.GenParticle
. - Added
Tex.SetMemory
, thanks Austin!. #574 - Added the ability to control ownership of a native texture resource when calling
Tex.SetNativeSurface
, thanks technobaboo! #459 - Added a
Material
constructor that takes a shader filename. - Added getters for
Material
shader properties:GetTexture
,GetFloat
,GetInt
,GetUInt
,GetBool
,GetMatrix
,GetVector2
,GetVector3
,GetVector4
,GetColor
. - Added
Material.Chain
for multi-pass materials. - Added
ModelNode.Info
for storing per-node key/value pair data. GLTF also loads "extras" here #447 - Added
Model.RecalculateBoundsExact
, thanks Paul! #578 - Added overload to
Model.Draw
that allows for overriding theMaterial
s used. - Added
Sprite.Find
. - Added
TextStyle.FromFont
, a more consistent replacement forText.MakeStyle
. - Added a setter for
TextStyle.CharHeight
. - Deprecated the
Solid
asset. Reactphysics3d will be removed in v0.4. Please see this sample project for how to use a 3rd party library such as Bepu.
Math
- Added
Matrix.Transpose
andMatrix.Transposed
. - Added
Vec3.Direction
andVec2.Direction
, #476 thanks Ethan Merchant! - Added
Quat.Delta
andQuat.Relative
, deprecatedQuat.Difference
, #479 thanks Ethan Merchant! - Added a
Pose
constructor that defaults toQuat.Identity
for orientation. - Added
Matrix.Perspective
overload for camera perspectives. #577, thanks Austin! - Added
Pose.LookAt
.
Backend
- Added
Backend.OpenXR.SystemId
,Backend.OpenXR.OnPreCreateSession
,Backend.OpenXR.OnPollEvent
(#513, thanks jackdaus! ), andBackend.OpenXR.AddEndFrameChain
. - Added
Backend.OpenXR.UseMinimumExts
to only load critical extensions by default, andBackend.OpenXR.ExcludeExt
to exclude specific extensions. #444 - Added
Backend.OpenXR.SetHandJointScale
for scaling joint sizes that come from the hand tracking extension, for #337 - Added
Backend.OpenGL_WGL
,OpenGL_GLX
, andOpenGLES_EGL
, along with related enum values toBackend.Graphics
. #382
Input
- Added
Input.HandSource
for figuring out what type of hand data is currently present. - Added
Input.Mouse.Ray
. - Added customizable poses for the hand simulation:
Input.HandSimPoseAdd
,Input.HandSimPoseRemove
, andInput.HandSimPoseClear
. #149 - Added
Input.KeyInjectPress
/Release
andInput.TextInjectChar
to the public API. #630 - Added OpenXR controller profile for Pico. #603, #632, thanks Ray!
- Added support for
XR_EXT_hand_tracking_data_source
. When present, this allows SK to properly handle controllers that pretend to be hands. #667 - Added support for
XR_EXT_hand_interaction
. Prevents an error popup on HoloLens 2. #490 - Added support for
XR_EXT_palm_pose
, controller simulated hands may show up with a 'better' orientation.
Miscellaneous
- Added
SK.GetStepper
andSK.GetOrCreateStepper
. - Added overload for
Renderer.Screenshot
that takes aPose
instead of 2 Vec3s. #628 - Added
Renderer.Scaling
,Multisample
,SKSettings.renderScaling
andrenderMultisample
. May not work on some runtimes, use carefully! #483 - Added PNG support and JPEG quality to
Renderer.Screenshot
. #629 - Added overloads for
Renderer.Screenshot
that provide raw color buffers in custom formats. #618, #622, thanks Austin! - Added `RenderLayer.FirstPerso...
v0.3.6
Another chonky update, v0.3.6 weighs in at over 200 commits! The primary focus for this update was adding asynchronous asset loading. This applies only to textures for now, but this helps significantly when trying to decode large and expensive .png or .jpeg files! A staged loading process will display temporary textures, and smartly load textures in order of importance. All of this is automatic in the background, with no breaking API changes. But that's definitely not all that we've been up to, check out the Feature Highlights below for a list of notable items!
A big thanks to all the contributors that have features is this release, as well as the Discord community's valuable feedback and testing! StereoKit is much better thanks to all of your contributions :)
Quick plugs
Just to highlight some related items here, there will be 3 StereoKit presentations at Mixed Reality Dev Days on June 8th! These won't be streamed, but will be made available online sometime after the event. If you'll be present at the event, do stop by and say hello! There will probably still be a few StereoKit stickers left :)
Also, Microsoft is hosting another MR hackathon that includes StereoKit! Plenty of prize money there too, so be sure to check it out if you have the time. We're very excited to see what you'll make!
Feature Highlights
- Texture loading is now asynchronous! This drastically improves the load experience for most GLTF assets.
- All asset loading/creation is now thread safe.
- New UI elements
UI.ButtonImg
,UI.ProgressBar
, andUI.PanelBegin/End
. - New UI API for inspecting the state of the most recent ID'ed UI element,
UI.LastElementFocused
,UI.LastElementActive
, andUI.LastElementHandUsed
. - Extended access to low-level
Backend
features for OpenXR, Android, and D3D11! - Facebook's Quest pass-through extension implemented using
Backend
as an optional IStepper. - Duplicating the desktop screen as a texture on Windows, and using it for development! Check out the experimental dev template with passthrough + a persistent desktop view.
- Linux ARM64 binaries now ship in the NuGet package.
- Added support for the
XR_OCULUS_audio_device_guid
extension. - A TON of fixes!
- ...and much more.
Additions
- Added new
Assets
class for managing asset loading.Assets.CurrentTask
Assets.TotalTasks
Assets.CurrentTaskPriority
Assets.BlockForPriority
Assets.ModelFormats
andAssets.TextureFormats
for easy lists of supported asset types.
- Added
Tex.AssetState
to peek at the loading stage. - Added
Tex.OnLoaded
event for load messages. This is tex_on_load & tex_on_load_remove in C. - Added
Tex.FallbackOverride
for overriding the default fallback before load is complete. - Added
Tex.SetLoadingFallback
andTex.SetErrorFallback
to give control over the default fallback textures. - Added
Tex.DevTex
andTex.Error
, nice looking placeholder textures that help give a better sense of perspective on objects. Tex.From*
now also take aloadPriority
value as a parameter.- Added
Tex.SetNativeSurface
to the public API. #86 - Added
UI.ButtonImg
andUI.ButtonImgAt
for text + image buttons! #340 - Added
UI.LastElementFocused
,UI.LastElementActive
, andUI.LastElementHandUsed
. #272 - Added
UI.ProgressBar
andUI.ProgressBarAt
. #326. - Added
UI.PanelBegin
UI.PanelEnd
andUI.PanelAt
, a tool for visual grouping. - Added
UI.Get/SetThemeColor
for granular manipulation of UI colors. - Added
Separator
,SliderLine
,SliderPush
, andSliderPinch
toUIVisual
forUI.SetElementVisual
. - Added
Backend.Graphics
, andBackend.Platform
for info about the current platform and graphics code backing the current session. - Added a
Backend.D3D11
class withBackend.D3D11.D3DDevice
, andBackend.D3D11.D3DContext
for mucking about directly with Direct3D. - Added a
Backend.Android
class, for access to a number of low level Android interop variables. - Added
Backend.OpenXR.EyesSampleTime
, #356, #358. Thanks @sandrist! - Added
Backend.OpenXR.AddCompositionLayer
to work with the FB passthrough extension. - Added
ModelNode.Visible
for hiding nodes on a Model. - Added
Mesh.VertCount
andMesh.IndCount
. - Added
Mesh.Intersect
overload that returns the index of the intersected tri. Thanks @Faolan-Rad! #293 - Added
Mesh.GetTriangle
for fast retrieval of just a tri. Thanks @Faolan-Rad! #293 - Added
Bounds.Scaled
andBounds.Scale
, #351. Thanks @Strepto! - Added
Color.Hex
andColor32.Hex
for using hexadecimal color values. - Added
Renderer.Projection
,SetOrthoClip
, andSetOrthoSize
, thanks @slitcch! - Added
Text.Add
overload that takes a color tint as a parameter. - Added
SK.AppFocus
to tell the current focus state of the session/window. - Breaking change to C API only for
mesh_get_vert/inds
, added a parameter to describe memory ownership.
Misc. Improvements
- Updated OpenXR Loader to v1.0.22.
- Updated ReactPhysics3D to v0.9.
- Added support for Unicode in window titles, Win32 and Linux, #346, #347. Thanks @slitcch!
UI.HSlider
pinch has better hit volumes now, should mean less window grabs. #335- Disabled UI elements now dim.
- Improved UI shader finger ring visuals.
- Increased vert count on default UI meshes for smoother corners.
- System initialization log now happens before initialization, so crashes obviously show what system was initializing.
- ISteppers can now be added before SK.Initialize, their Initialize call is deferred until after SK's initialization.
- A number of docs updates from @paulmelis, @Zee2, @TopperDEL, and @Strepto!
Fixes
Tex.Rough
is now (1,0,1,1) instead of (0,0,1,1).- Fixed
Material.Copy
crashing when provided null. - Fixed a bug in converting C# filenames to UTF-8.
- Fixed the MR fallback [
FilePicker
](https://stereok...
v0.3.5
v0.3.5 is a big, general improvement update composed of more than two months, ~185 commits, and code from 4 different people! This was also during the StereoKit hackathon, and many improvements here come from suggestions and reports from the participants. If you participated in the hackathon, thank you so much for the feedback! Everyone else should check out the awesome projects the hackers put together!
You won't find any huge features in this update, but there's a lot of smaller ones, and a ton of excellent fixes! I think everyone should find something in here to enjoy :) In particular, I'm pleased to have added SourceLink support! With a few easy tweaks, you can debug and step through StereoKit's source code, just from the NuGet package!
I'd also like to specifically thank @Faolan for their work on the fallback soft keyboard, among other things, @opl- for a couple of really great fixes, and @slitcch for catching a sneaky OpenXR input issue!
New Features
- Added template support for VS 2022.
- Added .qoi image format support.
- Added MSAA to flatscreen UWP.
- Added SourceLink, allows for stepping through SK's source in Debug!
- Added fallback soft keyboard, thanks Faolan! Check out the demo code here.
- Added Ctrl+Shift in the Simulator to swap between right and left hands.
- Added a small debugging guide to the docs.
- Added limited direct access to the OpenXR backend. #231
API additions
- Added Platform.KeyboardShow, Platform.ForceFallbackKeyboard, and Platform.KeyboardVisible for working with soft keyboards, thanks Faolan!
- Added World.RefreshType, World.RefreshRadius, and World.RefreshInterval. #220
- Added UIMove.None as an option for UI.Windows and UI.Handles. #259
- Added UI.Push/PopTint and UI.Push/PopEnabled.
- Added UI.Push/PopPreserveKeyboard, thanks Faolan!
- Added Sound.FromSamples.
- Added Tex.GenColor for creating solid color textures.
- Added Tex.CubemapLighting to get SH outside of cubemap creation.
- Added Material.GetParamInfo and Material.GetAllParamInfo, thanks Faolan!
- Added Material.SetInt/UInt/Bool/Data
- Added Material.UIQuadrant to the default materials.
- Added an improved Sprite.Draw method that behaves more like you'd expect.
- Added SK.Run. SK.Step will be deprecated at some point, but not yet.
- Added SKSettings.disableUnfocusedSleep as an option to prevent SK from intentionally slowing framerate when the window is out of focus.
- Added Backend and Backend.OpenXR classes for direct access to OpenXR.
- Added Vec3.AngleBetween and Vec2.FromAngle.
- Added scalar constructors to vector types, thanks Faolan! (Also optional swizzles in the Tools folder!)
C/C++ API additions
- Added vert_create.
- Added matrix_t, matrix_r, matrix_s, and matrix_ts shorthands.
- Added vec3_project, vec4_magnitude, vec4_normalize, and a few vector operators.
- Added render_global_texture.
Fixes and improvements
- Improved cubemap Spherical Harmonics calculation speed.
- Improved .hdr load speed.
- UI interaction glow is brighter.
- Far interact auto-disable behavior was tweaked.
- GLTF loader now supports emissionFactor.
- Fixed support for Unicode in asset file paths on Windows. #254
- Fixed an issue where the C# debugging data wasn't getting copied into projects.
- Fixed a GLTF issue with multiple UV channels stomping on each-other.
- Fixed a mouse issue on UWP related to DPI and UI scaling.
- Fixes for header C compatibility.
- Lines.AddAxis now draws lines on unit vectors, with a white line for Z Forward. #231
- World.Bounds are now available immediately after SK.Initialize.
- Fixed a bug in SKMath.AngleDist. #232
- Fixed a bug with UI.Space. #248
- Fixed issues with Renderer.CameraRoot related to latency and drifting World.Bounds.
- Fixed rare phantom UI presses for purely axis locked motion.
- Fixed an issue with mouse/keyboard input lag on Win32.
- Fixed an issue with 'tracked' state with OpenXR controllers. Thanks Moses! #241
- Fixed an issue with GLTF animations using cubic interpolation.
- Fixed an issue with GLTF node based animations on root nodes being incorrectly rotated. #240
- Fix for skinned meshes not updating when no animation is playing.
- Reduced GLTF warning count on models with warnings.
- Fixed a simulator position offset being applied when simulator is off.
- Fixed Linux defaulting mouse to available at first load.
- Fixed Linux not obeying window size settings.
- Fixed refcount issue with ModelNodes.
- Fixed an HSlider bug on Android.
- Fixed a UWP file reference issue.
- Fix for a Potential bug with auto-sizing labels
- Fix for Linux/C#, where SK would prefer system SK libraries instead of its own
- Matrix's internal System.Vector type is now public.
- Miniaudio update that fixes an issue with mics on Linux, thanks opl-!
- Fixed a Mixed Reality Capture compositing issue on HoloLens. #216
- Fixed a bug in GL screenshots.
Install or Update
Installation is via Visual Studio templates and NuGet, please refer here for instructions!
https://stereokit.net/Pages/Guides/Getting-Started.html
If you already have a project using StereoKit, go to Project->Manage NuGet Packages, and update to this version! Do a full rebuild of your project afterwards.
v0.3.4
v0.3.4 brings skinned animation to StereoKit! I hope you'll enjoy using it as much as I've enjoyed making it :) Along with that comes a solid collection of bug-fixes, and some polish to the UI layout system. Plus a whole bunch more! A big thanks to @slitcch, @maxgolov, @sjando, and @aprilspeight, who all made contributions to this release!
In other big news, Microsoft is hosting a StereoKit hackathon for the month of November! It's a great moment to try StereoKit out, and maybe win some cash prizes along the way. Along with that, we'll be hosting some online social events and AMAs, so keep your eyes peeled for those, even if you aren't participating in the hack!
For those getting started with StereoKit, @aprilspeight has created a list of getting started videos! These are also embedded in the docs site, and should help ease new StereoKit devs into their first StereoKit application. Many thanks April!
And check out the new documentation guides for Drawing and Working with Materials! Keep your eyes peeled in November for more docs like these :)
New Additions
- Added Skinned/Skeletal animation! Check out the new API for working with animations.
- Added a more cohesive set of layout tools for working with, or building custom UI elements.
- Added render filters for Mixed Reality Capture, this allows for customization of what objects show up in the regular view vs. the capture view. #206
- Overhauled
UI.VolumeAt
. - Added a text alignment property to
UI.Text
. - Added
UI.HSlider
variant for doubles. By @slitcch #194 - Added
Hierarchy.ToLocal
andHierarchy.ToWorld
for Pose types. - Added
line_add_axis
,model_draw
andmesh_draw
to the C API. - Added support for dynamic Spatial Graph Nodes (WMR). By @sjando #200 & #198
- Added
Quat.Vec4
andVec4.Quat
- Adjusted far interact distance to be 15cm closer.
GLTF Additions
- GLTF loader now supports skinning and animation data. Doesn't include morph targets yet.
- Added support for GLTF mask transparency.
- .vrm files are now recognized as GLTF files. This does not include VRM specific extensions.
- Added a fallback for Specular/Glossy GLTF materials, not a full implementation, but an improvement.
- Additional logging surrounding some cases that aren't supported yet.
Bug Fixes
- Fixed Unicode entry on Win32 while in VR.
- Fixed right arrow key and del key on Linux. By @slitcch #192
- Fixed some UI elements not sizing properly with custom text styles.
- Fixed crash with mip-maps on unsupported formats. #195
- Fixed a render sort issue when compiling for ARM. By @maxgolov #197
- Fixed a crash on Windows devices lacking the Win10 SDK. #205
- Fixed crash when Linux tried to read a folder as if it were a file. #183
- Fixed an Android issue with Radio and Toggle buttons.
- Fixed an issue with WMR and SteamVR where the system would provide insufficiently simulated articulated hands.
Development Tool Updates
- VS Template was updated to use .Net Core 3.1 by default.
- Added a new shader compiler backend that works on both Windows and now Linux.
Install or Update
Installation is via Visual Studio templates and NuGet, please refer here for instructions!
https://stereokit.net/Pages/Guides/Getting-Started.html
If you already have a project using StereoKit, go to Project->Manage NuGet Packages, and update to this version! Do a full rebuild of your project afterwards.
v0.3.3
Another two months and over 100 commits! Some really awesome features for this update including Unicode support, revamped Model inspection API, UI updates, anti-aliased flatscreen, and a whole bunch more! For a high level look at this update with some flashy gifs, check out the accompanying blog post!
I also really wanted to thank @ClonedPuppy for their input during this update, a good number of features and fixes came from their feedback!
New Additions
- Added
ModelNode
API to theModel
assets for detailed exploration of aModel
's contents. Check here for some examples. - Added
Model.Copy
. - Added
Model.Intsersect
and aRay.Intersect(Model)
overload. - Added static and instance
Vec2.InRadius
andVec3.InRadius
methods. - Added
Hand.pinchPt
, a stable, non-sliding pinch location indicator. - Added
UI.Model
. - Added
UI.PushSurface
andUI.PopSurface
for more control over placing UI layouts within the scene. - Added
UI.HSlider
confirmation modeVariablePinch
, for more fine tuned manipulation of slider values. - Added
UI.SetElementVisual
to override UI Meshes and Materials, along withUI.QuadrantSizeVerts
andUI.QuadrantSizeMesh
to aid in working with 'quadrant sizing' meshes. - New UI panel look
- Material now works with Vec2 and Vec3 material parameter types.
- Material will now warn the developer if they try to set a parameter with the wrong type.
- Unicode support in text rendering and entry.
- Fonts are now composed of a series of font files, which will be searched in-order for any glyph.
- Antialiasing in Flatscreen mode.
- Removed partial FBX support, which was a little too partial.
- Improved pointer ray based on shoulder estimate.
- UWP ARM binaries added to the NuGet package.
- Text shader now combines tint color alpha into the final alpha value.
- Added texture sampler support for GLTF files.
- Added a DemoWorldAnchor to the main collection of demos.
Bug Fixes
- Fixed bug where Win32 file picker would change working directory.
- Handles no longer slide when releasing the pinch gesture when pinch is driven by controllers/mouse, see
Hand.pinchPt
. - Poke interactions now account for finger radius.
- Fixed issue with id overlap from equirect textures and regular textures created from the same file .
Renderer.Blit
renders upside-right now.- GLTF material tint colors now use the correct color space.
- Fixed Stepper initialization causing issues with late load libraries. #182
- Fixed an issue with hand meshes and occlusion meshes not obeying the camera root transform. #184
- OpenXR time is now available on the first frame, this affects a number of calls, such as World.Bounds. #188
- Fixed a number of reference counting issues.
- Fixed issue with xrCreateInstance failure not reporting the correct issue.
- Fixed Android asset loading prefix issue.
- Fixed a crash when using UWP with the Oculus runtime.
Native Specific Additions
C# methods and properties all have an equivalent C++ function, but here are some additional changes that are of interest specifically to the native developer.
- Partial cmake support (Windows and Linux).
- Native cmake based C++ template.
- Asset types now have
_addref
functions. - Added
color_hex
,color32_hex
, andcolor32_to_128
. - Added
material_set_vector2
,material_set_vector3
,material_set_vector4
. - Unicode support for UTF-8 and UTF-16, see the
text_*
andtext_*_16
functions, as well asui_*
andui_*_16
. - Added a complex lighting demo to StereoKitCTest.
- Default text_style_t is now 0 instead of -1.
Install or Update
Installation is via Visual Studio templates and NuGet, please refer here for instructions!
https://stereokit.net/Pages/Guides/Getting-Started.html
If you already have a project using StereoKit, go to Project->Manage NuGet Packages, and update to this version! Do a full rebuild of your project afterwards.
v0.3.2
This update brings in support for a couple new extensions, as well as a steady march of general improvements! In particular, the recently added XR_MSFT_scene_understanding
extension makes world occlusion and raycasting just a line of code away for HoloLens 2 devices. Also, the file picker is now integrated into StereoKit's core, and works properly with native pickers and permissions when available!
Many thanks to @slitcch and @technobaboo for their contributions to this update!
Additions
- Initial Scene Understanding support! Adds world raycasting and mesh occlusion for HoloLens devices, see see
World
'sRaycast
,RaycastEnabled
OcclusionEnabled
, andOcclusionMaterial
. #145 - Built-in MR file picker! See
Platform.FilePicker
, and the accompanyingPlatform.WriteFile
andPlatform.ReadFile
. #147 - XR_EXTX_overlay extension support for Monado, see
SKSettings.overlayApp
. - MSFT_hand_tracking_mesh support on HoloLens 2.
- Added
Model.GetName
for identifying mesh subsets. - New shader+material,
Default.MaterialUnlitClip
. This removes undocumented alpha clipping from the defaultUnlit
material, and puts it inUnlitClip
. Default.X
assets can now also be accessed on their respective classes, such asMaterial.Default
, orMesh.Cube
.- Added an AvatarSkeleton tool to Examples/StereoKitTest/Tools.
- Added a bright spot to the default environment map, helps objects look shinier. This comes with some additions to
SphericalHarmonics
, andTex.GenCubemap
. - Added
TextAlign
shortcuts for bitflag combinations, makes text alignment more terse. - Added
Tex.FromColors
as a more consistent method of creating textures from color data. - Added
UI.TextConsume
andUI.TextReset
for working with text entry input the same way UI.Input does. - Added
tex_set_surface
to the public C API.
Changes/Improvements
- Updates to the docs site, added additional information and improved some formatting.
- Added new confirmation options to UI.HSlider, should allow for fewer accidental activations. #171
- Diagnostic logging is now on by default.
- Improved line rendering visuals. #156
- Linux now loads the system's default font.
- STL now loads as flat-shaded instead of smooth.
- If a GLTF comes in without normals, they'll be automatically calculated.
Fixes
- Fixed a bug where the Alt key was going unrecognized in Win32
- Fixed a bug where the Perception Bridge extension was incorrectly disabled. #151
- Fixed a bug where out-of-focus UWP apps were still receiving inputs.
- Fixed a UI.Text layout issue.
- StereoKit now recognizes absolute paths on Linux.
- Cursor now properly reports unavailable when leaving window on Linux.
Install or Update
Installation is via Visual Studio templates and NuGet, please refer here for instructions!
https://stereokit.net/Pages/Guides/Getting-Started.html
If you already have a project using StereoKit, go to Project->Manage NuGet Packages, and update to this version! Do a full rebuild of your project afterwards.
v0.3.1
A new API to interact with controller input was added. Hands are still the primary input device, whether simulated or articulated, but you can now get detailed information about the controller directly! A lot of work was also done to audio: a new Microphone API, streaming audio support, and and API for sound play instances.
Another big visual change was a new default lighting! The previous one was a little dim, and had a lot of extra color in it. The new one is much brighter and a lot less colorful, making it much easier to make white objects look white! If you want the old lighting back, see the bottom of this page for a code snippet.
UI also got a bunch of polish, a lot of small details were fixed, improved, or made prettier! An initial 2-handed grab was added, and a number of useful new UI functions were added. The HSeparator and Push/PopTextStyle methods allow for some extra styling of your UI, and UI.Text enables you to display large blocks of text! UI.Input also got an overhaul that makes it look better, and behave far nicer!
During this update, Varjo also shipped a conformant OpenXR runtime! StereoKit worked with it out of the box, and the SKSettings.blendPreference option was added to hook into their passthrough AR capabilities. A pass was also done on Quest to make the experience there nicer, it's now more stable, supports hand tracking, and brings back a few features that had been temporarily disabled for the v0.3 release.
Enjoy :)
Interactive Demo
To see a number of these new features in action, check out the interactive release notes demo!
https://github.com/maluoi/StereoKitReleaseNotes/tree/main/v0.3.1
Additions
- New Controller API, for direct access to controller info. #136
- New Microphone API, for recording a stream of audio.
- New SoundInst for modifying sound location/volume after they've been Played.
- Added Sound functions for working with streams of audio. #135
- Added
UI.HSeparator
,UI.Text
, UI.PushTextStyle, UI.PopTextStyle, UI.EnableFarInteract, andUI.ButtonBehavior
. - Added Matrix methods, Decompose and Transform(Pose), and new properties, Translation, Rotation, Scale, and Pose.
- Added new built-in shader and material, Default.MaterialUIBox.
- Added ASCII only .ply support. #48
- Added render to texture, Renderer.RenderTo. #137
- Added render layer filters, specified in Draw methods and filtered with Renderer.LayerFilter, and in
Renderer.RenderTo
. - Added support for creating array texture from an array of files,
Tex.FromFiles
. - Added SKSettings blendPreference (needed for Varjo passthrough) and logFilter.
- Default font is now accessible via Default.Font.
- Hand tracking support on Quest. #129
Changes/Improvements
- Improved the default lighting: brighter, less saturated, and white objects now feel white.
- UI.Input text entry improvements, now spawns the OS virtual keyboard on UWP. #110
- UIMove.FaceUser elements now account for hand's vertical position on the UI.
- Button interaction is now a capsule->bounds intersection test instead of a line segment->bounds intersect, making hit detection more reliable.
- Far Interact ray visual and behavior improvements. #125
- Extra consistency and improvements in UI activation animations.
- Monado now uses a rgb10a2 display surface.
- Rounder fingertips with a new fingernail shape on the hand mesh.
- Improved switching between hand tracking and controllers, this makes Quest much nicer to work with.
- GLTF models now support multiple materials per-mesh, null materials, sparse vertex data, and additional data formats.
- PBR shader now also uses the AO map.
- DX11 now picks best graphics card on load.
- Android systems use the OS default font.
- Improved spatial audio fallback on Android/Linux, better falloff and stereo panning.
- Improved UVs and geometry layout of procedural 3d shape types.
- Default.MeshQuad was changed to be a normal quad, Default.MeshScreenQuad was added to contain the replaced mesh.
- Improved performance reporting: now excludes vsync time, and includes app init time.
Fixes
- Fix for Oculus color banding bug. #138
- Fix for SphericalHarmonics missing when loading an already loaded cubemap.
- Fixed a number of UI layout inconsistencies.
- UI.AreaRemaining is accurate now.
- Fixed a number of issues with UI.HSlider.
- Fixed a crash on Android when loading sounds from file. #126
- PBR shader now works on Quest. #127
- Exit button on Quest now shuts down properly.
- Fixed some loss of mouse movement on flatscreen UWP while look-rotating.
- Fixed an issue preventing .Net Core 5 projects from working on Windows. #133
- Fixed equirect cubemap conversion on Linux.
- Fixed Renderer.CameraRoot not working on Linux.
- Fix for equirect cubemap conversion failing before first frame on HoloLens.
- Fixed some visual bleed on the second mip of text.
- Fixed a near clipping plane issue on DX systems.
Install or Update
Installation is via Visual Studio templates and NuGet, please refer here for instructions!
https://stereokit.net/Pages/Guides/Getting-Started.html
If you already have a project using StereoKit, go to Project->Manage NuGet Packages, and update to this version! Do a full rebuild of your project afterwards.
Old Lighting
If you need the old lighting/skybox back, stick this after SK.Initialize:
Renderer.SkyLight = new SphericalHarmonics(new Vec3[] {
new Vec3( 0.27f, 0.26f, 0.25f),
new Vec3( 0.07f, 0.09f, 0.11f),
new Vec3(-0.06f, -0.06f, -0.04f),
new Vec3(-0.06f, -0.04f, -0.01f),
new Vec3(-0.04f, -0.05f, -0.06f),
new Vec3( 0.15f, 0.16f, 0.16f),
new Vec3(-0.04f, -0.05f, -0.05f),
new Vec3( 0.05f, 0.05f, 0.04f),
new Vec3(-0.11f, -0.13f, -0.13f),
});
Renderer.SkyTex = Tex.GenCubemap(Renderer.SkyLight);
v0.3
I would describe v0.3 as the platform compatability update! This big update has been a lot of work, but brings in initial support for Oculus Quest 1 & 2 on Android, as well as Linux! This meant a complete overhaul of the graphics pipeline, and even resulted in the development of a new single-header cross platform graphics library, sk_gpu.h!
Additions
- Oculus Quest 1 & 2 support, see the upcoming cross platform template for how to deploy to it.
- Linux support, many thanks to contributions from @technobaboo @slitcch and @Turtle1331 that made this possible!
- Added a World static class that tracks play space boundaries, and conversions from UWP spatial data types. See the new WorldMesh demo for how to use this.
- Eye tracking, for hardware that supports it.
- Added MaterialBuffer for setting global shader parameters.
- Added DepthWrite, DepthTest, Transparency.Add, and Shader setter to Materials along with getters for most properties, with new docs and samples related to Materials coming soon.
- PBR Material re-write, simpler, better, faster.
- Added Default.MaterialPBR and Default.MaterialUnlit
- GLTF Models will load the most appropriate default material based on GLTF material parameters.
- Added a V class for shorthand Vector helpers.
- Three new small demos, Physically Based Rendering, Eyes, and WorldMesh.
- More explicit identification of Linear vs. Gamma colors.
Changes
- The StereoKitApp class is now SK, and the initialization flow has been re-worked to better accomodate Android.
- C# math types (Vec/Matrix/Quat etc.) are now based on System.Numerics, allowing for easier interop with other libraries.
- Shader meta syntax has been changed, additional details about this will be in an upcoming guide, see the builtin shaders for now.
- Instanced rendering pattern changed, and now renders more than 2x the previous number of instances at once.
- Removed direct Leap support in favor of Leap's OpenXR layer.
There's a lot more, but I'll say these are most of the big items! This update has been in the works for 8 months, and you can see all the changes over in this commit :)
Install
Installation is via Visual Studio templates and NuGet, please refer here for instructions!
https://stereokit.net/Pages/Guides/Getting-Started.html
v0.2.1
Exciting update! StereoKit now works on SteamVR's OpenXR runtime! Also, a number of features finally land as OpenXR 1.0.9 brings a couple cool extensions out of preview. Which means StereoKit also now supports OpenXR's hand tracking instead of UWP's, 3rd eye render for more accurate screenshots/video, as well as QR code support!
Additions / Changes
- SteamVR support!
- Updated to OpenXR 1.0.9.
- QR Code support through the OpenXR Spatial Bridge extension. See Pose.FromSpatialNode.
- 3rd eye render on HoloLens 2 though the OpenXR Secondary View extension! Now your holograms will line up with the real world :)
- Articulated hand tracking through OpenXR. Previously was platform specific through UWP functions.
- Flatscreen options to set FOV and background clear color
- stereokit.h is now fully C compatible, allowing for easier interop with other languages. See here for basic V and Zig examples.
- Default asset ids are now available as constants in C.
Fixes
- Fixed OpenXR implementation ignoring near/far clip planes.
Install
Installation is via Visual Studio templates and NuGet, please refer here for instructions!
https://stereokit.net/Pages/Guides/Getting-Started.html