Taking place between March 25-26 2021, The inaugural Alloverse VR Jam has now concluded. The event was a great success; the tech held up, and we got some great feedback we’ll be working on over the next few weeks to improve the overall developer experience. For everyone who participated, thank you – you can look forward to a t-shirt in the mail (though the Suez canal incident have caused some delay…) and congratulations to our three winners! In no particular order, here they are:
Best Technical App: Patrik’s Shooting Gallery
As soon as we entered Patrik’s Place, we noticed something was… different. Anyone who joined were automatically equipped with shiny guns! And colorful balloons began spawned around us! Intuitively, we started shooting the balloon targets, and as we did, the guns in our hands kept track of the score.
Most of us didn’t even know it could be done – but Patrik had found a way to attach functional objects to other people’s avatars. That, alongside a seriously cool application of said concept, earned him the judges’ praise and the best technical solution award.
Best Innovative App: Team Hedgehog’s Architecture Golf
Seemingly misleading at first glance, the title of Team Hedgehogs’ project brought us a very practical, hands-on application of VR tech for productivity. The project name comes from a technique employed at their workplace: a playful way for engineers to describe a system or process. Using the App, members of a team can meet in Alloverse and take turns drawing/describing a single step step of the process before handing over the “golf club” to the next person. Over the course of the exercise, participants gain a holistic grasp of the system.
The hedgehogs unexpectedly delivered an App that allowed all of us to try out this new technique, despite being hundreds of miles apart. Thus, netting them the most creative solution award.
Most Useful App: Team Vrino’s Flash Cards
Team Vrino had been using Alloverse for playing Pictionary before, but something was missing. As they noticed that participants often had a hard time coming up with things to draw, the team decided to sit down and design a solution that wouldn’t require participants to get out of VR. Their app is a simple Flash Card deck, allowing users to draw cards from a stack of arbitrary cards. Pictionary was the immediately solved use case, but the app can easily be extended show any collection of words or images and draw any number of cards, making it potentially useful in any application – for work, play or anything in between.
For solving a specific problem, but at the same time providing practically infinite flexibility, the judges were compelled to reward the team with the most useful app award.
Again – huge thanks everyone who contributed by building an app or providing feedback. We streamed the presentations, and if you’d like to see them, they’re available here on the Alloverse YouTube channel.
Innovation comes when we get together and tackle challenges in new and creative ways. And a VR jam (or hackathon, as some may call it) is an excellent opportunity to think outside of the box and flex our problem-solving skills. We definitely looked forward to this event to get fresh perspectives and breakthroughs with real potential and impact.
Besides, we also wanted to find a way to validate our Beta release and get our target audience, developers, to test and hack it! So what better way than a VR Jam to do so?
Developing a collaborative app platform and market for the open spatial Internet by providing the tools and infrastructure to write VR apps is no easy task. Hence, making sure that what we are working on is actually viable is of the utmost importance, especially before approaching potential Beta partners.
Well, what a weekend! We started our virtual hackathon on Saturday the 27th at 14.00 CET and finished on a high note, with an awards ceremony live streamed on Youtube, on Sunday 28th at 16.30 CET. During those 24 hours, we fixed bugs, added to our APIs, came up with new AlloApp and business ideas, and got to know our participants.
We also understood which features and functions were key to enable our participants to build their ideas atop of Alloverse. Some were readily there and others were not, so we got onto it and in a matter of hours solved most requests. Although stressful, it made us conscious about our audience’s needs.
As the event carried on, we noticed a few things:
Thinking in 3D remains challenging We are so used to 2D surfaces that even when we get the chance to create solutions for Virtual Reality, we need to remind ourselves that a white board is not necessary to present a concept. Yet, it also demands technical prowess which can be righteously tough within 24 hours.
Better 3D positioning functions are essential (to support the above)
Lua is a great language (easy to understand and use)
Our tech held up and people had fun! Undeniably the highlight of our event
With all that, our participants came up with some pretty awesome ideas: a tool to support architecting mind-mapping, a Pictionary flashcard deck and a fun yet relaxing balloon-popping game to play in-between zoom calls (for ex.!).
Following our VR Jam, we learnt that although it lasted 24 hours and most of us were exhausted (we’re not 18 anymore!), this is the best kind of event for our platform Alloverse to shine! Therefore, we are scheduling an upcoming VR Jam in May, and we would love to keep our cadence (bi-monthly) and invite many more VR enthusiasts!
For those who wish to host similar events, we have decided to make our documents public, so that you get to know more about how to organise it and prepare for it. We have used several awesome tools : Confetti Events, Discord, Notion and so many more!
*Definition of ethos The distinguishing character, sentiment, moral nature, or guiding beliefs of a person, group, or institution
We foremost believe in Open Source and Building in Public.
Our vision is one of a world where the internet isnon-proprietary and offers universal access to the metaverse. Our mission is to lay the foundation for the future of the “3D internet” by building an open infrastructure for collaborative apps in VR.
We are a distributed company built by former entrepreneurs and operators, hence we understand the struggle it can be to feel like your work has no impact even more so when you sacrifice your precious free time for it. We’re committed to building a team that leads a healthy life because people always come first for the product to shine.
To convey our vision through our mission, we have a set of values we live by and embrace. They give us guidelines on how to behave, help us describe the type of behaviour we expect from people joining our adventure. Those values set a framework for distributed decision making.
Our values 🌟
Open. We’re not building a proprietary platform to lock people in; we’re creating tools for others to be creative with, outside of our control.
Open Source. We’re creating software for the people.
Self-sustainable. Our aim is to build Alloverse and contribute to the open source for the next few decades. Hence, growing with self-sustainability in mind by putting our team first. Always.
Ecological. We care for the planet, by bringing people together in the Alloverse we can reduce travel world-wide.
Inviting and friendly. We’re building a tool for people, so our brand should feel inviting and not elitist/techy. Friendly people should feel welcome to collaborate with us on this project, regardless of their background.
Learn from failure. Do your best, and be open with your hardships, and we’ll learn together from our failures.
Impact. Every action we take has an impact whether it is small or large, that impact propels us towards a better world, where fun, kindness and efficiency collide.
Transparency. Meaningful work and relationships come from a safe space where one can speak with another without fear. Be open about as many things as possible. By making information public, we can reduce the threshold to contribution and make collaboration easier.
Why our values are public
We encourage any company to copy and implement our values.
We make our values public for the same reasons we make our progress, our discussions and dreams public. There is great power and efficiency in teams who share company values.
Not everyone will see our values and feel aligned with them, and that’s OK. When people who are aligned with Alloverse’s values join in and decide to contribute to our mission, it only gets better as those are essential and part of our identity.
Alloverse, a Swedish VR startup developing an open-source platform for
virtual collaboration, closed their pre-seed round with a €250k amount. Its
ambitious mission of building the future of the 3D internet by keeping their
technology open, and growing a global community of VR/AR enthusiasts shows that
“sharing is caring” can make a difference.
The idea of the Alloverse sparked in Nevyn Bengtsson’s mind in December
2016, when he realised that it was not possible to be productive in VR. One
could play games, but there was no software infrastructure for building
productivity apps. Two years later, whilst watching Oculus Connect 5 Keynote, Nevyn felt that humanity was on the cusp of a revolution. One where AR
headsets could eventually replace smartphones; where 2D User Interface could
take the place of text-based terminal interfaces, and 3D UIs replaced all
every-day computing. This dream became reality in January 2020, when he joined
forces with Julie Despraz, Tobias Kask, Patrik Sjöberg and Emma Koszinowski.
ABOUT THE TEAM
Nevyn Bengtsson, the founder, is one of the early employees at Spotify
and co-founder of Lookback, a successful UX research company based in Sweden
& San Francisco. As for the other four co-founders: the CEO Julie Despraz
is the previous COO at Guestit and a serial entrepreneur building online &
offline ventures in South Africa. Tobias Kask, a Silicon Valley startup- and
remote work veteran with a background in UX development. Patrik Sjöberg,
Spotify veteran and previous iOS consultant. Finally, Emma Koszinowski, a
curious spirit with broad experience in the tech industry, recently a backend
programmer at Viaplay.
The VR industry has exploded over the last 12 months, as people have
been looking for new ways to divert themselves and discovered the power of
immersive technologies. The adoption of it is poised not just to replace
physical collaboration, but to improve on it. Current big players in the
collaborative VR space such as Spatial, Glue and MeetinVR offer competent,
polished applications for corporate training or meetings in VR. However, these
solutions all share the common downside of being proprietary, meaning they are
not only incompatible with each other, but also impossible to extend with
ABOUT THE INVESTMENT
Swedish VR startup Alloverse goes against common practices by developing
an open architecture for all virtual collaboration. With it, corporations and
individuals alike are empowered to create multi-user virtual places as well as
3D applications (“AlloApps”) to furnish them.
The fledgling idea caught the eye of Nordic investor Icebreaker, and
therefore the parties partnered up through a pre-seed investment in order to
speed up the development of the project. This show of confidence implies that
virtual collaboration – unrestrained by its participants’ physical location –
is indeed beginning to make the move into mainstream.
pre-seed investment, we can now fully focus on product development and
aggregate community activities towards building our ideal virtual office
Julie Despraz, CEO, Alloverse
the team is planting the seeds for the creation of a broad community of
developers that share the vision of an open VR platform and a genuine
excitement to explore the possibilities of human-computer interaction for the next
“We are firm
believers that AR and VR will grow in relevance outside of entertainment and
that Alloverse will play a pivotal role in laying the foundation for this
The first of many to come, this basic drawing board is a server-side-running, inherently collaborative “tool” to be used simultaneously by multiple people in a virtual Place. It’s being built side-by-side with the continuous development of our AlloUI Library, whose purpose is to enable anyone to build their own AlloApps! So if you don’t like my drawing board – just make a better one yourself! 😉
Regardless of what you think of my drawing board – it may not look great or have its full intended feature set yet – it is working, and seing the result in action is extremely satisfying.
So, without further ado, I’d like to take a minute to walk through and demystify the process of building an AlloApp. Beginning with a set of lofty “what if you could…” ideas, and ending with a useful product that eventually led to this magical moment of trans-atlantic communication:
A journey of a thousand miles should probably begin by figuring out where you’re going. As such, let’s consider some properties of a good drawing board. In my opinion, it should be a lagom sized black or white board, allowing its users to do free-hand drawing on it with a chalk or pen with high color contrast. In addition, you should be able to erase the board, and access to multiple colored pens is a plus. OK, that’s pretty much it.
Next, let’s get crazy. Remember, this is an app made for a world unconstrained by our traditional notions of physics. So, no holds barred, how can we imagine a drawing board that’s better than IRL? Let’s see what we can think of. What about…
Being able to change the pen thickness and color on the fly (without ever running out of ink or accidently picking up a permanent marker some prankster left behind)
The ability to draw from a distance
The ability to dynamically change the size of the board if we run out of space
Now that’s a bit more exciting! Let’s get to building!
“But wait a minute”, you say. “Shouldn’t there be a design phase first?“. If you do, then surely you haven’t peeked at the finished product yet. Seriously though, UI- and UX design for the Alloverse is something we’re very excited about establishing and iterating on, but this specific project is more about the technology. If you’re interested in the future of spatial UX, come discuss it in our Discord! We’d love to hear from you!
Anyway – for now, let’s focus on the immediate concern of creating a drawable surface. How do? After a quick foray into a completely over-engineered vector-based solution, I sobered up and found Cairo – a popular and super potent open source 2D graphics library. With it, we can create a Surface, paint it black and place it in the world. Due to the inherent simplicity of a drawing board, that’s all we need for a minimum representation of one in 3D!
Now, enter: interactions. Thanks to Nevyn’s efforts, Alloverse has built-in support for nifty interactions called point and poke. A point is triggered when a user overlaps their pointer beam (originating from the their Avatar’s hand and beaming outward) with an app component, giving the latter access to:
An identifier of the hand that pointed, and
in world coordinates, the point of intersection between the component and the beam.
Once we have that, converting the intersection point to local app coordinates is easy doable.
Now that we know where on the board the user is pointing, we simply wait for them to trigger the poke interaction by pushing the trigger button. As this happens, we can “make the pen touch the board” by telling Cairo to draw a small circle. And guess what? To emulate freehand line drawing, we now simply need to keep drawing circles at the point of intersection for as long as the user is holding the trigger button!
The current implementation requires us to continously save and load the board Surface to disk as a png image as long as someone is drawing. Thus, we’re limiting it to 20 updates per second for performance reasons. 😅 I know what you’re thinking, but hey, it works! We’re well aware this is a proof of concept and we’re happy with hacks – the ability to stream textures is on the roadmap and we’ll write a Real Solution™ soon™ .
With the basic functionality completed, we can move on to adding some other basic features:
Buttons that increase/decrease the thickness of the pen. Controlling it is as easy as modifying the variable that sets the radius of the drawing circle.
A “clear” button that resets the board by simply drawing it black.
Like any other AlloApp, we can allow users to freely move it around in the Place. This can be achieved from the get-go by simply attaching to it the generic moveHandle created by Nevyn and supported by his latest math adventure.
Resizing the board is done by grabbing and dragging the top-right resizeHandle which is locked to be moveable only along the board’s x- and y axes. This component started out as specific to the drawing board, but will likely be broken out into a more generic component in the future (much like the moveHandle above). Upon detecting the handle being moved, we:
Save the contents of the current board (technically, its Surface)
Create a new Surface with a size matching the position of the resizeHandle
Load the previous Surface‘s contents onto the new one.
All right, that’s about it! Let’s take a look at the final result:
After trying it out “in the field” for the first time I soon noticed a bug caused by my “single player” mindset. In a place with multiple people, the board couldn’t differentiate between which users sent the points and pokes, resulting in a line being drawn along any pointer beams intersecting with the board as long as someone was pushing their trigger button. Thankfully, this was patched relatively easily by implementing a drawingUserControlTable that keeps track of who initiated the intent to draw with a poke, and only allow the running of the circle-drawing function on point for those users.
Regardless, this proved a valuable lesson reminding me that Alloverse is an inherently multi-user environment, and that all apps need to keep this in mind from the get-go. Thus, in the future, the AlloUI framework will be inspired by my control table solution and in the future provide built-in support to more easily keep track of interactions from multiple users.
Though the Drawing Board is functionally complete, it’s still obviously lacking some parts of the puzzle:
Improved UI/UX: The board should simply look more like what it is, so as to reflect how it should be used. This probably includes at least having borders, and the buttons probably shouldn’t be visible for all users at all times.
Prettier buttons and controls. This one’s hingeing on our work to enable the importing and streaming of assets. This one’s roadmapped to be coming soon™ .
Additional features – at the very least, there should probably be an “eraser mode” and a way to change ink color.
Under-the-hood improvements, like using streams instead of continously saving and loading to/from disk. We’ll also need access controls, i.e. limiting who is able to draw or erase. Just imagine running a class in a virtual classroom without this feature… 😅
Hey, thanks for reading this far! I hope you found it interesting or useful. For more posts like this, follow us on Twitter @alloverse or join our Discord!
Building our dream company, Alloverse has not been easy, yet because of our incredible team, it has been a delightful journey this far (no we aren’t done, yet — but we got things to show, and above all, a mission that we are passionate about). Working 9 to 5 everyday and on Alloverse at night, during summer holiday and weekends, I have been focusing on two departments: marketing & sales. And the same terms have been popping up over and again, to the point where I recently ended up dreaming about presenting crappy powerpoint slides in front of scary faceless aliens. Anyway, after waking up this morning, I remembered my math teacher in 2nd grade saying ‘if you can explain it to your little sister, and she gets it, then you definitely got it Julie’. So here we are, after spending hours reading on retention, I realised that to get there in today’s environment, we need to go way back (well about 8 years ago):
In 2012, Google decided to dig into the metrics that make up the Perfect Team and launched the Project Aristotle, which lasted around two years. Over that time, they found out that “group norms” (traditions, behavioural standards and unwritten rules that govern how people behave together) were not the main reason for a group to function. In effect for a team to work out and excel, it needed Psychological Safety (people’s perceptions of the consequences of taking interpersonal risks in a particular context such as a workplace). Yes! (And this to me sounded awfully familiar to a love relationship key metrics)
Furthermore, for one to convey the above metrics, communication played a major part, just like, once again, in a love relationship. So the lack of it — can either deepen trust or wreck it and it is no secret that to know someone well, comes mainly with being able to communicate ideas, dreams, emotions, etc — may it be verbal or physical. As this Project Aristotle showed, teams are complex clusters and even if each member is carefully selected, without Psychological Safety, talent only will not drive it.
Psychological Safety in a remote environment
Six years later and we now live in another dimension due to a global pandemic. Lucky ones are able to work from home and thus, several major product companies have decided to remain remote until new notice (July 2021 for some!). Not only do some struggle to work with others without seeing them, others start a job remotely without ever meeting their team mates! The struggle to make sure that everyone is well, happy, positively challenged and efficient is real and the Project Aristotle could definitely be done again, but this time, researching what makes a Perfect Distributed Team.
Psychological safety is surely very relevant right now, however without seeing each other; feeling each other’s emotion or reactions in 3D — how can one feel safe & ultimately, trust the other. It is no secret that trust takes time to cultivate and can be destroyed exceptionally quickly. One knows so especially when it comes to love and friendly relationships.
So going back to what makes a love relationship work, a certain Martin Forster wrote a brilliant book introducing a concept, which can be transposed to the business world: every negative, trust-threatening interaction needs five positive, trust-building interactions to counteract it.
Wouldn’t 3D interactions help us enact on Martin Forster’s advice then and reinforce trust among employees, or avatars if meeting in Virtual Environments?
Besides communication as an easy option, people can sense when something isn’t being said, and as the Google study of teams found, open communication can have a notable impact on the levels of trust within a team. Aside from communication, one tends to forget that success is often built on experiences, the humane touch of our day to day working hours with its emotional interactions; complex conversations and who we wish to be, become and feel cannot be optimised.
So, although we still meet and interact daily in 2D, how do we make sure that trust among team members grows stronger? ’Cause without it, not only will teams deplete, but people will leave and without them, no company can subsist. And that goes for customers too. Hence retention is what we try to cultivate when nurturing psychological safety, communication and trust.
So what is our solution to retention !?
The last paragraph did end up being quite sad, but be reassured, there is a viable solution thanks to the wonderful advancement of technology: Virtual Reality!
Nine months into this global pandemic, most of us, the lucky ones, are sick of Zoom, Microsoft Teams, you name it — we are feeling the fatigue of it. Additionally, we also realise that workshopping with a 2D screen doesn’t bring us as much as when experiencing it IRL. Same goes for sensing the tiny emotions, feelings of our comrades during our calls, because eventually you will lose focus on the conversation trying to read in-between the “behaviour lines”; and that is, if your colleague is even showing her/his/their face(s).
As PwC’s most recent study showed, Virtual Reality may be the answer to our 2D meetings exhaustion, not only is it fun to use and work with, but is also has tremendous consequences on one’s focus and engagement, which are key to great communication, trust, hence Psychological Safety.
Thanks to many innovative minds, Virtual Reality is growing and is more present than ever, and with it comes some other wonderful perks:
Spatial independence No need to travel to meet anymore, which is saving companies from a lot of logistic thinking and money. Furthermore, it also enables everyone to participate to great gatherings; may they have aerophobia, be physically disabled or don’t have enough time due to personal obligations.
Immersion Impossible to be distracted when using VR, or to shut down your webcam to take a phone call. Instead it keeps you focused and in the present, hence more engaged and easier to remember the content of your meeting in the long term.
Increased creativity When we collaborate, we are mostly in a room with windows ,if lucky, a white board and lots of coffee. VR allows you to pick any type of environment, how creative would your workshop be if you could hold it in the nature, surrounded by blue sky and luscious flora?
And it would be easy to add to that list, depending on the industry you work in or the needs you have as a human being, but also as a company — creativity, in our current situation is of course a wonderful tool to get by. Besides, who doesn’t love a bit of magic?
Well, by now, you are probably thinking that VR may be an interesting option and if you do, then you should have a look at Glue.work or Spatial.io—both offer some great options for collaborative get-togethers. With Alloverse, we are working on empowering anyone to create multi-user virtual workspaces and the 3D applications (“appliances”) to furnish them. A little more work maybe, but I did hear somewhere that building something meaningful did reinforce trust among individuals 🤩
I studied game programming in 2004, which included linear algebra — matrices, vectors, that sort of thing. It was the most fun I’ve ever had with math, since it’s the basic underpinnings for 3D graphics, physics and many other game development topics, so I was able to immediately try out every new thing we learned in code, and literally play with it.
Fast forward sixteen years, past a long iOS career that didn’t really need that much math, to the now where I’m part of a group building the future of VR. Alloverse is 3D, and built on game tech, so all that old knowledge is needed again. I’m kind of a lazy programmer, so it’s rare that I reach a point where I truly understand something; I enjoy the building and the result more. However, in this case that wasn’t an option, and with some help from my friends and colleagues, enlightenment was reached and the satisfaction was supreme.
So here’s the project, which I thought would be easy: point your hand at a thing, press the grabby button, and have the thing you’re pointing at move, its position and rotation staying fixed relative to your hand as if you glued it onto the end of a stick.
Alloverse’s front-end is Lua, but its shared code and backend is C, so I was doing this math in C and only using transformation matrices. After several days of dead-ends, I ended up writing a minimal test case in Lua on the same VR engine that Alloverse uses, Lovr. It took an entire day, but Lovr’s APIs are really stellar, and it was so much fun. You can see the result in the video at the top of the post. Here are the important bits:
function qdiff(q1, q2) -- ??? wtf, don't ask me
return lovr.math.quat(q2) * lovr.math.quat(q1):normalize():conjugate()
self.heldBy = hand
self.offset:set(self.position - hand.to)
local handRot = lovr.math.quat(lovr.headset.getOrientation(self.heldBy.device))
self.distance = (hand.to - hand.from):length()
if self.heldBy then
local straightAhead = lovr.math.vec3(0, 0, -1)
local handRotationQ = lovr.math.quat(lovr.headset.getOrientation(self.heldBy.device))
local handRotation = lovr.math.mat4():rotate(handRotationQ)
local pointedDirection = handRotation:mul(straightAhead)
local distantPoint = lovr.math.newVec3(pointedDirection):mul(self.distance):add(self.heldBy.from)
self.position:set(distantPoint + self.offset)
self.rotation:set(lovr.math.quat(self.rOffset) * handRotationQ)
You don’t have to understand this code, that’s how wrong it is. My general thinking was:
Find the point on the grabbed box which should stay fixed relative to the hand. Save the offset from the box’s origin to that point. Also save how far away it is.
Calculate the box’ new position by taking the hand’s new position, adding the distance away from the hand, and adding the offset (from grabbed point to origin on the box).
Try to do the same thing for rotation by saving the difference in rotation between the hand and the box, and set the box’ new rotation to the hand’s rotation plus the saved difference.
I figured it’d be easier to decompose the problem from matrices (which I know how to work with and are okay proficient with, but which are hard and always do my head in) to positions and rotations (positions are easy, but for rotations I haven’t used quaternions before, so it’s all new territory for me).
The problem was, as you can see in the video above, that the rotation was applied in the wrong coordinate system, so it rotated along X when I wanted to rotate around Z, and so on, depending on the camera location when drag started. This is something I conceptually understand how to fix when working with matrices (you usually need to invert the order of multiplication, since matrix multiplication is not commutative), but with Quats I’m lost.
Enter: frustration. All that work to switch tools, only to want to switch back, and I didn’t understand anything any better. I had spent over a week full-time on this already (to the point where it would distract me from eating and sleeping outside of work hours).
A little help from my friends
It was time to ask for help. Luckily, I had the privilege to befriend math prodigy and VR hacker Rasmus when I lived in San Francisco. When I described the problem over Messenger, he disappeared for a few minutes and then returned with a PDF with some LaTeX formulas. 🤯🤯🤯
Apparently, my thinking that I needed to keep track of the point at which the “stick” was touching the box muddled the waters for me, making the problem much more complex than it had to be. All I really needed was to save a single transform — “HandFromBox” above — and everything just falls into place!
Still, I was not able to take this theory and apply it to practice on my own. Luckily again, I’m now colleagues with one of my closest friends (who also studied Game Programming at BTH with me): Voxar! We spent two whole afternoons pair programming using the amazing screen sharing tool screen.so. The result is beautiful: 19 lines replaced with 4.
Plus, you know, it works 😅😂
Voxar and I are both working on our collaboration style (at one point, I argued vehemently for a full hour that he was wrong, but of course he was right 😅). We had two big squabbles; but since they were such sticking points for us that we kept arguing our sides vehemently, we ended up teaching ourselves something really valuable when working with matrices. Rasmus’ chosen terminology — “XFromY” — really did our heads in for the longest while, but using it means that the naming itself helps you understand the semantics of matrix multiplication. Again, since matrix multiplication isn’t commutative, this is super valuable. In the past, I would just swap every multiply in my code until it works; but after this exercise, I’m actually able to reason about the order and figure out the correct order without experimenting. This has the advantage that I don’t introduce two mistakes that cancel each other out; I’ve done this mistake many times, and leads to just writing tons of bad math that all breaks once you fix one load-bearing bug somewhere.
For example, if you have a transform that represents the position, rotation and scale of your box in the world coordinate space (i e relative to the origin point of the world at 0,0,0), you can call it WorldFromBox. We can multiply a point that is relative to box with this, and get a point that is relative to world — i e it is a transform from the ‘box’ coordinate system to the ‘world’ coordinate system.
So say we want handFromBox to get that “offset” we talked about before, converting from the hand’s coordinate space to the box’ coordinate space. We have the hand and the box transformation matrices (representing their position, rotation and scale in a single big box of numbers) called worldFromHand and worldFromBox. We can get handFromWorld by just invert()ing worldFromHand. Thus,
local handFromWorld = worldFromHand:invert()
local handFromBox = handFromWorld * worldFromBox
Notice how the two “world”s line up, making the line readable! This was a big revelation for me.
With code and understanding in place, we ran our virtual victory lap! (I accidentally only recorded Voxar’s mic, not my own)
It gets tricker
We weren’t quite ready to port it back to Alloverse though, because Alloverse is a scene graph. You know, like on a regular 2D computer: you have a window, and the window has a text field and a button. When you move the window, the button follows the exact movement of the window, keeping its relative position to the title bar. It’s the same thing on web sites. It’s really hard to build user interfaces without a scene graph.
You really got to keep things straight with a scene graph. It’s really easy to write math that seems to work, but where you ended up accidentally assuming that one tiny part of the equation is in world coordinates when it isn’t. For example, in my prototype, the hand belongs to the world (see left); but in Alloverse, the hand belongs to the avatar which belongs to the world (see right). Also, the thing you’re moving might belong to a parent object, rather than being in the world.
Getting a matrix that represents WorldFromTallBox is easy: just recursively multiply tall box’ transform with each of its parent nodes in turn.
if self.parent then
return self.parent:transformInWorld() * self.transform
Converting from any arbitrary node to any arbitrary node is trickier, but again, Rasmus’ nomenclature helped us out. I’m sure there are more efficient solutions, but this works:
function convert(m, a, b)
local worldFromA = a:transformInWorld(
local worldFromB = b:transformInWorld()
local bFromWorld = worldFromB:invert()
local bFromA = bFromWorld * worldFromA
return bFromA * m
And hey presto, that took about a DAY of flailing around in C and an HOUR in Lua.
A bad case of the typos
Okay! The prototype works! Let’s just port the math over to C and we’re done! …
Well. We ported the math over line-by-line. It refused to work. Things would just fly off the screen from a simple hand movement, some matrix clearly being multiplied in the wrong order. We debugged for an entire day, making really really really sure every single detail was correct. When we had read the code so many times we knew the fault must lie otherwhere… we looked at my home baked matrix class. … and of course, my multiply_matrix method had a typo, swapping the arguments. So, every single multiplication in the entire project so far had been written in the incorrect order to compensate for this load bearing bug.
With absolute zero trust remaining in my skill to copy-paste math from StackOverflow, we moved to felseva’s mathc library, which has all the linear algebra you need for 3D graphics, physics and all that jazz, and nothing less, and nothing more. It’s just lovely. (Its API is very similar to Cirno’s Perfect Math Library, which clearly is just perfect.)
This of course broke everything else, so I had to invert every single multiplication in the project before moving on …
At long last…
Yes. What you’re looking at is me moving the jukebox app with the grabby button. And it moves. Exactly following the hand’s movement and rotation. IT’S PERFECT! IT’S BEAUTIFUL! IT’S TWELVE LINES OF CODE!
On the one hand… I feel like such a fraud. I like watching Twitch streams of other game devs, and I feel like this is the sort of thing they’d go like “oh, and then we need to be able to move things, lemme just” and five minutes later it’s there. For me, it was several full days of work a few months ago before we were incorporated and I was working in my free time; and now followed by two additional full weeks of work.
On the other hand, I’ve only been on this job full time a single month now, and I’ve learned so very very very much so far. This is just one of the frankly quite amazing things we’ve accomplished in this short time, and there’s much more to come.
Using the XFromY naming convention for matrices is really handy.
Understanding your code can be better than just writing something that seems to work. Figure out when that’s the case and spend the time to get there.
In the spirit of open source and transparency, we would like to share our ongoing thoughts for the future of our platform.
Last you heard from us, we had taken a long look at our modular platform for virtual and spatial collaboration, and found a shared passion: education. We weren’t sure exactly how, but we wanted to become a platform for learning for everyone, especially people who can’t reach educators as easily because of real-world distances.
In the months since, we’ve found that to sell a VR education package to schools, schools would want us to provide them with a complete curriculum, a complete solution for education in VR. However, our focus and expertise is building infrastructure, not content. Thus, for now, building a solution for schools is not something we can do right now, and not in the future either unless we can find a partner that builds content.
Instead, we decided to focus on a product first for VR workshops, then virtual offices, and only after that we can come back to education in a larger B2C push.
To elaborate on this strategy, we present our current iteration of our ten year commercial roadmap, as follows.
Background: a pandemic shifts the workspace priorities
May 2020 and Covid-19 is the centre of attention. Today (15.05.20), millions of people have been laid off globally in the last 3 months. (33million people have been let go in the USA this year).
Majority of companies with thousands of employees have decided to lockdown their offices and asked everyone to work from home. Supplying them with the necessary equipment to remain efficient, but that mainly applies to tech companies with strong developing teams able to deliver from any side of the world. Twitter announced on the 13th of May 2020 that all team members will have the possibility to work from home forever. The work place is changing from the impact of the covid-19 pandemic, and the decision power within organizations will be shifting into the hands of those who deliver the product: developers, designers and the product development teams. This major change in tech companies brings new challenges, especially on a cultural level. For the past 10 years, organizations such as Google or Facebook have been attracting the crème de la crème of candidates by offering perks never seen before, such as free lunches, free gym passes, etc.
Those perks enabled companies to keep their team members engaged and talking about their work dawn ’til dusk. However, with this also came the “open space office” which pleased some and stopped others from being focused. Therefore today, with the obligation to work from home, many programmers and employees are realizing how a mix of both working manners could be beneficial for the quality of their work. The remaining question for companies that have spent years and millions into entertaining and growing strong culture among their peers, is how will we keep everyone as engaged from a distance?
The next computer revolution
At Alloverse, we strongly believe that VR/AR will be the next computing revolution, the way the smartphone was in 2007, and graphical user interfaces was in 1985. As we move towards more automation and intelligent services to enable us to lead better lives and more efficient work days, VR/AR will also grow. In this pandemic, we are unable to run workshops, have conferences, or meeting in big groups. VR has been a no-brainer solution for these issues. For example, Laval VR Conference Summit showed more than 11’000 visitors. Companies have been able to reach 10x more people than if they had to hold a physical event and therefore, costs for the hosting company and all visitors fell to a minimum (no travel, hotel or living expenses).
We want to be at the fore-front of this revolution. Our long term mission is to become the standard for remote collaborate work and play, and the biggest open source and distributed collaborative spatial (AR and VR) computing platform.
Short term plan: Alloverse Workshops
By noticing those companies and initiatives’ quick adaptive mindset, we decided to meet with some friends, owners of local SBEs in Stockholm: Beteendelabbet and Psykologifabriken. Both businesses run workshops for clients, and they’re able to use video conferencing to shift their business to digital, but it’s far from delivering the same experience. We have thus decided to partner up with them to offer them a VR space for workshops. This becomes our first stepping stone into the world of remote spatial collaboration, by providing easy to use, but also modular and powerful teaching work spaces in VR.
We start out building the rudimentary spatial apps needed to run a workshop, such as whiteboards, slide deck viewers, note taking apps etc. Both us and other developers can then use our open API to extend these workshop places with more and more advanced functionality, where in a year’s time, you as a teacher can choose from a wide variety of tools to build the perfect teaching environment you need for your workshop.
We will monetize our Workshop Places as follows:
Pay as you Go model for individual Business Educators. Pay for compute power, individual subscriptions to apps, per seat, etc.
Standard workshop bundle package: a complete package to educators with everything they need to sell a VR workshop package to their customers.
Custom enterprise package: a larger deal where the details can be negotiated.
We will be launching our MVP end of July 2020 and testing our solution with both companies in August, in order to work on the product and start commercialising it at the end of 2020. We will get a feedback loop going to make sure that the Alloverse Workshops is capable to deliver up to the expectations of our friends and their clients. Once we have validated our product, we will move towards our next step.
Side quest: A foundation for education
Alongside our commercial efforts, we will grow our Alloverse Foundation. The Foundation will supply headsets and virtual classrooms to public schools across the globe. We strongly believe that a democratised education system is part of the answer to make the world a better place. Therefore a percentage of each enterprise contracts will go into our foundation and support our efforts in financing hardware and development of immersive Virtual Classrooms.
Mid term plan: Alloverse Virtual Offices
In this step, we will offer remote teams to connect through VR and join meetings, run pair programming sessions, and socialize in a virtual office environment. Due to Alloverse’s modular nature, we are able to use the same infrastructure as for Workshops to build modular offices, where every company can fit their virtual office with exactly the tools they need. With both VR and desktop apps, Alloverse can be running all day as a collaboration tool, and you can choose whether text and voice is enough for your work, or if you want to put on your headset and work as if side by side.
The development of this product starts in 2021 and until 2026. It targets mid to large size companies active in “easy industries” that we already understand and where we can use the tools we are already using for ourselves. Thus we start with Virtual Offices for Product Development, and then work ourselves up to more complex industries (Product; Design; Architecture; Industrial Design and Engineering; etc). Throughout, our app market grows organically with the addition of those various industries and respective needs. The monetization strategy is similar to before, but now with additional components.
Pay-as-you-go, workshop bundle and enterprise deals as before;
Virtual office bundle for each industry, providing everything a company in respective industry needs;
We start providing a native app store with payments and subscriptions, where we take a percentage of sales;
White label licensing for end-to-end solution providers.
Our ideal beta customer would be a mid-size company distributed like Twitter or Spotify. Remote teams test our environments by working in them, and in the meantime, they’ll likely develop interesting applications for themselves in there, which enriches the our app ecosystem. We will introduce a VR/AR slack tool where we the community of developers aggregated will be able to share their thoughts and give us constructive feedback to improve our solution. By offering this solution to tech companies, not only will we support their efficiency but also, their internal culture. This will keep teams engaged and social. We can then also market our solution as an “efficiency tool, talent retention tool, culture bonding tool”.
From 2020 to 2026, we will focus on a B2B model and cater to different industries across the globe. However, by then and when we will have a stable and viable Virtual Office environment aside our Workshop Alloverse place, Alloverse should be the first tool individuals think of when considering joining a collaborative VR/AR platform. Also, we can easily forecast that by 2026, VR/AR hardware will be of superior quality. It might be that we will be able to purchase glasses or even lenses delivering the same experience as Oculus Quest or Hololens today and among those improvements, price point may also be lower thanks to competition.
Long term plan: B2C
Those assumptions motivate us to work towards becoming a B2C company starting 2026 where we will offer a Spatial Social Network, using our app ecosystem to be the place to hang out, for work or for play, together with family, friends or colleagues. A place where eventually we could also democratize education by running classes with our app store. This is where our educational foundation can join with our mothership a life-encompassing virtual environment. The possibilities are endless in this model, just as they have become with the adoption of the smart phone.
We will monetise our Spatial Social Network by using a similar Pay as you Go model as for the Alloverse Workshop.
Alloverse’s first mission in the world is to provide an open platform for educators and students. This means that we’re building all the tools and infrastructure needed to build classrooms, whether you’re
bringing VR headsets into your physical classroom;
building remote classrooms bringing people together from around the world;
or even doing corporate training in VR, to reduce your company’s reliance on airfare.
The infrastructure we build for education will also be useful to business, pair programming, and the other use cases we’ve previously planned; but our main focus is on education.
With our focus established, we have incorporated as the Swedish company “Alloverse AB”. Starting March 1st, four of us work half time, and we hope that with some initial funding, we can start working on this full time eventually. However, we plan to become self-sustained as soon as possible, and have no plans to go “the venture capital route”. We want to build sustainable infrastructure for the Internet, not cash out in an exit.
Building tools for VR, being on the frontiers of human computer interaction… it’s a dream come true, and I’m very grateful to get to do this as my day job, and so are my colleagues. We hope to bring you more good news soon!
All work so far has been in our spare time, mostly during our “VR Hack Nights”. With that limitation, we’ve gotten pretty far! We have hand and head tracking, voice communication, and a rudimentary app API, all working over the network on a multi-user server. It doesn’t look like much, but it’s an iceberg slowly rising above the surface of the water.
We’ll upload public builds to the website so that anybody can join and try it out as soon as we have the CI situation under control.
We hope to see you in the audience at Educators in VR, and soon, in the Alloverse itself!
I started sketching on the underpinnings of Alloverse in December 2016. The basic thinking was this: it’s currently not possible to be productive in VR. You can play games, but there is no software infrastructure for really building productivity apps. The way both Oculus and SteamVR works is, you launch a desktop application, and it takes over your entire headset.
This matches how you’d use apps on an iPhone, but not how you do your daily work on a desktop computer. On a real computer, you use multiple apps at the same time, and you take information from one app and apply it to another, you copy-paste, drag-and-drop, and in general just multi-task a lot between apps.
So, what VR then needs, is a platform for running apps not as immersive experiences, but as individual applets that can all run side-by-side in a place, together with you, the user.
This led me to Unix’ ancient X11 design, X11 forwarding, and thinking about the distributed nature of the Internet; and I realized I had to write basically a Unix Window Manager for VR. Had to. Life goal.
But the project was too big, too crazy, and I couldn’t wrap my mind around where I would even start, especially when it’s just a side project next to my busy and booming startup Lookback.
Almost two years later, I watched the Oculus Connect 5 Keynote, and in particular Michael Abrash’ incredibly inspiring talk about the state of XR. He compared today’s situation to the state of computers in 1979-1980, around the time when Xerox PARC was creating the Alto, the cradle of the graphical user interface as we know it. As the foundations for 2D HCI were created in that magical and transformational moment, the foundations for XR and 3D HCI is being created right now.
This made me realize that we’re on the cusp of a revolution, one where AR headsets replace smartphones; one where 2D UIs take the place of text-based terminal interfaces, and 3D UIs replace all every-day computing.
Days later, I started VR The People, a VR hack night group that meet after work every two weeks to learn more about VR, Unity, and to work on our own projects. The time to delve into my own project, with tons of lovely and inspiring people around me, plus the two years of letting my brain background-process how my project should work, finally allowed me to create Alloverse.