4.24 Feature Highlights and Landscape Tools | Live from HQ | Inside Unreal

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
>>Amanda: Hello and happy December. Prepare your hard drives for the latest round of featured free Marketplace content. Paint beautiful environments with arctic terrain brushes and Landscape stamps, create a multiplayer compatible building system, rocket your scenes into space with a modular kit and teleport characters out of this world with a portal Blueprint. Download them all on the Marketplace today. Industries from entertainment to defense are now using large immersive displays to engage participants in custom real-time experiences. These displays, which can range from enormous projection domes to complex high-density arrays of LED screens can present a real-time scene at virtually any resolution. To see how teams are achieving these feats, read our latest white paper, "nDisplay technology: Limitless scaling of real-time content," and explore the history and research behind nDisplay, the tech enabling these new experiences. Upcoming third person adventure, The Path of Calydra looks to recapture that childhood explorative spirit through its whimsical lands, quirky enemies and sprawling lore. Now several years into its development, The Path of Calendula is approaching its final incarnation. Find out about the team's inspirations, explorations, and the Brazilian Dev scene in our interview with 2018 Unreal Dev Grant recipients, Final Boss. Looking to level up your post-processing skills? In our latest webinar, "Achieving cinematic quality with post-process effects in UE4," Technical Artist Matthew Doyle walks through post-processing options including basic effects, color grading, Material creation, and more. Watch the replay now on our YouTube page. Alright, top weekly Karma earners. Here's your moment. Thanks to Everynone, ThompsonN13, chrudimer, Max Payne_, GarnerP57, Rubiksmaster02, LordStuff, Prisalized, mightyenigma and aussieburger. We appreciate all the help you give over on AnswerHub. Our first spotlight of the week is this sweet snowy little scene. This piece recreates Artur Mukhametov's original concept art, but in Unreal. This scene looks great Ine, hop over to the forums to give her your feedback. Next up is Avarice, a first person narrative driven horror game set in the 1900s built by students in just a couple of months. Play as Edward Armitage, a renowned Explorer returning home from an expedition gone wrong. Throughout the game, you experience a gripping narrative going through his curious mind and his interpretation of untold events. And to help the community better understand the Gameplay Ability System at a high level, Reddit user cpp_addict created this handy mindmap. They enjoy the system's well-written code, computationally inexpensive calculations and other features. Hopefully it helps you all too. That's it for today's news and community spotlight. Have a great week. >>Victor: Hey everyone and welcome to the Unreal Engine livestream. I'm your host Victor Brodin, and with me today, I have Principal Technical Artist, Ryan Brucks, who's going to show off a little bit of our new Landscape Tools and our VP of Engineering, Nick Penwarden. >>Nick: Hello. >>Ryan: Hey guys. >>Victor: Thank you so much for coming. Today we're going to talk a little bit about what's coming in 4.24 and then give a little demonstration of our new Landscape Tools. Nick you've prepared a slide deck for us? >>Nick: Yeah, I can just start going through that, I guess. Yeah, it's cool to be on the livestream again. It's been a while for me, but it's always kind of fun to come out and talk a little bit about what the team is up to. So yeah, I want to talk a little bit about 4.24, which should be coming out next week. It's available for everybody. Of course the previews have been coming out for a while now. Hopefully a lot of you have been able to check it out and, and get a preview of what's coming. But yeah, going to start with Landscape Tools, which are a big part of what we've been working on for 4.24. And I won't go into too much depth here because Ryan's going to talk more about the details around this later on and show some demos of what those tools look like. But some of the big beats there are we've added support for layers to allow non-destructive editing so you can effectively have like two height fields and two weight maps and so on so that you can have sort of your base layer Landscape and then make modifications on top of it without destroying that base layer. We've also added the ability to be able to create custom brushes in Blueprint and Ryan's created a number of examples in the Landmass Plugin, but you can also create your own and it allows you a lot of flexibility in terms of how you can create your own tools for modifying Landscape directly. And we've added support, both improved the spline tools, but also added the support for spline tools to be able to modify the various layers so that way sort of another tool in your toolbox for being able to create things, especially like roads or rivers or lakes and different bodies of water, stuff like that. And kind of related is Runtime Virtual Texturing. So we had a beta version of virtual texturing that shipped in 4.23. And we're now considering it production ready in 4.24. For those of you who play Fortnite, actually, we're using Runtime Virtual Texturing in a lot of the features that we're talking about today to create the new map that we shipped in Chapter Two. All of the sort of tools and tech is all proven in a full production game. And Runtime Virtual Texturing in particular, you know, great for Landscape because it allows you to use a lot more layers without paying the runtime cost every time that we're rendering a pixel. We don't have to go through and evaluate all of those layers. We can just evaluate them and cache them in a virtual texture tile. And it also means that other meshes can then sample from that virtual texture. And so you can blend meshes into into the terrain and hide seams, stuff like that. Some of the updates for 4.24, we added support for YCoCg color encoding for base color. And so this helps hide some of the compression artifacts you can otherwise get with BC1 texture compression especially with smooth gradients. And we added the ability to take the low MIPS of the Runtime Virtual Texture and bake them out as a Streaming Virtual Texture. And this is important for a couple of reasons, but one of the big ones is when you have a large Landscape, some of those low MIPS can cover a massive portion of the Landscape. And so rendering out those MIPS can be very expensive. So being able to bake those out doesn't necessarily take a lot of disk space, but can save you a good amount of runtime performance for those very, very large sections of the map. We also have a new Sky and Atmosphere model that's shipping in 4.24. It's a physically based including Rayleigh and Mie scattering, ozone absorption, light multi-scattering, a much higher quality than the version that we had in the Engine previously. Supports some really cool features like ground-to-space transitions and being able to do like planetary view. All of the computations from it are available in Material graphs so artists can basically take the results and use them for compositing on their own skydomes for- sort of allows artistic direction of what the sky will end up looking like. And in terms of performance, we really wanted to make sure that this was something that scaled from PC and console down to mobile. And so I have a couple of simple numbers there, but basically it takes about a third of a millisecond to compute the lookup tables that are used on a PlayStation 4 and under one millisecond on an iPhone. In fact, a rather old iPhone. So again, something that you can use for your mobile games, for PC, for console. And to make it all easier, we also added a new Sun Sky Actor. Basically this is something that you can add to your map and it will automatically set up a Sky Light component and Directional Light component and all of the Fog Actors and so on, sort of coordinate everything. You set a geographical position and time for your scene and it will accurately place the sun in the sky, handle all of the other attributes for the sky and so on to give you a realistic basis for your scene. Another feature that is coming in 4.24 is Screen Space Dynamic Global Illumination. This is actually a technique that we had prototyped for the Chaos Destruction demo that we showed at GDC earlier this year with a lot of things blowing up. We really wanted Dynamic Global Illumination in that tech demo and obviously we can pre-bake global illumination if you're destroying things, right? And so we prototyped the Screen Space technique and it worked pretty well in that case, but we wanted to take that and make it something that you could actually ship on a console. They needed to have the right performance profile and still maintain high quality. So the team did a lot of optimization, a lot of work on this, got it down to about two to two and a half milliseconds on a PlayStation 4 Pro at 1080P, I believe at medium quality settings. So you can get pretty good results with a reasonable frame time that you can actually afford. So here's the sort of mandatory original scene without global illumination. And then if we add in GI, we can see sort of the bounce light and color bleeding. Hopefully that comes through well on the stream. You can never quite tell with video compression, but hopefully you can see the areas that that brighten up that would otherwise be in complete shadow or just have a purely ambient light. Another big change in 4.24 is that Datasmith is now shipping with the Engine. Previously, this was part of Unreal Studio. So kind of this sort of professional toolset that was intended more for say CAD and architecture and other customers in those areas. Most of the features here are on the import side. So basically getting data into the Engine, being able to take entire scenes that are built in either 3DS Max, Cinema 4D, Revit, other software packages and get them into the Engine as well as some like editing and defeaturing capabilities for taking very complex CAD models and being able to remove things like, you know, if your CAD model has bolts in it that are modeled you need to be able to remove those because you don't want to render those in real-time, so features like that. UV generation, aspects like that. But yeah, it's really great that now everybody who uses Unreal will have access to to these same tools as well. Along those same lines, one of the improvements with Datasmith; adding support for USD live workflows. The idea here, if anybody's familiar with USD, is to work directly with the USD file. Previously it was a pure import export process. So you could open a USD file, we'd effectively convert it into an Unreal Level and you'd work with it like an Unreal Level. And then you could take an existing Unreal Level and you could export it back to USD. What the USD live connection allows you to do is that sort of import export process is sort of transparent under the scenes and it's all live. So as you're moving actors around, we can kind of update the USD file and it's sort of a more natural native USD workflow. And another Datasmith feature that's coming in as beta in 4.24 is called Visual Dataprep. And the idea here is being able to have a visual tool to create rules for processing Assets as you bring them in. So when you import an Asset via Datasmith, you can now define a sort of linear node graph to perform processing on it. Things like if it's coming from CAD, then we need to take higher order surfaces like nerves and tessellate them into triangles. Being able to do things like replacing Materials, setting LOD generation and simplification settings, stuff like that. But it's really a much easier interface for doing that. Previously you could write something like a Python script or a Blutility to do something similar, but this is sort of a much nicer presentation of those types of workflows. Another new feature coming is new hair rendering and simulation. This is going to be experimental in 4.24 and we're going to keep working on improving it and making it better. But it's a new strand based approach to hair rendering and simulation that will allow you to get significantly higher quality hair both in terms of of rendering and simulation. Our focus right now is getting the visual look that we want. Making sure that we have something that can hit- Ideally what we want to be able to achieve is film quality hair in real-time, right? And and so that's kind of the focus. So initially it's going to be very performance intensive and we're going to be working on optimizations in the future to be able to make it practical for other devices. The the other interesting part here, so actually the way you set up a hair physics and hair simulation is by using Niagara. So it's an example of as we build Niagara, we're wanting to leverage that in other areas. So being able to use it for setting up physics simulation for hair and we've got some ray tracing updates coming in 4.24 also. Our main focus around ray tracing tracing right now we're continuing to focus on performance and stability. So being able to continue to get super high quality images and get them running faster and faster. One of the other key aspects of 4.24 is supporting different types of primitives, specifically Static Meshes that use World Position Offset. So basically if you were doing vertex animation with a mesh, then as that mesh deforms, we need to go and update all of the acceleration structures in DXR for the ray tracing to actually work. And so there was a good amount of work to try and get that working efficiently. How we update it. How to get that all working; working well. Also native support for like Instanced Static Meshes and Hierarchical Instanced Static Meshes. We also have a new global illumination algorithm in 4.24 via ray tracing that's based on final gathering which is able to provide both higher quality, but it's also much, much faster than the technique that we shipped in 4.23 and earlier versions. Another feature coming in 4.24 is Inertial Blending for Animation. And this is, the big feature here is being able to do an instant state transition, but making it appear smooth, allowing it to blend. It can be a pretty big performance optimization because you don't have to, usually when you're blending between two different animation states, for some period of time, you have to evaluate sort of both branches or both states and then take the final poses and blend between them. Instead, this allows us to stop evaluating the previous state. We just evaluate the current state and we're able to take the existing bone positions, bone velocities and so on and use that information to smoothly transition the animation. This feature was contributed to us by the developers at The Coalition where they had actually initially developed this as a perf. win for Gears of War 4. So thanks to the guys at The Coalition for contributing it back and working with our engineers to bring it to all Unreal developers. >>Victor: Hoping to have them on the stream here next year. >>Nick: Yeah, that'd be awesome. Let's see. Sticking with animation. Another feature in 4.24 is called Animation Blueprint Linking. And if you're familiar with animation sub instances, the idea here is being able to take your Animation Blueprints and compartmentalize them into individual Animation Assets and then dynamically link them at runtime and even stream them in and out. So as an example, if you have a vehicle in your game and your characters need to interact with that, part of that is going to be the Animation States and the Animation Assets necessary for them to do that. And what Animation Blueprint Linking allows you to do is to not have that aspect of the Animation Blueprint in memory if the vehicle isn't in memory. So if you're not able to use those animations anyway, they can live in a different Asset. They don't have to take up any memory. Also because they're separate Assets, it means you can kind of develop it in isolation. You don't have to like have this massive complicated Animation Blueprint. You can use these interfaces and sub anim instances to to break apart that complexity and make it all sort of easier to deal with. And in 4.24 we're ready to call the Unreal Audio Mixer production ready. Just super exciting. It's now enabled by default. So yeah, it's been a long effort to build sort of a high quality, high fidelity, production quality audio mixer in Unreal and we're really happy with where we ended up. And part of this was, what we really wanted to do was make sure we're shipping our games on the audio mixer on all of our platforms. And so Fortnite is already using the Unreal Audio Mixer across all platforms we support. With the one exception of Nintendo Switch, we fully support Nintendo Switch. It works really, really well. But in terms of performance, we want to get it a little bit faster on Switch before we sort of, well, flip the switch so to speak. But yeah, really happy with how that's all come along and definitely recommend that licensees completely switch to the new Audio Mixer. Other audio updates, we have added support for something called stream caching. This is really the ability to treat audio streaming very similar to how we handle texture streaming, being able to have a fixed size memory pool and streaming all audio in and out of it rather than- typically you would do this only for very, very long audio samples. Things like music tracks and stuff like that. Because it is just like texture streaming, it does mean that there can be some latency. If you go to fire a weapon and you want to hear the sound right now and it isn't in memory, it's gonna take a little bit of time to get those audio samples into memory so that we can start playing them. So similar to texture streaming, you know, if you were going to do a camera cut with texture streaming, you need to give the Engine a hint of, "Hey, I'm going to move the camera here. Let's start getting some textures into memory that we know we'll need." And then that way when you teleport the camera, you don't see blurry textures. Everything is in memory and ready to go. And so stream caching with audio is a little bit different. If you know you're going- say a player picks up a weapon and you know they're probably going to be shooting it soon, hint the audio system that, "Hey, we should get these audio samples pre-cached." You can load them into memory at that point. But this is really great when you're dealing with fixed memory or low memory platforms because you can very easily control your audio memory budget. There's also a new audio analysis API which basically allows you to perform analysis on the final mix, doing things like perceptual loudness measurements or spectral analysis, pitch detection. And then using that data, you can drive other Engine systems. So you can drive Material parameters so that you can have outfits or other, really any surface in the game to the audio in the game in some interesting way. You can use it to drive, say Niagara particles for instance. You can drive your visuals by audio or you can even use that data to drive gameplay logic; really to drive any system based on this. And the API is fully extensible. So, it's actually very easy to go and add your own plugins that'll be able to add aspects of audio analysis and then be able to pipe that data into other Engine systems. And that's my sort of whirlwind tour around what's coming in 4.24. And at this point I'll hand it over to Ryan Brucks to dig a little bit deeper into the Landscape Tools and some of what's available in there. Why it's interesting and how our artists at Epic are able to take advantage of those tools. And then I guess we can probably use some Q and A at the end. >>Victor: Yeah, I've grabbed all the questions and so we'll go through them in the end once Ryan is done with his presentation. >>Ryan: Alright. Hi guys, it's good to be back on the stream. I know it's been a little while for me as well, but I'm happy to be here to show you guys some cool stuff we've worked on for Landscape Tools. Going to be kind of demoing inside of a blank 4.24 content examples project right now. I'm going to basically load up a little a blank Landscape map and show you guys some of the new Landscape Layer Tools. So you'll notice that when we select this Landscape here, we have this new list of Edit Layers down here. And you can see we only have one layer right now. We have a sculpt layer, we have a paint layer, and these are all, you can see we have our standard Paint Layers. And the way that this kind of works is each layer for your Landscape is almost like another dataset that includes another copy of the height field and another copy of the weight maps, all the Paint Layers in your terrain. And that means you can kind of stack different editing behaviors together. So to kind of just get started with a really quick example, if you haven't made a new terrain with this before, the only thing required is you have this Enable Edit Layers box when you make your Landscape and then you should be good to go after that. So you can, you have these layers here, they have an alpha, they can be hidden. You can make new ones. So we're gonna go ahead and make a second layer here and we are in sculpt mode. I'm going to go ahead and just make a little shape to show an example of how you might want to use this. So there's really no rule on how you have to use layers or what you could do with them. They're more intended to be there to help you not lose work under certain situations. So if you imagine, let's say we have a terrain with kind of like a little island going on. >>Victor: It's beautiful. >>Ryan: Yeah, we're- Sorry, we actually had some much prettier demo content that we had versioning issues with, but those examples were also recorded as part of the Dev Days presentations that we did this year. So those were on YouTube recently. But basically gonna kind of try to rebuild in very basic form some of those behaviors. So you notice that we painted on only one of these layers. If we want to find out which one it is, we can kinda click on these eyeballs and turn them off. You know, you can also reduce the opacity of the layers one at a time. So an interesting case of why you might want to do that is to avoid losing work from previous edits. So let's say, you know, it's pretty typical in games we have, you know, some kind of- too much noise. Let's go with that. So it might be common in games that you have a terrain with some basic noise and some basic terrain, mountainy terrains and things like that. But conceivably at some point you're going to come in here and people are going to be placing objects like cities and buildings and you know, if you have an ultra primitive building in here, you're normally going to want to have to have a flat area around that. So if I were to flatten out inside of this layer right here, I would be kind of committed to that. But let's say instead of flattening out directly in that layer, I wanted to make even another layer. I could perform that flattening operation inside that layer. Hang on a second. I was painting the wrong layer. So you'll notice here, I'm kind of flattening out that layer which means I can then erase that layer so I can come back in- I want the flatten tool, I want the sculpt, this is- sorry. It seems like our low resolution that we use for the stream visibility is making it a little tricky to select. Then basic, no. That's interesting. We've lost our- Oh, there it is. No, well I think we need to JIRA this one. If your UI is a little bit too small where you've lost the ability to get to our paintbrush. >>Victor: Yeah. We scale it up here for the stream. >>Ryan: Yep. But the idea being that, say we wanted to remove that, we could kind of erase it and go back to how it was, although I'm having trouble getting back to the original. Sculpting brush, that is too bad. Alright. Well, so the basic idea behind these is, you can commit non-destructive edits, so you could say have one layer that's designed to flattening out the foundations around your buildings. Then you could move those buildings and erase those edit layers and re-flatten them in another location and you're not going to lose that underlying data. >>Nick: Yeah. And I guess if you were to hide layer two now, you could kind of see what that would look like. Right? So- >>Ryan: Exactly. So we hide that layer and we still have that underlying noise that we had before. >>Nick: Yeah. You don't have to go back in and now repaint the noise or repainting the mountain that you painted out. >>Ryan: Right. And so that the way that these work under the hood is they're kind of additive. So when you add a new layer, it's not going to be doing anything by default until you paint some values in it. And then, if you want to erase the contribution of one layer, you can paint a value of zero. And that's kind of like erasing it. It's too bad that we've kind of lost these- Let me apply some layer infos here. But the same thing, you have a separate copy of these layers per edit layer. So as before, the edit layer is kind of a dataset for the entire Landscape. So you'll notice I can come down in here with snow and thankfully I'm back in the paint tool. We'll paint down some snow, it might compile some shaders, but you'll see that because I painted that in this layer, it only applied it in that layer. Something that might happen when you first paint on a new layer is you might need to clear the base layer. This occasionally happens. Paint that again. You can see we painted snow in this layer and we painted sand in this layer. Toggling the layers on and off, you'll see we have different paint effects and different height effects in each layer. So it's pretty flexible what you can end up doing with that in terms of kind of separating out the individual parts of your editing style. So one suggested way to use this is to kind of have a base layer to form a block-out such as what is the overall shape of your Landscape, the base terrain that's not likely to change very much over the course of a project. So for Fortnite for example, we use a base layer to define the overall shape of our island. And typically there's not a lot of rapid editing going on there. We defined the shape of the island early on in the season and then we add a lot of refined tweaks to it over time. For example, buildings may move, points of interest may move, new shacks may come and go. So we actually have layers higher up in the stack that the level designers used to make small modifications that are considered more transient and more customizations to the area. So for example, we'll have, there's a layer in Fortnite called the details and hand painting. It is kind of like a polished pass that is gone after all the meshing and everything is in there. It allows a kind of safe way to do little polishy tweaks to the terrain without ever worrying about accidentally ruining the shape of the base layer or losing any data. So for example, in Fortnite we'll do things like giant craters smashing into the map. In the past we had to do a lot of manual work to go back and Perforce and get that old map if we wanted to say, undo the crater, whereas now having the crater in a separate edit layer is the ideal thing because then you have the easy ability to just remove that layer and you're not messing around with your base Landscape anymore at that point. I apologize that I'm not able to select the sculpt tool in here. That's a bit strange. So there's probably someone in the chat telling you what I'm doing wrong right now, but that might be a good time to jump over to some custom Blueprint brush stuff. Nick mentioned that as well is that we have the ability with these layers to inject control over the Landscape to Blueprints. And I'm going to go ahead and reload this map here and show what that looks like. So we've got our blank Landscape just to give us a basic starting point and I'm going back to the Sculpt tool. And notice that in this list of tools, there is Blueprint Brushes down here. So this is how you go about adding a Blueprint brush to the world. When you click on this drop down here, what this does is it will basically auto discover the objects that are the right class. So you can add them this way. And then by clicking on the terrain, you can also add them by going down into your content browser. If you collapse Game Content, and it's going to be below Engine Content, one thing to make sure is that you have on your Content Browser, Show Engine Content and Show Plugin Content, both enabled. And that's what's going to allow you to actually see and select these guys. So down under Landmass, which is the name of the plugin that has some examples of custom brushes, there's a Blueprint Brushes folder. So the one I'm going to show you guys first is a simpler one called Material Only. And this one is kind of meant to create a procedural noise type pattern for your train. Let's see here. Oh, I need to select a layer. That's why they didn't work. Okay. Let's see if this guy worked here. This Material on the brush is not working. Let me try- Alright, well for some reason I had an issue with the Material Only brush. I'm going to go ahead and show a shape-based brush. So the way that these work is that you define a shape of the spline. Oh look, we've got a Material on the- Oh, you know what it was? It was compiling shaders in the background. Sorry about that. We're going to back up because it actually didn't fail. Alright, here we go. So this is a Material Only brush. And the way these work when you are in custom Blueprint brush tool mode, you actually, when you add Blueprint brushes to your terrain, you'll see you have kind of a layer stack here. So if I were to add another one, you'll see now we have two of these guys and we can select them. I'm going to go back to just one. And we're going to select it in the Landscape tool. And you'll notice that this is actually an Actor in the world called Custom Brush Material Only. And then it's a Blueprint. So everything about this and how it affects the terrain is defined on the Blueprint Details Panel. So if we go into Brush Settings, this is kind of defining the basic behavior of this brush. You see we have this gen noise Material, it has a tiling, elevation, some seed parameters, some octave stuff, et cetera. So we're going to go ahead and mess with this a little bit. I'm going to back out a little bit, and notice we don't really have mountains right now. We more have like noisy dirt or something. We're going to lower the scale of this. I'm going to increase the elevation scale. So this is going to be in centimeters right now, just to throw that out there. Go up to 15,000. Basically what's happening here is we have this Material and it's basically a noise shader, kind of a custom version of the Oise node. Well, you can see here that there's a version where we actually use the noise node to generate some noise onto the Landscape. And then what's actually being used is a more flexible version that allows you to change the type of noise and the octaves dynamically, which is actually why the shader took a little bit longer to compile. When we modify these values here on the Blueprint, what we're actually doing is modifying a Material instance dynamic under the hood, which is containing these parameters. And then another neat little thing is that if you move around this brush in the world, you're kind of, we're also passing in the Actor location into that Material. You can kind of fine tune what part of the noise field you want to sample. And changing the seed is kind of like changing the Z slice that you're sampling from as well because noise is a three dimensional function. That's the most kind of basic version right there. This is set up to be somewhat extensible in that if you change the Material by making your own Material here and you say you want to have your own parameters that are perhaps different, you can add custom parameters, vector, scalar, or a texture. And basically you would just specify the name and you can specify the value here and it'll automatically pipe that over to your Material that you're using. That's the Material side. I'm going to pop open the Blueprint real quick just to show what's going on here. The basic workflow behind Blueprint custom brushes is we have, they derive from a class called Landscape Blueprint Brush, which is a native class. And then there is a Blueprint function to override called Render. And what this does is it takes Landscape data and it requests the render target of all the Landscape data, and then it passes it into the Material that you specify. And then your Material does a render to a render target, which modifies that Landscape data, however you specify. And then the result is pushed back out to the Landscape. So you'll see here we have Render, it tells you whether it's a height map or not because this works for both paint and sculpt layers. And this In Combined result is the result of the render target of the Landscape up to the current brush that you're evaluating. So you see here we set up a brush which is kind of setting up the Material instance dynamic. There's a Draw Brush Material function, which this is actually what's doing the drawing Material to render target. So you see here we have that restore whether it's a height map render and we either render to the height map, render target or the weight map render target. And then at the very end of this, we basically pass back our modified render target as the result. And you see here we can choose between whether we're returning a weight map or a height map. So this is a fairly simplified version of the custom brush, which is probably ideal if you want to try making your own. We're going to look at the more fully featured version next, which is a little bit more complicated in the Blueprint side, although it's pretty much just expanding off of this same kind of paradigm, which is that you get some data from the Landscape, you set up a Material and you set up a bunch of parameters on it, you render that Material and then you pass that back to the Landscape. >>Nick: And the really powerful thing here is, as a technical artist, you're able to go in and write your own shaders. All this processing happens on the GPU. So, it's fairly fast and efficient compared to doing all of this processing on CPU where it just wouldn't scale. So in terms of iteration and just flexibility, it allows someone like Ryan to go in and make really interesting modifications that in the past, you would've had to go to a programmer who has to go and like add this feature and it just shows up as another check box or another set of tools in sort of fixed function tool in Landscape. And so, the extensibility and flexibility here is pinpoint. >>Ryan: Right. Yeah, we improving iterations on our own tool prototypes and also just we can never predict what other people might want to do. So this will unlock you to attempt something that we might never even think of. Another way you can add these shapes, you can always just select the class down here and then click in the viewport. But there's another way which is a little bit more interactive. And if you look in the Details Panel after you've added a custom brush, you'll always get this Actor called Landmass Brush Manager. And this guy is just a resource manager for all the common things that all the brushes might need to do, so they're not all wasting memory. They share some resourcing. And on this Blueprint there is a little, a helper to draw shapes and this is a mockup of the lack of this being a fully nativized feature. But it turns out you can do quite a bit with it. What this lets you do is, pick what type of Landmass shape you want to draw. You specify what Z plane you want it to start on. And then this works similar to the BSP drawing shape tools if you guys have ever used those, in that there's a little description here, but rather than read it verbatim, I'm just gonna paraphrase it. It works by when you hit begin shape, you've now entered into this shape drawing mode. And whenever I hit space bar, it's going to recall that and once I've placed more than three points, now I'm dynamically previewing that shape and its effect on the train. So every time I come in and press space it's dropping down that point. And now when I come out here and say, complete shape, now it's done. And you see it added it over here we have that is a little spline shape is an Actor in the world. And it's just like any other Actor you can, you know, scale, rotate modify the points, you can duplicate it. The only rules about duplication are you have to be inside of the Landscape tab right now, otherwise it will not associate to the to the Landscape. But that's usually not too big of a deal. If you ever accidentally duplicate something you can basically assign it to the Landscape by copying and pasting it with the Landscape tab back open. Okay. So just to simplify this again and focus on what we're looking at, I'm going to delete that other Material Only noise cause it's, even though it's cool, it's making it a little bit less clear what we're seeing. So here's my brush that we drew, I'll make this a little bit bigger, easier to see, focus on what we're looking at here. So you'll notice that we have this shape drawn down, which is defining- It's defining the profile that we're going to do, but there's a lot of things we can do to modify this beyond this point. So there's a cascading level of settings here. Most of the important things are under Brush Settings here. Such as what type of thing it is. We can say it's not a Landmass Outline, it's a Spline Mesh and that's gonna make this into a road. We could, we could say we want that smooth or hard. Just as a quick way to fix between that. You could say Material Only here as well, which is- allows you to use some of this deluxe functionality mixed in with the Material Only if you want it to. A single mesh would let you specify a Static Mesh and splat that onto the terrain as a depth. The most common one is Landmass Outline because that encompasses plateaus, mountains, a lot of things. And then Spline Mesh defines rivers and roads for the most part. So once that's there, there's a couple of things. You can invert the shape. Pretty much exactly what it sounds like. You invert the shape so that it goes on either side. And one thing to point out is that what's actually being used here to do this drawing is a signed distance field. So that means we have information about both sides of the shape. Under Falloff, this is what determines how that distance field shape is really affecting the train in the most basic sense. So, for example, if we don't cap the shape, our terrain has a certain maximum T elevation. So, yeah, here we go, so if you tell it to cap shape- let me make this terrain a little bit bigger. If you tell it to cap the shape, it's basically just going to flatten it out, which means you're losing the interior of the distance field. So it's your choice. And notice that we have different modes for blending the falloff. So because these are distance fields, you can actually blend based on angle. And that means when I specify that angle, it's always going to extend until it intersects with the terrain data at that slope. It doesn't change in steepness, if that makes sense. So if I have a fairly sharp mountain, it's just going to carve that slope everywhere. Whereas if I set this instead to width mode, that's a little different because you'll see, you always have the same fixed falloff, which will be defined here. And it really depends on what you're going for there. It's just designed to give you more flexibility. You can offset the edges outwards because they are based on distance fields you can offset up and down. And then that's mostly it for the falloff options. The rest of the options under Brush Settings are specific to which type of Landmass this is. So if we're not using a spline or a Static Mesh, then these fields don't really do much. So we can ignore them. And if we're not using Material Only, generally this Material configures itself and you don't need to mess with it unless you're doing something custom. Paint Layers is the one area where we will modify here. But first I'm going to go through some of the other options. So one of the interesting things about these distance field brushes is the effects. So these are more Material based modifications that pipe back into the main Material that does the rendering. And just probably the most interesting one is Curl Noise. Because we can specify some noise inside here. And what that's doing is offsetting the shape. I'm going to go ahead and delete this guy and draw another mountain and try again. Okay. So we've got our little mountain here and you'll notice it's always looking a little bit geometric before we have any real noise to it. But when we start adding Curl Noise, it's pretty quick that we can take that basic shape and make it look into something more organic. You can even take the Curl Noise to some ridiculous extremes if you feel like it. And it's almost another way to get this appearance of a really crazy looking valley or something like that. Almost looks eroded. Although generally you're going to want to use values of less than one for either of these. And how this is set up under Curl Noise is you have two octaves; Curl 1 and Curl 2, and you're basically, you have separate control of the strength and tiling of each of these. So you'll notice that I have one really detailed Curl Noise, which we can increase the tiling of. If you go too far, you might get something weird like that. So we can turn down the detailed one or we can turn down the more macro one. So generally you want a little bit of a low frequency breakup and then a little bit of a high frequency breakup. So you know, probably enough to where you still are defining your shape with your brush, but not to where it's so random that it's just completely random. And then once you've got these, you're free to manipulate the points as you want. The only limitation on the the Landmass outline is that the points individually do not have Z height. They're always assumed to be on the same flat Z plane. So one of the next pretty interesting effects is Smooth Blending. So you'll notice right now we have that angle blend mode on and it's always going to be a 45 degree slope, up until the sharp peak down into the bottom. But what we can do is there's these smoothing threshold options. So if we set Outer Smooth Threshold to say 10,000, now we have a smooth curvature going from 10,000 centimeters at that intersection point. And we can also smooth the inner although we have to actually have the cap enabled to show that. And so if I'm going to turn back on this cap, move this guy up a little bit, now we've turned it into a more of a mesa or something. So Inner Smooth Threshold is basically the smoothness that you get on that inner lip. So you can fine tune that a little bit. You can come in as well, enable some displacement effects. And really that's just- there we go. It's because it's in world units. You can specify a texture or change the tiling on it. All sorts of things like that. And you can also change how much it affects the the weight maps. So there's also some additional options for curves. You can use a curve to define the profile of the mountain, although that version requires you to be in width based falloff because it's not exactly straight forward to map the curve to the angle falloff because you don't really know the true extent of the falloff until it's been applied. Go ahead down here a little bit and then we turn off that displacement. So we're looking at one thing at a time. Turn off that blending again. Let's go back to hard edges. There's a Terracing option, which is interesting for some stuff, but let's see here. There we go. They're just too small. So you can see, we can give these guys terraces. Probably need to be a little bit bigger space between them. Oops. Going to push that out. There we go. And one cool thing about the terracing is that you can change the smoothness. This is a function that goes from hard edged up to fairly smooth to where you're going to get actually smooth continuous little terraces on there. So you can use that in combination with additional brushes on top of this to vary up those bands as well. And you can fade it off. So we'll go ahead and turn that back off. So the next thing I'd probably want to point out to you guys is how the Paint Layers works here. So, so far we've just been showing how these Landmass brushes could modify the height field, but they can also modify Paint Layers as well. So you'll see if we go down to the Paint tab on Landscape just to double check our layers that they're there. One thing to double check is that you actually have a layer info assigned. I forgot to save that into this test map. Otherwise it's likely going to crash. Yeah. Go ahead and save this map just in case that does happen to us. So we don't do that twice in a row. >>Victor: It's always good to save. >>Ryan: Okay. So now we have these three layers. They're just sand, snow, and rock. I'm going to go back to our mountain. I'm going to simplify some of that Curl Noise out of it just for now because I feel it's going to get in the way a little bit of what we're showing. Okay. So now I'm going to go down and I'm going to say let's say place some rock. So we have back under, at the very top, under Brush Settings, I'm going to go back down to Paint Layers. Just going to add one and then we're going to type rock. It's going to compile shaders of course, because it didn't have that permutation. Once that does, we'll see that we have rock applied inside of that shape. But we have a different version of the same falloff controls that we can change per layer assignment. So say we want a really big soft gradient of that rock and let's go even bigger, say 20,000. So now we've got this gradient here. There's also the option to have weight map influence. Let's go even bigger to make this obvious. There we go. So we've got this gradient that we're controlling here. We have the same ability to edge offset it inward or outward however you want. And that's another one of the benefits of it being assigned a distance field. You have all the data going inside the shape as well. So we can say, go completely inside the shape and then it's up to you how much you want to break this up with the texture. So you see, as we start to bring in some of this weight map influence, it breaks up that effect and how broken up versus how blurry that is, depends on this gradient width combined with the texture influence. So say we had a much smaller falloff width, let's reduce this offset a little bit. Now we can have the texture influence be more like it's a hard edge, biasing the effect. So there's no reason, you can also have more than one of these per layer. So we could just go ahead and keep on adding another one. Say maybe we want sand as well. It's going to compile again. Let me see real quick. There we go. Sometimes I've had an issue where if you add a new layer and it doesn't show up, sometimes just slightly clicking that paint onto a component will kick it back into seeing that layer. There we go. So you can see it's basically drawing on top of the sand there. But we could do all the same things, kinda layer these effects and there's really no right or wrong way to do it. It's really just you specify these by name. And then you get all these values to modify. There's some other additional things you can do as well. Like I'm going to go ahead and back to this rock. Notice there's this option, Mask Using Band. Before I mentioned that these were signed distance fields, and that means that because they have data going both directions, we can make this gradient negative as well. And what that does is it will say everywhere outside the shape, draw. But what if you wanted to just say instead of drawing everywhere, you just wanted to draw out a certain band of thickness. We could say, what if we wanted a 20,000 centimeter band? Oops, hang on, I forgot about this. When the sign is negative, the offset also becomes negative, which is something I should- we'll likely fix for 4.25. But now we're basically specifying how thick that band of rock is. And we can do that with any of the different layers. And of course, final opacity, that allows you to adjust the opacity of the result as a final multiplier without changing the blending behavior where the transitions occur. So that, we can go ahead and draw out another little river just for fun. Go back to this brush manager and select River Spline. Sure. I don't know how far down we want to draw this, maybe 2000 units. So you see now when we keep placing points, we're going to make our little river on our island, not going to bother trying to close loop it, although we could. Now we have, where is it? For some reason it's just hiding the- Oh, I was in G mode. That was it. So now we're drawing the spline around the map and we have the same controls as before we can go under falloff and we can edge offset this a little bit to make the rivers wider. We could go down to the Spline Mesh and we could say, what if we want to actually show the spline? Then we're actually going to get river meshes there. And then what you would typically do here is use some of the options under falloff to mess with that offset and the bias. Obviously you'll want, this is the offset here is useful for rivers because you can say make sure my terrain is below the spline. So you can use this for a lot of cool things. And of course you can do the same texture based effects within these individual splines. You could come up and come back down to Paint Layers and we'll say, what if we want sand and rock in the river. So you see we got, you know, just typing it right away, you get, you see something. So you might want a little bit of a sandy bank down there and that allows you to kinda layer in multiple effects pretty efficiently. So we're getting a little bit, how are we doing on time, Victor? >>Victor: We're pretty good on time, yeah. >>Ryan: Are we able to go over a little bit if we need to. Okay. Because we were hoping to also show a little bit of the sky stuff and the virtual texturing stuff. Unfortunately, due to that same issue with versioning that I mentioned our, our virtual texturing demo did not load. So I apologize for that. But we do have a separate project, the one that was used for Dev Days with a quick example of some of the sky stuff. So just going to jump over and show that real quick because I know some people in the forums were asking about this. I'm gonna go ahead and make this maximize. So unfortunately this terrain has a default Material and that's why we chose to demo inside of the other projects but- This is demonstrating the new SkyAtmosphere that's in 4.24 and probably one of the most handy features that Sebastian Hiller added with this is if you hold control L you now have a little gizmo directly in the viewport for controlling the sun altitude and angle. So you see left-to-right motion pans of sun left to right, up and down lowers and raises. And so it gives you just a pretty convincing result right off the bat. And there's all sorts of things you can change with it. I'm gonna go ahead and select this guy. And I noticed, I looked at the forum earlier and there were people asking about, well how do you do planets? Well, technically this is right now set to be, this is in kilometers. It has the radius of earth. So you could go outside this, but pretty much the only way to do it is to crank this up and then book it into space. But you will eventually get far enough away and you will see the planet. >>Victor: It's like it's being rasterized. >>Ryan: Yeah. There is a little bit of an issue when you really have an earth-sized planet when you go between the fallback of scene depth to the analytical planet intersection. Let's see if we make this planet about one 10th earth scale, there we go. Little bit easier to see. Let's see if we can go even- There's something drawing there. I'm not sure what that is. But yeah, it's fairly flexible. There's quite a lot of parameters. If you wanted to experiment with alien skies, which I know there's a couple of questions about that. I mean, a lot of that is coming down to this Rayleigh scattering coefficient. So you can have your scattering of your Rayleigh value be whatever you want. And that combined with some of these extra distribution exponents changing the amount of Mie scattering is a great way to- Oops, I made my settings too sensitive, now we've got this crazy blue and green Martian sort of sky. I'm not going to pretend that I can just magically come up with values that look like Mars off the top of my head or anything, but you can definitely find something interesting with a fairly short amount of tweaking time on this. You can increase your Mie scattering and get really fog, and you'll see you'll very smoothly start to fade out that horizon line and create that. It's just a very photographic looking effect when you see how the sky and everything blends down to the horizon level. Let me reload this map really quick because I messed with it a little bit too much. And then there was also people asking a little bit about Sky Materials and clouds and things like that. So this map has a pretty basic example. And I'm sure you've all seen if you start UE4 Editor and you make a brand new map, just the default template map, it's had this basic Skydome for a while. It's just an unlit white cloud texture. This is actually that same cloud texture but reinterpreted with the new SkyAtmosphere Material nodes. Now when we're moving around the sky, the light here, the clouds, while they're not truly volumetric or anything, it's a simple single offset, like a bump offset type shadow. We still get the coloration that matches the sky. So regardless of what time of day it is, we have at least a somewhat plausible value for the sky values. You know, we can go all the way to noon time. We get slightly the appearance that the clouds are integrated. I'm gonna go ahead and pull that up a little bit real quick. And then if there's time I'll show, I know people were also asking about a prototype volume sky. So this is that simple Sky Material. And if we type SkyAtmosphere, we'll see these are all the nodes that are being used inside this Material, which are, these are the nodes that define the hooks to where a Sky Material can match the SkyAtmosphere from the Rayleigh scattering. So you'll see, we have a few things here like ambient light. The SkyAtmosphere provides a node to get the light scattered luminance which is the Sky Light for the sky itself. If you're up in a cloud in the sky, how much of that blue are you picking up from all the scattering around you? And then similarly for sun, we can get the direction of the SkyAtmosphere, Directional Light. Notice this has a zero there. That's because you can actually have up to two Directional Lights with your SkyAtmosphere. And then that gets combined. Where are we looking? Somewhere in here is the, here it is. So view luminance is the fog that the V-ray picked up. I'm just going to go through these- Light Luminance. There it is. So this right here, the SkyAtmosphere Light Illuminance is how much energy a point in space received from the sun itself. So basically having these as two different nodes, the light luminance versus the scattered luminance, it allows you to control your lighting terms based off of the parameters of the texture. And if you look at this texture, you can see it's the same texture I was talking about. Not a particularly next gen texture or anything like that, but just to show what you can do with even existing old content. What's basically happening here is we have three samples of this sky texture. And we're doing a bump offset type where we take the light vector and push the UVs around. And then here's a good example, create a self shadow using a simple exponential term that's based off of how much the density of that texture changed going towards the light direction and then adding all those terms back together at the end. And then another lookup for the opacity which provides the alpha. So this is something that. I feel it provides a pretty good way to get really cheap and good, well matching Sky Materials into a game. But of course you don't have to stop here, just simple textures. You can take it a little bit further if you want as well. So I'm going to go ahead and change this out to a more complicated Material. And I should mention at this point, we're jumping a little bit out of 4.24 right now and this goes into 4.25. But this is a Material that people can find if they have Github access. Hopefully nobody minds the breaking out of the 4.24. >>Victor: We're always excited about what's coming next. >>Ryan: Exactly. But you know, this is something we don't have any concrete plan or timing on when we plan to do it, but we've always wanted to do it. So notice this is a Volumetric Sky prototype using a volume texture and you see it still matches up to the sun. And we can change quite a few things about it, like get this- that's not what I wanted. So this Blueprint here defines that we can change things like the cloud altitude, the cloud layer thickness. We can bring it down, bring it way down, change the bias. And then, you could have very low density, very soft clouds. And I should mention that this is a very slow prototype that requires a 2080 Ti to really perform decently, otherwise it'll chug. So it's not meant to be, this is something you're gonna put in your game anytime soon, but it's more meant to show, this is the same application as that the Material we previously saw just applied to ray marching and all those same nodes for the sun color and the scattering color and all that. It just works when you hook it in to replace your traditional lighting values. So now it just all matches up. It's pretty satisfying to play with. So I would suggest everyone should definitely try 4.24. Try the new SkyAtmosphere, try moving the light dynamically. I don't have the example of the Sky Actor set up in here, but another thing that you can do is on simulate mode. Let's see if we can do a- We can, our sky will recapture if we're in simulate mode. So you'll notice when I go to pitch black, we have no Sky Light and we go up to noon, now we have some Sky Light. The thing Nick mentioned, basically you won't have to be in simulate to do that, but it can be pretty handy to be adjusting your Directional Light while looking at your Sky Light updating dynamically. And I found that it's something that people usually overlook a lot is you rotate your sun around and you think, I'll just rebuild lighting later. But it often changes a lot more than you think it will. So being able to see that dynamically change really gives you a good advantage in terms of really getting a photo-realistic scene. You really want that instant feedback. And then of course you don't have to, if you're not wanting to update dynamically, you don't have to do that at game time. But definitely recommended for development. I feel like I got through most of the major beats that I was hoping to get through. We had a few rough spots, but are there any questions on the Slack or on the forum that you'd like to pull up? >>Victor: There are plenty of questions and I think the first thing we should tackle because there are a lot of questions around it, is whether or not these tools can be used at runtime. And correct me if I'm wrong, but I believe that all of these tools are used in Editor time and then they, including the layers and the brushes, everything gets baked down into one mesh, right? >>Ryan: Correct. Well not necessarily. It is texture data. But when we say each layer is a whole new terrain dataset, that means you've got a copy of the height, a copy of the paint layers, all those copies get collapsed down to just one of each at save and cook. So you're not going to have five sand layers and five rock layers and five heights. You're just going to have one of each. So those kinds of good all compressed down. Like imagine if you're in Photoshop and you said merge layers. It's like when you're saving the map and it's going off to your game, it's always doing a merge layers for you, but it's keeping all the same data. >>Victor: And so there was another question. There's no merge layers option in the Editor. >>Ryan: There is not, although it was definitely something that was frequently requested. There's a couple of ways around that right now such as you can right click and export from the layers and you can reimport into a base layer. But yeah, a merge down and a flatten are some of the more important things we need to add into the next version for sure. >>Victor: On that topic, just to clarify because there were several questions on it. It's also not impossible, to, say, move one of the Blueprint brushes at runtime and move them. Right? You won't see it- >>Ryan: Right now it's not because this. uses some fairly GPU intensive render target resources that were not really budgeted to load all that in just randomly at game time. But it does get requested a lot, particularly like Fortnite has requested to do things more dynamically like that. But I guess we'll see what we can do, but we don't have any concrete plans there yet. >>Victor: Yeah. There were some examples sort of like having a comet come crash down, make a crater in the Landscape. But that involves a lot more than just merging in all together as one dataset and then shipping that. Let's see. Let's stay on the Landscape Tools, and then we'll go back a little bit more general to 4.24 features. Let's see. I have to filter out all the runtime questions. Will volumetric light maps support level streaming in 4.24? >>Ryan: I don't know. >>Nick: I would have to check the release notes. I don't remember off the top of my head. Sorry. I don't remember it. Yeah. >>Victor: We'll follow up. Oh, I was in the previous section. There's a lot of questions. And there was a lot of comments that this is really cool. >>Ryan: Awesome. I'm glad people like it. >>Victor: They wondering, is there any tradeoff using the 4.24 layers? >>Ryan: I guess you might sacrifice some of your runtime editing performance. It still does benefit from a pretty fast video card on Fortnite Season 11, we used a system very similar to Landmass but more geared toward the water system, which we'll share more in the future. And we ended up getting the level designers 2080 Tis because they ended up having over 50 of these Custom Brush Assets on their terrain. So it's a lot of rendering that has to be done. So optimizations are definitely planned for the future. Right now the biggest downside to how they work is that for every brush, it requests and returns the entire Landscape. So the slow part of that right now is not actually the GPU render of the render targets. It's passing all that data back to Landscape and then splitting it up into the components and updating bounds and things like that. So we know there was a lot of low hanging fruit that we can optimize. But we just got really fast machines right now to work around it, but we're aware that to scale, we'll need to hit a better performance target. >>Nick: Yeah. And I would expect the other, maybe one of the other things to keep in mind would just be disc size. Each layer is again, its own copy of the height map and weight maps and so on. And so if you have many, many layers, then you're going to have pay the size space for that and memory costs for that. >>Victor: But that's only a cost while we were working in the Editor. >>Nick: Only in the Editor. Yeah. The runtime cost is is actually no different whether you're using layers or not. >>Victor: Is there a way to link Foliage Volumes with the new layer system? >>Ryan: So, I mean, not directly itself, but they can read Landscape Paint Layers to mask. And there was one other new feature that the Nick talked about in the Dev Days talk, but didn't quite make the cut down slide deck is that foliage types now have inclusive and exclusive masking. So prior to 4.24, I believe you could only have an inclusive mask. You could say, "hey, if I have this rock layer, spawn these rocks here." But then say you had a river layer you couldn't say, "hey, don't spawn these rocks in the river layer." You had to then basically erase that river layer from your rock layer. Whereas now you can say, "spawn on this but not on this." So it's like and or logic essentially. A little bit more flexible. So I would say that probably gets you close to what you need there. But feel free to hit us up afterward with a more specific use case. >>Victor: Can we apply displacements on different layers and use it as an additive blend? >>Ryan: Yeah, so the displacement, like I was mentioning before, when you make a new layer, it is defaulted to a value of zero. And each Landscape layer can store a range of zero to 65 K but we split that into -32, +32 K. So if you have a displacement that paints down in one layer, you can definitely keep on adding those and stacking them and yeah, it would look like displacements adding each other. And it just depends on whether that data was above or below that zero threshold, which is pretty easy to tell. If your Landscape is at zero in the world, you could tell, is this making it go above or below the world origin zero? And you can use that as a reference. >>Victor: Is each layer its own Asset file so that you can have multiple people working on different areas of the map. >>Ryan: I believe we got to that part yet. >>Nick: No, they're not different Asset files right now. >>Ryan: Certainly it's come up because a lot of the benefit of some of this stuff is to increase people being able to work together on things. >>Victor: And someone was asking and you showed us but maybe they missed it, if they can make custom Landscape brushes in this latest version. >>Ryan: Yep, you can. So I would suggest if you want to make your own custom Landscape brush to- this was probably toward the very beginning of the talk, but I'm down under- go back to this build. So down into the content browser under plugins and of course remember to show Engine and Plugin Content under Blueprint Brushes. There's this custom brush Material Only and I would say this is probably the most basic brush to use as an example. It's not- it has a few features in there, but really it's just, it's creating Material Instance Dynamic. It's setting some parameters and they're really not that many. And then it's drawing the Material. The construction script does specify there's some cache stuff, but yeah, you should be able to basically duplicate this and modify the Material and add onto it as a base without really- >>Nick: Yeah. This is a good starting point to start trying to make your own. >>Ryan: Yeah. Versus the other one, the one that uses the distance fields, a little bit more complicated, but it still has some- you could definitely still feel free to look in here. You know, there's quite a few more functions and things. There also are a few generic components inside here. Like if you look in the brush manager, I mentioned that this is the Actor that gets added behind the scenes to store common Assets to reduce memory waste. If you look in here, there's this jump flood component. This is actually what's making all the distance fields. So you can kinda- and this is a Blueprint that can be added- or sorry, it's a component that can be added to other Blueprints. So it has all these functions for finding edges and jump flooding and things like that. So in a way it was attempted to be split up, somewhat modular. So yeah, if you wanted to look into your own jump flooding, you could look at this jump flood component and see what's required on that. And yeah, I'm definitely intending to help provide some more written Assets, either blogs, or working with the documentation team to help make some more clear examples on different things we can do here. >>Nick: Yeah it's definitely a fairly technical endeavor to make a new Landscape brush. But obviously there's a lot of flexibility, you can do just about anything you want. >>Victor: Some of the questions were around, and maybe you want to talk a little bit about the benefits of doing this in Editor versus in a DCC tool and then export it into. >>Nick: Sure. I mean Ryan could probably talk about this a little bit as well, but the biggest thing is being able to actually see everything update in real-time. Like as Ryan's going around and moving around spline points, adding new brushes, changing brushes. I mean you get to see exactly what it's going to look like in-game at the end of the day without, if you're in a third party DCC tool and using all of their tools then you import everything into the Engine and now you just have this one layer. Now some of the aspects that Ryan was talking about with multiple layers, you're moving, okay, this city actually, it really needs to be over here for gameplay reasons or I want to make a comet hit the world, and I need to sort of like create a crater here. If your process was go back to the DCC tool, do all of your modifications there, pull it in, and then you have to go and update all the actors to move them to coordinate it with that. I mean, you could have the brushes for making that indentation. I mean, they're part of the level and set of Assets that go along with the world. So you can drive that entire city around that set of actors around it. We'll just go and modify the Landscape for you. >>Victor: And another benefit is that if you've painted foliage, it will move with the Landscape rather than if you imported something externally. Right? >>Ryan: I would have definitely loved to have these tools when we are working on the Kite demo. That was the tech demo we did a couple of years ago where I was responsible for setting up the initial shape of the overall terrain and we wanted to have everything exist in one terrain and tell the story with one continuous camera motion without faking jumps all over the place. And that was a huge pain because what we had to do is try to make things look neat in world machine, bring it in, look at it in the Editor, find out it didn't quite match what we wanted to from a scale or camera perspective and basically rinse and repeat until we had magically all these 10 or 12 different vignettes all working together. If we had just been able to do that in the Editor looking at the Editor camera, looking it through the Editor FOV, it definitely would have made some of that a little bit easier. >>Victor: Can you make a multipass brush such as erosion? >>Ryan: Yeah. So right now there is a simulation class of the brush but it's not fully hooked up. To go into erosion you actually have to venture into a little bit of an older version of Landmass. So Landmass actually started outside of Landscape and using a Static Mesh Asset. So there's a map in here actually under Landmass, Landscape Maps, called Landmass Erosion Shallow Water. And this is actually not a Landscape but it's a Blueprint called Landmass or Landscape Layer Stack. And this is actually previewing it with Instanced Static Meshes, but it offers, I don't want to go through all the features because it's like a pocket version of the entire Landscape tool. But really it offers this erosion option, which you can have free particles versus shallow water. See if we can, Oh, I forgot, you don't use simulate button with this tool because there would be no way to get the data back. You actually just press start tick so you can see we're simulating some water running down and pulling up in here. I'm going to stop it. So there's different solvers. There is Shallow Water, Free Particles, Scatter Gather, Simple Water Level. Free Particles is probably the most flexible and robust. And what this does is you actually get a little particle for each cell on your terrain and then when you simulate those guys, you'll see them rolling downhill. Right now it's set to reset every 5, 12 iterations. Let me set that to zero so it doesn't reset. So we can just watch these particles fall down the terrain. We could tell it to erode the train with advection. And this whole time you can toggle the water on and off. It's a little bit extreme right now, but yeah, you can basically tell it a lot of information about rain and solubility, evaporation. We probably don't have time to go too much into this, but velocity damping is a big one. And you can also do weight map effects similar as before, but it's not straight forward to get this onto the Landscape tool. That's what we were hoping to eventually refactor this stuff into Landscape directly. But yeah, if you want it to look at a starting point, there's that erosion shallow water map and you can change the solver down here. Yeah, probably, I don't know how much time we really have. But there's a couple of other ones in here. Like simple water leveling is probably the fastest. And this one is not really a fluid, sim, it's more like a water leveling algorithm. But when you have it set to rain and erode you can do some cool stuff. I don't know if, didn't really set up any good settings or examples on this and I'm not sure if I really have time to go into it too much. But there's that test map there for you guys to look at and happy to go into it more in the future and hopefully 4.25 we make some progress. >>Nick: And it's a cool prototype. But yeah, just to be clear like that, you can't do erosion with custom brushes the way they currently work. >>Ryan: One way you could do it is, do this on the Landscape tool, export it out, and then import that as a displacement on a custom brush or just, there's other tools in Landscape to apply down to displacement, like the pattern painting texture. So you could export or import, but eventually, yes, we do need to have a proper way to integrate that. >>Victor: We still have some time if you guys are cool staying on for a little longer. >>Ryan: Sure. We still have more questions or what are people interested in? >>Victor: They were a little bit curious about the river spline and if it's possibly- can a spline gradually deepen to follow a hill or a canyon bottom? >>Ryan: I guess it's alright to give a little bit of water plugins telegraphing for 4.25, or what is your-? >>Nick: I guess the big thing there is, we did do some some additional work that we need to, we need to do some work to try to productize it, to make it like a real good Engine feature. But yeah, we also have some prototypes and custom work that we're trying to figure out the best way to get out there for everybody to use. >>Victor: Cool. So not in 4.24, but possibly in the future. >>Ryan: Right. Yeah. The cool feature there is spline metadata. We can have multiple data points on splines, so we're using that to modify depth per point, modify velocity per point, kind of define water in a more detailed way. So, I think it'll be interesting to whoever asked the question. >>Victor: Cool, that sounds exciting. Can I use more than one SkyAtmosphere Actor in a scene to simulate more planets? >>Ryan: That's a great question. I don't believe currently, but wouldn't- Sebastian would be the one to ask. >>Nick: Yeah, I don't know how to answer that question. >>Ryan: I know it supports two suns. >>Victor: That was another question, but you did cover that earlier. >>Nick: I'd assume not, but- >>Ryan: Yeah, I've never successfully moved it away from the origin myself, but I haven't tried every single setting in there. >>Victor: Is the river brush currently limited to a single Z height. >>Ryan: No. So, the actual spline brushes, those can have varying Z height. It's only the kind of 2D shape, like the mountain and the plateau, that was limited and that was more a limitation due to how those were generated. So they're rasterized from the spline, but without actually ever making a mesh, it's kind of a trick where you have your spline and for every two vertices, you draw a polygon using the very first spine point and then you, based on the, if it's counterclockwise or clockwise, you make that triangle either additive or negative. And then you just draw those triangles and you get a perfect rotoscope shape of that spline, but you don't actually have any nice triangulation. So, you can't really support height change within that shape anymore. But I didn't feel like it was a major enough limitation to not do it yet, but more like eventually if we could get a proper triangulation pass, it would probably make that even more flexible >>Victor: Still a couple of questions regarding what's available as part of the plugin and what will be available as part of the content examples. They're just curious about what you showed, what will be. >>Ryan: What's in the examples right now, let me switch back, is basically down under Landscape, under Maps. So, this Custom Brush Test Map, this is the one that is the test map for actual custom brushes on an actual Landscape. And it's a very simple map. It's got a little, one little river, one little lake and each one of these has a couple height maps set on it. It's a pretty small terrain. Basically, just meant to be a proof of concept and make sure that it's still working correctly. The goal was to not add any high-resolution textures or anything to keep the footprint of this plugin as small as it could. The ones that are called Landmass over here, these ones are the ones that are not using Landscape, but they're using like the separate mesh itself. So, you can start from here to do erosion stuff or you can start from here to do actual Landscape work. >>Victor: Okay. >>Ryan: There's a little bit of preview content stuff, but this is just basically Materials that are based off of like this Material here is all using textures that you find inside of Engine content. So yeah, the pickings are fairly slim to make a Landscape Material without any custom textures. But, if you look under Engine content, there's a few basic ones. >>Nick: Then I guess all of these brushes that you've shown, they're all in the Landmass Plugin itself. >>Ryan: Correct. >>Nick: So, it's something that they can include in their own projects to use as a basis. >>Ryan: So maybe that is the part that wasn't exactly clear, is that, for most of the types like the canyons and the mountains and things like that, they're all the same Blueprint Asset. It's just this dropdown for brush type that you're changing. Really there's only two major types. Even though there's this river here that's just kind of like a subclass of custom brush. So, you can kind of make data only children where you say, "hey, all I did here is select this box and change this default." You know what I mean? So, you can make your own Blueprint versions that are kind of just changing the defaults and changing the modes and that can be pretty useful so you don't end up redoing all this work and you kind of create some nice archetypes. But yeah, really the custom, the Material Only, and then the Brush Landmass, these are the main two ones. And these guys over here, that's the brush manager. You don't really need to interact with it outside of making sure that it's there. And then you get these shape drawing tools. That's pretty much it from the brush manager. >>Victor: Alright. Let's move back to some of the general questions that came up during Nick's presentation. Let's see. Still in Landscapes. With Runtime Virtual Texturing. Does this mean we can use large landscapes in VR? >>Nick: Can you use large landscapes in VR? I mean, ultimately that's going to come down to the complexity of the Landscape. I can't answer that without knowing the type of content, because it's basically, build a large Landscape and start profiling it. And you'll probably have to work at, like what it can do is it can mean the number of layers you have don't impact the per frame performance that much anymore. So, it might allow you to have more layers than you could in the past. With something like VR where you can absolutely never drop a frame at 90 hertz. You do need to be careful of the tiles will update over time and how many tiles do you need to update over time to maintain quality and making sure that that stays within your frame budget. So, there's still going to be some sort of performance and technical aspects to keep in mind but it can absolutely help taking a complex terrain and making it more affordable. >>Victor: And it can probably also give you much higher resolution textures up close. >>Nick: It can absolutely help with that yet. >>Victor: Let's see. >>Nick: It can actually also help in the sense of like, some of the, I think in a much earlier livestream when I think Jeremy was on, he was showing some examples of being able to take things like taking a bunch of Instanced Meshes and rendering them out into a virtual texture and then sampling those on the terrain. So rather than some of those are nice performance optimizations where you're not rendering all of those objects every frame. You render them into the virtual texture, you sample them on the terrain, and it's a good way to add terrain detail without adding a lot of cost to it as well. >>Victor: They were a little bit curious about the performance impact for using the new Sky and Atmosphere. Is it similar to volumetric fog performance impact? >>Ryan: It's going to be much faster than volumetric fog. >>Victor: Okay. >>Ryan: I think Nick did the times. it's almost, it's fairly inconsequential. Not entirely, but- >>Nick: Yeah, I think I had some times on the slides for I think updating the lookup textures on PS4 was around three tenths of a millisecond. And updating the lookup textures on an iPhone 6S was under one millisecond. So yeah, absolutely usable across a variety of devices. And actually, I mean, we're using this in Fortnite Chapter 2 as well. >>Ryan: Do we have a sense for what the old SkyAtmosphere was costing. I assume it couldn't have been that much faster. Like they're probably similar-ish. >>Nick: Yeah, I don't remember the numbers, but it's competitive for sure. >>Victor: Nice. Could you, they were wondering about any examples of applications for USD workflows? >>Nick: A lot of times right now it'll be if a lot of this comes down to workflows outside of games, like with VFX pipelines for instance, where- >>Ryan: Virtual production. >>Nick: Virtual production, it's a lot of cases where you have a scene and you need to be able to open it in Unreal and be able to open it in other DCC applications, potentially do final renders outside of Unreal with an offline ray tracer that wants to take hours per frame, stuff like that where you need to be able to, you want to be able to go into Unreal and in real-time scout out areas, modify your scene and then be able to go back to your other DCC applications and seeing those update in real-time. For traditional game workflows, most of the time you're going to be building your final world in Unreal and rendering it in Unreal. And so, where you don't need live updates between sort of DCC applications and Unreal, it's going to be less useful. >>Victor: That's pretty good. As always, they're a little bit curious about Chaos. Been a big beat this year. And they were wondering if it's going to be built in, in 4.24. >>Nick: 4.24. No. It's still available in the same early access data as it was in 4.23. I mean, obviously there have been improvements in terms of additional improvements to stability and performance and so on. We've been working a lot on it. Our goal is with 4.25 to be able to make it the default physics Engine in Unreal and bring it to sort of production ready status where we recommend that everybody start using it for their new projects. >>Victor: It's supposed to have parity with sort of existing features than- >>Nick: With PhysX. Yep. >>Victor: Yeah. Let's see. Then one about runtime. You touched on what's new for Chaos and 4.24. Here's one regarding, are the mesh editing tools still planned for UE4? >>Nick: Yeah, and in fact there's- I didn't really talk about it. Here we've been doing a lot of work with the mesh editing tools. There are a number of new improvements to both sculpting and polygon modeling that will be available in experimental format in 4.24. So definitely check them out and, and get us feedback. But yeah, it's an area of active development for us. We're constantly working on improving them. >>Victor: Let's see. Can you use shape files to import roads, et cetera? >>Ryan: Hmm. Right now, there's no existing way to import a path for one of these splines, but it's something that probably could be done with a pretty lightweight Blutility of some kind, would be my guess. >>Victor: Will there be Skeletal Mesh Instancing in this version? >>Nick: Skeletal Mesh Instancing? No. And that's not something that we're actively working on at the moment. >>Victor: Can you use virtual textures with height maps for Landscape layers? >>Ryan: Yes. So that was one thing I was sad that we kind of dropped the ball for the demo today, but virtual texturing, you can read from, you can- for a mesh, you can both contribute to and read the virtual texture. And there is a height channel option. It requires the use of two Runtime Virtual Texture Volumes. And when you create RVT Asset, it has a type. The default I believe is base color, specular roughness normal, which is kind of the minimum payload you need to really have a good Terrain Material. And then on the second one you select height, which is a single scalar output. But then when you have a shader that's sampling virtual texturing, there's basically a node that looks kind of like a Material Attributes node, but it's called Virtual Texture Sample. And it will have all those pins on one node. So even if you have multiple virtual textures, it all lives on one node. And then in the shader, you can read the Landscape height, you can blend some other really cool things you can do or you can conform your meshes so that the flat bottom matches the slope of your Landscape. You can blend to the common Landscape texture when you get too near the Landscapes so that you don't see seams. All that stuff is possible and too bad we didn't show live today, but we'll make sure that we get a demo out there at some point. >>Victor: A little bit back to Chaos is one of the main end goals for Chaos for it to be deterministic. >>Nick: For it to be deterministic? Not exactly. Probably not in the way the question is being asked. So, simple answer is no. >>Victor: I think it's in regards to multiplayer and such. >>Nick: Yeah, I mean we are going to be working on multiplayer in physics and how those two work together and how we can enable high quality networked physics and physics interactions. So that is definitely a goal that we have with Chaos. >>Victor: Is there any improvement for the collaboration template for VR. >>Nick: For the collaboration template? I'm not sure. >>Victor: I'm not sure what that is either actually. They might mean a Multi-User Editor and the fact that you can do it in VR. So, it might be the multi-user example project. >>Nick: Yeah, there might be an update around that. I'm not sure. >>Victor: We're getting close to the end here. I think that's pretty much it. There was one question I wanted to round off with. Oh, here's a good one. Can you export the merged data for Landscape? >>Ryan: That is a good question. I know you can definitely export the individual layers. I believe you still can, let's see here, we go down to Landscape. >>Nick: We'll find out in real-time? >>Ryan: Exactly. So, we have our Landscape layers. We should be able to, yes, so basically you can export the target layers here. You can't quite export the individual layers yet, but you can export the final result. So that's what I was mentioning before as kind of the work around for the lack of a bake or merge down is export the results and then re-import it with lesser layers and then it's kind of baked down into that lesser layer. >>Victor: Let’s see if there is any that came in in the end here. Can you create some sort of a mask-based instancing from say Houdini or something? >>Ryan: When you say instancing can you-? >>Victor: I'm not sure. That's all I have to go with. >>Ryan: I mean we use Houdini Engine and do scattering tests with Houdini. I'm not aware of anything that's straight up built into Landscape right out of it. But yeah, you can import a mask from Houdini and plug that into your Landscape and use that as a foliage type exclusion mask for example. Maybe I'm not exactly sure the exact nature of the question. >>Victor: That was a discussion question. Yeah. I think we're about to round off. There's a question- Go ahead Nick. >>Nick: Go ahead. >>Victor: There was one more, which I think was quite interesting. How hard is it for you guys to implement features in the Engine? What's the process like? Does it feel similar to working on a game? >>Nick: How hard is it to implement features in the Engine? Really depends on the feature, I guess. I mean, generally, at this point people working on the Engine, like we know it pretty well. So implementing new features is- I don't know, I would say the hard part is trying to make sure that as we add new features that they're cohesive with the rest of the feature set of the Engine. Not trying to- it'd be a hodgepodge of features, but making sure as we're adding new features to Landscape that it's sort of consistent with the rest of the Landscape feature set. That things work with Landscape and with meshes and with Static Meshes, Skeletal Meshes, et cetera, like trying to just be consistent about when we're adding new tools, making sure that it works across the board with everything else sort of like every new feature we add to some extent, it increases the matrix of all of the different features trying to work together. And so trying to make sure that everything works cohesively together and you don't run into cases where this feature doesn't work with that feature and these things are incompatible and those things are incompatible. I think those are the hardest aspects as the as sort of the feature set of the Engine continues to grow, making sure that we consider all of those cases. >>Ryan: Sounds good to me. >>Victor: Sounds good. I think that's about it for our guests today. Thank you all for tuning in. You can expect 4.24 next week at some point, but before you go as always, I'd like to mention a little bit about what we've got going on in the community. If you're unfamiliar with our different forums or sort of our community channels, you can go ahead and go to unrealengine.com. Go check out our forums. It's a good place to discuss what you're working on. We frequently go visit the release and work in progress channel and that's where we find some of the content we use for the spotlights that you saw earlier in the beginning of the stream. If you're interested in meeting other developers around in your area we have over 150 user groups around the world. Some of them have monthly, some of them have biweekly meetups. But you can go ahead and go to unrealengine.com/user-groups and see if there's any in your area. If there are none and you already have a little local community of developers or creators who are making things and you're interested in sort of being an official Unreal Engine Meetup group host, you can go ahead and send an email to community@unrealengine.com and we will talk to you about what it's all about organizing a user group. If you stream on Twitch, make sure to use the Unreal Engine category so that everyone is interested in what you're doing in Unreal Engine can go ahead and tune in. And then, don't forget our community driven Discord server Unreal Slackers. Just go to unrealslackers.org and you'll get an invite right there. I think they're close to over 27,000 members now, which is really cool. It's very active. Quick discussions, especially considering the game jam we had last week. I think the game jam channel definitely spikes in the amount of messages that are going on in there. And on that note next week we will be announcing the winners of the 2019 Epic MegaJam. The judges are hard at work making sure that we go through all the titles. We had over 460 submissions, which is way beyond- It is definitely a record and it's way beyond our previous record. I did some of these statistics and we actually had over a thousand individual developers taking part in anything that got submitted. I know the sign ups on Twitch was definitely a lot higher than that, but definitely a thousand as part of submitting something. So it's really exciting. That's what we're doing next week on the stream, come watch me and Amanda play all the games. And then I think until next time thank you, Nick and Ryan, for coming on. >>Ryan: Thank you. >>Victor: There was definitely a lot of words such as like Ryan Bruck's sorcery going on in the end, especially when you were just throwing up some kind of fluid simulation. I don't know where, which is quite interesting and I think everyone is looking forward to those tools in the future as well. If you have any other questions, go ahead and hit up the announcement thread on the forum and we can go ahead and look back there and see if there's something that we didn't cover that we might want to touch on. But other than that, until next week we say goodbye here from the studio and I hope you all have a good week. >>Ryan: Bye. >>Nick: Thank you.
Info
Channel: Unreal Engine
Views: 91,582
Rating: undefined out of 5
Keywords: game development, unreal engine, ue4
Id: gwobU3BqY1o
Channel Id: undefined
Length: 108min 13sec (6493 seconds)
Published: Thu Dec 05 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.