StereoKit is an easy-to-use open source mixed reality library for building HoloLens and VR applications with C# and OpenXR! Inspired by libraries like XNA and Processing, StereoKit is meant to be fun to use and easy to develop with, yet still quite capable of creating professional and business ready software.
The getting started guide can be found here!
Interested in news and updates about StereoKit? Maybe just looking for some extra help?
- Submit bugs on the Issues tab, and ask questions in the Discussions tab!
- Follow koujaku on Twitter for development news.
- Drop into the Discord channel for discussion, help and updates.
- Check out this blog for occasional substantial updates!
StereoKit Features:
- Platforms: HoloLens 2, Oculus Quest, Windows Mixed Reality, Oculus Desktop, SteamVR, Monado Linux, and eventually everywhere OpenXR is!
- Flat screen mode with input emulation for easy development
- Builds your application to device in seconds, not minutes
- Mixed Reality inputs like hands and eyes are trivial to access
- Easy and powerful UI and interactions
- Model formats: .gltf, .glb, .fbx(partial), .obj, .stl, procedural
- Texture formats: .jpg, .png, .tga, .bmp, .psd, .gif, .hdr, .pic, equirectangular cubemap, procedural
- Runtime asset loading
- Physics
- Performance-by-default instanced render pipeline
- Flexible shader/material system with built-in PBR
- Documentation is generated directly from the source code, including screenshots
Getting started
Follow this guide for a detailed introduction! This repository is the raw source for those who wish to build StereoKit themselves, the Visul Studio templates and the NuGet packages referenced in the guide are how most people should build their applications!
StereoKit focuses on getting you productive with the least amount of code possible. You can actually do most tasks with a single line of code, including UI! Here's hello world with StereoKit, this is all you need to get up and running!
using StereoKit;
class Program
{
static void Main(string[] args)
{
SK.Initialize(new SKSettings{ appName = "Project" });
Model helmet = Model.FromFile("Assets/DamagedHelmet.gltf");
while (SK.Step(() => {
helmet.Draw(Matrix.TS(Vec3.Zero, 0.1f));
}));
SK.Shutdown();
}
}
Roadmap
Where is StereoKit going next? That depends on you! What do you need? Is StereoKit missing something that it really should have? File an issue and let us know!
In the short term, StereoKit will focus on the Core API, improving performance, and ensuring all basic features are present and work well! Some basic tooling, things like a visual shader editor might get built here. The Core of StereoKit is an Immediate Mode system that does not provide any framework or application state management.
Long term, we'd love to add StereoKit Framework! Framework is a higher-level layer that manages application state, so more complicated functionality can be taken care of. Features such as automatic multi-user capabilities, component systems, WYSIWYG UI design tools, visual scene editors and code-free design environments will become possible.
Dependencies
Just like all software, StereoKit is built on the shoulders of incredible people! Here's a list of the libraries StereoKit uses to get things done.
- OpenXR
- ReactPhysics3D - physics
- cgltf - gltf format support
- OpenFBX - fbx format support
- miniz - ofbx dependency
- Sean Barrett's stb libraries - image and font format support
- miniaudio - audio playback
- dr_wav - wav format support
- sokol_time - cross platform high performance time
And some of my own libraries that I maintain separately from this repository.
- sk_gpu.h - cross platform graphics API
- ferr_hash.h - string and data hashing
- array.h - dynamic arrays