Episode 15 - Building Multiplayer Virtual Reality Applications in Unity with Zac Drake
Navyata Bawa, a Developer Advocate at Meta Open Source, chats with a VR Developer Environment Software Engineer Zac Drake about the SharedSpaces sample and how it demonstrates the Platform SDK Multiplayer features.
Summary​
In this episode of The Diff podcast, host Navyata Bawa chats with Zac Drake, a software engineer on the VR Developer Environment Engineering team about the VR Platform SDK Multiplayer features, highlighting how the SharedSpaces app makes them easy to use out of the box in Unity. Zac explains some of the challenges that can arise when developing multiplayer VR applications. We discuss how developers can account for things like latency, as well as other best practices, recommended resources and learning materials to help you start building multiplayer VR experiences.
Social Accounts​
Episode Transcript​
Building Multiplayer Virtual Reality Applications in Unity with Zac Drake
[00:00:00] Navyata Bawa: Hi, everyone. Thank you so much for joining us today. Continuing from our last episode, in this episode of the Diff, we will discuss more about building multiplayer, virtual reality applications. We will learn about the platform SDK multiplayer features and the open source ocular shared space sample in.
[00:00:25] And with me today is Zach who is a software engineer on the VR developer environment engineering team. To tell us more about building multiplayer VR apps in unity. Hi Zach, I'm super excited to have you here with us. Could you please tell us more about yourself and what you work on?
[00:00:41] Zac Drake: Hi, I'm Zach Drake. Uh, thanks for having me.
[00:00:44] Um, I'm a software engineer on the developer technology team. Uh, I focus on samples and graphics features mostly working in unreal engine, but I also have, um, with unity and work on some samples as well. [00:01:00] Um, I have a background. Games. I started out doing PS two and Xbox games. Uh, I worked on Tony Sr series.
[00:01:11] I did, of those starting with, uh, four, and then I also worked on, uh, guitar hero. Um, if you ever played drums on guitar hero, that was my code. I wrote all the drum input code for. Um, after working at doc division, I worked on, um, some AR applications for a while, mostly on mobile with track targets and things like that.
[00:01:37] Um, did a bunch of AR applications for that, that type of stuff. And then for a while I was working on, um, heads up displays for cars with, um, Working with F PGAs and, and ASIC design for holographic displays that were used in, in those heads up displays. And then I've been with Meow for about two [00:02:00] years now.
[00:02:00] I've been on the dev tech team the whole time. And, um, I've been, um, working on a number of samples. Uh, I did a graphic showcase. I recently released, um, a port of showdown to quest and I also. With a few team members on the shared spaces, uh, multiplayer, uh, sample.
[00:02:22] Navyata Bawa: Wow. That sounds interesting. And I really like guitar hero.
[00:02:24] I mean, I enjoy playing it a lot. Um, thanks for the introduction. Yeah. uh, so you mentioned shared spaces sample, so let's talk about it a bit. Uh, could you tell us what the sample is about and like how it works?
[00:02:38] Zac Drake: Yeah, so shared faces was basically our way of building a template so that developers can. A head start on a multiplayer, uh, game.
[00:02:48] Uh, we're trying to take care of like all the low level stuff that is involved in like getting multiple players into like the same room and to. [00:03:00] Deal with like kind of the, just the base multiplayer functionality so that the developers can work on the gameplay and stuff. Um, so yeah, it, it's just, it's really a template and, um, and that's part of why we, you know, we've made versions of it for both unity and unreal.
[00:03:22] Navyata Bawa: That sounds interesting. Uh, can you tell me a little more about like how the sample is organized and. some, something about the inner workings. Like I know that we wanna abstract it from the users so that it's like very easy for them. Mm-hmm but like, just for people who are curious, uh, like how does it work behind the scenes?
[00:03:40] Zac Drake: Yeah, so there's a few layers underneath. Um, so like the main thing we wanted to expose was the, um, the platform SDK, the multiplayer features, um, and that's kind of the highest level that supports, um, invites and, um, roster like, so you can see, you know, who's [00:04:00] where your friends are and, and, um, invite them to the same matches as you and stuff like that.
[00:04:06] Um, there's a couple layers under that where. Uh, where we use photon, which is actually delivering the packets back and forth between the players. And, um, like, so if you need to send like the position of your character that gets wrapped up in a packet that gets sent through photon to the other player's device, and then there's the low level engine part that takes that packet in, or is actually creating and receiving those packets.
[00:04:34] And, um, basically, um, Turning that like. Turning that information into the actual position, like updating the actual position. So if my character moves on, uh, on my headset, if I may move my position in the world, I need to send that, um, that new location to everybody else. So they know where to draw my [00:05:00] character.
[00:05:00] The engine will package that. Hand that off to photon photon will send that packet. And on the other end, receive that packet and then deliver that packet back to the engine and the engine will then handle, um, decoding that and updating that player position. So those two layers like really work closely.
[00:05:19] And then the, um, The multiplayer S the platform SDK multiplayer is kind of on top of all of that to kinda get you into the same rooms and things like that. So,
[00:05:34] Navyata Bawa: well, that's so interesting. So you mentioned like the platform SDK is built on top of these, like, what are the features that are, uh, like the platform is responsible for, like, when we see the sample, like, which are the features that the platform ISTK, uh, actually does.
[00:05:51] Zac Drake: That's a great question. So platform SDK is handling things like, um, we have to talk to the platform SDK to get like your Oculus [00:06:00] IDs. Um, so like the, the game doesn't know who you are without talking to the platform. So it'll get like your Oculus ID. And then when you want to send an invite, it's gonna get pulled down, like the list of your friends.
[00:06:15] And so, yeah, it's gonna. Give you that list, like we have to ask the platform, okay, your access idea is this, who are you friends with? And then it's gonna look up things like, where are they? Are they even online? Are they already in the same game as you like, things like that. And then handle delivering the invite, it'll show the invite on the other end.
[00:06:37] And then like, once they're in your game, it handles things like, uh, roster panel, which kinda. Like, okay. Yes, you are in the same room or you're in the same game, but maybe not in the same room, things like that. Um, so platform is all about, yeah. The user, like your, um, yeah. Your user accounts where you are and how to [00:07:00] get your together.
[00:07:01] Um, so that's a big part about multiplayer it's um, it's like really helpful to. To get everybody together like that. Um, it, it can be difficult to. Coordinate again, a lot of times people end up coordinating outside of the game, like, oh, let's jump on discord or I'm look at phone I've headset on like that trying resolve of those issues, simplifying the process of getting together headset.
[00:07:33] There are other options as well as you can send invites, like from outside from, um, the mobile app. And, um, that will. Then launch people direct launch the headset directly into the game. So those are all the that's kind like what it does. And yeah, the just without other [00:08:00] platforms to.
[00:08:02] Navyata Bawa: Wow. That's awesome. Uh, you did mention that, uh, it helps people join like rooms.
[00:08:07] So how do you define a room? Like, uh, if you're making a game using the SDK, like how do you define a room and how do you make sure that people join your
[00:08:15] Zac Drake: room? Mm-hmm yeah. So the concept of the room is. It can be confusing, cuz there's a lot of like different definitions of what is a room like, and there's a lot of like terminology, like, oh, there's like, what is a match?
[00:08:30] What is a room? What is a lobby? Um, we have a bunch of documentation around shared spaces that kind of covers a lot of that. But um, and a lot sometimes it's up to the developer, like what they consider to be like a match like there's um, Like photon has the concept of a match, but it's not, um, it's not like it doesn't have to be the same thing for every game.
[00:08:56] Like if, if using a match in one way works better for you, what [00:09:00] somebody else is doing, like, that's like, If you look, think about a game like pop one, like they obviously have a lobby. Like you go in there, there's matchmaking, you get put into a match, which is, you know, is one battle. And then everybody battles it out.
[00:09:18] And when you're you go to the lobby, like that match can encompass like multiple groups of people. And so like, like NABI and I might pair up and. Be in the same lobby. And then we join a match and there's a bunch of other people in that match too. But when we finish that round, we wanna go, go back to that same lobby.
[00:09:44] And so, um, that's, that's kind of one way to think about it. And like I said, there's a bunch of layers. Like we tend insured spaces. Like we think of the room as like the physical. Not the physical, new virtual [00:10:00] environment that your characters are in. And so if you can see each other in the virtual environment, we can see you to be in the same room.
[00:10:07] Um, so the lobby is a room. Then we have a bunch of colored rooms. We have, um, red, blue and green room. Those are all private rooms. So if you get invited to the same lobby and you go into the red. Blue or green rooms, the same people from your lobby will be in there. If you go to the purple room, that's a public room.
[00:10:27] And so there's no invite required. So you can just run in there. And if literally anybody else is running like shared spaces at the time, and they're in the purple room, you'll see in there. Um, but yeah, there's, there's a lot of. There's a lot to kind of figure out around rooms and matches and like how you're gonna use them.
[00:10:47] Shared spaces provides like one example of how to do that. And if that works for you great. But there, there are like, you can adjust the way that works as well.
[00:10:58] Navyata Bawa: That makes sense. Yeah. I mean the [00:11:00] concept of match, it almost feels like it's always gonna be like one person versus the other, but I think match can also mean like you're forming a team and.
[00:11:08] You can even collaborate. Like it's almost like design dependent, right?
[00:11:13] Zac Drake: Yeah. I, in like, the way I can think of it is the match is temporary. Like when the match is over, you're gonna go back to the lobby. There may be people in your match that aren't in your lobby. There may not be, there may be that like, we're just playing a two player game and we go into a match and it's the two of, and we go back lobby and it's just the, but I think the one is like a good example of like, okay, we go in, there's a whole bunch of other people that weren't in my, I wasn't before when it's over, I go back to the lobby and it's just the people that are in my, like my group.
[00:11:49] Navyata Bawa: Yeah, that makes sense. Cool. Uh, and you mentioned photon is what we are using for like the transportation via room mm-hmm so like, why did we choose for Don and [00:12:00] like, choose it over other
[00:12:01] Zac Drake: options? Yeah. So photon is, uh, has become like a really popular, uh, across platform, uh, transport layer for networking and.
[00:12:14] Uh, a lot of our devs are just already using it. It's and, um, it, especially for anybody that's building cross platform that may have already used photon for, you know, another, um, another device, like it just makes it easier for them to transition or if you're planning to. Filled for, you know, some other devices in, in addition to quest, like you don't have to like ramp up a whole nother, um, transport layer for networking.
[00:12:46] Like you can just continue to use that. So, um, but we also we've built shared spaces in the way that it is modular. And if you want to use a different transport layer, if you wanna use, um, epic [00:13:00] online service, Um, thes, like you can do that as well. I think we might have in the works, like an update to include that as well.
[00:13:08] So, um, but yeah, it's, you can use like shared space is very modular, modular. You can use the parts of it that are relevant to you and you can throw out or replace the parts that, um, that don't, don't do exactly what you want as well.
[00:13:26] Navyata Bawa: Yeah, I think, I think that's really cool. I mean, the fact that we can actually remove and replace things based on the need.
[00:13:31] I think that's a really good design pattern. So that's interesting. So how different is like this sample? I know there's an unreal shared space sample as well. So how different is this sample compared to the unreal one?
[00:13:45] Zac Drake: Right. So, yeah, we actually started on the unreal version first. That's kind of where we built everything.
[00:13:50] That's my team mostly works with unreal. Um, we get it a lot. More access to the engine code with unreal so we can kinda build [00:14:00] things with that. Um, and, uh, but then, yeah, obviously like the need for, um, a multi sample was, was exists for unity as well. And we have a lot of devs on unity. So we over, um, the main difference is, I mean, the platform SDK.
[00:14:21] Basically the same, you're getting the same features for both platforms. The, we still use the photon layer for both. Um, for unreal. I actually wrote the photon net driver. Which handled that middle layer for unity. The, that layer already exists like photon was providing that. So that required less work on my part.
[00:14:46] And then, uh, the transport layer, um, it used the net code for game objects layer. Um, but actually the code for game objects was the part that matches the net driver. Unreal. So that [00:15:00] part was already there. And then, yeah, and then it just ties into the, the lower level, um, replication code inside of the, uh, unity engine.
[00:15:10] So the three layers are still there. It's the same thing. It's just. They're called different things. And, and some of it we had to implement, we had to implement a bit more of it ourselves on unreal. Um, other differences like in the unity is we added, had VO support and we added plugin. That's probably the most obvious difference between like the unity and the real version.
[00:15:39] Navyata Bawa: Wow. Vibe sounds like so much fun. I mean, it can take multiple experiences to another level, like make them so much more immersive. Like what are some of the challenges that like that arose when you were developing shared spaces particularly, and what can arise when people start building multiple VR applications?
[00:15:57] Zac Drake: Yeah. So the first challenge, like, [00:16:00] and probably like one of the harder things for me was, was just being able test it headsets. You like single
[00:16:14] then. You're used to like, oh, here's my one headset. I load up my APK. I put on my headset and I test it. But when it comes to Multiplay, it gets a lot more complicated than that. Um, you pretty much have to have two headsets or you need to have another friend or developer that is like available on a whim when you need to test something.
[00:16:37] Um, it's a lot easier if you have two headsets, because you can literally from. Unity or from unreal, you can, um, push the APK to all the headsets that are attached to your, your PC. Like, um, at the same time, rather than like, oh, let me upload this APK. So NATA and then [00:17:00] download the that, and then push it to her headset.
[00:17:03] And then we can like it. It's, it's a lot easier to do simple. With two headsets yourself. Um, actually like throughout the development, like I took a bunch of notes. There's there's wrote guides, unity and
[00:17:24] test users and stuff like that's. Yeah. It's, it's quite, it's it's involved. Like it's, it's not that hard, but it's kinda hard to discover. So it helps to have the guide to kinda walk you through, um, Yeah. Other than like getting your headsets up and running and being able to test like there's other, um, challenges for a multiplayer, um, like you're gonna deal with things like, oh, how many, like actually, how many players can I have?
[00:17:53] Because like, we're running like a server on, on somebody's headset. Like if you're the [00:18:00] first player in the room, like you become. Like the, the master server there and then other headsets, other people that join are connecting to your headset. And at some point like your network capability or your, you know, is, um, your pipe is full and, and it becomes, it starts to cause issues.
[00:18:23] So you have to set like a max players. I think on shared spaces, we've done six or eight players without any like, noticeable like issues, but that's also. Um, with most of us being working from home, we have pretty strong like network con like connections, pretty good internet. And so, um, it'll differ depending on who is actually hosting the game that applies to pretty much any platform where you're, you're doing self hosting.
[00:18:55] Um, There's gonna be a limit to how many players you can have, [00:19:00] but like, you really just have try on your game. You may more or less might
[00:19:12] or might
[00:19:16] depends on, on how much data you're actually synchronizing between the players. Um, yeah, the other, yeah, go.
[00:19:24] Navyata Bawa: I was just gonna say that totally makes sense. I mean, the fact that like, if you're playing a game that depends on like, say I'm gonna play first and then maybe something's gonna get updated and then someone else is gonna use that data to play and then I lose connection and then I'm like, what's gonna happen.
[00:19:39] Like there's such a limbo state. Like you have to handle that situation, that someone loses connection. And then who handles that? Mm-hmm and how does the game proceed after that? So that's really important.
[00:19:51] Zac Drake: Yeah. And like losing connection, like, so when we've set up shared spaces to handle like host migration.
[00:19:58] So if [00:20:00] we're all in the same room and nav is the first one in there, but then she has to leave. Like she's got another meeting to go to or something then. When she drops out, she's no longer the host, whoever was the next person in the room will then become the host. And it'll, it'll, it'll migrate seamlessly and everybody stays in the room.
[00:20:22] Like you don't get, you don't all get dropped back to the lobby or kicked outta the or stuff like that. And that's an important feature that, um, Took a lot of like trial and error to implement. And those are the sorts of things that the shared spaces, template like provides to you. Like we've already kinda worked these, these kinks out.
[00:20:42] And so, um, yeah, it's really helpful to have that in the template. Um, Yeah. And then like on talking about like other issues with multiplayer, like latency is a big issue. Um, photon provides like a bunch [00:21:00] of, um, settings and one of those settings is about, uh, is around where the photon server that you're talking to is so.
[00:21:13] There, the host, like in the room is hosting the game on their headset, but all of your data is going through the photon server. So like I'm sending the position, my world position. To nav, but it has to bounce off of the photon server. And if that's, if like we're both on like the west coast and that photon server is in like Europe somewhere, it's gonna take way longer for, to know where my character is.
[00:21:42] And then like, if you're in like VR chat or something, like, it doesn't really matter, like your world position, isn't that big of a deal. But if you're in pop one and like you're dodging a bullet and then like it takes, you know, Half a second for that to update on the [00:22:00] server, which is the, um, the real truth of like where, uh, record of truth, I guess, is what you would call it.
[00:22:07] Like the server has the record of truth and if they know your position at that time, then it didn't happen. And so like latency can be a really big problem. We shared spaces like we're essentially just setting our, like, we've hard coded on the server for. To use the photon server on like the west coast of the us.
[00:22:28] Cause that's where we've been developing everything. If you wanted to use this for like an actual game release, you probably wanna update that logic to either have different lobbies where people from different parts of the world get paired up to each other, or you can set up a system where, um, it. Check the latency between different, um, photon servers and then chooses the one that has the lowest latency, um, at the start of the game.[00:23:00]
[00:23:00] But that is one piece of logic that we left out and, um, but has pretty good documentation on set that up as well.
[00:23:10] Navyata Bawa: Yeah. I mean, I think that's a really important factor. Like, especially when things are dependent on each other, like since you mentioned that the headset, the server is the source of truth for all the data.
[00:23:20] Right. Mm-hmm, what happens. Uh, and we know that there's, uh, there's handling logic for like, if the server loses connection, but like, what has this, has this ever happened that, uh, any data is lost, like while handling this transition? Or is there any, any chance it can get lost? Um,
[00:23:40] Zac Drake: it could lose data, but I think there's, there's checks on to, to ensure that like the, the important data like actually gets there.
[00:23:50] Um, it it'll, it'll reattempt, you know, to send the, if it's it's like [00:24:00] it doesn't received acknowledged
[00:24:06] shouldn't have that stuff. Um, yeah, it, it, I have, I have not, I have not seen an issue where. The data was, was not received. Like as long as the connection is there, as long as the connection's not dropped on one end or the other. Like it, it works pretty well.
[00:24:25] Navyata Bawa: Nice. Yeah. And for, for latency, like you mentioned latency, I think latency is super important to keep in mind.
[00:24:30] Definitely. When building like applications, like you mentioned that the server region has an effect on latency, but like if we had to, as developers had to like change that region, like you said, what are the things that we need to change? Like, do we just change the location or do we need to change anything in how the destinations.
[00:24:50] Or rooms are configured or is there anything else that we need to change to handle
[00:24:54] Zac Drake: that? Yeah, so the way, and like, let's not call it [00:25:00] lazy, but the way that we redid it for just hard coding location on, on, in our photon app settings. So. We have it. So that shared spaces always use like basically out of the list of servers.
[00:25:20] The only one we're allowing it to use is us west coast. Um, but like I said, like that works fine for a sample. Actually, if you're rebuilding shared spaces and you're not on us west coast, then you're like trying it. Change that setting go in, set it to wherever you are. If you're in Europe or Asia, make sure you update that setting.
[00:25:42] Cause you're gonna, you're gonna see the latency. Like you're gonna see the LA there. Um, and, but if you're actually releasing a game, you don't wanna just hard code that you wanna add the logic to, like I said, either have specific lobbies for different [00:26:00] regions and, um, Let the, you can let the player choose, oh, I'm in this region.
[00:26:07] Take me to this lobby. Pair me up with other people in this region. Or you can have, like I said, you can have, um, there's a way there's a photon, um, API feature to like, Ping the servers and determine which ones are producing the lowest latency. And then you can select that through APIs. Uh, and so, yeah, but there's definitely different ways to do that.
[00:26:37] And you should not use the way we did it in a release. But for our sample, it, it gets the job done. So
[00:26:45] Navyata Bawa: mm-hmm . Yeah. I mean, these are interesting things to know so that when people actually make games, they can keep all of this in mind. Mm-hmm um, so for our developers who are just starting out with Multiplay VR development, like, what are some of the resources you recommend, like learning material or any [00:27:00] other resources where our developers can learn more about this sample other samples and they just try it out.
[00:27:06] Zac Drake: Yeah, there's a ton of, uh, resources we put together. Cause we, you know, we worked on this project for, for quite a while. And, and so we've, we've got a lot of information about it. Um, before I mentioned the multiplayer quick guide, like that's how to set for multiplayer development, your headset set up, um, how to get your test users configured.
[00:27:28] Cause like if you're using multiple headsets, you can't use your, um, your. Um, develop your account on both headsets at the same time, you've gotta have another user cause you can't invite yourself to a game. Right. So, um, yeah. And so yeah, you need to have those test users, so that guide will run you through all of that.
[00:27:50] Like getting everything configured and all the way to like pushing out the APK to your devices and all of that. Um, there's a bunch of [00:28:00] other resources there's. There's a blog post that, uh, Eric put together that has a bunch of details about, um, shared spaces. There's a video that Eric put together that where he walks you through and shows you a quick example on, uh, YouTube.
[00:28:17] It's got on the Oculus YouTube channel. That's gotten a lot of. Um, views. And, um, and so the shared spaces code is available on GitHub, uh, at our samples, um, GitHub account. There's a bunch of other samples on there as well, but, um, if you're, if you're wanting the. Use shared spaces, either the unity or the unreal version.
[00:28:42] They're both available on GitHub. OK. Samples. And if you have questions, like if you run into a problem, go to the issue section of those GitHub repos and just post it. Like we monitor that we review those at least once a week. And, um, and we will post response. [00:29:00] Um, and like, even if it's a question like, oh, does it support this feature?
[00:29:04] Or like, yeah. Or if like, oh, I'm trying to build it. And I get this error, like anything like that, you go to the GitHub issues and post it there. Like I said, we, we keep a pretty on that. Yeah,
[00:29:19] Navyata Bawa: I think, I think posting our issues is great. I mean, open source is such a great place to like, just learn from the community and learn, learn from what, what people are building and what are the issues they face.
[00:29:29] And I think that's the best place to share best practices and like, Even if there's like, so we made this app and then we are like, we want this additional feature. I think that's the best place to actually mention that because if there's something people want and we get to know that people want it and we can actually take a look at it and build that in.
[00:29:48] So I think those are all great points, um, for, for like building open source project. Like this is, this is on, you said, so it's a ready to get place where people can learn and. Themselves. [00:30:00] So what do you think helps, like in this case, you mentioned that we always look at issues and we, uh, address them. How do you build a healthy community around this particular project?
[00:30:10] Like, what are the things that you have learned from like, it have issues that were already there or were there any changes that happened to the project because of the,
[00:30:20] Zac Drake: yeah, definitely. I, we had some issues, like when we first released it where, um, Some like, we, we run into problems sometimes, cuz we're developing internally and we have access to tools and things that like other developers don't.
[00:30:35] And so like we can run into an issue where like, oh, this thing we'd is like expecting this newer version of the, or this particular feature that wasn't like available to external devs. And so like we just. There was an issue with shared spaces when we put it out that we didn't know about until like another dev tried to run it and they were like, oh, this doesn't work for us.
[00:30:59] Like what's [00:31:00] going on? And yeah, we, we were kind of like, um, yeah, we just had no visibility of it cause we didn't have external dev developer. And so that, that was a problem. But the, the. Um, external developers posted about it, let us know, and we jumped on it and got it resolved, like right away. So, um, you know, and there's other, there's other like smaller issues where, um, I don't know, I'd have to look at our list of GitHub issues, but we've like, we've had probably.
[00:31:35] 10 or so different issues pop up and we've always addressed
[00:31:43] there's few across like the different
[00:31:49] and things.
[00:31:55] And just get the, get the answers out, you know? Cause we know that like if you're taking the [00:32:00] time to like use our sample, like you're doing that for a reason, like you're trying to like make forward progress. And if, if you have a question, like you need a timely response or you're just gonna have to find another way to do it.
[00:32:16] So we try to be, um, cognizant of, of. Like when there's a need, like, and, um, but it's also great because when. Someone posts an issue. And we post the response. Like sometimes it's just like a configuration issue. Like, oh, I didn't, I put the wrong ID in here. And so it didn't work, things like that. And by somebody posting that in our issues and us responding in a.
[00:32:44] Public way that becomes visible and others can see that. And if they have the same problem, they're able to like see that solution without having to, and wait or a support ticket or something like that. The solution then [00:33:00] becomes part of the public record. And so they're able to, it it's able to help other people down the line.
[00:33:06] Navyata Bawa: Yeah, absolutely. And it also sort of builds that trust, like, uh, we know people are using it and we are there to help you while you use it. So I think it's a really good thing. Um, so before we end this episode, like where are some of the other multi projects that you or your team are working on release?
[00:33:23] Zac Drake: So there's a couple multiplayer projects in the works that are like still pretty secret. They're kind of early on right now, but like we built shared spaces as a template. And so shared spaces is kind of like, if you see it, it's pretty bare bones. Like there's not a lot going it's can we get into our room together?
[00:33:44] Can I invite my friends? Can we. Like the funnest thing you can do is like jump on top of each other's heads. If you haven't tried that, do it. Cause you can actually land on top and like, and, and get stuck on top of each other's heads. That's about the most fun you can have in there. [00:34:00] Or you can do 360 the control.
[00:34:03] There's not a lot of gameplay in there. So we're trying to build, um, or we are building some other, um, multiplayer examples that use shared spaces, base code, and will provide more interesting multiplayer functionality. Um, those will, those are pretty early on, so I'm not gonna say like when to expect them, but, um, but yeah, and then, um, but yeah, other than like multiplayer stuff, like our team does a lot.
[00:34:34] Of other projects as well. I released the graphic showcase in the past, which was like showcase that showed
[00:34:46] like post without a whole, without requiring HDR. Um, also just released the, um, quest version of showdown, um, [00:35:00] which was originally like a PC VRR demo on. And so did a ton of optimization on that. There's um, there's a couple of blog posts about showdown. One of them is, um, pretty thorough, um, post about optimization.
[00:35:16] A lot of it is unreal specific, but a lot of like the techniques and things are relevant to unity as well. Um, and I that's written in the context of like, not just to like, oh, here's what we did. Here's a, here's a laundry list of things we did to like make this project, but more written in a context of.
[00:35:39] As a reference, like if you're optimizing a pro like an app or quest, like here's some things you wanna check and like, here's why they're relevant. Here's talking about like CPU bound and things like that. Um, and then the other thing like that we're working on now is like with U five out, like we need [00:36:00] to optimize U E five so that it is usable on, on quest and.
[00:36:06] Know, we're getting the same performance out it that we were from. Like, so, um, there's a of people working on like optimizing five within my team and other, um, but yeah, like I definitely, if you wanna see more of the work from my team, go to github.com/oculus samples. Check that out. That's where all of our, our public like repos are for, um, our recent.
[00:36:37] Navyata Bawa: Awesome. I can't wait to try these out. Um, cool. Thanks for such helpful insights, Zac, and thanks for all the amazing work that you and your team do. And with that, we'd like to conclude this episode of the Diff. Thank you Zac for providing us with such great insights into the VR platform, SDK multiplayer features and all its features and the super helpful resources that we have, [00:37:00] like shared space sample to help our developers get started with Multiplay.
[00:37:04] And thank you so much for all the amazing work that you and your team do. It was great having you here.
[00:37:09] Zac Drake: Thanks Navyata for the opportunity to talk about my team's work and helping us to promote it to developers. It was really fun talking with you.
[00:37:18] Navyata Bawa: Absolutely. Uh, that's it for today then. Thank you so much, Zac, and have a great rest of your day.
[00:37:24] Zac Drake: Thanks.