>>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.