Unreal Insights | Live from HQ | Inside Unreal

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
>>Amanda: Hey folks, we hope you've had a splendid week. In case you haven't heard, it is the five-year anniversary of our Marketplace. To celebrate, get up to 50% off over 4,000 products before September 3rd. Thank you to all of our wonderful Marketplace creators, old and new. Speaking of the Marketplace, it's your last chance to grab August's feature-free content including animation sets, magical combat systems, landscapes, footstep sounds, and a versatile VFX system are still available through the 31st. Don't miss out. Panache Digital Games recently released the highly ambitious open-world title Ancestors: The Humankind Odyssey, which charts the evolution of human history across 8 million years. We caught up with the Montreal based team to see how they're reaching for AAA quality as an indie developer, balancing making a game that is both historically accurate and fun, as well as how they designed a gameplay experience with no predetermined narrative. In the interview, they also provide tips to developers who are thinking of starting their own studio. In an attempt to refine their craft, Supermassive Games set out to create the Dark Pictures Anthology as a collection of horror games that tackle different genre archetypes. Building on their experience with Until Dawn, the studio incorporated both couch and online co-op modes for Man of Medan. Learn how they overcame difficult challenges to design the game's online co-op, which is designed to sync between two players free to explore divergent paths. Plus read about how Man of Medan has been designed with replayability in mind making the game the studio's biggest branching game yet. Now onto our weekly Karma earners. Many thanks to ClockworkOcean, Shadowriver, MacGowss, Max Payne_, mightyenigma, PAVI_PAVI, T_Sumisaki, HarryHighDef. IndieGameCove, and MCX292. Thank you so much for helping out on AnswerHub. First up on this week's community spotlight is Lea Kronenberger's winning entry for "The Legend of King Arthur" ArtStation challenge. Here we have Merlin's Cave. It's a gorgeous scene and you can get a full scene breakdown on their challenge blog. Built entirely using Blueprints by two developers, "We Ride" aims to find the sweet spot between early and modern MMORPGs. We Ride is one of the first MMOs to be developed and funded as part of a three-year research project, allowing the team to explore unique features and mechanics. Last up we'd like to highlight an Asset Cleaner tool created using the Editor Utility Widgets. This tool scans all the Assets in your project and lists the unused ones. This is super helpful to help reduce project and binary size after all your iterations, check it out on our forums. Thanks for joining us for this week's news and community spotlight. >>Victor: Hey everyone and welcome to the Unreal Engine livestream. I'm your host Victor Brodin and with me today to talk about Unreal Insights, our new performance and profiling tool, I have invited Stefan Boberg, our Engineering Director for Foundation calling in from Stockholm, Sweden, and Ionut Matasaru, our Senior Engine Programmer from Romania. Right? >>Ionut: Yeah. >>Victor: That is correct. To start off with this, since I don't know much about the tool, we're going to have Stefan walk us through a little bit of his slide deck that he is prepared for us to give us a little bit of an introduction to what Unreal Insights has to offer. >>Stefan: Alright. Should we get started? >>Victor: Let's see, I'm not sure we have audio. >>Stefan: Can you hear me? Can you hear me OK? >>Victor: I can't, sorry, I don't have any audio in my ear. Just trying to make sure that I can hear everyone I'm talking to. >>Stefan: Do you have audio now? >>Victor: It'll be just a moment. There we go. I can hear you now Stefan. >>Stefan: You can hear me? >>Victor: Yes. >>Stefan: Excellent. I'm the Engineering Director for the Core and the Foundation teams and I'm based in Stockholm. I'm going to start this show by just giving a quick overview of the work we've done. Kind of why we did it and just some super high-level information about how it works. And then Ionut will do the more interesting stuff, which is to show off how it actually works in practice. Just a quick background story. I'm relatively new to Unreal. I started at Epic at the beginning of last year and it's a huge code base and so when you start investigating how to solve different problems, you get a lot of questions. In our case, one of our main focuses right now is to optimize loading performance. Digging into that, how that worked, how the cooker works, which is another area that our team owns, and more precisely, where are we spending time during loading and well, how does everything work in Unreal. Some of these questions are slightly difficult to answer because it's very non-visual stuff that's happening. It is very internal to the Engine. We have some tools already that provide some answers and there are external tools that can also help understand what is happening in the Engine. But we felt like there was an opportunity for us to improve how this works and to help us expose just more information mostly for ourselves to help us do our work, but it's also a great opportunity to share these tools, make them really good and share them back to the community to help everyone understand better what's happening, hence insights. We want to give you insights. Super high-level goals is just like I said earlier, we want to reveal more of the internals to the users. It's not just intended to be for performance and profiling, it's really designed to expose all kinds of information to the user, but the initial focus is performance. Our intended audience, especially now is quite technical users. Primarily the programmers, I would say, though others, very technical users could probably find them helpful. A really huge goal for us is to provide really high-quality interactive tooling to give you really responsive, good feedback; respond quickly. Actually, our target, just like with games we want to have a super high frame rate. Our target with the tool is to give you 60 FPS if you have a good enough computer; give you a 60 FPS interactive experience and also enable scaling really large data sets. This is something we've experienced in the past. It is when we look at something that's taking minutes, tools might be okay, but then when you start looking at tens of minutes or hours even when you look at a long running process, then they can start to struggle. This is another thing that we really want to accomplish. The other thing is that we don't want to just do something hard coded that only solves one problem. A big part of this is also just making sure we have foundations for the rest of the Engine team to extend this tool to provide more information to allow you to understand what's happening. Another thing which is probably more interesting to larger game studios and larger AAA titles is to label offline analysis, which is really common, to do reporting and tracking performance over time, things like that. In 4.23, we have the first release, it's a beta. It's a result of basically three months’ work of Ionut's and then a bit more time for some of the others but we only had time to add CPU timing information and we have log output, you'll see this later, and then an experimental Asset loading panel, which we have used internally to drive our optimization work. We currently support in 4.23 we support Windows, Linux and consoles for tracing. The tools that you are looking at, they are programs you're investigating can run on these targets right now, and the tool itself is currently only really tested extensively on Windows but the goal of course is to support all targets for both of these. All desktop targets for the tool, all our supported runtime targets for tracing. You can also run the tools with any Unreal program. It's not just for a game. Some tools are heavily focusing on how concepts of frames and other things that mean that they don't tend to work very well for other things, for example, the Editor. Another thing which is different compared to other tools that we have in the Engine is that with Insights, you can actually look at the startup of the game, for example, to see what's taking time there. You can also analyze the cooker and the server for example to investigate performance. We are internally doing just that. It's super high level. I want to explain just roughly how it works so you'll have an idea when you see the tool later. You'll have your game or your program running. This Jared's events so code is just instrumented to Jared the batch of events that we send over the network to a recording application, which is currently embedded in the tool, and this records the information to files so you can look at them later but you can also look at them live. You can use this tool that you'll see to investigate and look at the information in these traces. You can also run batch tools to generate reports, et cetera. It's super easy if you have a bit of code that you want to add. Your own code for example, that you want to investigate. It's quite easy just add a scope macro, which is obviously covered in the documentation. We also cover existing instrumentation. The classic stats annotations that we have in the Engine also work. You can always add bookmarks for making it easier to find things on the timeline and Ionut will show that later. Actually, right now that's it. Hopefully it gives you a quick overview of what we're looking at and how that works. >>Victor:: Yeah, it's exciting. Let's see Ionut if you're able to take over the screen share. >>Ionut: Yup. Okay, let's do that. It's okay? The screen is showing? It should be a black screen. Before launching Unreal Insights, I want to tell that in 4.23 Unreal Insights will come prebuilt. It's a standalone application. You'll find it in a binary folder and just easy as double-clicking on running UnrealInsights.exe. If you have a Unreal Insights and you want to compile it from source or as a project in Unreal Insights, you'll find it in programs just compile it from Visual Studio and run it. >>Victor: One moment there, I think we had a small screen share chat hiccup. Let's see here. That call dropped. This will take just a moment and we will be able to get Ionut's screen back up on our screen so that we can all see what you are actually doing over there. Should just take a moment. Yes, we've connected and I think we are almost back. Let me make sure I get this over to the right window and we are good. Alright. >>Ionut: Okay. I will start from Unreal Insights. When you open, you'll see the start page. The start page we have the list of trace sessions that Unreal Insights knows about. Each trace session corresponds to Unreal recorded trace file that is located in local session directory. I can browse the folders to see the files, that will be easy if you want to manage yourself the files cleanup or do all traces or share it with someone else. To open analysis for a certain trace file, just as easy as selecting and opening the session, I will not do this right now, or double clicking on the trace session. You can also load an AVA file if it is located in AVA folder. Before showing the actual analysis, I will show how you'll create one of the trace sessions. For that I will start the Editor. It will take a few seconds to start. You will see that a new trace session has appeared and it is live so it is producing events right now. Start it and loading InfiltratorDemo project. A new session is created in just a few seconds. We now have the Editor open. What I want to ensure is I would want to play InfiltratorDemo in my standalone application. What I want to do is to be able to capture performance timing events. For that I will need to specify one command line. I'll show you immediately. I'll go to settings, and CPU profiler trace is a command line that I will need to specify. Enabling that will allow tracing to trace all timing information. I will also specify load time in trace. This is for Asset loading events. I will show more about later but what is important is that now if you want timing information, you need to specify that. In the future, we want to get rid of the need of specifying in command line and to be able to control those events, to turn on and off these kinds of events live directly from UI. I have that specified and I'm starting InfiltratorDemos a stand-alone game. You will see in the actual session for InfiltratorDemo is the [inaudible] one. The other ones are still producing events and Unreal Insights is recording those sessions as well. I'm starting the Demo; Demo will play in the background. What I'll do, I will actually open analysis in real time, so that will produce events. I will go more into details of what you are seeing here immediately after. Just to know that here it's duration of frames. So, you'll see frame durations. What I will do, I will try to pull the game loop just by moving the window a little bit. That will create a frame-- because my main loop is paused, it will create a longer frame. And you see that spike here. I'll do that again. I'll pause, when I release it, you'll see again a spike here. I'll close it now. You see the two pause that I made and at the end some exit events. I could close also the other ones and you see that now the sessions are closed and I'll continue analysis for the session that I just created. First as an overview, we have a timing view that will show timers per thread for each thread. We have on the right a list of all the timers and we've aggregated statistics. We have on top the frames with duration for both the game and rendering frames and on the bottom, we have a log view. I will show more details first about the log view. Alright. Basic functionality, log view is similar with the one from Editor. Up here, you'll be able to filter by text. You can filter by categories. For example, I could hide all categories and enable only one of them, like that. Or you can filter by threshold. That is a bit different than filtering in the Editor because that is an actual threshold. If you specify, I want only from warning it will disable verbosities lower in priority than that and to enable all the ones above that priority. That will show warning and after, I don't have any, so that is good. Then I don't know if you noticed when I click, when I selected one message the view has tried to center on that time of the respective log message. In this case this bookmark. Because I see that bookmark and Stefan also mentioned the trace bookmark macro. These bookmarks are not actual category filter. Low categories are generated by their respective trace macro. Those are used in timing view to have an orientation over the bigger picture of the session. So, if you see those vertical lines, those corresponds all to-- each one corresponds to a bookmark. When I selected one, I had this one. I'm assuming, again, if I go to the next one you see, if I just continue selection, you see that the marker will move to the time of the respective message. Another thing that I can do is to make a selection. If I'm selecting one message and then keeping shift pressed and selecting another message, the entire time between first and second click will be selected. I'll be selecting from time here, from time here, and that would be correlated to selection here, Coming back on bookmarks, again, you'll see, just zooming out to see a lot of bookmarks. If that will be too noisy, you can collapse the bookmarks by clicking on the bookmarks header or by double-clicking any bookmark track. You can also enable, instead of showing all your bookmarks, to show the markers for all the logs. That is currently available as a shortcut. B will control the bookmarks and M will control all the logs. Now you can see all the logs that are available in the session will be also used as markers. That will be more useful when you zoom in and you want more context information for timing events. Coming back to bookmarks. I will just minimize the log view. Now more about the timing view. First, each track that you'll see here that show an icicle graphs represents a CPU thread. The timing view is not limited to CPU threads, but in this view currently all tracks are CPU threads, You'll see the hierarchy of the timing event. As an obligation, just navigate to panning it around you just click of a mouse and dragging the window. You'll see that it is very responsive. To zoom in and zoom out, I'm just using scroll wheel on the mouse. You can have an overview of maybe you can have a one-hour session, you can see that. And then you can zoom in and go to things that are probably nanoseconds in time or even smaller. In order to easily navigate between a lot of information because sometimes you could have hundreds of threads. In this case are probably are not too many, but you could have much more than that. We have a way to turn off visibility for tracks. First you can enable-disable all tracks at once and then you can enable only groups of tracks based on thread groups, on CPU thread groups. I can for example, enable only the render threads and game thread. Another thing that if you notice, when timing events are going out of the view, the scope will try to collapse so we'll use the space as best as possible. For example, here we have a lot of space. When I'm moving that around, you'll see that those will come together. You'll always have information in context and close to one to another. If you don't want tracks to be hidden when they don't have an event, you can disable that, so that we'll see that there are additional threads in my filter, but at this zoom level, you don't have any timing events and those should increase in size once the events are up here. I'm just hiding that. When you hover the mouse over a timing event, just like that, you see basic information like inclusive time, which is the duration of the timing event and the exclusive time. So, it's time minus duration of the children events. You can also select the timing event. When you select it, it will start to flash. Once you select it, you can use a keyboard to navigate between adjacent timing events. I'm pressing left, right, up, down arrow keys. When I press right, I just go to the next event. And you see those. Then there are a few smaller events here. If I press up, it will go to a parent event. If I press down, it will go to the largest child event to navigate between events. Because some events are larger, some are smaller. In order to keep focus on that you can press F key and that will frame the view to zoom around the respective event. So that is a long one. It will center and computate a zoom based on the size of the event. If I'm going to a smaller one and press F, now that smaller one is here. Another thing that you can do, once you have a timing event selected, you can press enter and that will select the time range corresponding to the respective timing event or you can just double click a timing event and it will do the same. A little bit about frames track. As I said earlier, the frames track shows duration of frames. Those are not on a timeline but on an index line so there are adjacent frames one near the other. You'll see like a bar graph. Each bar is a frame you see both render and game frames in an overlapping mode and when you hover mouse over them you can identify which is which. In this case the smaller one is render frame and the bigger one is game frame. You notice that some of the frames are highlighted with red. Those are highlighted based on duration. The ones that are bigger than 43 milliseconds or corresponding to less than 40 frames per seconds will be highlighted with red and between 40 and 60 frames per second should be highlighted with orange greenish color. So that will be easy to spot spikes or frames with large duration. This is useful to navigate if you need to identify one spike and go there. You can just click on that event and the time, click on that frame, and the time of the frame will be selected and the timing view will center on the respective time range. It's easy to navigate around, like clicking like that. This is the actual frame that I'm clicking. This is a larger pause that I made, nine seconds, and this should be the second pause that I made. There is also the white brackets. If you see here, the white brackets shows approximately how many frames you see in the timing view because I have different horizontal scales. Basically, all the frames from here are visible in all of this timing. When I'm scrolling right, you see that the brackets are moving. Okay, I showed that making a selection can be done by clicking on the frames here. You can select from the log; you can select by selecting the timing event and pressing enter or double-clicking timing event. You can also make a custom selection just by clicking and dragging on the time rulers. If I'm just doing that, we can make custom time range selections. If you are doing the same on the main view, it will make a panning of the view. The selecting is just clicking on an empty space. Every time a selection, a time selection is made, you'll see that aggregated statistics are updated automatically to include statistics only for timing events in the respective selection, Aggregated statistics that you'll see for each time or events, in the default view, you'll see total inclusive time and total exclusive time, which is obvious some of all the instances in selection. What is important is that if you have a selection that only partially intersects longer timing event, like in this case, this one, only the time range that is intersecting with the selection will be considered. In this case, this timing event has 14 seconds, but in the four seconds that I'm selecting is only having 2.3 seconds. That would be useful when you make selection for big events or if you just make ad hoc time range selection. What about the timers list? First you have that list of all the timers. You can sort by any of the aggregated statistics. By default, I'm sorting by inclusive time, but I could just sort by count; by how many instances are in the selection. Another useful thing to know is that statistics are also computed only for timing events that are filtered but I couldn't filter in the view. If you have the tracks hidden, it will not be considered. For example, if I'm just keeping only one track visible. Those stats will include only what is visible now. Will not include the information from other tracks or other CPU threads. This is in order to be able to focus on the threads that you want to investigate. If you want it to be included it's just as simple as you can keep everything visible. In this case, statistics will include timing information of all the timing events. Another thing to know is that we don't have only inclusive and exclusive we have more statistics. Both will be visible here. We have minimum, maximum, average, and median values for each inclusive and exclusive times. For example, I could reset the view to include the more stats. Again, you can sort by any of those columns. You can sort alphabetically; you can search by by world. Now I will want to show you something more about the navigation. I could hide the views; I will just keep timing information visible. So again, now I have all the tracks visible, I could just enable-- Okay, everything is visible. I have lots and lots of tracks. Again, it could be much more than that. One way to have a better overview over those is to press C key which will go in a Compact mode and then we can see things like that. You'll start to see patterns on execution of threads. You see that at some point, a lot of threads are, you can zoom in and see what's happening there, you can press C again and go in a more detailed view. You can do that at any point in time. So, expand, collapse the view. We tried to make navigation because we try to provide access to a lot of data. It could be millions and millions of small timing events. Our goal was to be able to navigate between high overview to something that is very small nanoseconds, very, very fast and very effective to be able to go there or where you want to go. What I'll show you a little bit about Asset loading. Asset loading, as Stefan said, was made more as an experiment or something to help us. It will show that in addition to threads, you could also have other kinds of information; other kind of tracks. In this case game thread is a CPU thread. It's the same CPU thread like the one here, but loading main thread here. It's a special track with special events related to Asset Loading. You'll see that when I hover the mouse over that I have completely different information. I have much more information related to Asset loading. If you make a selection, you can have some aggregated statistics related to, as the loading info. Again, that is just an experiment. We'll probably need to expose more in the future, but we'll show that we can correlate different kinds of information. We don't want to be only CPU timing events, if we have any kind of information that have a timestamp, we will be able in the future to correlate and to visualize in the same view. I think that's the most important things that I wanted to show you for the tool. And I think I can show also a glimpse of what we are working right now and things will come in future versions. >>Victor: That sounds good. There's quite a bit there to dig into. >>Stefan: One big thing there that is hopefully obvious is that one of the goals is to try and collect a lot of different information and allow you to look at it together. You could see a small glimpse of that there where you can see the loading information at the same time as some of the CPU information and the log. To be able to correlate different classes of information together, to be able to analyze problems. For example, when you have hitches, you can see, oh, it's loading a sub level and at the same time a bunch of other things happened and this is why I'm dropping frames in my game, for example. Yeah, and that's what we'll be looking at here as far as just an additional examples of that whole idea. Yeah, Ionut do you want to show the stats? >>Ionut: Yeah, this version is what we are working on right now, so that will not be in 4.23. You'll see that there are small UI improvements but what I want to show is that we have first stats counters. Stats counters are hooking to existing stats counters functionality from Unreal and are tracking variation over time of all those counters. I could make a selection just to compute. I will sort by count just to identify the one with-- And I will show that when you press G key, it will show a special track that is docked on top, but it is correlated to the timing view. By default, it shows frame information. It will show game and rendering frames. I could hide those because it’s not those I want to show and what I will show that every variation of stats counters could be graphed and could be correlated to with timing view so I will double click on that as buffer memory and you'll see we get the graph for that. I will show that. You'll see a graph that seems pretty simple, looks like a flat line or something that doesn't have a variation. I choose that just to showcase some of the features that I would just show not to-- The timer itself is not important. But when I start to zoom in, this graph will automatically zoom vertically in order to fit minimum and maximum value that is visible in the view. So, when I'm zooming in here, you'll see that things will start to zoom in. So now I'm starting to see more patterns here. You see that I'm zooming, it's still flat, but I'm zooming more, you'll see more patterns. Now I'm going to a frame level and you'll see a pattern that is correlated to its actual frames. Again, there are things that seem pretty flat, but when you zoom in, you'll see the pattern for them. That you can do with any timer that is available. I want to show an interesting variation. I will enable again the rendering frames and we have two spikes and I could look on what's happening in that spike. I see a frame that took 73 milliseconds. I see in the timing event that something related to garbage collection. So yeah, probably that was the reason. I see that these variations have a same pattern before and after and pretty the same view. I'm looking again on the second spike and now I'm seeing something interesting. I'm seeing a pattern before and seeing the pattern after. But I am seeing that during the spike, this vertex buffer memory has increased. So that one I could give the conclusion that it has something to do with how the spike itself caused the increase in memory. That is important because it's not a spike in that memory. That memory remains at that level after this frame spike. Again, that could be important or not. I am just trying to showcase things that you can investigate and things that could appear different patterns that could appear when you look on different stats counters. Another interesting stat that I want to show is in lights and you see that has a certain pattern. If you zoom in even more, you can see more details of what's happening there. You can correlate if you have more information, more timing events with what is happening with this counter. Why is it having these osculations. But more interesting is when I start to zoom out and you start to see patterns like that. So, it's not only, again, if you just see an overview, it looks pretty flat. But when you see it as this level, you already see the pattern. And it seems that it is something regularly with roughly a two second period. And again, it's something that you can find could be useful to know about those. But it will depend on what kind of stats you're looking on. But it's interesting to look on that. And again, you can do that with any kind of timers. And that's all that I want to show. >>Victor: That's great. >>Stefan: I guess there is some hints as well in the tabs, which I don't think you can click on, but to sort of highlight some of the other stuff that we're adding, which is additional views like for networking, to be able to look at server and client information about what they're receiving, to be able to investigate the network. Yeah, well what's going on the network stack and see what's being replicated and how big that becomes. And there are some hints about GPU, I think. When you look at some of the timing tracks, there's a GPU tab. That's something that is actually not in the release because there were some issues and we are on a tight schedule, so that is actually disabled in 4.23. But the goal is to include that as well on this timeline. >>Victor: Will Unreal Insights replace our current network profiling tool that also ships with the Engine. >>Stefan: The goal, I guess when you look at this, if you're familiar with the tools that exist, before this you'll see that some of this information already existed in a slightly different, well, set of tools. Our goal is not to just add to those, to add yet another one, the goal is to kind of converge and put all the information that makes sense into this framework instead. That's something that we're working on partially with the networking team for example. And yes, is the answer that the goal is to just have that here and ultimately deprecate the old one. >>Victor: That's great. >>Stefan: Same thing for the profiler. We want to just make sure we add all the functionality that already exists. For example, on the CPU timing, if we look at their existing profiler before this, it had butterfly view. You could see hierarchical information in a different way. That's something we need to add, but once we have all the features, then we can deprecate the old tooling. >>Victor: And that makes it a little easier for people who are just sort of starting out learning how to profile the games or projects since I assume that the tool itself and UI will be very similar and so you don't have to jump between different interfaces. >>Stefan: Yeah. And the goal is to make it easier also for people to collect if they have someone testing the game and they run into an issue that they can just switch on tracing and record a trace. And that will include all the different types of information. It's just one file. Some of those things can be a little bit more awkward today when you have different ways of collecting information. It can be in many different files. With this you can collect it even over the network is the goal. If you have a play test, for example, I've been on teams in the past where we've done similar things and just collected these traces over network. A play test with 60 or a hundred people, we're just tracing things to a central server that programmers could look at after a play test for example. >>Ionut: I just wanted to show, just want to show those checkboxes, they are disabled right now, but those are the one that I told earlier about trying to remove the need of command line options so in the future, you'll be able to just enable timing directly from here. You just start the application without any additional options. Trace is Enabled by default. And when you want to enable tracing of the CPU timing information, you would just check that and the incoming stream will receive also timing information. >>Stefan: That is a general theme, I guess. The preview or sorry, the beta, that is in 4.23 is something were aware that some of the workflows around collecting information, et cetera, they're not as slick as we'd like them to be, but that's something we're improving. >>Victor: That's great. We've received a couple of questions. Are you good to answer some of them? Alright. I think it would help to clarify a little bit that Unreal Insights is a stand-alone tool that you run either alongside or completely stand-alone from the Editor. And one of the questions-- >>Ionut: It is always stand-alone application for now, so you can just run it as a stand-alone application. >>Victor: So one of the questions were if it was possible to access one or more of the real time track statistics info, via console command or even better via Blueprint command. As far as I know, I don't think there's any communication between the editor and the tool. Is that correct? >>Ionut: No. At this point, no. But we will support for analysis of the timing event also CLI interface so we can write command line analyzers that will just process the event in some way and generate the reports based on that is what Stefan mentioned in the presentation. >>Stefan: Yeah. I think the question is actually more like if you're working in the Editor and you want to trigger something or basically investigate something in the editor, can you do that? And can you even script it or control it through Blueprints? I mean the answer is right now, no. But we're interested in different problems that people want to solve. The whole question of exactly how we integrate this in different ways into the Editor and everything else is still kind of open for debate. We are not entirely sure what the end state is, but some teams are interested in exposing more information in the Editor as well. That's something that's possible since this is all in Slate, it is possible to embed, we're just not sure if that makes sense yet. >>Victor: A little bit of research to do. Yeah. And for those of you who aren't aware of Slate, It's the underlying system that the editor also runs on. >>Stefan: That's right. That's actually what enables us to build this tool very quickly. The graphical tool was built in three months and a lot of the response in other things is thanks to Slate, I would say. >>Victor: That's great. Are there some top 10 things or best practices within the tracks and timing events to look for? >>Stefan: I guess that's more of a question around like the actual sort of looking, investigating and looking for issues in your code perhaps, or if I interpret that. >>Victor: Perhaps, I think you're right, what are some of the top 10 things that you might want to look out for maybe? >>Stefan: Yeah. Some of the things that are maybe obvious, like garbage collection, et cetera, spikes, just things that visually look irregular because if you want a smooth frame rate, then yes. I mean looking for things that stand out or take a long time. Apart from that, more kind of common problems with, games, that's harder for us to answer actually because we're not, we're low level coders. We haven't actually used this to solve game level problems ourselves. We focused more on low level type of problems, which tends to be around garbage collection and loading performance, like I said earlier. But lots of other game teams that are starting to use this for all kinds of different problems. I'm sure we'll be able to share something more. Some more tips like that later. >>Ionut: Also, for the future of networking Insights will provide more information about networking. It's completely different than performance timing, but we'll see that you'll be able to correlate information with the timing, because all the analysis of different kinds of data will be done together. It's not just adding a new profiler or a new investigation, all those will work together. You'll be able to see the logs, timing information, network information as loading information all in the same time for the same session. >>Victor: Alright. Are we shipping the Unreal Insights binary with the preview releases of the Engine? Is it currently available? >>Stefan: I believe so, yes. Right, Ionut? >>Ionut: Can I get the question again? >>Stefan: Is the binary in the release? I think it is, right? You've answered. >>Ionut: Yes, this is what I stated. Yes. On the release it comes prebuilt. It is built-in as a development application, but you'll see that UnrealInsights.exe so you can just double click on it or you can compile it from sources; compile it from Visual Studio, and just run it. No additional configuration, it just works. >>Victor: Development, or build for development is shipped in with the binary. But then if you want it for something else, you can compile it from source? >>Ionut: You can compile for shipping for example. Yeah. >>Victor: That's great. Let's see. What is the file path to find a binary? >>Ionut: I will not be able to share it more, just one second, so Engine binary is Win 64, and that will be Unreal Insights. >>Victor: I will go ahead and share that with everyone one on the announcement post as well so that it's a little easier to just copy a link and paste it into explorer than trying to listen to someone reading it off. >>Stefan: This is another area where we do want to improve and make things a little bit more discoverable and accessible. But right now, you have to find it and run it yourself. >>Victor: It's in Beta and I'm excited to see some feedback and see how people use it and what they're able to track down using it. Let's see, do the colored bars have a color rule or not. Like red for critical, green for good performance, et cetera? >>Ionut: For the frames track? Yes. For the timing view, no. The timing view, at this point, each color is assigned in a way that will try to make distinction between timing events. It's a [inaudible] random assignation of colors to timers. >>Stefan: Yeah, it's more to be able to see the different events clearly, >>Victor: We had another question. >>Ionut: And also it try to emphasize contrast against background because you have a gray background and timing events will have a lighter way of computing the colors and also they have some special backgrounds that will emphasize even more the contrast of timing events especially to make very easy distinction between one big timing event compared with a lot of small timing events of the same type. >>Victor: Nice. Let's see, I think I have one more question here. Just some clarification. Some people are wondering if you need to know any code or if you can use it in Blueprints. And this is once again a totally stand-alone application that you can sort of learn even if you're not a programmer or you know Blueprint. You should be able to profile and track this down. >>Stefan: Something we haven't added is an ability to use Blueprint to, well annotate your Blueprint to see; understand performance of your Blueprint code. What we showed was the way that currently exists to add these scopes that you can see. That is only in C++ code. For blueprints we don't have any functionality yet. >>Ionut: I think it may be possible to generate stats with the existing statting system. I'm not sure if that function is exposed from Blueprint, but I have a vague idea that it could be possible because once you have scope timer stats, you'll be able to see that but of course with the newer version. >>Victor: What are some of the next steps you mentioned moving it over to the other desktop platforms. Will we ever see the possibility to use Unreal Insights to grab logs from external devices like mobile and-- ? >>Stefan: Yes. >>Ionut: We are already supporting platforms so we can already capture traces from Xbox One, PlayStation, Linux and of course next will be to support all targeted platforms. >>Stefan: Yeah, we support Switch and the other consoles, IOS and Android is under way. The goal is to support all of those both on the network but also on device. To a file on the device because network is not always a good option. If you only have Wi-Fi for example. >>Victor: Yes, usually not. What were some of the challenges that you came across when you started development on the tool? >>Stefan: Some of them, as I mentioned earlier, performance was really key for us. And that means that some of the code that we have written to actually generate this information right at the runtime. Since a lot of the code that we're using this or the problems that we're using is for is performance. One of the challenges is to allow you to measure performance without actually influencing performance too much. One challenge was to make this tracing framework that I discussed earlier, really lean and low overhead. In the preview release, it has more overhead than we have now. We've made it better, but yeah, that's one challenge. Just making it scalable so you can trace out lots of information without really adding a lot more overhead. And the other side was of course, just figuring out how to present this processed information in this way that allows us to look at the huge big picture at the same time allow you to drill down to the detail. That means you can't use the most naive and easy solution to do that. I guess basically performance was the big challenge. It is relatively easy to do something that does this, but making it really scale and efficient was one of the big challenges for us I would say. I don't know what Ionut thinks about that. >>Ionut: Yeah. For me was also the challenge of learning using Slate in the same time as developing this tool. By surprise, that was much easier but I was, I thought, it is quite-- basically I was able to write this tool from scratch, learning the framework, the UI framework from scratch. >>Stefan: Yeah, and you understood that super quickly in three months. What you were seeing was written from, he started in March and then we are releasing this. Basically, the code is from early June and that's the timeframe where he came in not knowing anything to delivering that tool that we saw. >>Victor: That's very impressive. >>Stefan: Yeah. But it also speaks to the framework that we have in the Engine for building UI and everything. >>Ionut: There, there is also a lot of experimentation so it is not always well known what is the best way to present data, how to navigate or what are the best shortcuts. We are experimenting and iterating and trying to make it better. >>Victor: That's the way it goes. Was there something that you learned during the development that surprised you and Mike might be good to share with our viewers? >>Ionut: Yes. For UI that you can do how much more of rich UI that I thought about initially, so we are able to show that navigation from tens of millions of events to small events of nanoseconds at 60 frames per second. We can have things that are animated. The user interface could be really fluid and we can achieve that. We were not sure at the beginning when we started, but yeah, we're starting to see the path to see what we can do with the tool. >>Stefan: I think, the other thing was really, like I said earlier, one of my-- the ambition with this whole effort, the reason why I wanted to do it in the first place was that we have problems to solve in the Engine to do with performance and a bunch of other things. Like I said, we had lots of questions and that was actually one of the results at the end in June when we finally got the loading view, for example, that we just kind of give you a glimpse of, when we suddenly had that information really visible and easy to digest, then that was a wow moment for me. When I actually understood a ton of stuff about the Asset loading process that we needed to know, to know where we should focus our work. That is really the highlights to value of having a tool that allows you to expose information that you can actually action. That is the key thing for me is just the whole goal of this tool is to give you information that you can use some insights for you to use to solve problems and to me, that whole thing just confirmed that this was the right thing to do. >>Victor: Is that when you came up with the name? When you had insight? >>Stefan: No, I think, I'm not sure, I think we had the on and off earlier, Ionut came up with it as a suggestion and yeah, it stuck >>Ionut: Actually, the name is representative for what it does. It show insights in how Unreal Engine works. They are things that are coming from Unreal Engine. All the trace information, events, we try to expose and to try to visualize and analyze that information from the Engine. So, it was something that we settled pretty early on, on this name. >>Victor: Yeah, I definitely think it works. >>Stefan: Yeah. I mean the goal is to add more so, right now it's kind of the basics, but we, we intend to do a lot more. >>Victor: That's great. With that, I am done with the questions and unless you guys have anything else you'd like to share, >>Stefan: No, thank you. It's been awesome to get a chance to show off the work of our team and yeah, there's more to come, I guess. >>Ionut: Thank you. >>Victor: Yeah, I think everyone appreciates all the work that-- >>Ionut: See you next time. >>Victor: Although we are not over just yet, I have a little bit of an outro spiel that I go through before we end the livestream. But with that, I appreciate that you guys both took some time to prepare material for today and all the hard work you're putting in. If you're watching this later on YouTube and we're following live or if there was a part of the stream that that you want to dig into a little bit deeper but you don't really remember where that was, in a couple of days, usually within a week we post our transcript of the live stream which are being done for captions together with the timestamps. There will be a link in the YouTube description. If you're looking for a specific term, my tip is that you go in there and you can control F and search for the term and then you can actually find where we said or mentioned that throughout the stream. You can specifically see the timestamp and go to that section of the video and you'll be able to find it a little bit quicker than trying to scrub through and with the chance of missing it. As always, if you would like to let us know how we did today, what you liked what you didn't like or what you would like to see in the future, Amanda is going to go ahead and post a survey link in the chat. Please let us know. Everyone who participates and provides us with their email, we will be able to put you in a sweepstakes for a Unreal Engine t-shirt. If you would like to go ahead and meet other Unreal Engine developers around the world, you can go ahead and go to Unrealengine.com/user-groups and you can go ahead and see if there are any Meetups close to you in your area. If there are none and you know that there are people in the area who would like to get together and talk about Unreal, go ahead and send us an email at community@unrealengine.com and we can go ahead and give you a little bit of information what it can be like being a meetup group organizer. We also do our five-minute count down at the beginning of our streams. That is 30 minutes of development that we speed up to five minutes. If you go ahead and send that to same email, community@unrealengine.com together with a logo of your project, you might become one of our countdowns. And as always, let us know about all the projects that you're working on. The forums are a great place to do that. But I'd also recommend Unreal Slackers, which is our unofficial Unreal 4 Discord server where a lot of developers, I think we just might have reached over 26,000 users, which is absolutely amazing. And then follow us on social media. And if you go ahead and stream Unreal Engine on Twitch, make sure that you use the tag so that we can come in, see what you're working on. And with that said, once again, I want to thank Stefan and Ionut for coming on and next week we will be announcing the winners of the Summer UE4 Jam. Tune in for that if you're excited to see us play some of the games that won. Also, we will be announcing the winners. Until next week, bye Ionut and bye Stefan. We say goodbye and I'll see you again next week. Bye everyone.
Info
Channel: Unreal Engine
Views: 18,948
Rating: undefined out of 5
Keywords: Game Development
Id: TygjPe9XHTw
Channel Id: undefined
Length: 72min 48sec (4368 seconds)
Published: Fri Aug 30 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.