Transcript (by Youtube)


2s [Music]
20s hello everyone Welcome to our glorious
23s server mesh technology showcase segment
27s exciting it is I'm Margaret Cron your
30s director of communications and of course
32s with me as always is Stephen shareif our
35s wonderful creative director I'm excited
38s we have a fun showcase today I mean it's
40s this is something that I don't think a
41s lot of companies go into a lot of
44s projects don't really talk about and and
46s you know it can be a little bit on the
48s techie side but I think this is stuff
50s that a lot of players uh like hearing
52s about and I know we got some we got some
54s exciting people to chat with today what
56s do you think and um of course we tried
59s to make it as visually appealing
60s possible shout out to Mike beio as you
64s you may know him from all of our other
65s Graphics but he's our Graphics designer
67s and he did a wonderful job on these
69s slides so hopefully they help portray
72s what our wonderful engineering team is
75s trying to to uh showcase so we will kind
78s of introduce them we have some new
80s people who you've never met before we'll
83s kick it off first with Zack if you want
85s to talk about who you are what you do at
86s the studio and maybe a little fun fact
90s hi guys uh I'm Zach I'm the technical
92s director here uh at Intrepid Studios I
95s run the networking team and the engine
98s team
100s um I'm generally responsible for
102s performance and making sure that the
103s game scales to the amount of players
106s that we wanted to a hefty and lofty goal
110s many of us players will have thoughts on
113s that and of course we have Hunter with
116s us which some of you if you hang out on
118s our Discord maybe have interacted with
120s before
122s for hi yeah thanks for having me um my
125s name is Hunter I am a game networking
127s engineer at inet studios I've been here
129s for almost about four years now and
133s first initially started off as a
134s gameplay engineer and then I slowly work
136s my way over to networking because that's
138s what I've come to find that I love and I
139s love solving the hard problems and very
142s excited to Showcase to you all what
143s we've been working on the gameplay
145s engineering just wasn't torture enough
147s for Hunter so he wanted to go straight
149s straight the be impossible
152s problems oh my God I like I like solving
154s problems like this hard problems I think
157s fun problem to solve yeah um and then of
160s course last but not least
162s Anton hello I'm Anton uh I'm a senior
165s networking engineer over here at
168s Intrepid I moved straight into this
170s position cuz uh yeah I wanted to suffer
174s immediately I didn't want to start with
177s a game play
180s all right well let's kick it off Zach I
183s think you have a little intro here for
185s us as we move
186s in yeah um so Zach just I'm sorry just
190s to start a lot of people you know
192s sometimes don't know what networking is
196s yeah talk to talk to us about what is
198s networking what is a network layer at at
201s its core networking is just the concept
206s of moving a state from the server to the
209s clients
210s that that at its core that is the
212s problem we are trying to solve we are
213s trying to do that as fast as possible
216s with as many players as possible um
219s since we are making a very very large
221s game uh we have a lot of problems that
223s most games don't usually
227s have yeah and and you know with with
231s regards to like an mmpg versus like a
233s peer-to peer versus like a small
235s dedicated server like our networking
237s needs are intense because the types of
241s numbers we're looking at are extreme
244s yeah we we we every everyone on the
246s networking team here has worked on other
248s multiplayer games before and this is
251s definitely the project where we have to
252s get the most creative with how we are
254s going to solve uh our scaling problems
257s you know like we are we we we are
260s working on an MMO most MMOs don't don't
262s do what we're about to do here they
263s don't talk about how they you know made
266s it so they can support thousands of
267s players per server um so we it's very
271s much we have to you know kind of like
272s figure out what what has been done and
274s and do a lot of um R&D to figure out
276s what what we need to do for our game
279s right and kind of answering that
280s question of what we need to do for our
282s game starts out with well what is our
285s game trying to achieve right yes yeah
287s there are a lot of different types of
288s MMOs some that heavily you know utilize
292s instancing um some that you know maybe
295s don't care about replicating to hundreds
297s of players at a given time um so first
300s it starts with a vision what is ashes of
303s creation and then that kind of leads you
305s down the architectural path of okay what
308s does that mean we have to set up because
310s this isn't out of the box Unreal Engine
312s 5 this is a custom Network layer yeah
315s yeah this is this is this is fully
316s Custom Tailor Made for the needs that
319s ashes has like this is not none of this
323s is is is off the shelf none of this is
324s standard unreal this is all built for
326s the kind of game that we are
328s making right and so how do you go about
331s kind of you know determining that that
333s architecture what does that look like
334s for a game like ashes and and you know
336s we've been working on this for a number
338s of years yeah for years um so I guess I
341s guess the first the first step is we
342s need to figure out the requirements like
345s what do we actually need to like what
349s what are Ash's requirements um you know
352s the the first place we start is you know
355s we're an open world PVP game so we can't
357s really control where players go we can't
359s do match uh typical matchmaking where we
361s just you know spin up more servers SP
363s put them on the new matchmaking servers
366s and you know not have these issues we're
368s an open world game anyone can go
370s anywhere um you know we're a highly PVP
373s game so we need to have low latency
375s people can't just uh we we can't do what
378s other games do where you just like lower
381s your tick rates really low and
383s then um just simulate at a really really
386s low rate since we're you know action PVP
389s we can't do that um one of our I guess
394s would you call this a game design pillar
396s Stephen like this is we don't that we
398s don't want to do layering like that's a
399s that's that's that's a very like
402s absolutely game thing we wanted we
404s wanted so like you can go anywhere in
406s the world stand there and the people who
410s are there are there like
412s yeah and I was just going to say like
414s game laring you know obviously everyone
416s on this call is a gamer who's played
418s MMOs and we played games that that do
420s layering yep you know it's just a very
422s different experience when you can switch
425s channels you
426s know yeah yeah it's like a different
429s world a core like MMO memory for me is
433s like you know old wow you would go to
436s the same place
438s like uh and and there would be the same
440s person there you know dancing on top of
442s a mailbox every single time or dancing
444s on top of a corpse and looking at you
447s with Hungry Eyes they were they were
449s always they were always there and they
450s were always and they were always there
452s and with layering you don't get that uh
454s you don't get that that same level of
456s experience that we that we that we want
457s to give uh to our
459s players um and then I guess our last
462s requirement which is like you know just
463s a typical MMO requirement is that we
465s have you know very very high player
466s count goals um and you know typically uh
471s High player count goals with no layering
473s don't really go together so right that's
476s where it comes into like you know we
477s need to get really creative with how
478s we're going to solve these problems some
480s of us you know Hunter Anton we've played
483s these games that have high player counts
485s but a lot of ways that they get around
489s having higher player counts is by being
491s less server adjudicated less server
493s authoritative and more player which has
496s its own risks and isn't really
498s preserving the Integrity of that player
502s experience indeed like some some games
504s do not um do proper physic simulations
508s on the server side to validate movements
510s in order to achieve that kind of thing
512s which means like cheaters uh can have an
515s easier time right going through walls
517s and stuff like that or they well I guess
521s they do layering or sharding where uh
525s they yes they have real high player
527s counts but technically not really CU
530s they're kind of broken up I can't tell
532s you how many times I've I've jumped into
534s either um you know some session based
537s game or I don't want to call any any of
539s them out out but where there's just one
541s single player that's either hacking or
544s or or doing something and they're just
545s running around and ruining the
547s experience for everyone and it's because
549s the way they've architected in such a
551s way it's more it's easier for those
553s types of experiences to occur always
555s trust the client right
559s yeah you just made everyone sweat Hunter
563s do we want to kind of transition that
565s into talking about the issues that we
567s are trying to address yeah of course
572s yeah so um I guess the issue start with
575s it's like you know we're making MMO and
578s unreal um the amount of entities we want
581s on the server um it's just not really
584s going to work with standard outof the
586s Box unreal replication unreal
588s replication and unreal simulation so
591s there there are two problems here it's
592s like okay even if we could fit all the
594s players we want on a single server um
597s you
598s know we we we still can't replicate them
601s because those are two separate problems
603s we have the simulation and then the
604s replication problem um so since this is
609s is a problem and you know there there is
612s no standard unreal solution for this we
615s we we had to go about you know making
617s our own custom solution to solve these
620s problems um and this is where Intrepid
622s net um I guess was born um and trepid
626s net is a fully distributed networking
628s stack it's tailor made for creation
630s fully built in house um none of this is
633s offthe shelf technology it's all custom
635s built for our game
638s um we you know we'll we'll get into
641s these more in a bit but Intrepid net is
644s made up of quite a few different
646s Technologies um the the one that you
649s know people are most interested in
650s people are always talking about is
652s server meshing we'll talk a lot about
653s server meshing and how we how we
655s implemented it for our game um we have
658s inter server replic
660s which is you know we have we have
663s multiple servers and they're replicating
664s to each other how do we deal with that
666s problem we have our own microservice
669s layer for servicing our
673s um uh communication I guess between our
676s servers um we have uh Dynamic griding
681s which is very exciting and you guys and
683s you guys will like a lot and then we
685s have the replication graph um which is
687s just more um custom replication uh I
692s would almost call them formulas um for
694s our game so we'll be going into all of
697s this it's very this is very detailed
699s very Tech heavy
701s so buckle in yeah we need some like
703s theme music for the Intrepid net logo
705s there too I know they were so excited
708s when Mike made a logo they're like so
710s nice of a logo I'm just thinking of like
713s the Indiana Jones theme song right
716s now right
718s totally the word do we start off with
721s this yeah so I'm going to kick it over
723s to Hunter and he'll kind of like start
724s with the like giving some of the base
727s knowledge for like how unreal works and
729s then he'll start with you know talking
731s about how some of our server technology
733s our server meshing technology
735s works yeah hello um so before we start
738s diving too deep into Intrepid net um
741s there's probably a few terminologies
742s that we wanted to preface with just so
744s that it helps the community and everyone
746s else here follow along better with like
747s the lingo and the terminology that we
749s will
750s using um the first concept that we
752s wanted to touch on is an actor um in
755s Unreal Engine you can think of an actor
757s as like almost any physical
759s representation of an object or an entity
762s that's inside the
763s world as you can see on the photo that
766s an actor can be anything such as an NPC
769s a mount a tint a piece of card cargo um
774s pretty much anything that you can
775s visually see and represent is what we
777s call an actor and these actors they be
779s replicated which we'll get into on the
781s next slide and PC would be a player
784s character for those who don't
789s know personal
792s Caravan so touching on replication here
795s um replication is a term you might often
797s hear in networking I believe Zach
799s touched upon that a little bit briefly
800s in his
801s introduction um replication is the
804s process of synchronizing some sort of
806s State you can think of it like a value
808s or a property that's on an actor on the
810s server and then it's synchronizing that
812s state from the server to all the clients
814s that are relevant to the said actor um
818s this is an important because of a
819s concept called server authoritative
822s networking um the server when you think
825s of like networking in video games the
827s server normally has authority over your
829s game world and the properties they're
831s normally updated and checked against the
832s server which can then be shared and
834s synchronized between your clients which
836s is through the form of replication
840s um this is also part of why you never
843s want to trust the client as we said
845s earlier um because when networking you
847s want when the client does some action to
849s the server for instance you always want
851s to verify that action on the server in
853s some way or shape or that's how you can
855s get hackers or cheaters or something
857s disrupting your game because they're
859s able to just send anything they want to
860s to the server and your server will just
862s trust it without verifying and then
864s that's where you can get the concept of
866s like I said hacking Andor
868s cheating um so as long as the server
870s kind of holds your source of Truth the
871s client sends the data that your server
873s doesn't agree with you can decline the
874s actions and or kick or ban the user
876s depending on how severe the action is
878s they're taking that you're not trying to
883s allow and obviously we've seen you know
886s a lot of games that we've played in
887s where as um as as the latency becomes uh
893s worse for certain players or as the load
896s on the server becomes higher um to
899s process
900s that replication can can show some weird
903s effects in games right wait a minute
906s what's that person doing that doesn't
907s look right yep that's when you would
910s that's typically when you would get like
911s rubber banding like if your serers
913s really slow down because you would only
914s get an update every you know X period of
917s time yeah so as you can kind of see in
919s the the video we showed you can kind of
922s see like player one is going into the
923s water this is from the perspective of
925s the server so as player one enters the
927s server it'll be like okay player one is
929s swimming so now player two and three
931s since they're visually seeing player one
933s swimming they're going to get a state
935s for player one saying they are swimming
938s and then that can kind of perform like
939s the necessary actions of like seeing
941s them play the swim animation or whatnot
943s and and and and like I guess to add on
945s to what Hunter is saying this is the
947s this is pretty much the entire problem
949s like you're doing this all the time for
951s everything in the game right that's
953s replicated all the time every movement
956s every ability every thing you click on
958s interact with
960s T yeah all the Goblins that are running
962s around they're playing animations uh the
965s players moving stuff in their inventory
967s the the trees leaves moving subtly yeah
972s the the trees falling being cut down
974s yeah so not everything needs to be
977s replicated across the server right some
980s things can be client only like the ways
982s the leaves might moves specifically but
984s when the tree gets cut down that needs
986s to get replicated across yeah well and
989s and and you you can do interesting
991s things to try and like reduce this
994s problem like like if we're talking about
995s the wind for example you could just
997s replicate you know the wind direction
999s and speed yes and then the client can
1001s just apply that to all the Tres instead
1003s of you having you know a specific
1005s replicated you know wind and speed for
1008s each tree for example right and that's
1010s part of the Finesse of replication right
1012s trying to identifing the problem exactly
1015s that's right yeah a big part of our job
1017s especially with working with gameplay is
1018s trying to figure out how make that as
1020s efficient and optimized as possible so
1021s that our game and servers can perform to
1023s the expectations we need speaking of
1026s servers the server meshing what
1028s everyone's been excited to talk about
1030s right so now we do replication so now
1033s originally we just talked about how
1035s replicating a one server works so now
1038s the first part of intrepid net is what
1039s we like to call what we basically
1042s normally know as as server
1044s meshing
1046s um in Unreal Engine um your game
1048s normally works under a single process
1050s server scenario that means all your
1052s clients are connected to a singular
1054s server that runs the entire game now for
1056s an MMO RPG like ashes of creation um
1060s this can't work for us like for a few
1061s reasons Zach talked about in the
1063s previous slide there's just with the
1065s mass amount of entities and actors we
1067s have simulating and processing the
1069s replication of all that for everyone
1071s every actor in one server that's pretty
1075s insane um our solution first and
1077s foremost here is basically we had to
1080s modify Unreal Engine so that it is
1082s capable of having many server processes
1086s that are kind of meshed together or
1087s quilted
1088s together that allows us to use all these
1092s servers together to make up your whole
1093s entire game world or your game
1096s room um this allows us to split up that
1099s simulation work between many of the
1100s server processes and each server process
1103s has its own authoritative state of the
1105s world that it kind of owns and controls
1109s um this task it was not a trivial task
1112s and it required us ripping apart deep
1114s layers of unal engine and their
1116s networking stack in order to really
1118s modify it to fit the architecture that
1120s we have really
1122s envisioned um outside of this too
1125s there's like a lot of proprietary
1126s programs as well that we made that kind
1128s of run in the background to help it
1129s orchestrate all this functionality as
1132s well and by using under engines API um
1137s and doing all this we were also able to
1139s add a lot of minimal overhead for our
1141s Engineers When developing for our this
1143s solution and it allows us General
1144s control over like what how things
1147s replicate and where they replicate that
1149s we'll get into in the next few
1152s slides
1154s um so right now you see we have like the
1157s static Dynamic world grid okay that's
1159s great but now you're probably thinking
1161s okay now that we stitch many service
1163s together what is my experience like that
1165s in regards to traversing the world will
1168s I be able to see into the other servers
1170s from mine or will I randomly just start
1171s seeing actors pop in and out of
1173s existence right in front of
1175s me that kind of takes us to this
1177s slide um so our answer to that of course
1180s is we want to make this experience as
1182s seamless as possible for our players if
1184s you cannot tell what's going on behind
1186s the scenes and everything that we've we
1188s are making then that means we did our
1191s job right if you can tell then it
1192s probably means something's wrong and we
1194s need to look at what we're doing here
1196s and how we can improve and optimize it
1197s further
1200s um we've developed what we call here
1203s inter server replication for this case
1205s which means that instead of traditional
1208s replication as you might have as we
1210s explained was like server to clients
1213s this is basically representing between
1215s servers now or replication between
1217s servers and we do this replication to
1221s what we call a proxy
1223s actor um as you can see in the video
1226s here we can see there was like a
1227s transparent White uh wall going across
1230s the screen that represents our in-game
1232s debug tools with our border regions
1234s being
1235s drawn you can see that vexent is on one
1238s server and then Kevin is on another one
1241s as he's on the other side of that border
1243s so what vexent is seeing right now is
1244s actually not Kevin but a proxy of Kevin
1247s is what we' have deemed it is it really
1249s Kevin yeah who knows if only could
1252s actually duplicate Kevin Hunter expand a
1255s little bit on you know a lot of lot of
1258s people who obviously aren't familiar
1260s with game development they might not
1262s understand the the terminology of
1263s debugging tools right so to talk a
1265s little bit about what a debug tool is
1268s right so when making a networking
1270s solution as complicated as this we need
1273s a lot of information about the state of
1275s the world what's happening where things
1276s are going on so we've developed a lot of
1280s like debugging tools that can be used
1282s inside the game and outside of the game
1284s which these tools kind of help us
1286s collect that information see where all
1288s the important things are happening see
1290s where a failure might be going on so in
1293s this particular instance we have a debug
1295s tool that's in game that allows our
1297s developers to kind of draw these server
1299s borders so that you can kind of see
1301s while you're playing like okay there's a
1303s border here um and then if QA is testing
1306s something they can be like okay we
1308s transferred across the server and then
1309s this broke so that means something's
1311s probably wrong with the server transfer
1312s so that can kind of just help you like
1314s narrow down more of the problem space
1316s and give you that necessary information
1318s of like what was going on at the
1320s time um because without that if if we
1323s have it turned off you pretty much
1326s hopefully should not be able to tell the
1327s difference between the proxy we talked
1329s about or the actual
1331s actor um you can kind of think of the
1334s proxies here as a puppet any
1338s actual um action that was done by the
1341s actual actor on its own like Authority
1344s server which is the server that owns it
1347s it's then replicated to this proxy on
1349s your server which then gets replicated
1351s to yourself so that you can kind of see
1354s the representation of Kevin as if he was
1357s on the same server as
1359s you um we do it in a form of like a we
1362s call it lightweight because it's an
1364s up-to-date copy of the original actor
1366s but we can specifically our developers
1368s can specifically control like what does
1370s and doesn't get sent to this actor so
1372s that we're more optimal in like what
1375s we're sending how we're sending it and
1377s when we're sending it
1381s that was a
1382s [Laughter]
1384s mouthful I I think I think the other
1386s thing you know to think about Hunter
1388s Zach Anton is that um not a lot of
1391s players obviously followed development
1394s of the games that they're excited about
1396s right they they wait until you know the
1398s game is ready to play and and marketing
1400s begins and you know they can join in and
1402s and purchase or whatever obviously ashes
1405s has followed a little bit of a different
1406s path where we're giving people a bit of
1408s insight into you know what it actually
1410s takes to make these types of games and
1413s we generally tend not to delve too
1416s deeply into the highly technical
1418s components of our development process
1421s because that's where a little bit of a
1423s cliff starts to form of player interest
1426s even you know viewership interest um
1429s because uh it's nice to have the magic
1432s work in the background and you don't
1434s necessarily care or want to know how or
1436s why it's working just that it feels good
1439s that the you know it's responsive and
1441s that you know it accomplishes from a
1443s gameplay Loop perspective what you're
1445s expecting it to but you know because of
1448s the level of complexity because of the
1450s amount of effort because of what we're
1452s trying to create is a is a Next
1456s Generation level of complexity of gaming
1460s um we feel it's important to provide you
1464s guys an opportunity to get some insight
1467s into what we're doing that's unique into
1469s what we're doing that is going to
1472s service a long-term mmor RPG at the
1476s scale that we need Ashes to be and that
1480s requires some really smart people in the
1482s room who are creating proprietary
1485s technology that allows us to achieve
1488s that in a way that presents players with
1490s a game at the Quality they expect and so
1493s I you know I think this is a lot of a
1494s lot of fun to kind of you know have you
1496s guys come and and explain this front
1499s facing it can be a mouthful it can be a
1501s headful to kind of digest but at the
1504s same time well yeah I know we're no
1506s we're near done but at the same time it
1508s gives you now an opportunity to to
1510s really see how the sausage is made um
1514s and I think that's cool I can talk about
1516s this all
1517s day people don't talk about this there
1520s are so many games that are that are
1521s doing things like this not exactly but
1525s like you know there are other games that
1526s have to solve these problems and you
1528s know other games don't talk about this
1530s you know this is this is a first
1533s absolutely
1535s right yeah so as you see in the video um
1539s you can see into the other server but
1542s now you're probably thinking okay what
1544s if I want to interact with this proxy
1546s how how do I do that across a server
1549s boundary well um because the proxy is
1552s like a puppet controlled by the higher
1555s authority we basically just now need
1557s events that we can from the proxy up to
1560s its Authority and then we tell the
1562s authority that we want to modify data or
1564s execute some action on the authority
1566s server so that it can then replicate
1568s down to the proxy and then back to you
1571s um we have what we call a cross server
1574s event or an inter server event that's
1576s done through what's normally known as an
1579s RPC or remote procedure call which
1581s allows pretty much just for
1583s this um our goal with entrepren net is
1587s to make all the routing and actions that
1589s we do as fast as possible so that we can
1591s keep the latency and interactions
1593s between servers a pretty seamless
1595s experience and you hopefully shouldn't
1597s even be able to tell the difference
1599s between like I said a proxy or an
1600s authoritative actor yeah and I guess to
1604s add here this is so important because
1606s you know these these server borders that
1608s we're talking about they're invisible
1610s you you you won't know where they are um
1613s so the I think the big important thing
1617s here is like we need to have we need
1618s make it so PVP can happen on these
1620s borders without people noticing um and
1623s that's that's that's that's really
1625s that's the real Crux of it here that's
1626s why it has to be so
1628s fast right and as you can see in like
1631s the video here we have some fighting
1633s across the border um you can see while
1635s we're fighting kind of over the boundary
1637s combat and everything seems pretty
1638s seamless and smooth as you would expect
1640s it without any noticeable issues um this
1643s is kind of showcasing like what we can
1645s do with just those events and that
1647s replication we talked about out we can
1649s have these like indepth battles or
1653s interactions between the servers with
1655s hardly any downside yep
1658s um so but what we're trying to achieve
1661s here is the seamless experience that you
1664s hopefully can't tell where that border
1665s crossing is and and the other important
1668s thing about this particular you know
1670s this cross server uh information and in
1673s the Border itself which I think you guys
1675s are getting into a little bit later is
1677s that these borders are not static they
1679s can change they are Dynamic you're
1680s you're spoiling it Ste I'm I'm sorry I'm
1684s sorry I'm so sorry this is my first time
1686s seeing the
1688s slide okay go no no go I'm sorry I think
1691s you were talking about seamless
1692s transition so we
1694s can yeah so if you look in or go back
1697s one more Maggie I'm
1698s sorry um so if you kind of seen in the
1700s video there as well um now that we can
1704s kind of do interactions to the proxies
1705s across the border you may have noticed
1707s in the video I did charge myself across
1709s the border and then I basically attacked
1712s what we call the proxy of
1714s Kevin however during that charge we did
1718s basically a server promotion that took
1719s place behind the scenes that you
1721s probably didn't
1723s notice um so if we go to the next
1726s slide we can kind of see now we're
1729s introducing the concept of server
1730s transfers this is kind of where Intrepid
1733s net gets very
1736s complex um this allows us to not
1739s share and split the statically defined
1741s server areas but we can also transfer
1743s actors to new server areas that are
1745s moving across the world or happen to
1747s have a new server come up on top of
1750s it into a different server and then we
1753s do and then this allows us to do
1755s basically that Global load balancing
1757s across the
1758s room and then so basically when a player
1761s or an actor is within range of this
1763s border our system on the back end kind
1766s of begins a negotiation and the creation
1769s of a proxy so that it can replicate it
1771s to the nearby
1773s server um this doesn't only happen on
1776s like a one by one scenario that you
1778s might see here even if it's a 2 by two
1780s and you're in like the corner of four
1782s different
1783s servers your proxy will then get
1785s replicated be replicated to on three
1787s different servers from the one Authority
1789s so that way no matter where you are
1791s whichever server you're in around that
1792s area you'll still be able to see this
1794s actor on a different server
1801s um if that actor then fully crosses the
1805s Border going outside of the authority
1807s region of the server it's currently in
1809s um this the the two servers then kind of
1812s start negotiating what we call a
1813s promotion or a transfer this is when now
1816s server a is passing over that Authority
1819s we previously defined to server
1822s B and then promotions they're like a
1824s whole different Beast um in order to do
1826s a lot of like the promotions there's a
1828s couple things we have to do such as like
1830s ensuring the first you have to ensure
1831s the actor is like fully made with all of
1833s its components and
1835s children um we have to ensure they're
1837s all up to date with the entire state
1839s that was deemed necessary for the new
1840s copy to have because we don't want to
1842s lose any data during this entire
1846s transfer um and Hunter you people hear
1849s the term like you know children and the
1851s state and whatnot elaborate a little bit
1853s about you know what what that means at a
1855s high level right so
1858s uh when we have all these entities such
1860s as like an actor actors can then have on
1863s them what we call components which is
1866s basically building blocks that you can
1868s then add to your actor that kind of make
1870s up the actor what it does how it's
1872s supposed to act things like that um so
1875s for example you could have like an actor
1878s and then that actor has an interactable
1879s component so that means you can interact
1881s with this actor or it could have an
1883s inventory component so that means okay
1886s this actor has something of like a bank
1888s or um it it stores goods and to
1892s contextualize that let's say you know
1894s you have your Mount out you're not on
1896s your Mount right another player could
1898s walk up to your Mount and they would be
1899s prompted with an interact that says to
1901s Mount Your Mount as you're moving across
1903s the boundary that actor has that
1906s component that is the interactable
1908s component that needs to go with it right
1911s because if you transfer this actor or
1913s you're proxying it it still you still
1915s need to be able to do that interaction
1916s across the boundary so we proxy that
1919s interaction component and just like we
1921s can do crossover events on the actor
1923s itself we can also do them at the
1925s component level so that way it can
1926s communicate with its authoritative
1929s one um because we kind of treat the
1931s proxies as like a readon concept so the
1934s proxies are just visually kind of
1936s representating what the authority
1938s represents so any data modifications or
1941s anything that has to happen has to
1942s happen at the authoritative level so
1944s that way then the proxy can get updated
1946s appropriately across any Sur
1948s um that's kind of how we have like that
1950s Central truth of the actor is whatever
1952s server it's Authority on and there's
1954s only ever one copy of that I just want
1956s you to know this conversation so far has
1959s probably induced about 30 to 50 people
1963s now wanting to take computer science
1965s degrees that would be awesome yeah no
1968s it's it's pretty cool stuff
1971s um it definitely took a lot of time and
1974s a lot of effort to try to figure out how
1975s we make these things possible and after
1977s all this work this is we're excited to
1979s be able to show it um although watching
1982s Kevin run back and forth is making me a
1984s little
1985s nauseous yeah so in the scenarios 2 this
1989s also works where you may not be proxying
1991s to that nearby server because say you
1993s teleport across the
1994s map um this kind of means that when
1997s promoting there it kind of does the same
1999s exact route except it may just need to
2001s make your actor instead of making a
2003s proxy of it so it all falls kind of
2005s under the same generalized um system
2009s no um and then when we normally do have
2013s that proxy actor on the other server
2015s that means when you're promoting we can
2017s reuse your existing two actors that are
2019s from server a and server B your
2020s Authority and the proxy and we can
2023s convert that proxy to the authority and
2025s then demote The Authority one to a proxy
2028s so this allows us more to have that more
2030s seamless experience when you're swapping
2032s servers so that way it's a lot faster
2035s you don't need to send a lot more data
2037s to copy over to be created and then
2039s there's not really any visual hitching
2041s at all when this happens because we're
2044s not spawning or destroying a new one on
2045s the fly during that
2048s promotion and this helps also with
2050s client
2051s performance it it can um not going too
2055s too into detail but yeah talk actors
2059s aren't actors really aren't cheap so
2061s replicating an actor can be expensive
2064s and every new actor you kind of open and
2066s close to the client which which is
2068s basically like a create or a destroy
2071s that just adds this additional overhead
2073s that you we didn't want so we can kind
2075s of negate it by just reusing the
2077s existing one we already
2079s have and then doing that swap so that
2082s way you don't even notice anything
2084s happened because something Stephen no no
2087s he got it on the spawn and Destroy nice
2089s okay yeah yeah like like I said our goal
2092s is to make it as seamless as possible
2094s and one of the main pillars when we were
2096s making this uh ire system
2100s was we try not doing anything on the
2103s client if all of our actions are kind of
2105s done on the server in a fast and
2108s efficient way the client shouldn't
2109s notice anything happening at all and
2111s that's kind of where this comes in
2114s because we don't want the client to
2115s notice so every time we're doing
2117s something we're like okay how can we do
2119s this without affecting the client's
2120s experience because we don't want them to
2122s have a bad time
2124s yeah okay so um let's talk a little bit
2130s about how all this stuff is
2133s working uh because yeah we are
2135s communicating between servers we're
2137s sending events between servers we are
2139s transferring between servers but how is
2143s that information flowing how do the
2145s clients end up seeing that stuff and
2149s typically uh the way this is done is uh
2153s you create a centralized
2155s replicator and all the different ser
2158s servers from all across the realm send
2161s all the relevant information about all
2163s the different entities to that
2165s replicator so let's say one server has
2168s um a bunny and that bunny moved around
2172s it sends that information to the
2173s replicator and now the server has a
2175s goblin that took damage it will send
2177s that information to the
2179s replicator and then all the players will
2182s connect to that replicator and the
2184s replicator will pass pass through all
2186s those different entities
2189s decide which player should see which
2191s entities and send that information to
2194s the specific
2196s player however this creates a few issues
2200s and you might actually be able to see it
2201s from that graph there that we've just
2203s created a
2205s bottleneck uh as this singular process
2207s now may need to keep track of hundreds
2210s of thousands of
2211s entities and
2214s send potentially hundreds of millions of
2217s updates to all those clients because all
2220s those bunnies moving and the goblins and
2223s the players and the trees falling all
2225s that information has to be passed
2227s through the replicator and then sent to
2229s each individual client and I guess
2232s something to add here too Antoine is
2233s like this is the that would just be
2235s moving the problem we're trying to like
2238s like if we had a single server this this
2240s would this would be the same problem
2242s where all all the replication is
2244s happening on one place and we're trying
2245s to we're trying to not do that Yes
2248s actually we tested a solution like this
2251s uh during alha one and this
2255s bottleneck it kind of affects how many
2257s players you can have in the realm as a
2260s total like you can spawn all the servers
2262s you want but one at some point you hit a
2264s limit on the replicator itself and it
2266s doesn't matter how many more servers you
2268s spawn you are limited by that cap on the
2271s replicator uh during alpha 1 the number
2274s we got was like I think about a th000
2277s players
2278s where after hitting that point you can
2281s no longer really scale anymore and it's
2284s important to note that because of this
2288s more I guess for lack of a better term
2291s archaic and monolithic approach which
2293s which many of us have likely experienced
2295s in older games there are certain
2298s scenarios in those games that are
2300s multiplayer where you start to see that
2302s server is having trouble and it's
2304s because it's hitting these types of
2306s Choke points
2308s yes and in fact when this replicator is
2311s overwhelmed the entire realm will lag it
2313s doesn't matter if you're alone in one
2315s server in a remote island you will lag
2318s because there is a big battle on the
2319s other side of the realm that's I
2321s remember in so many so many games where
2323s I would be out hunting and peaceful
2326s nobody's nearby and I'm noticing
2328s everything is starting to churn and I'm
2330s like what is going on and then I'll look
2332s into Global chat and I'll see oh [ __ ]
2335s they're having a huge fight somewhere
2337s across the realm in a totally different
2339s part of the world and I am suffering as
2341s a result of it
2345s indeed I guess it's a good bridge to our
2348s to what we're doing yeah it is a pretty
2349s good Bridge cuz basically we yeah we
2354s ases of creation is trying to aim for
2356s player counts that we found out that
2358s centralized replicator does not support
2361s so we had to come up with our own
2363s solution and uh this is from what we
2366s know not a very
2368s common solution possibly because it's
2371s more difficult to pull off uh what we
2375s basically did is we completely got rid
2377s of that centralized replicator and
2378s instead we had the servers themselves
2381s collaborate with the other servers
2383s around them and exchange information
2386s that way that and that makes each
2389s individual server have all the data they
2392s need to serve the clients that are
2394s connected to them uh in our scenario
2398s over here you can see we have four
2399s servers and two clients are connected to
2402s each one of those servers if we had a
2404s centralized replicator all those four
2407s servers would be connected to that one
2409s replicator and then all eight clients
2412s would be connected to that one
2413s replicator to so we've actually
2416s distributed the problem we've eliminated
2419s the bottleneck and we've also eliminated
2423s this one point of failure that existed
2426s beforehand where if that one replicator
2428s fails the entire realm goes
2431s down and we can actually yeah have a
2435s look at the uh next slide where we see
2439s uh how we are more fault
2443s tolerant uh than if we have a
2445s centralized
2446s replicator uh and we can actually yeah
2450s you can swap to the next slide there you
2452s go we have the uh the entire server grid
2455s over there and if one server goes down
2458s everyone else can uh keep playing it
2461s like normal we patch that server up we
2464s fix the issue we bring it back up and
2468s everyone else never experienced anything
2469s the players that were connected to that
2471s one server got booted and then can
2473s rejoin just fine uh if we had a
2475s centralized replicator if that
2477s replicator went down everyone gets
2479s booted
2481s so yeah so that's another uh another
2485s good uh benefit from our approach the
2488s the really big gain we achieved with
2490s this was the elimination of the
2493s bottleneck uh and it actually lets us
2496s scale we are
2498s truly distributed we can just spawn new
2501s servers to a certain point of course and
2504s this is this is not and by the way Anton
2506s like this is not just a strength
2508s obviously of the of the replication
2510s model of of the of the server grid
2512s itself you know being distributed in
2514s such a good way but when you have to
2516s bring such a mod lithic server down
2519s because of that because of let's say
2520s whatever error you can't determine that
2522s has a Cascade effect across you know
2525s everything you're having to to affect
2528s the database to affect the login servers
2530s to have the player cues going off again
2533s the ability for this to truly be
2535s distributed and for us to be fault
2538s tolerant is an entirely different player
2540s experience when it comes to these large
2543s massive MMO RPG uh type settings yeah I
2546s mean it's it's very typical you know
2548s like with you know an MMO like that
2552s something else is happening in the world
2553s somewhere someone's hacking someone's
2555s you know there's a really large maybe
2557s there's a really large raid or or Siege
2559s happening and the the server Falls over
2563s and then everyone gets kicked with our
2565s model that doesn't happen the the rest
2567s of the server is fine performance is
2569s still fine in the rest of the server
2570s people can keep playing if that server
2572s goes down we you know we we'll deal with
2574s it we'll spin it back up and it we'll
2576s just seamlessly rejoin red once it's
2578s once we're back in a good
2582s State and this like eliminating the
2585s replicator was um definitely not easy uh
2590s and it actually it caus us quite a few
2593s problems but let's investigate one of
2595s those problems and the solutions we came
2598s up to uh solve it
2602s so the because we did not want to create
2606s an
2609s really large connection network between
2612s all the different servers we essentially
2614s connect the servers to the
2617s nearby servers the neighboring or like
2620s some that are close by uh and that is
2624s fine in most situations over here we can
2626s see there's two players in um two
2629s neighboring servers those those servers
2631s communicate so if those two players are
2633s in a party even though they might be a
2636s little bit too far away to see each
2637s other
2638s they can still see each other on the map
2641s however in a more complex situation
2644s where that other player is maybe on the
2647s other side of their realm now those
2650s servers do no longer have a connection a
2653s direct connection to each other so we
2656s have created a problem how can player
2660s one see player two when player two is on
2662s the other side of the world when if we
2664s had a centralize replicator sure we have
2667s the data just there we can figure it out
2669s but we do not uh what do we do about
2672s that and uh to solve uh that uh issue we
2677s created a concept called
2681s microservices microservices
2684s are Imagine them kind of
2687s like servers on top of the servers like
2691s um like some database for example but
2694s it's active it's not just storage
2697s they're doing
2698s work uh we have a node service that is
2701s responsible for um leveling up and
2704s keeping track of all the nodes and the
2707s upgrades that have to be done to to
2709s nodes we have a population service that
2712s is doing the spawning across all the
2715s Realms and we have a Social Service
2718s which would be for example what
2722s um what would affect the party example
2725s that we just uh talked about
2728s this means that server one and server 8
2731s on the diagram can connect to that
2733s social service and exchange the
2735s locations of those two players that way
2738s player one and player eight can have
2741s exactly the information they need to be
2744s able to see each other on the
2746s map and we act we yep what was it
2750s Stephen oh nope that wasn't me oh that
2753s wasn't you I can't s my bad um so uh
2757s yeah and this actually gave us some
2759s extra benefits we were able to make some
2761s pretty cool tools with it because we
2764s wanted to be able to see to have like an
2767s overview of what happens to the entire
2769s realm we wanted to be able to keep track
2771s of all the players all the NPCs see all
2774s the different gathers being spawned see
2777s all the
2778s trees and that's kind of hard to do if
2782s we just connect to a single server and
2784s then see what's on that one server and
2785s then jump on another server and see
2787s what's there so we created a service
2790s that keeps track of all entities in the
2792s world and a tool that can allow us to
2796s view those
2797s entities and this is a pretty cool tool
2800s because we can see the players moving
2802s around we can see them uh participate in
2805s events we can see the NPCs dying we can
2807s see them collect gather bles so if
2810s there's any issue with the spawning on
2812s GA of Gables will detect it and
2815s hopefully fix it it's a I think the big
2817s thing to to say here is like you know we
2820s can we can see the entire world state
2822s which we yes generally can't do because
2825s we're so distributed and everything's so
2827s server Central but since we have these
2829s Services we can make a debug service
2831s like this and we can see the entire
2833s world yeah watching you yeah I also
2837s wanted to piggyback off of that Anton of
2839s your services um the services as well
2842s are also pretty much distributed like
2844s going for our model so that if one of
2847s the systems go down it's not taking down
2849s the entire all every game system so if
2851s we just if the chat service goes or the
2853s Social Service for example goes down you
2855s may just not be able to chat or form a
2857s party for a few minutes until it comes
2858s back up but you should still be able to
2860s interact with like your guild your node
2862s your mail Etc and we try making the
2865s services as well fault tolerant like we
2867s explained earlier um so that way they
2870s can come back up go down come back up on
2872s the Fly get hot fixed and so that we can
2875s still provide that seamless experience
2877s while the feature may not be working
2879s everything else should still be working
2880s in the meantime right and because
2882s they're they're componentized in this
2883s you know microservices approach right
2886s there is not an interconnectivity where
2888s you have one failure in a single service
2890s causes a cascading effect across all the
2893s services right exactly they're they're
2894s independent of one another that allows
2896s for a recovery time a recovery process
2899s to stand back up while the other
2901s services continue their operations
2903s exactly and then these debugging tools
2905s allow us to see where those problem
2906s areas are or what what situation or
2909s actor might be causing a problem right
2911s exactly we don't have all the tools
2913s slide for all the tools but we do have
2915s monitoring tools for all the different
2917s Services we know when they're lagging we
2919s know when they're down we know we can
2921s monitor pretty much everything it's
2922s pretty cool yes it's very
2925s cool cool now let's get let's get into
2927s the really fun stuff now next one is
2929s this one is the community has actually
2931s been talking about quite a bit yeah I
2933s saw a bunch I saw a bunch of videos
2935s people are people are have been talking
2937s a about this yeah so go into it Anton
2940s because this is this is your thing yeah
2942s oh God I have been I've been looking
2945s forward to like since I joined the
2947s company I've been wanting to implement
2949s this and uh this is um an answer to a
2955s problem and that problem that he trying
2958s to answer is sure you have all those
2961s different servers but usually player
2964s activity tends to condense to certain
2967s are areas let's say a large PVP battle
2969s is happening at some place um and when
2974s that happens that one server can be
2977s overwhelmed and you usually wouldn't
2980s want to just create tiny servers for
2984s everything because that can be
2985s incredibly expensive and
2988s wasteful but having those smaller
2991s servers would be really useful so what
2994s if you can do it dynamically what if you
2997s can detect when a server is overwhelmed
3000s and then split it this is what dynamic
3003s grading it is and it can be a little bit
3007s of a little bit tricky to implement uh
3010s the difficulty of it is that you just
3013s now split a server and you want the
3015s players to not realize they were casting
3018s abilities they were running around and a
3021s new server just spawned they were moved
3023s there and no one realized that is a
3026s difficulty there I want to add here is
3028s like these cases in which we're
3029s splitting a server they're complex
3032s because if we're splitting a server
3033s there's a lot going on so it's not like
3036s we can like there's just a couple people
3037s we can split them we can do like a a
3039s quick fade and it will be fine if we're
3042s splitting the server it's because it's
3044s it's
3045s underload and there's there's a lot of
3047s action going on so we want to keep that
3049s action going on and not interrupt it
3051s while we while we balance the load
3052s across multiple servers and and it's
3054s important to you know call back again to
3056s the very beginning of this conversation
3059s right how do you determine the types of
3061s architecture necessary you must first
3065s understand what is the mission statement
3067s of the game and Ashes is built with a
3070s lot of open world Dynamic and emergent
3074s player behaviors that are attempting to
3077s encourage High player densities at any
3081s point within the open World locations
3084s which makes this particular problem a
3087s requirement when determining
3088s architecture of how do we address this
3092s right and I'm not familiar with and you
3094s know Zach Anton Hunter I'm not sure if
3096s you guys are but I'm not familiar with
3098s any other techstack or networking
3100s approach that has a dynamic griding
3103s solution in order to better accommodate
3106s and facilitate that emergent player
3109s density Behavior yeah I mean we we we
3113s are not the first people to try this
3114s this is this is something that a lot of
3116s people have tried it's it is you know
3119s the the answer to to scalability if you
3121s if you can get it right and that is you
3123s know that is our our mission here is to
3125s get this right we want to be the people
3128s that solve this problem and because if
3131s we solve this the the the the level of
3134s battles and uh dynamicism I guess we'll
3137s be able to have in ashes is going to be
3140s unparalleled to any other game yeah and
3143s to make something clear we're not
3144s talking about the far future five years
3147s from now uh this is current currently in
3150s development and we are uh hoping at
3154s least to have it available by Alpha 2 um
3158s and the server mesing part of it is
3160s already in game yeah so the dyamic
3164s aspect of yeah so the static part yeah
3166s is already is already going it's been
3168s going for manys now yeah years years now
3171s um and you know the the all of our Dev
3174s test servers people are on them every
3175s day running it it's fine
3177s uh this is this is like you know if
3180s where where we're investing our Dev time
3182s right now is getting this perfect mhm
3185s get getting this ready for the entrance
3187s of Alpha 2 Y and hopefully ases of
3191s creation is going to be uh the first
3193s game that implements this technology and
3195s actually deploys it yes that would be
3197s really fun you got to work quickly guys
3200s if you want that moving
3204s moving very cool this is exciting
3210s it up to uh to Hunter yeah yeah I I
3213s guess now that we've you know all these
3216s slides before this we were talking about
3217s Distributing the problem separating the
3219s problem um into multiple servers so we
3223s don't have to deal with like you know
3224s thousands and thousands of players and
3227s on on the same server doing
3229s replication um but you know we still
3231s have like the core problem here right we
3235s can only split servers so far we can't
3236s you know make them like 10 met by 10 met
3238s we can't do that it's going to be too
3240s small so we need to we need to still
3243s support you know a high you get a server
3246s you get a server exactly exactly so we
3249s still need to solve the like the core
3251s problem of how many players can we get
3253s on a server have them replicate and
3255s simulate at the same
3258s time so uh I'll pass it over to 100
3261s he'll kind of go into like I guess the
3263s problems that we have when we're when
3265s we're with with with unal replication
3268s and how we've gone about speeding them
3270s up so we can uh support many many many
3274s uh hundreds of players on a
3276s server yeah um so kind of piggybacking
3279s off what Zach said like what do we do
3281s when a large amount of players are say
3283s following your favorite streamer into a
3286s a small area and then like we can't just
3289s keep dividing our servers into such tiny
3291s areas and
3293s that you're needing a single server
3296s that's still
3297s of a reasonable size to then be able to
3300s process the heavier load and replication
3303s that's happening in that exact area at
3304s that exact
3305s moment um so in order to do that we have
3309s to then figure out how we can increase
3312s the number of players and entities that
3314s a single server can support and this
3317s doing so will also help us increase our
3319s overall like concurrent user limits per
3321s realm um because as a rough napkin math
3323s of course you know you take the players
3325s per server multiply that by the number
3326s number of servers and there's your CCU
3328s right it's that easy yeah that's how it
3332s obviously um so I'm going to kind of go
3335s into now uh we're going to touch back up
3338s on kind of what we explained earlier
3339s like why is replication
3342s expensive like what's going on
3345s um so we kind of wanted to explain that
3350s like on this slide here for example you
3351s can see an example of a CPU performance
3355s profile that we took during a large
3357s scale bot test um you can see here that
3361s like the single frame we're staring at
3363s took 150 milliseconds for example now
3366s 150 milliseconds may not seem like much
3369s but when you want to for example you're
3370s talking about servers and tick
3372s rates um and if you're trying to Target
3375s say a 30 or 60 frames per second or
3377s ticks per second server you only get a
3380s budget of about like 33 milliseconds or
3382s 16 milliseconds per frame in order to
3385s keep that stable High
3387s tick time can you talk a little bit
3390s about what you're referring to when
3391s you're when you're talking about tick
3392s rates and
3394s ticks um
3397s so as your game server runs
3400s every it it runs and processes basically
3403s the entire world at like an interval of
3406s ticks or frames is what it's called the
3408s faster you can do all that processing
3410s the faster your gameplay and experience
3412s is going to be um if you're targeting
3416s say roughly 30 to 60 frames per second
3418s which is a pretty good um targets to
3421s have for like a game server of like an
3423s MMO that needs to be very fast paced and
3425s have like very good performance FPS is
3428s different than client FPS yes but but
3431s but they they 30 is not acceptable I
3435s just want to make they're vaguely
3436s coupled so you one one of the things you
3439s would notice like if server performance
3440s went down is you would notice rubber
3442s banding like when you see like people
3444s just jumping around the world or you
3446s would notice your latency goes up and
3448s you notice that by like you're you know
3449s you're trying to you know do PVP and you
3452s feel you know you you you cast Fireball
3455s and you feel the latency between the
3457s time you casted it and when it actually
3460s executed on the server so the the this
3462s this this time these like these tick
3464s times that we're talking about that's
3466s what it correlates to for the player
3468s right because normally when you do an
3469s action the client triggers something it
3471s tells the server hey do this and the
3473s server then replicates back to your
3475s client if these frames are taking a long
3477s time to process in between that means
3479s your server just has artificial latency
3481s and it's taking a lot longer to then
3483s process that incoming message to then
3485s return back to you um so like in this
3488s 150 millisecond scenario if our game was
3491s steadily running every frame at like 150
3493s milliseconds of time to process that
3496s would drop our server down to roughly
3498s like six ticks or six frames per second
3500s which then you will really heavily
3502s around that time start feeling like
3503s latency rubber banding uh Dr packets Etc
3508s and and then that's not acceptable for
3510s an action combat PVP MMO like it just
3513s doesn't work
3515s right so I played those games it
3519s definitely doesn't
3520s work we all have blamed lag before
3524s right so so so we know that this is
3526s unacceptable what do we have to do to
3528s optimize this right so now this kind of
3532s tells us replication and now it's like
3534s okay let's dive a bit deeper into why
3536s this replication is very
3539s expensive um one of the big excuse
3544s me one of the big um major factors
3547s replication can be slow is because first
3550s when you want to do your replication you
3552s have to gather and determine basically
3555s relevancy of every actor in the game to
3558s not only your connection but every other
3560s connection that's being processed in
3561s that
3562s frame so relevancy is used and needed to
3566s determine basically how far away an
3568s actor is from your player and then there
3570s might be some other like comment some
3572s other checks that they may need to do
3573s like is invisible or not but for
3576s Simplicity sake we're just going to base
3577s it off a distance for now so then it's
3581s basically comparing that distance to you
3584s and saying okay are you eligible for me
3587s to replicate to you because we obviously
3589s don't want things being considered to
3591s replicate to you if it's like across the
3593s world like you don't care what's
3594s happening on the far Northern end of the
3596s the continent while you're all the way
3597s down on the southern end like that's
3599s just that's just going to waste a lot of
3600s processing and
3602s bandwidth um so the relevancy checks
3607s like this gets way more expensive the
3609s more players and more actors you have
3611s that are replicated because then it's
3613s for every actor for every player am I
3616s within range of them yeah and when we're
3618s talking about an MMO where you know
3620s you're going to have thousands of
3621s players on the server thousands of NPCs
3624s uh tens of thousands of replicated
3626s actors you know you can't you just can't
3628s check all you can't do a distance check
3630s on all of those things in a reasonable
3632s amount of time right and so this is an
3635s optimization here for networking
3636s purposes but it also leads to then
3639s slowing down your CPU resources because
3642s again you have to do that like every
3644s tick or at every whatever interval you
3645s set to do these
3647s checks um as we if we looked at the
3650s previous example for example I believe
3652s the I don't think it shows in the
3654s profile but roughly a little bit over
3657s onethird of that total time and that
3659s profile was just doing the relevancy
3662s checks um a good thing about our model
3666s though because all of our servers are
3667s distributed they only have to do those
3669s relevancy checks for just everything
3672s within that then distributed Zone as of
3675s if we had that Central replicator it
3677s would that replicator would then have to
3678s still process every single player every
3681s single actor Etc in the world in some
3683s way shape or form to then determine if
3685s it should be relevant to you or or not
3687s so by splitting up and doing the
3690s distributed server load like we're doing
3692s this allows us then to kind of reduce
3694s that problem area but it's still a
3696s problem yeah it's still really big
3698s because it's still a really big problem
3700s now adding more servers to the solution
3701s that can make it smaller and smaller but
3704s eventually there's like we want to get
3707s it as fast as possible so it's like how
3709s how how do we make this better how do we
3711s make this faster to be clear that
3713s profile was using uh inter it had a
3717s server messing and it still was 40 35%
3722s uh uh relevancy checks so we need to
3725s reduce those relevancy checks uh how how
3728s do we do that how can we tell unreal not
3732s to do all those unnecessary
3735s checks well unreal in recent years
3739s introduced something called the
3741s replication graph and that is something
3744s that gives the
3746s developers
3748s the ability to write a custom solution
3752s into how to handle all those uh
3755s relevance checks and how to determine
3757s which player should see which actors
3759s when it comes to
3761s replication uh and this can actually
3766s lead to some really great performance
3768s games we'll look at it in a bit uh but
3771s let's start and uh to and see how we use
3775s this replication graph to solve
3777s specifically this relevancy
3779s check on the map over there we see uh we
3784s you still cannot see too far away but
3787s there are a couple actors that are
3789s really close to the player and that
3791s Goblin over there and a loot box and
3795s there is also um a bear a little bit on
3799s a medium distance away and a bunny
3801s really far away now imagine that keep
3804s stretching for 500 met more and there's
3806s 200 more bunnies and without the
3809s replication graph we would have to check
3812s every single one of those bunnies and
3814s say is this within my distance is this
3816s within my distance and that's that's a
3819s problem that's expensive to do so what
3822s we're going to use the replication graph
3825s um to do is we are going to create this
3828s grid where we eliminate all the cells
3832s that are far further away from us and
3834s only check the nearby
3837s cells that allows us to only check these
3839s three actors that are around us skipping
3842s potentially hundreds of others actors
3844s that are further
3845s away and uh this can lead to a pretty
3849s big performance Improvement we noticed
3852s and this is like highly varying
3854s depending of the scenario of course but
3857s on an average scenario we noticed about
3859s a 1.5 times performance Improvement like
3862s a 35%
3864s reduction uh in uh our replication
3867s cost this is this is pretty
3871s good uh but it's still not fast enough
3874s and if we analyze the problem a little
3876s bit we'll see
3878s that we are we we're talking and
3881s thinking about like the NPCs and the
3884s bear and the
3885s Goblin but we are also comparing our
3888s distance with all the trees with all the
3890s bushes that you can pick up with
3892s potentially some buildings that are
3895s destructible
3897s why are we doing that can we do
3900s something to improve this and the answer
3902s is yes we can uh what we can do is we
3906s can monitor and see when these um ores
3912s or these trees are
3915s changing and when they're not changing
3918s we can move them out over our grid so
3921s we're not even considering them at
3923s all uh we might have 2,000 trees in the
3927s area well we're not even going to look
3929s at them because none of those trees just
3931s got cut down if someone is cutting them
3933s down then yes we're going to move them
3936s temporarily into the special grid and
3938s then once they're done cutting out and
3940s everyone sees that they were cut down we
3942s put them back to the dormy bucket it's
3945s essentially looking imagine like the
3947s actor is going to slip for it a little
3949s bit and this this gives us a really
3954s really large Improvement we noticed in
3956s our test about five times Improvement in
3959s replication times so so
3963s far uh if we also include the previous
3966s optimizations we've improved our
3967s replication performance by seven
3970s times and yet that's still not fast
3973s enough it's still not fast enough one of
3976s mainly because of our worst case
3980s scenario and that worst case scenario is
3983s people keep packing in that one small
3985s area
3986s there's an event happening there's some
3988s point they need to capture 200 people
3990s run in the same area yes she can ignore
3993s the um relevancy to some Far Away tree
3997s that's great that's a game that's uh
4000s more than welcome but if 200 players can
4003s see each other that means that 200 time
4007s 200 you're sending 40,000 updates per
4010s tick yeah and I guess one thing to add
4014s there Anon this is typically when a game
4017s would introduce a new layer or um a new
4020s Shard this is like typically that case
4023s um but as we talked about earlier one of
4025s our goals is we don't want we don't we
4027s don't want to do layering we don't want
4028s to do sharting we want everyone who's in
4030s the same area to be able to see each
4032s other right and you could you could then
4035s use like Dynamic greeting to help in the
4037s scenario but again we can only make the
4038s servers so small and dynamic before we
4041s kind of run out of that room so we still
4043s have to improve the scenario that's kind
4046s of happening around you indeed so we
4049s need to figure out a way to further
4053s improve this worst case scenario and
4056s this is where we kind of hit an engine
4060s limit um and this engine limit is that
4065s the replication graph of unreal
4069s is the replication tick in general not
4071s just the replication graph is single
4073s threaded and that's because the engine
4077s in general is single-threaded now what
4080s does that mean what does single threaded
4081s mean it means that all the processing
4085s happens in one core of the
4089s CPU uh and uh we can move on to the next
4093s Slide by the way but
4098s the that means that even though the
4101s server might have four cores um all the
4106s other three cores are going to stand
4108s there and wait for the first thread to
4110s do all the
4112s processing uh this is done normally in
4115s unreal because it's it was not designed
4118s to be
4120s multi-threaded uh it was it is a very
4122s single-threaded engine and replication
4125s is probably the most single threaded
4128s system out of all the systems in
4131s unreal uh so making it multi- threaded
4136s is incredibly difficult and uh at least
4141s I am not aware of it being done before I
4144s tried to do some research around it at
4146s the time and uh everyone was saying
4149s basically that it's
4151s impossible but uh we did it anyway uh we
4155s persevered through and uh we
4157s multi-threaded the unreal replication
4160s Tech and uh well looking at the
4164s results they did not disappoint uh we
4168s actually gained and there's a graph
4171s showing it on the next slide but we
4174s gained a
4176s 2.5 times Improvement 2.4 times to be
4180s more exact in a replication text huge
4185s yeah it was a really really big
4187s Improvement in uh a replication and it's
4190s probably necessary to achieve the player
4193s counts that we're targeting for I don't
4195s I don't thinking would be possible
4196s without doing
4198s this uh and the the really important
4202s thing to note about this optimization
4204s and why it's like such a big deal
4206s compared to like the five times
4209s Improvement we saw before from dorcy is
4212s that this
4215s Improvement helps equally even on the
4218s worst case
4219s scenario the other ones in the worst
4221s case scenario they're helpful but
4224s they're not that helpful this
4227s is incredibly important even on the
4229s worst case
4230s scenario and if we add it on all the
4234s other improvements we've done so far
4236s we've actually achieved a total
4238s Improvement of total reduction or
4241s replication take by
4243s 94% so we are only at 6% of the original
4246s cost for uh replication uh this was
4251s actually a huge win for uh our team um
4255s but but um
4257s it there are still there's still many
4260s more things that need to be
4262s done uh as of creation is
4265s um an incredibly ambitious MMO in terms
4268s of scale uh and uh we need to do a lot
4275s of work in order to heit our goals and
4278s you know this is this is obviously again
4280s going back to the start of this whole
4282s conversation what is ashes of creation
4284s trying to be
4286s and what does it then require of the
4288s text act we are using in order to become
4291s that and when we said in 2017 that we
4295s are looking to bring massive back to
4297s massively multiplayer having an engine
4300s with the graphical Fidelity the front
4302s end that unreal provides is
4306s so is so important to the immersive
4311s nature to the beauty of the world to you
4314s know the quality of the setting but then
4317s coupled with a proprietary backend that
4321s can facilitate the same player
4324s experience that a massively multiplayer
4327s World wants to provide that's the dream
4331s that ises is trying to be
4336s exactly phenomenal work here guys this
4338s is this is huge yeah I I'd like to like
4342s take a moment I guess to shout out the
4344s team the team has done an incredible job
4346s you know we
4348s are we we we are we are pushing MMO Tech
4351s to where it's never gone uh and we
4353s continue to we we intend to keep doing
4355s this moving forward Hunter Alex Kevin
4358s Andrew Anton Adam ish Doug you know they
4362s they've all done amazing work uh you
4364s know to get us to this point where we're
4366s at today and I'm sure they'll keep doing
4367s it moving forward um if you're
4371s interested in working on problems like
4373s this you know yes send us an application
4375s you know we're always looking for people
4377s who want to work on this who have
4379s experience working on Tech like this
4381s please send this an application we we're
4384s we're always interested and we know that
4385s like this this this showcase this this
4388s Tech talk this Ted Talk this this GDC
4391s talk you know what whatever whatever we
4393s want to apply to this uh to this indepth
4396s technical discussion is going to appeal
4399s not just to to people who are aspiring
4402s obviously uh within this field to learn
4404s it to do it to you know this is their
4407s career going forward but also to those
4409s of you who have been within this field
4412s work and who yearn to work on the types
4415s of problems that we're discussing here
4417s in this showcase um we have a phenomenal
4420s culture at Intrepid we have a phenomenal
4422s project in our hands that is you know no
4426s shortage of problems that need to be
4428s solved um and one thing that our
4431s community has done a phenomenal job with
4433s is is helping to evangelize the project
4436s and the company and we're here to say
4438s that we have apps open we have positions
4442s that are available and if you want to be
4444s a part of this team um or if you want to
4446s help others find this team so that they
4449s can apply please share this link share
4452s this uh video with others uh go on you
4455s know social media and let people know
4457s we're working on some pretty Next
4459s Generation Tech that is going to change
4461s the face of massively multiplayer when
4464s it comes to a genre so you know very
4466s excited and proud of what your team has
4469s accomplished you guys I know are working
4471s every single day and doing a phenomenal
4473s job um congratulations just very well
4477s done thank you thank you and it's great
4480s to experience it in game to and I know
4482s that you know our PI folks have already
4484s experienced that in our node Wars test
4486s as well so maybe they didn't really even
4488s realize it um yeah they might not have
4491s noticed um but there were definitely
4493s server workers working hard and that um
4496s and we were capturing data so we super
4498s duper appreciate it and as we head into
4500s Alpha 2 we're only going to get more
4501s data and be able to continue to push on
4504s and as uh the folks here have stated um
4507s moving towards more of that Dynamic
4509s State yeah um it's been in progress It's
4513s going to be in progress still for many
4514s years as we continually find new ways to
4516s advance it and make it better um we're
4520s committed to providing kind of like that
4521s quality we want for our players and as a
4524s lot of us have played MMO in the past we
4526s just like networking was the big stopper
4530s for a lot of things and we're trying to
4532s do something different and trying to
4535s make that a better experience for not
4537s only our game but many more games to
4538s come if other companies were able to
4541s like wanting to adapt to a new tech
4543s style or try to figure out their their
4545s networking
4546s issues yeah and of course all of us here
4548s are huge MMO fans and I know those of
4551s you who are watching are as well
4553s obviously if you're sitting through this
4555s um but of course the the plan for us is
4558s to continue to create an amazing game
4560s and push forward and continue to change
4562s things even after post launch we'll
4564s continue to try to drive things forward
4566s so thank you for joining us and thank
4568s you to Hunter and Zach and Anton for
4570s your time and putting together an
4572s amazing deck a little extra shout out to
4574s Mike for putting together all the graphs
4576s gra Mike did such a good
4579s job for helping capture some of the
4581s little footage pieces to make sure that
4583s they looked great we super appreciate it
4585s any final words step inter wrap yeah
4587s absolutely just you know out in the
4588s community let us know you know these are
4590s always the more risky takes that we
4592s provide insights too in our monthly
4594s updates because they are so Tech heavy
4597s and you know we know that this has an
4600s appeal to perhaps a smaller audience but
4603s give us your feedback give us your
4604s thoughts what did you think of this
4605s presentation how do you enjoy you know
4608s learning a little bit more indepth under
4610s the hood conversation about what it
4613s takes to make these types of games to
4615s make you know ashes of creation that
4618s that dream of all of ours um how does it
4621s appeal to you what are your questions
4623s what are your thoughts um leave us
4625s comments in the YouTube channel in the
4627s uh in on Twitter and different social
4629s medias and Discord and on our forums
4631s obviously the community team continues
4633s to do a bang-up job of collecting your
4635s insights and bringing it back to the
4636s team um but we enjoy you know sharing
4639s this and and giving giving our perhaps
4642s um perhaps more sheltered uh de Vel
4645s opers who are who are in the behind the
4649s scenes making all the magic and
4650s everything work an opportunity to come
4652s out and talk about how they are
4654s literally the magic that makes the
4656s wheels turn for this bus um and it it's
4659s it's a great opportunity I think for
4661s them to come out see a little daylight
4663s and let and bask in the sun of what is
4665s the glory that our community looks to
4666s them and says thank you for providing an
4669s opportunity to enjoy a game at this
4670s scale because it would not be possible
4673s obviously without your guys's hard work
4675s um and so with that I think we'll see
4678s you guys back on stream we'll see you on
4681s the flip side
4688s [Music]