For this interview we are fortunate to have mahu (they/them/any) joining us to chat about their intriguing world known as the Library of Babel!
Read ahead to get a quick idea of mahu and one of their creative works, or listen to the full audio recording, both edited for clarity and brevity respectively.
Armani: First I just want to let you introduce yourself including your pronouns and what you want the audience to know about you.
mahu: I'm mahu. I go by they/them pronouns, or any pronouns, really. I've been making VRChat worlds for a while now, and I have a lot of varied interests in the worlds that I want to make. Library of Babel's probably the number one world that I wanted to make. I've got a lot of other fun stuff that I want to make too, like making a Beyblades map and just fun stuff like that.
Can you tell me about your introduction to and earliest memory of social VR?
Hmm, that's interesting. Back in, 2018 or so, I saw streamers and YouTubers like PewDiePie on VRChat, and I immediately knew that, like, whoa, like, this is really cool. This is different. This isn't what I thought it was and that was awesome. I bought an HTC Vive and I didn't even go on VRChat at first. I went to play Beat Saber, right? Everybody loves Beat Saber! And then after 20 minutes of Beat Saber I'm like, okay, let's try VRChat, and I swear eight hours passed and I ran out of controller battery. My first time in social VR was just exploring VRChat worlds with random strangers that I met. That was my introduction to social VR. I took the headset off, and I was like, whoa, this is reality. I couldn't see the next day. The screen was too bright. The Vive had a very bright screen, and I wasn't used to it.
How are things going for you in social VR lately or right now, and what do you enjoy versus what do you think could be better overall?
Hmm. I would say that social VR is going really well right now. I'm really enjoying the time that I'm spending with my friends in VR. I spend way more time in VR than I had been because I quit my job in April of 2023 to focus on my hobbies and see where these take me. Hopefully I can get a job in a related field somewhere and sometime soon. But I've just been enjoying my time with my friends in VR, so I pretty much get on VR every day. It is just a blast meeting new people and socializing. And I'd say having full body tracking, being able to customize my avatar, put on different outfits, and all that stuff is a really big part of it for me. The one big thing that could be worked on, I think, is that for VRChat in particular, it's challenging to have a good, varied experience where you're not going to the same worlds over and over again, and balance that with just going to all the new worlds. You can go to all the new worlds when labs are coming out. You can explore that list. But it takes a lot of work to maintain lists of worlds and lists of places to visit, because they'll just be buried treasure for people to discover later.
If you don't go when new worlds come out and it's new and hot, it's really difficult to discover things. I think the one big thing is just having a better way to discover content within VRChat itself, within the game world. If we had better ways to share and curate content with each other from within the client, I think that would be awesome. You have favorite lists, and you can see people's favorite lists, and I guess you can categorize your favorites, but it is still kind of clunky to do that, and not amazing.
What inspired you to make this latest world? The Library of Babel?
So it's based on the short story by Jorge Luis Borges and I believe it's pronounced Babel ("babble", short a sound). That's how I pronounce it. I totally recommend reading it. For the most part, his short stories really do explore the concepts of infinity and just all the different ways that infinity can be explored. So the library is not just an infinite library. It's not just infinite. It's got an infinite amount of knowledge in it, effectively. It's got every possible book of a certain format that could possibly exist. It's really exploring the idea of this quest for knowledge. But every book is essentially nonsense. And it's got interesting themes in it. There are factions that burn the nonsense books or the falsehood books. But that's just futile because even the books that contain falsehoods have exact replicas somewhere else in the library that are different by only one letter, for example. Because every possible combination of letters exists within one of the books. That was ultimately the main inspiration, just the amazing short stories by Borges. Also there's a website somebody had made for the Library of Babel. And it's a really cool website because it lets you just search the library, go find it, and get to see just a book full of nonsense. But then it's got your phrase in it. That was powerful and people liked it. I thought, how much more powerful could that be in virtual reality? I wanted to make it possible to experience that in virtual reality. And I wanted it to be a seamless virtual reality experience.
So everything that I've done here, all of the technical systems that I've built to make this possible, and the design choices I made, were really along the lines of presenting a seamless user experience to explore the Library of Babel, to search for some phrase that you're looking for, and then to actually go and find it and pick that book off the shelf and see you physically walked there. I mean, you used a joystick, but you physically traveled there seamlessly without getting teleported and somebody else could follow you the whole way. You don't see people pop in and out or anything. And you just pick a book off the shelf. And if you had followed the same path and you didn't even search for it, you pick the book off the shelf too, it'll have the exact same contents every single time. It's not randomized when you load in or anything. I don't generate a random seed and then have everybody magically get the text that they're looking for within that random seed. It's predetermined. I could tell you the path to get to a book without actually searching for it in the library. I could tell you the path and you could walk to it and you never had to search for it at all.
Every time you go to a new room, the room has the room that you came from as the parent room, essentially.
How does this world work?
The first and most important thing to understand about how this world works is how books are generated. Every single book is just given a number and then every page of the book is given a number too. And the number for the book and the number for the page are then combined as like a really, really big integer. The technical term is like big integer, right? So it's got a lot of pieces of integer components and every book is distinct. You get a different number for every single book that you pick off the shelf, unless you pick off the same book. You can pick the same book twice. But then that number is just combined into, you know, a really big number that I convert into the text on that page. Every single page has distinct contents in that way. You would think that you would see like a serial number or I didn't do anything about it and if you picked the very first book off the shelf, you would see like A and then B and then C, et cetera, et cetera. And then eventually you'd get like AA, AB, AC, that kind of stuff. But instead of that, I actually just put it through like a really kind of funny cipher. It's not like a cryptographically secure cipher or anything. It's just a really silly cipher I made that scrambles the letters a bunch and you'll kind of get repeating elements in the pages sometimes too. It's not perfect. So it is kind of interesting. Sometimes you pick a book off the shelf and it's got your phrase in it. And especially if you're deeper within the library, you might find that same phrase. It's possible to find that same phrase, like pieces of that phrase over and over again, every few pages. It's pretty cool. I felt like that weakness in the cipher made it more like the Library of Babel short story, where they describe finding books that are alike repeating for pages and pages. And that's how the pages of the books work.
Because of that it's not really random. Each page is predetermined. It's not like a random seed. The way that laying out the library works is my own non-Euclidean geometry system. And that whole non-Euclidean geometry system was necessary to make it possible to travel within the library in virtual reality. Because even if you're in virtual reality, if I had not made a non-Euclidean geometry system, I would have to teleport you or shoot you hundreds of miles, you know, like you'd have to go really far away from the origin or something crazy. And you wouldn't be able to walk yourself because the math, just the math of this is so, so grand, and so large. So I had to come up with a way to overcome that outside of a normal Euclidean system. In the short story, they describe the library as a sphere of indeterminate size, whose center is any hexagon. If you make something like that, then in order to fit every book and travel to like any individual thing that you're looking for, you'd have to go thousands of hexagons to reach, what your search phrase was. Even for shorter strings of text, you would need to search for thousands of phrases, thousands of hexagons to reach it. But in the non-Euclidean system that I made, I created something specifically for this that I call fractal space. In fractal space, the idea is that a fractal is something where you zoom in and you just keep zooming in and it keeps repeating itself. The library operates kind of like a fractal would in fractal space in that sense. Every time you go to a new room, the room has the room that you came from as the parent room, essentially. And then there's five child rooms for example. You go into a room and all of those five child rooms are distinct and none of them lead back to the parent room and none of them lead to each other. In that way, I'm able to pack in way, way, way more rooms in a short walking distance than you would otherwise be able to reach. It lets the library kind of grow at the same rate that the amount of text in the books grows effectively. If you're searching for a phrase that is long, you have to go roughly linearly in about that number. If it's like a 100 characters long, you have to go roughly some multiple of 100 rooms away to find it. It turns out to be about two times right now. A 10-character phrase will require going about 20 rooms or so.
Not all of us are into the math part. Can you unpack more about Euclidean versus non-Euclidean? You're talking about, curved versus non-curved spaces?
Yeah, so I guess Euclidean space is just anything that's kind of regular, where, you go from, like, like A to B on, like, one axis, and then, you know, you go, like, B to C on another axis, and then you can go back, like, you know, backwards, and that translates in the same way, as it was, you know, on the, on the previous axis, and you can go back and make a circle in, in a Euclidean space, or you can make a square, just by, you know, traveling, you know, and the same thing happens, you know, in 2D, and then in 3D, like, you know, it'd be Euclidean if we're going forward and make a right turn, then you take another right turn, and another right turn, and you're back where you started. That's Euclidean space. In non-Euclidean space, those rules don't really apply. They could be curved and you could have hyperbolic spaces, which I still can't really wrap my head around how all of the different ways to connect hyperbolic spaces work. There's some really cool worlds by lox9973 that you should check out. lox9973 is an amazing world builder for this, but you can see just how that kind of space exists, and that's done using shader tricks and stuff like that. This is not done using shader tricks because I needed to be able to model everything and, and just have it all connect together and be a place that you can just walk around, and, I need to be able to synchronize your position and everything.
Yeah, so from the very beginning I added a menu and the menu looks the same as what the compass menu shows. It just had the ability to search for text and the ability to find other players so that you could meet up with them. It was a random menu, and the entire world was just a total blockout at this point. I didn't add the compass until the day before I released it. I made the compass in like, a day, and my idea was, how do I create something that felt in-universe, somewhat fantastic, something kinda crazy...but I needed to justify opening a menu somehow. I felt like the idea of it being the librarian's compass was cool, and the pathfinding system was something I added at the last minute too. I worked on that for a couple days before I released it and that was a technical challenge as well, because I had to implement my own pathfinding algorithms through the rooms. We can't use normal Unity-like navmesh, math pathfinding, and when you procedurally generate the world, at least not in VRChat, we can't.
Are there any other things that you're looking to do, but just can't do right now for reasons like VRChat code versions and stuff like that?
Oh yeah for VRChat, the main thing right now that's kind of a limiting factor in the stuff that I want to do is with the room layout right now. I don't have good ways to cull things in the distance and improve visibility, because the more components that I add to a room, the worse the performance gets on Quest. So it's kind of like a double-edged sword, where I can kind of improve performance a bit on PC, but the limiting factor seems to be on lower-end hardware. It's a CPU-bound issue, and there's so many rooms in the room pool. Basically, the more room variations added will slow down the low-end hardware targets like Quest. Along with that, Udon has a concept of blacklisting and whitelisting various objects so that you can't touch certain things, and you can touch things that you made. That concept's kind of slow right now, and you can incur weird costs for more game objects/scripts inside a room. I've noticed that having scripts in a room would be really bad, and I have to come up with weird systems to work around not being able to put a script in a room, because if I had 10,000 scripts in these rooms, it would start slowing things down.
I guess the biggest thing is that we don't have exact control over player position. In doing a non-Euclidean style of world like this, I need to be able to synchronize player position in some way, and so right now I have to use VRChat's stations feature, which is where you're sitting down in a chair, and everybody who joins the world is put into a station. It's a special kind of station where you can still walk around, but all I can really do is calculate if a player should be visible to you or not, and then if they are visible to you, I make their station and let them be free and roam around. You can see their position, but if, they're not visible to you, I move their station out of sight and seat them in it, but only on your screen, right? Locally they're fine, but for other people who can't see them on-screen, they're whisked away, and you can't see them. That's cool. But that means I can't control player voice and stuff, so if you walk around a corner, I can't fade out your voice very easily without writing a lot of code to implement that and then hoping that there aren't any weird station bugs that would just significantly increase the amount of code executing as well. There's a lot of things that I guess could be done, but ultimately there are a lot of trade-offs, and the amount of code I'd have to write to get it out there, how reliable would that code be? What are my goals with the project? Even the station usage is a problem. Some people's avatars don't like it. So much, so much to think about too, there's so many different variables.
What's been your favorite part of developing this world so far?
Honestly, my favorite part has been the response from the community. Like, the community response has been, pretty amazing, people have been very, very supportive, very enthusiastic about it. That's been, honestly, the best part of the experience…seeing people get really excited about exploring the library, discovering the books and, you know, the conversations that happen within the library itself. People will find these strange books and be like, “Whoa, look at this! Like, what is this?” And then they'll show it to each other and it just kind of sparks these really interesting conversations. Yeah, it's always cool seeing the reactions from people and seeing how, how much they enjoy it. And even right now you can see the reactions from the lighting and the infinite staircase and all of that. It's just a cool experience to be able to share that with people.
What do you think the next big step is for this project?
I have a couple of ideas. One of the things that I really want to do is expand the content within the library itself, add more book variants....just more content, more rooms, more, you know, things to explore. Another thing that I'm really excited about is that I have some ideas for a kind of meta-narrative experience within the library. Kind of creating these narratives that you can explore and discover as you're traveling through the library. I think that could be really, really interesting. And I think that would add a whole other layer to the experience, being able to have narratives and those stories within the library itself. I'm really excited about that. And I think that's probably the next big step for the project.