over 1 year
ago -
EVE Online
-
Direct link
Transcript (by Youtube)
0s | good morning capsuleers and welcome to |
---|---|
2s | the third day of FanFest |
5s | 2023 if you've ever wanted to peek under |
7s | the hood of Eve now is your chance as we |
10s | are about to explore the building blocks |
12s | of new Eden please give a very warm |
15s | welcome to CCP |
25s | vertex good morning everyone it is so |
28s | good to see you all my name is is Ben |
31s | also known as CCP vertex and I'm the |
34s | development director of our core |
36s | Technology Group known as |
38s | platform I've been around eve since the |
40s | early beta in 2002 so this is actually |
43s | my 13th FunFest overall it's really good |
46s | to see so many familiar faces and |
49s | friends having been around for the past |
52s | two decades means that I've had the |
54s | privilege of witnessing the evolution of |
56s | Eve over the 20 years and how we're |
59s | constantly tweaking and improving things |
61s | modernizing the game the look and the |
65s | feel crafting the best visual experience |
68s | is something we put a lot of effort into |
71s | we take a lot of pride in that because |
74s | we want you to have the most visceral |
76s | experience possible the most immersive |
78s | experience possible and the last two |
81s | decades we've come a very long way in |
83s | that Journey from Eve in the early Alpha |
86s | all the way back in 2001 where the look |
89s | and feel wasn't well def find at that |
91s | point to the open and closed beta |
93s | periods of 2002 we constantly evolving |
98s | that look and |
99s | feel modernizing the engine capabilities |
103s | the art pipelines we've released |
105s | countless 3D model redesigns texture and |
108s | Shader |
109s | updates completely overhauling the |
112s | lighting and visual |
114s | effects to the graphics API upgrades |
116s | moving from DX 99 to 11 and Nyon 12 |
121s | this transformation represents two |
123s | decades worth of modernization |
126s | effort all while needing to support your |
129s | record setting Fleet fights some of the |
132s | largest PVP battles in gaming history |
135s | something you should be so proud |
137s | of you don't make it easy for us but we |
141s | really wouldn't have it any other way |
143s | and we are definitely not done with |
146s | modernizing the look and feel of |
149s | Eve |
151s | CCP games presents |
155s | carbon a Next Generation game |
161s | engine pushing the boundaries of large |
164s | scale MMO |
167s | technology to create entire |
179s | universes forged over two decades carbon |
183s | Powers the eve |
186s | Universe creating Worlds Without |
197s | Limits all you need to |
200s | do is lose yourself in |
207s | them we are proud to present carbon Evon |
211s | Line's Next Generation game engine |
213s | building on our 20year Legacy of |
217s | breathtaking visuals carbon represents |
220s | our vision of a modern game engine |
223s | supporting the latest and rendering |
224s | techniques and features within an |
227s | efficient and flexible |
229s | framework this effort extends to our |
232s | tools and our pipelines so that we can |
234s | increase our developer velocity which |
237s | means we can get features to you quicker |
239s | than ever |
241s | carbon will release with upscaling the |
243s | best suits your choice of GPU |
247s | vendor so going off of our direct X12 |
250s | and metal work we will be supporting rri |
252s | shadows and |
254s | Reflections to complete that visual |
257s | experience we will be adding support for |
259s | 3D |
261s | audio and to ensure that the engine |
263s | performs better than ever we will have |
265s | an allnew GP driven pipeline which you |
268s | will hear more about later in this |
269s | presentation |
274s | releasing early next year carbon enables |
277s | new visual experiences for decades to |
280s | come ensuring Eve continues to be the |
283s | ultimate science fiction experience and |
286s | now I would like to hand over to our |
288s | technical director CCB tuxford to Deep |
290s | dive into the technology that drives all |
292s | of these changes thank |
299s | you |
306s | thank you Vortex uh I'm csb tuxford and |
309s | I'm technical director of platform like |
312s | Vex I've been here at csb for many years |
315s | uh in various role including game |
317s | designer software engineer and technical |
319s | director of |
323s | Eve and I'm here to talk about our |
325s | Basics engine |
328s | destiny |
334s | so that is all messed up sorry about |
337s | that |
350s | just right there we are little technical |
353s | difficulties so what is a physics engine |
356s | so a physics engine is a software |
358s | component that simulates physical |
359s | Interac action in a virtual environment |
362s | it calculates how objects move Collide |
364s | and react to |
366s | forces in Eve we have a proprietary |
368s | physics engine called Destiny it's |
370s | simple and efficient and it's a key |
373s | factor that enables us to have these |
374s | large Fleet |
378s | fights but how does it actually |
381s | work the server runs a simulation for |
384s | the entire solar system but the client |
386s | runs one as well for all items in local |
389s | proximity |
390s | basically anything you can see the |
392s | client is simulating as |
395s | well the client will send instructions |
397s | to the server instructions such as |
401s | orbit approach or a line basically |
404s | anything you can see in the UI all the |
406s | interactions you can do the client sends |
408s | that to the server the server will send |
410s | that straight back to the all the |
412s | clients that need to know about |
417s | it and then everybody will progress to |
419s | the the next frame now technically the |
421s | server doesn't really wait for the |
423s | clients to to progress to the next frame |
425s | but they all kind of do it in |
427s | sync this implies a few things and the |
431s | first thing is we only communicate |
434s | changes you will get the initial state |
436s | of the of the universe but after that |
439s | you only get some changes this means |
441s | that uh if there are no changes in the |
444s | simulation there's no actual network |
446s | activity going |
448s | on and this is because Destiny is |
451s | deterministic um you don't know what |
453s | determinism is it basically means given |
455s | the same input it will yield the exactly |
458s | the same results and because we're |
460s | working on diffs the calculations really |
463s | have to be |
464s | deterministic because any discrepancy |
466s | May for example cause collisions on some |
469s | simulations but not the others and those |
472s | discrepancies will only grow as time |
476s | passes you may have already experienced |
479s | this as d |
480s | sometimes it's because the client is |
482s | actually missing some messages but |
484s | sometimes it's discrepancy in the |
485s | calculations now we haven't had one in a |
488s | while now |
490s | but you you you may have already |
493s | experienced the ramifications of |
495s | it so the third thing is the client |
499s | needs to know pretty much everything |
501s | that it can see because in order to |
503s | simulate the state we need to know |
505s | everything so I have a small example of |
509s | this let's say we're simulating this |
511s | raven we just want to simulate where |
512s | this raven is going in order to do that |
514s | we need to know what its original |
516s | position is its velocity and what it's |
518s | actually |
519s | doing in this case it is approaching |
522s | that Tempest so we need to know its |
525s | state it's position velocity what it's |
528s | doing it's orbiting the Tempest and so |
530s | on and so forth we also need to know |
532s | about anything these ships can collide |
537s | with collisions are are an important |
540s | part of any physics simulations |
542s | collisions in Destiny are pretty simple |
544s | but more importantly they're really easy |
546s | to calculate and this is because the |
548s | geometry of the objects is pretty simple |
552s | all moving items are simulated as SES |
555s | and finding collisions between two |
556s | spheres is really really simple you just |
558s | compare the distance between the centers |
561s | distance between the centers to the |
563s | radius of the SP and this is kind of |
566s | fine for smaller |
568s | ships for state and larger structures |
571s | it's very noticeable that they aren't s |
573s | especially when you start maneuvering |
575s | your smaller ships around them we have a |
577s | pretty innovative solutions to that we |
579s | just add more SS to |
582s | it and since the structure doesn't move |
585s | the calculations are pretty |
587s | simple some shapes are also pretty big |
590s | and they don't have spherical |
592s | geometry they don't they have spherical |
595s | GE geometry but they don't look remotely |
598s | spherical regardless of what we try to |
600s | tell the |
602s | artists |
604s | so where are we now destiny has served |
606s | us for 20 years and we will continue to |
609s | develop it and work on it so in order to |
611s | prepare it for the third decade of EV on |
614s | line I'm going to tell you about some of |
616s | the modernizations efforts we've been |
620s | doing the tick is really where all the |
622s | magic happens in the |
624s | simulation we have an evolve step that's |
627s | where we move all the objects around and |
628s | we solve all the |
631s | collisions then we have everything that |
632s | happens before the tick and everything |
635s | that happens after the tick this is |
636s | pretty much what programming is about |
637s | it's like three lines of |
640s | code do the thing before the thing do |
643s | the thing do the thing after the thing |
644s | pretty |
646s | simple these are really poorly named |
649s | thing do preti do potic what really |
651s | happens there in the in the preck is We |
655s | Gather up all the messages we need to |
657s | send to the client all these approaches |
659s | or bits and a lines that the clients |
661s | told us they wanted to do we got them |
663s | sent them to the relevant clients so |
666s | let's take a look at what happens in the |
669s | preck |
671s | so it gets quite complex uh and it's a |
674s | lot more complex than what you would |
676s | reason reasonably expect for what it's |
679s | doing so what you're seeing here is |
682s | around 20 years of gameplay logic |
684s | getting intermixed with the physics |
686s | logic this goes on there was a limited |
688s | amount of time I wanted to spend in |
690s | PowerPoint making this animation but |
692s | it's like thousand lines |
700s | long |
704s | uh why is this bad so this is bad |
707s | because whenever you make changes to |
709s | this to this physics simulation code it |
711s | can cause unexpected failures in |
713s | different system and this will cause you |
715s | to lose confidence in making changes and |
719s | pretty soon you don't want to make any |
720s | changes at all and if you are making |
722s | changes you definitely do not want to |
724s | make any big |
725s | changes this drives poor cold because |
728s | you shy away from making the structural |
730s | changes to the Cod that are |
732s | required and then this cause unexpected |
735s | failures again so how did it really get |
738s | like that how did we make it like this U |
741s | reality is physics engine has been |
743s | staple there hasn't been a grown need to |
745s | make any changes to it so the changes |
747s | being made have been catered to other |
749s | systems and that allowed it to grow |
751s | around it this is really common in |
754s | software it's just part of the enthropy |
756s | of being a software |
757s | developer uh and it's not particularly |
760s | bad it just means that before we start |
762s | making any bigger changes to the |
764s | engine we need to do some maintenance |
768s | work as a starting point we've separated |
770s | the gameplay logic from the logic that |
773s | prepares and send the messages to kind |
775s | of encapsulate Destiny and make it uh |
778s | detangled from the rest of the |
781s | code and by simplifying and decoupling |
784s | our physics engine for gameplay we've |
786s | opened the door to creating targeted |
788s | benchmarks and this allows us to |
790s | precisely measure and enables us to |
793s | improve Destiny's |
796s | performance because if you can measure |
798s | it you can improve |
800s | it so all of these changes were made to |
803s | give us confidence the confidence to |
805s | change Destiny but what kind of change |
808s | are we really talking about |
812s | Destiny is efficient but there's still |
814s | plenty of room for improvement one of |
816s | the most resource intensive code in a |
818s | cluster in a fleet fight is sending the |
822s | destiny updates to the |
824s | clients let's take a look at what |
825s | happens there so Destiny runs on both |
828s | server and |
830s | client there's a server server site |
832s | called |
833s | beyon it gathers the |
835s | instruction uh all these approaches |
837s | orbits Alliance and everything think |
839s | explosions that happen and sends them to |
842s | a client side service called |
844s | Michelle these are definitely Destiny |
847s | Child's references by the |
849s | way and it gets those to the client side |
854s | destiny the destiny code is all written |
856s | in C++ but the services Beyond CN Mell |
859s | are written in |
861s | Python and if you know nothing about uh |
864s | programming then C process is really |
866s | really fast python is kind of slow there |
868s | are top people working on that but |
870s | that's the reality of the situation uh |
873s | the logic for determining which uh this |
876s | means that the logic for determining |
878s | what messages to send to which client |
880s | along with the marshaling unmarshaling |
882s | and the data transmission is all handled |
884s | in the slower python layer and if you're |
887s | unsure about what marshalling and |
888s | unmarshalling is you can imagine |
890s | marshalling as boarding a plane dead |
892s | transmission as the flight and un Maring |
894s | as the |
898s | onboarding |
899s | by separating the gameplay logic from |
901s | the physics logic we're in a pretty good |
903s | position to send all the destiny packets |
905s | within the C++ layer this because all |
908s | the information we have is really inside |
913s | Destiny it's difficult to say what the |
915s | net effect on performance is because |
917s | there's a lot of other things happening |
918s | other than physics simulation but for |
920s | all the code we've seen the efficiency |
922s | of the data transmission go up at two |
923s | orders of |
926s | magnitude the other side of performance |
928s | is |
930s | and by that I mean how realistic the |
931s | simulation |
933s | feels it's clear to us that representing |
935s | ships of sere does not fit all |
939s | scenarios we use different shapes and |
941s | even multiple shapes to represent static |
943s | objects could we not use those for ships |
945s | as |
945s | well we could but at what cost to |
949s | Performance with investment to |
951s | modernization such as Benchmark and more |
954s | test automation we can know exactly what |
957s | that cost is |
962s | so for 20 years Destiny has been a |
964s | reliable Foundation when it comes to |
965s | physics a recent code modernization set |
968s | us up to boost performance and Fidelity |
971s | but what about other kind of more |
973s | gamechanging improvements now quick |
975s | caveat before I say that the upcoming |
977s | feature is purely |
978s | hypothetical it would need design |
980s | validation which has not happened at all |
983s | uh think a bit more as what could be not |
985s | what will be imagine being trapped in as |
989s | field surrounded by hostile ships out |
991s | Gone But Not |
993s | outsmarted you spot a nearby cluster of |
995s | large |
1004s | asteroids you T towards toward it |
1008s | evading incoming fire As you move behind |
1010s | the asteroid the hostes no longer have a |
1012s | clear line of side which caused them to |
1014s | lose their target lock on |
1017s | you seizing the chance you line to a |
1020s | nearby Planet initiate warp just as the |
1024s | enemies regain the luck you hear the |
1025s | sweet words warp drive |
1030s | active so now that you're up to speed a |
1033s | little bit on the server side I would |
1035s | like to introduce U Mario who will talk |
1038s | about some of the updates to the |
1047s | client |
1052s | all |
1053s | right um hello everyone uh my name is |
1056s | Daniel also not truly known as CCP maku |
1058s | just yet uh this is actually my first |
1061s | FanFest |
1062s | um thank |
1065s | you um I am a rendering engineer on the |
1068s | engine team uh and I'm here to you today |
1070s | to present a little bit about some of |
1072s | the rendering work that we have been |
1073s | doing and uh to start it off I want to |
1075s | introduce you guys to Trinity uh e on |
1078s | line is a very unique game not just for |
1080s | you players but also for for us |
1082s | Engineers working on the rendering uh we |
1084s | have a very large world uh we have a |
1086s | very high view distance in this world |
1087s | and there's a large number of things to |
1089s | render uh it's also massively |
1091s | multiplayer online which means that we P |
1093s | control about what you the players do in |
1095s | the world so we need to be prepared for |
1097s | anything uh Trinity is the the graphics |
1099s | engine inside of carbon and it's our |
1101s | solution to |
1103s | Graphics um so some of the visual |
1106s | improvements that we've been working on |
1107s | lately um |
1109s | I'm sure you're familiar with the |
1110s | improvements to Shadows uh we now have |
1113s | an unlimited number of uh Shadow casters |
1115s | and Shadow receivers and and the Shadows |
1118s | overall are just much much sharper than |
1119s | they used to be uh these Shadows Shadow |
1122s | changes go hand inand together with the |
1124s | the new volumetric Cloud effects that we |
1125s | have uh which are obviously very pre |
1128s | prevalent in the in the new area that |
1129s | just unlocked |
1131s | yesterday um it's a it's a really really |
1133s | beautiful effect and I would love to |
1135s | talk a little bit more about it uh |
1137s | unfortunately don't have time for |
1138s | everything |
1139s | um so I will move on to probably why |
1142s | you're here which is the new |
1143s | stuff um rate tracing um so what is r |
1148s | tracing well it's the ability it's a |
1149s | hardware feature of your graphics card |
1151s | that allows you to shoot uh race |
1153s | arbitrarily into scene and see see what |
1155s | they hit uh we're working on support for |
1158s | both uh Windows and |
1159s | Mac um and the cool thing about rate |
1162s | racing is that it enables us to do uh a |
1164s | bunch of new techniques that we simply |
1165s | weren't able to do before uh this |
1168s | includes stuff like improving the |
1169s | reflections uh and improving the Shadows |
1171s | even more uh as well as hopefully |
1173s | improving the lighting overall in the |
1175s | future um the cool thing about even |
1179s | online is that it well space is fairly |
1181s | empty so uh you can count on rate |
1184s | tracing not having the same kind of |
1186s | performance hit that you're used to |
1187s | seeing when enabling it in other |
1189s | games so looking a little bit at the |
1192s | rate Trace Shadows well we already have |
1195s | shadows of course uh but rate tracing |
1197s | allows us to simil imate the size of the |
1199s | light source in a in a much more |
1201s | accurate way um if we add a shadowcaster |
1205s | to this little scene here you can see |
1206s | that only some of the Rays will be |
1207s | blocked and the actual shadow that you |
1210s | see from this very large light source |
1211s | will be very uh soft and and |
1214s | diffuse uh and and um yeah this is this |
1218s | uh this is fully realistic and fully |
1220s | Dynamic uh which means that if you have |
1222s | a for example an antenna sticking out of |
1224s | your ship uh it will cast a perfectly |
1226s | sharp Shadow onto your own ship while |
1228s | the uh distance space station uh will |
1231s | cast this very very soft Shadow on your |
1233s | ship and these two kinds of shadows will |
1235s | seamlessly |
1236s | mix um we have a prototype working as |
1239s | you can see uh but it's still very much |
1241s | work in |
1242s | progress uh we also really want to want |
1244s | to improve the reflections we of course |
1246s | already have support for limited |
1248s | Reflections uh but rate tracing will |
1250s | truly help us take them to the to the |
1252s | next level uh you can imagine the the |
1254s | metal parts of your ships uh reflecting |
1256s | the dynamic environment around you in a |
1258s | in a way you haven't been able to see |
1260s | before um as well as or or for example |
1263s | uh seeing a perfect mirror-like |
1265s | reflection of your ship as you pass by a |
1267s | frozen asteroid no prototype here just |
1270s | yet but it's something we're very |
1271s | excited |
1272s | about um but of course graphical |
1274s | improvements aren't everything uh we |
1277s | also need to make sure that it all |
1278s | performs well uh we do always try to |
1280s | optimize our code and our shaders that |
1282s | like that uh but there is an upper limit |
1284s | to how far you can go with just minor |
1285s | code changes uh sometimes we need to |
1288s | take your completely different approach |
1289s | to uh to uh to rendering something to |
1292s | make sure that we maintain the |
1294s | performance and one of the biggest |
1295s | challenges there is just pixels it's |
1298s | just the sheer number of pixels that we |
1299s | need to render uh the number of pixels |
1302s | is of course determined by the |
1303s | resolution of your monitor uh 1080p |
1305s | monitor is about 2 million pixels 4K |
1307s | bumps that up to 8 million and that's |
1309s | the number of pixels we need to render |
1311s | every single |
1312s | frame um of course the cost of each |
1315s | pixel will also keep going up we are |
1317s | always adding new shading improvements |
1318s | such as the Shadows uh we're adding new |
1320s | special effects and post-processing |
1322s | effects to make sure that the game looks |
1323s | as good as it ever can um and on top of |
1326s | that we want to add rate tracing and all |
1327s | of these increase the amount of time we |
1329s | need to spend on each pixel uh and we |
1332s | can't forget about anti-aliasing uh |
1335s | anti-aliasing usually comes in in in the |
1337s | form of some kind of resolution increase |
1340s | uh again increasing the number the |
1341s | effective number of pixels we need to |
1342s | render uh so it kind of multiplies the |
1345s | cost yet again and obviously solution |
1348s | isn't get everyone to get a really |
1349s | expensive GPU would be nice but that's |
1352s | not the reality we live in um but then |
1355s | looking into anti-aliasing specifically |
1357s | well what is aliasing and why are we |
1359s | trying to get rid of it well uh aliasing |
1362s | is essentially an artifact of the way |
1364s | that uh gpus render uh triangles and |
1367s | things in general uh you basically have |
1370s | this binary test for each pixel that |
1372s | checks if the if the center of the pixel |
1373s | is covered by the triangle and if it is |
1376s | it's completely filled in and the end |
1377s | result is the image to the left here |
1379s | where uh you can see these ugly Jagged |
1382s | edges this kind of staircase pattern |
1384s | it's very typical of aling and uh |
1387s | anti-aliasing is essentially any kind of |
1389s | method that attempts to generate the |
1391s | image to the right which is something |
1393s | that just represents the actual physical |
1395s | shape of this triangle much more |
1397s | accurately but aing doesn't just happen |
1400s | at the edge of triangles uh it also |
1401s | happens it can also happen in the middle |
1403s | of triangles uh such as in the case of |
1405s | these specular highlights uh so what's |
1408s | happening here is that the the |
1409s | highlights on this hole here is uh they |
1412s | are very very thin and therefore it's |
1414s | essentially completely random if just a |
1416s | row of pixel centers happens to kind of |
1419s | randomly end up on this reflection and |
1421s | when they do they pop into existence and |
1423s | then briefly disappear again uh whenever |
1425s | the camera moves uh so it's essentially |
1428s | a problem of details that are smaller |
1429s | than a pixel that we can't capture with |
1431s | this uh one of the most naive and |
1434s | simplest uh approaches to anti-aliasing |
1437s | is super sampling it's a very simple |
1439s | idea uh instead of doing a single sample |
1442s | at the center of each pixel we simply do |
1444s | multiple samples uh it's effectively the |
1446s | same as just rendering at a higher |
1448s | resolution then at the end uh we kind of |
1450s | just average together all of the samples |
1452s | inside of a pixel which again |
1454s | effectively the same as of scaling the |
1455s | image down again um this is really |
1458s | really effective uh but it also is |
1460s | really expensive uh if we're doing four |
1462s | samples for each pixel for example |
1464s | that's four times the amount of shading |
1465s | work and lighting all that good all that |
1467s | good stuff um top of that we need four |
1469s | times the amount of memory to store all |
1470s | these samples and we also need four |
1472s | times the amount of bandwidth to read |
1473s | and write these samples so 1080p |
1476s | effectively becomes 4K 4K effectively |
1478s | becomes 8K everything just becomes so |
1480s | much worse but it is really really |
1484s | effective uh you can see the comparison |
1486s | here uh to the left we have no anti- |
1488s | lasing and to the right we have four |
1489s | time super sampling as you can see all |
1491s | of this ugly shimmering and like all |
1493s | this distracting shimmering is |
1494s | completely gone it looks absolutely |
1497s | amazing unfortunately because it's so |
1499s | expensive uh Eve has so far been forced |
1501s | to rely on something called multi |
1503s | sampling so multi sampling is uh an |
1506s | optimization of super sampling that |
1507s | essentially only tries to Super sample |
1509s | the triangle |
1510s | edges um so we're still only shading |
1514s | once per pixel uh but we actually choose |
1516s | which samples to actually write to uh we |
1519s | write the same color to all of the |
1520s | samples that are covered by the triangle |
1522s | you still need to pay for the memory and |
1524s | the bandwidth cost uh but the shading |
1526s | shading cost increase is ENT essentially |
1528s | negligible and that's where the the bulk |
1530s | of the cost comes the big drawback of |
1533s | this is of course there's no anti- eling |
1535s | for the shading in that case so if we |
1537s | again look at this shimmering image here |
1540s | the only thing that multi sampling |
1541s | really fixes is that top Jagged Edge |
1544s | like that staircase pattern on the edge |
1545s | of that that uh the H there you're not |
1548s | going to see any any kind of impact at |
1550s | all on the shimmering inside of |
1553s | triangles it would be really really nice |
1555s | if we could afford super sampling but we |
1557s | can't |
1559s | but what if we just we do we still do |
1560s | one sample per pixel but we kind of |
1563s | start moving it around inside of the |
1565s | inside of the pixel so we do a different |
1567s | Center every frame and then we kind of |
1569s | just add them all up at the end well |
1572s | that's the the foundational idea behind |
1574s | behind temporal |
1576s | anti-aliasing the idea is basically that |
1577s | you spread these samples out over time |
1580s | uh you do one sample per pixel but a |
1582s | different sample every frame uh the idea |
1585s | then is to blend it all together really |
1586s | carefully to get the effect the result |
1588s | of four time super sampling uh it's |
1591s | really effective and it's actually even |
1593s | faster than four times super sampling uh |
1596s | sorry four times multi sampling simply |
1598s | because we only need one sample per |
1599s | pixel just like when we have no |
1601s | anti-aliasing at all uh but you do need |
1603s | to be really really careful when doing |
1605s | this uh if you end up blending uh when |
1607s | you're not supposed to you can get |
1609s | blurriness you can get ghosting or you |
1611s | can see parts of the previous frame |
1613s | looks very terrible uh and if you and in |
1616s | fact if you blend too little you also |
1617s | get get problems you can't just disable |
1619s | the blending completely because then you |
1621s | will suddenly start to be able to see |
1623s | this kind of jittering motion around as |
1625s | you you switch you move where the pixel |
1626s | Center |
1627s | occurs and uh to take an actual visual |
1630s | example of this here's a very sumed |
1632s | image of an anger hanger you can see |
1634s | that it's very pixelated and you can |
1636s | also see that it has this these ugly |
1637s | staircase patterns everywhere uh this |
1640s | looks even worse in motion where you |
1641s | will have a lot of shimmering effects uh |
1644s | as this moves so when we apply temporal |
1647s | anti-al we will first start to uh uh |
1650s | sharpen the image as much as we can and |
1653s | then start kind of moving it around a |
1654s | little |
1655s | bit um and all of these images are |
1659s | slightly different so when we add them |
1660s | all together we end up with this really |
1663s | really nice and smooth result we still |
1665s | have all of the sharpness of the texture |
1667s | detail all of that good stuff but we |
1669s | have managed to eliminate the uh the uh |
1671s | staircase patterns and and on top of |
1674s | that it's much much more stable under |
1675s | motion looks very very good |
1678s | um but can we actually take this |
1680s | approach even further and it turns out |
1682s | that we can it's called temporal |
1684s | upscaling um the idea is to start at an |
1687s | even lower resolution we don't actually |
1689s | start at the full resolution uh you you |
1691s | can imagine moving this single sample |
1693s | that we have around in a in a 2X two |
1695s | area instead so over four pixels instead |
1698s | uh we then temporarily upscale this |
1700s | beyond the full resolution to again get |
1702s | this kind of super sampling effect uh |
1705s | and then scale it back down to full |
1706s | resolution while what your monor has and |
1709s | this works it works really well uh but |
1711s | it is even more challenging uh any kind |
1713s | of issues that you would normally have |
1715s | with temporal anti-aliasing uh such as |
1717s | uh flickering or uh blurriness or |
1720s | ghosting just becomes so much more |
1722s | obvious uh when you're doing when you're |
1724s | when you're kind of blowing it up to |
1725s | twice the size basically fortunately |
1728s | this isn't a problem that we really have |
1729s | to solve ourselves uh there are numerous |
1731s | temporal upscaling or at least only at |
1734s | least temporal upscaling functions uh uh |
1737s | algorithm that already exist and we are |
1740s | planning on supporting pretty much all |
1741s | of them so that you can pick the best |
1743s | solution for your specific graphics card |
1745s | uh we will we will be supporting AMD FSR |
1747s | 3 we will be supporting Nvidia dlss 3.5 |
1751s | Intel Intel's xcss as well as metal FX |
1754s | upscaling on Mac so that kind of uh |
1758s | makes sure that even as we're adding all |
1760s | of these new features even on weer |
1762s | graphics cards you will you will be able |
1763s | to enable these new goodies with a |
1765s | minimal loss in in image quality from |
1767s | the upsale |
1769s | but uh your GPU isn't the only thing |
1771s | that's kind of struggling um what about |
1774s | the CPU well um the the the GPU and the |
1778s | CPU have a very interesting |
1780s | relationship uh they're essentially two |
1783s | completely separate processors that |
1785s | coexist inside of your computer and it |
1787s | kind of works the way that the the CPU |
1789s | sends commands to the GPU and tells us |
1791s | what to do and in some cases we can |
1793s | actually end up with a case where the |
1795s | CPU simply doesn't have the time to |
1796s | generate enough commands for for the GPU |
1798s | and the GPU will just sit idle and not |
1801s | have anything to do and that's where our |
1803s | GPU driven pipeline project comes into |
1806s | play uh it's quite a quite a bit of a |
1809s | complex topic so we will need to take a |
1811s | deep dive into into how this |
1812s | relationship between the CPU and the GPU |
1814s | work so to understand this let's have a |
1817s | look at the Timeline where we can see |
1818s | what the CPU and the GPU are up to at |
1820s | any given time when rendering a frame so |
1823s | the CPU is of course responsible for a |
1824s | lot of different things it's not just |
1826s | responsible for graphics |
1828s | uh things like physics uh networking uh |
1831s | Network code uh as well as the user |
1834s | interface all this kind of good stuff in |
1835s | a lot of other things this is a bit |
1838s | outside of my area I work with the |
1839s | graphics so I'm just going to group all |
1841s | of these up into this big block and call |
1842s | it |
1843s | gameplay uh but at some point the carbon |
1846s | engine uh will have processed all of the |
1848s | other subsystems and it's now time to uh |
1851s | start rendering something and at that |
1853s | point it will gather up a bunch of |
1854s | commands and it will kind of send them |
1856s | off to the GPU |
1858s | and the GPU will then start processing |
1860s | this and rendering that frame but the |
1862s | CPU doesn't just sit idle as it waits |
1864s | for this to to complete no it will |
1866s | immediately move on to the next frame uh |
1868s | and the frame after that once once |
1870s | that's done and in this case uh this |
1872s | works really really well uh the CPU even |
1875s | has a little bit of breathing time and |
1877s | the GPU is is taxed to its full capacity |
1879s | it's working 100% of the time but there |
1882s | are cases in Eve uh quite a few cases |
1885s | where this is not the case where this |
1887s | submitting of the Gathering up all of |
1889s | these commands and submitting them to |
1891s | the GPU actually takes longer than it |
1893s | takes for the GPU to render them uh and |
1896s | this can happen simply because of |
1898s | massive Fleet battles or a huge amount |
1900s | of detail and it also depends on your |
1902s | your your specific Hardware like the |
1904s | relative power of your CPU and the |
1907s | GPU um and in this case well we're |
1909s | wasting a lot of time on the GPU uh the |
1911s | GPU is essentially sitting idle for a |
1913s | very large amount of time uh and we |
1915s | could in theory push the GPU to render |
1918s | maybe maybe for maybe twice as many |
1920s | frames per second in this |
1921s | case um but to understand why this |
1924s | happens we need to look into what's what |
1926s | actually happens in this submit block to |
1928s | make it make it so expensive uh and to |
1930s | do that we need to figure out how we're |
1932s | rendering a single specific like a |
1934s | single Eve ship like a single ship in |
1936s | the in the universe of Eve so I present |
1938s | to you an eve ship I promise this is |
1942s | definitely a ship uh like a like a real |
1945s | Eve ship it has a mesh which is |
1946s | determined by the ship shape here it |
1948s | also has a Shader which is determined by |
1950s | the color here and it also has a |
1951s | material which is represented by the the |
1953s | texture applied to this uh so to render |
1956s | the ship uh we actually need to submit |
1958s | four separate commands to the GPU we |
1961s | need to set which color we want to |
1962s | render it with we need to set set the |
1964s | shape that we want to render and then we |
1965s | need to set the texture and once those |
1967s | are done we can submit what's called a |
1969s | draw call which is essentially a command |
1972s | that says yeah Draw Something using the |
1974s | previously said |
1975s | stuff uh and if we only we were only |
1978s | rendering one ship uh this would not be |
1980s | a problem whatsoever this is just four |
1982s | commands problem is Eve has a lot of |
1984s | ships some might even say dozens of |
1986s | times um so we need to we need to really |
1989s | be able to render this many many things |
1992s | and well the first thing we're going to |
1993s | do we're program I'm a program at least |
1995s | I love lists I'm going to move them all |
1997s | into a list uh this will make it much |
1999s | easier to work with and once they're all |
2001s | in the list well it isn't that difficult |
2003s | to just kind of do a naive Loop over |
2005s | this and render them we'll just go |
2006s | through all of the ships that we to |
2007s | render we'll set the color we'll set the |
2009s | shape we'll set the texture and issue a |
2011s | draw call uh there's actually 100 uh |
2014s | ships in this in this image or in the |
2016s | scene so uh we will end up with a total |
2018s | total of four four four times 100 |
2020s | commands which is 400 very simple um |
2024s | however this is not the most efficient |
2026s | way of doing this we are actually |
2027s | switching between the same colors |
2029s | multiple times for example so we can |
2031s | actually eliminate a bunch of commands |
2033s | uh by kind of just reorganizing this |
2034s | data if we move this down here and then |
2037s | we make new lists we make one list for |
2039s | each color and then we kind of just take |
2041s | all of these ships we go through them |
2043s | and we sort them into their Rel into |
2045s | into the color we sort them based on the |
2047s | color that they have and put them in the |
2048s | corresponding list well it turns out |
2050s | that we can render these lists much much |
2052s | more efficiently now we no longer need |
2054s | to switch the color for every ship we |
2055s | can just set the color once and then |
2057s | render all of the ships that use that |
2059s | color and the end result is that we |
2061s | eliminate almost 25% of our commands and |
2064s | we can actually take this one step |
2065s | further uh we can start sorting Things |
2066s | based on shape they're they're using as |
2068s | well um and that that will allow us to |
2071s | to eliminate even more draw calls uh in |
2073s | in fact we can we we no longer need to |
2075s | change the shape as often now so we've |
2077s | even though we're rendering the exact |
2078s | same pixels on the screen the exact same |
2080s | triangles we are now doing it with |
2082s | almost uh like by we we sorry we are now |
2086s | doing it with with almost half the the |
2088s | the draw calls of what we were doing |
2090s | before uh and this process of kind of |
2092s | just reorganizing the data to to render |
2095s | it more efficiently is called batching |
2097s | and it's it's a very important thing so |
2099s | yeah uh problem solved right let's see |
2102s | what what happens with our timeline well |
2104s | our submit block is not really really |
2106s | tiny the problem is that now we have a |
2108s | baching block instead and that it turns |
2111s | out that just reshuffling all of this |
2112s | data and taking care of it is really |
2114s | expensive as |
2115s | well what if we just kind of take this |
2118s | original list of ships I we just ye it |
2121s | directly at the GPU with no regards for |
2122s | its safety we we just don't care and we |
2125s | kind of just let it figure it all out |
2126s | for itself |
2128s | that is what the GPU driven pipeline is |
2130s | all about uh so it turns out that gpus |
2133s | nowadays are really really flexible they |
2135s | can actually generate commands for |
2137s | themselves uh they don't need a CPU to |
2139s | tell them what to do anymore so we can |
2142s | actually have the GPU do dispatching for |
2144s | us and the best part of this well one of |
2146s | the good parts at least is that it's |
2148s | even faster than the CPU at doing it um |
2151s | the actual best part is that there's |
2153s | minimal CPU involvement uh the CPU is |
2155s | now free to do other things while the |
2156s | GPU keeps itself busy so if we look at |
2160s | our rendering Loop that we had before we |
2161s | can kind of eliminate everything inside |
2163s | of that Loop there and basically is set |
2166s | the colar and then tell the GPU to do |
2168s | its thing and we eliminate more than 90% |
2170s | of the the CPU side draw calls and |
2172s | commands that need to be sent there |
2174s | while the GPU still gets to execute all |
2176s | of those 200 plus draw calls that we had |
2179s | before but it's fine because the GPU was |
2181s | already not being taxed at full capacity |
2183s | so that that's all good and what happens |
2186s | to our timeline well we used to have |
2187s | this batching block that was on the CPU |
2189s | timeline that just magically moves down |
2191s | to the to the gpus timeline and in fact |
2194s | the batching block is actually |
2195s | significantly smaller than this this is |
2197s | just the smallest block I could get in |
2198s | that could still fit the word |
2201s | batching um so what is this ultimately |
2203s | mean for Eve well it's a complete |
2205s | restructuring of how things are rendered |
2207s | inside of Trinity uh it's a lot of work |
2210s | there's essentially no Shader that's |
2211s | going to come out UNSC UNSC by these |
2214s | changes uh it's a lot of work but but |
2217s | once it's done we are confident that we |
2219s | will be able to have a lot more objects |
2221s | on screen and we can really get let our |
2223s | artists go crazy with this and also more |
2225s | variation inside of those objects we no |
2227s | longer need to have copies of the same |
2229s | objects to make sure that it works well |
2230s | with with batching or something like |
2231s | that we can just have more unique |
2233s | objects and let the artists the artists |
2235s | just get more free hands but the best |
2237s | part about this is just that it frees up |
2239s | the CPU for game logic it means that the |
2242s | entire Graphics Engineers kind of moves |
2244s | out of the way of all the other systems |
2246s | that also required the CPU time which |
2248s | will for example uh enable for the new |
2251s | physics improvements uh that uh CCP |
2253s | tuxford was talking about |
2255s | before but then the big question is |
2258s | when and well CCP verdicts already |
2261s | spoiled this early |
2263s | 2024 uh we are we are uh we want to get |
2266s | all of these improvements uh including |
2268s | um the upscaling uh the rate tracing as |
2272s | well as the GPU driven pipeline done in |
2274s | early |
2275s | 2024 that leads me to my final question |
2278s | how do artists actually work with all of |
2281s | this new stuff that we're giving them |
2283s | and that's where I hand over to CCP |
2296s | Amino thank |
2302s | you |
2306s | hello |
2308s | so my name is CCP Amino I'm a tools |
2311s | developer with CCP and so our job is to |
2315s | try and take the power that carbon |
2317s | brings to our game and put it in a |
2319s | package that will allow artists and |
2321s | designers to leverage that to build |
2323s | great experiences for |
2324s | you so with the big investment in carbon |
2328s | we've also been making a big investment |
2329s | in these tools and I would like to |
2331s | introduce you to our new very internal |
2333s | only tool |
2336s | graphite |
2338s | so |
2339s | graphite is a sort of editor for |
2342s | everything you might want to do in the |
2343s | engine whether you're making a new ship |
2345s | scanning an old one building a whole new |
2348s | scene for you guys to explore in new |
2351s | Eden or even badly trying to make a |
2354s | trailer like I am |
2355s | here you can basically use it to |
2358s | Leverage The Power of carbon in order to |
2361s | build all of the experiences that we |
2363s | want to deliver to you in the game and |
2365s | we've been working on this for quite a |
2366s | while we've actually started from the |
2368s | the ground up with the UI here we've |
2370s | been trying to modernize our tools |
2372s | internally overall try and bring all of |
2374s | the capabilities of carbon together |
2376s | under one tool set and Empower our |
2379s | artists and designers to deliver bigger |
2381s | and Bolder |
2382s | experiences leveraging all of the new |
2385s | benefits with the new |
2386s | engine some of the improvements we've |
2388s | making are actually just really |
2390s | simple in some cases it's just about |
2392s | taking a system we already have fitting |
2394s | a turret to a ship and shooting another |
2396s | one making it explode making that feel a |
2398s | little bit more in our tool set like it |
2400s | does in the game the important part here |
2402s | is having artist being able to use this |
2405s | like they're going to like you're going |
2407s | to experience it will allow them to |
2409s | hopefully build a higher quality version |
2411s | of that turret something feels better to |
2413s | use is more fun to play with and they'll |
2416s | be able to get that experience a lot |
2417s | earlier in their development |
2420s | cycle in some cases it's about bringing |
2422s | tools |
2424s | home when it comes to doing things like |
2426s | defining Collision geometry we've |
2428s | historically leveraged third party tools |
2431s | have artists work in there build the |
2433s | kind of data that we need for carbon to |
2434s | consume in order to do uh the Collision |
2437s | work and that's a quite a a long- windy |
2441s | pipeline the artists will spend a lot of |
2443s | time and in this third party tool be |
2444s | Maya or blender try and author this data |
2447s | and then they've got to go through the |
2448s | process of getting it into the engine to |
2450s | see if it works see if it plays nicely |
2453s | to see if they've introduced some really |
2454s | weird bug where you get stuck in the |
2456s | middle of a station |
2457s | so by bringing these things all Under |
2459s | One Roof and bringing them home we plan |
2462s | to uh leverage this to deliver higher |
2465s | quality to you in the game |
2469s | experience in some cases we're actually |
2472s | looking to improve our developers |
2473s | experience as |
2475s | well many of the places they'll spend a |
2478s | lot of time doing things like crafting a |
2480s | beautiful scene for you to |
2483s | explore they want to visually tell a |
2485s | story use their art assets and show them |
2487s | off to build big cool things for you to |
2489s | discover and enjoy and we want them to |
2492s | spend more of their time expressing |
2495s | themselves and designing what they want |
2497s | to deliver at the end rather than |
2499s | spending time fighting against the |
2500s | engine and the tools that they have at |
2501s | their fingertips so we put a lot of time |
2504s | and effort into leveraging some of the |
2506s | performance benefits that come with |
2508s | carbon to give them a much nicer overall |
2510s | experience smoother prettier UI make it |
2513s | a little bit more functional make it a |
2514s | little bit more adaptive make it feel |
2516s | good |
2517s | if it's a pleasure for them to work |
2520s | with then hopefully they will deliver |
2522s | something very pleasurable for you in |
2524s | the |
2525s | end in some cases we are actually trying |
2528s | to make use of and Leverage The Power of |
2531s | some third party tools you have seen a |
2533s | lot of uh the new Cloud Tech being |
2535s | used this technology is uh authored by |
2538s | artist in something called Ember |
2541s | genen and that tool will spit out data |
2543s | that carbon can consume and we can put |
2545s | in the game |
2547s | before we can actually get it into the |
2549s | game there's a lot of other little |
2550s | things that go into a little bit of |
2551s | overhead and ultimately they end up |
2554s | working heavily in isolation inside of a |
2556s | tools set outside of our ecosystem |
2558s | crafting those |
2560s | clouds so what we're trying to do here |
2562s | with uh graphite is make sure that they |
2564s | have as smooth and as fast a pipeline so |
2567s | when they're using these third party |
2568s | tools to build big new clouds we are |
2571s | very quickly getting them into the |
2572s | engine in this case preferably almost |
2575s | instantly they make make a change in |
2577s | Amber gen and we want them to instantly |
2578s | see that in graphite but along with that |
2581s | by having all of our tools under one |
2583s | place having the tools that they use to |
2585s | author scenes this allows them to see |
2587s | not only their Cloud very quickly in |
2589s | engine and see what that's going to look |
2590s | like but see it in the kind of place |
2591s | that they're going to use it allowing |
2593s | them to craft more bespoke assets that |
2596s | fit the scene and better tell the story |
2599s | or better describe the experience that |
2600s | they want to give |
2604s | you in some cases we're leveraging whole |
2606s | new |
2607s | capabilities so carbon brings a lot of |
2610s | benefits in terms of new |
2613s | performance um better options and this |
2615s | provides new opportunities for designers |
2617s | and artists to take advantage of every |
2620s | time we save a couple of frames in the |
2622s | engine maybe that means explosions can |
2624s | be bigger maybe that means scenes can be |
2626s | more complex there's less restrictions |
2628s | on the work that they |
2630s | do and so this is quite an experimental |
2633s | feature for us but we're trying to |
2635s | Leverage The Power of third party Tools |
2637s | in this case blender again with a really |
2639s | direct pipeline so the artist can work |
2642s | in blender and craft very large assets |
2646s | hit one button and see it very quickly |
2647s | ported straight into the game try it out |
2650s | how does it feel to fly around how does |
2651s | it feel to bump into it how does it |
2654s | look and by giving them this pipeline |
2657s | plan is to allow them again very early |
2659s | and very experimental allow them the |
2661s | power to build much bigger and grander |
2664s | experiences overall and delivered to you |
2667s | the best possible experience that they |
2669s | can manage to make Eve awesome |
2673s | forever thank you very |
2684s | much so if you have any questions you |
2687s | find many of us around we're all very |
2688s | friendly come and say hi have a chat |
2690s | we'll happily talk your ear off for |
2691s | hours about all of this stuff uh but we |
2694s | also have a panel on the second floor so |
2696s | if you're in the mood we'd love to see |
2698s | you there at 1:30 thank |
2705s | you |