Altspace Tech Sampler
Gavan Wilhite
AltspaceVR
Myself
Cofounded AltspaceVR
Background in games and front-end web
Focused on client and SDK
Engineering Team
Jimmy Zhang
Services
Steven Vergenz
Ecosystem
Patrick Arnesen
Client
Engineering Team
was 15 engineers pre-acquisition, thus..
as things spark your interest, know that there are many opportunities to have an impact
feel free to walk over and say hi
our service
connect with anyone on the planet in the most natural and fufilling way possible
many platforms
operating systems
headsets
many devices
controllers
body sensors
live since the start of 2015
(stand-ups were amusing back then)
acquired two months ago
fast iteration
driven by data
empowering people
a place where we get to ask questions like...
why is my hand crawling up my wrist?
have you tried to juggle the crates with your eyes?
Roles & Abilities
Build System
Anti-Trolling
Web SDK
Friends System
Dynamic Configuration
Android Support
Large Event Scaling
Attribute System
Space Templates
ChromaKeying
Browser Modifications
Audio & VOIP
Unified Tracking Skeleton
Physical Objects
Input System
Asset Pipeline
SDK Profiler
Topics
Unity
React
Chromium
Rails
Postgres
Kafka
Kafka Streams
Photon
Three.js
Node.js
A-Frame
Firebase
C#
JavaScript
Ruby
Java
Technologies
let's build the future of social MR together
talk with us - aka.ms/altspaceteam
work with us - joinaltspace@microsoft.com
AltspaceVR
why we work on the VR web
be together
do things together
people want information, applications, and games
in VR, people can
- meet
- discuss
- laugh
- attend
but they want more
they want the web
across all platforms, instantly, and safely
What does this look like?
Holograms Against Humanity
- three.js + socket.io + node.js
- 5,000+ games played last month
- open source
What makes it successful?
- humor
- encourages communication
- jump-in, jump-out
Traditional Browser
Browser
Engine
Game
Engine
+
MR Browser
=
+
Application
Browser
Engine
=
+
Application
We built a MR browser
and a SDK to make it easy to use
MR Web
Traditional
Browsers
+
Low-level
MR APIs
+
Polyfills
MR Browsers
+
High-level
MR APIs
two paths to the MR web
one incremental,
one experimental
both make sense,
given goals and starting points
Chromium
three.js
A-Frame /
<html></html>
game engine
application
scene
browser engine
web app
Implementation
Three.js Renderer
-
Three.js is renderer agnostic
-
So we wrote our own renderer
-
Converts the three.js scene graph to Unity objects
-
Supports a subset of performant materials
Javascript APIs
getUser()
// public information about the user
// useful for nameplates / highscores
getSpace()
// information about the space
// useful for persistence
getEnclosure()
// enclosure dimensions and scaling
// useful for reactive VR design
getThreeJSTrackingSkeleton()
// returns polled skeleton as fused from all body sensors
// useful for using the location of body parts as input
getGamepads()
// returns all gamepad-like input devices, including 6dof
// useful for game input or manipulation of objects
Have automatic access to
-
VOIP
-
Activities
-
Events
-
Avatars
-
Environments
Live on the web
-
Host at any URL
-
Use any backend
-
No gatekeepers
With the SDK,
you can make apps and games that
Fullspace
- Environments
- Decorations
- Immersive games
- Avatar-attached items
- Designed for VR
"Fullscreen"
Enclosed
- Tabletop games
- Visualizations
- Objects
- Interfaces
- Designed for VR or AR
"Windowed"
look for the
tick marks
AltPDB
- Visualize proteins
- Dynamically loads from RCSB PDB
- Multiple display modes
Live interactive lessons
- Content is synchronized
- Presenter can indicate parts of the molecule using body trackers
- Audience can ask questions
We've got the basics, but we want more
We want reusable, high-performance building blocks
What next?
The 2D web needed <textarea>, <image> and <iframe> as native building blocks
What are the equivalents for the MR web?
Building blocks
Native Components
a new way to extend the web with native functionality
A-Frame
-
Built by Mozilla
-
Entity / Component / System
-
Uses Three.js
A bit about A-Frame
-
Implemented by the browser, rather than in Javascript
-
Directly access game engine features
-
Use platform infrastructure
-
Look for the "n-"
Native Components
<a-entity position="0.5 1.25 3" n-spawner="res:interactables/basketball">
Text
Object
Spawner
Collider
Native Components
Container
Sound
Skeleton
Browser
Portal
Text
-
In-world or UI
-
Rendered natively with signed distance fields
Native Components
Common Grounds
- Conversation starter
- Required dynamic text
- Needed to stay in the background while not consuming resources
Native Components
Object
-
Pulls in a native 3D model
-
Growing library of free assets
-
Makes building apps / environments quick
-
Particle effects (like fire!) are popular
SVVR Poster
- SDF text + super resolution
- 3D graphic design with a text editor
- 12k screenshot sent directly to print shop
Check it out at the booth
- Tutorials running every day
- Meet developers hanging out in VR
- Pick up custom HaH cards
Native Components
Spawner
-
Rigidbody objects
-
Natively synced
-
Player lifespan
Fireball
- Built in a day
- No custom assets
- "Secure" high-score system
Uses a variety of components
- Object
- Text
- Spawner
Native Components
Skeleton
-
Attach objects to a unified tracking skeleton
-
Zero latency
-
Zero bandwidth overhead
-
Makes use of our exisiting avatar network traffic
Armory
- Super simple
- 100 lines of HTML
- Works with all body trackers
Native Skeleton
<a-mixin id="parent-to-head"
position="0 0.05 0.03"
n-skeleton-parent="part: head;"
sync
sync-n-skeleton-parent>
</a-mixin>
Native Components
Collider
-
Static bodies
-
Integrated with movement system
-
Supports arbitrary meshes
Crystal Cave
- Fullspace environment
- Great hack for being "underlava"
- Unveiled at a meetup
Native Components
Container
-
Counts how many objects are in a volume
-
Enables door triggers or lock / key setups
-
Internally solves many edge cases
-
Automatically synced via object synchronization
The Gauntlet
- Container around spikes..
- ..for very loud screams
Native Components
Sound
-
Spatialized
-
Placed at the entity transform
-
Ogg / MP3
Lost in Time
- Guided story
- Large environment
- Entirely A-Frame
Uses a variety of components
- Sound
- Particles (Object)
- Text
- Containers
- Colliders
Native Components
Browser
-
Similar to <iframe>
-
Enables the placement of sub-apps
-
Useful for events and other fullspace apps
-
Creates browser-ception
-
Natively synchronized, parsed in layout phase
Native Components
Portal
-
Instantly travel to elsewhere in the same space,
or to another space entirely -
Enables the creation of multi-space events
-
Use our interface, or customize it with your own
Developer Community
-
Outside of VR
-
Slack
-
Dev portal
-
-
Inside of VR
-
Collaboration sessions
-
Thursday meetups
-
Tech Talk Overview
By Gavan Wilhite
Tech Talk Overview
- 43