All right, great start. This is the kind of feeling we're going to be having for the rest of the talk, I think.
I must admit, a lot of this came in last minute.
But okay, welcome everyone to 101 tips and tricks in Unreal Engine, the reckoning.
And some of you might be thinking, the reckoning? What are you reckoning?
What do you reckon?
Well, this is actually a continuation of a talk that was done in 2019.
It was called 100 Unreal Engine 4 Tips and Tricks at Unreal Fest Europe in Prague.
And the original talk is basically that the European Unreal Engine evangelism team
attempted to do 100 tips and tricks on stage in a single presentation.
Very lofty goals.
And I was actually not a part of the evangelism team back then.
But I was there. I was in the audience.
look it's me you can see that this was six years ago because i was only half gray back then so it's
i progressed and you can see how excited i am oh it's happening oh it's happening
and now you are all past me it's super exciting um and this is the picture i took from the audience
i don't know if they said we weren't supposed to but they're sure there's this cat i thought wow
this is so much fun what a fun team they're like up on stage and they're not taking this
so too seriously, they have these funny cats.
And I was like, maybe one day I would like to work for the team.
I was working at Hausmark then, by the way.
By the way, I love the company.
If they have openings, you should apply there.
And I got this clip just to show you how fun it was being there in purpose.
If you have any trick, do you want to share with us?
We are all for that.
I didn't ask him if it was okay to show that, so I hope that's fine.
Sorry, Andreas.
But I was looking at them and I was like, oh, wow, like what a fun team.
Like I would love to be a part of this or maybe I'll, you know, apply there someday.
And the thing is, I actually got a job there a couple of years later.
But that was actually during COVID.
And we didn't really do any events during COVID.
And then after COVID, people just started leaving the team.
They were like, I want to make games again.
And I'm like, can't fault that.
and eventually
it was just me left.
I was the only evangelist in Europe
and then they disbanded the evangelism team
so I never got to do
every evangelist on stage presentation.
It made me so sad
because I wanted to do
a redemption for them.
I was like, guys, you know we actually fucked up the presentation.
They know very well because they called it out.
Anyway, it's not actually 100 tips, it's actually 69.
Yes.
They messed up.
I was like, guys, we need to redeem it.
But now, the ex-evangelists are lost their tips, lost their time.
I don't know where they are.
So I decided instead of redemption, it'll be a reckoning.
I am going to try to give 101 tips and tricks.
Hello, everyone.
My name is Ari Arbjursson.
I was actually a European Unreal Engine evangelist 2021,
so two years after the original one.
Now I'm a senior software engineer for the technical developer relations team
at Epic Games, which is actually kind of cool.
I still get to do the same thing.
I still get to go up on stage and make a presentation.
Actually, I get to do more of that.
And less of the whole being the main contact point
for Epic Games for all the indies.
Sorry, indies.
Now I focus mostly on everyone.
Let's get into it.
Are you ready for 101 Tips and Tricks?
The Reckoning!
First tip, the Property Matrix.
All right.
You can actually edit multiple assets at a time
with the Property Matrix.
you just select a lot of assets, you right click, and you do edit selection in property matrix right
there. You can pin any property to a column, there's a little pin view there, and the pin columns, and
you can see it in the kind of matrix, so you can see which one has this on, which one has it off,
like there, see, oh, Nanite is off for all of them, so you can just tick it, tick it, and then press
save all. But also, you can select a lot of assets in the list, and then the details view, if you just
click the button that you want to be the value that you want to be the new value. You can set it
for all of your assets or as many assets as you want at the same time. There's a huge time server
and you should be using it if you're not already when you need to edit the property of multiple
assets. Tip number two, unhide runtime components. Usually when you add components dynamically either
through construction script or at runtime through begin play or even just at any time,
Android doesn't show it. It's just invisible. And you're like, I want to see that component,
even though I'm not adding it at design time.
And I don't just say, no.
But the thing is, it's hidden behind the checkbox.
Go into your editor preferences.
There's a hide construction script component in details view.
And if you just uncheck that,
it will show all components that you add
either through a construction script or at runtime.
So this is really nice for debugging.
Like you can see here,
there's just the default scene route
even though the constructor is adding a static mess component.
And then when we uncheck that,
there is the dynamically added static mess component.
next tip
wait did I go too far?
no
you don't need complex physics on everything
I'm actually seeing this a lot
I'm helping a lot of studios with their performance
and I'm seeing like
you just got complex physics on everything
but it's not a big problem to fix
because you can just go into project settings
and turn the default shape complexity
to use simple collision as complex
complex collision is only for you
when you trace into the scene it not for the default when they colliding with actual things and if you don need it like we don need it the engine doesn require it you can just turn them off
Also, speaking of physics,
usually physics is kind of started in the end of pre-physics.
After pre-physics is going to be start physics group,
and then there's a little during physics,
where physics is happening on another thread,
and then there's an end.
Actually, I used the mouse, sorry.
and then there's an end physics right here
where it's waiting for the physics on another thread
until it comes back
and you can actually move some of your ticks
from the pre-physics group
like here you can see how
to the end physics
and then you're not spending any time waiting
although I would say that the main tip should be
just don't have your physics seen so complex
that it would make space like that in the first place
but if you already have it too slow
and you're like
I can't do anything about it
or so you think, you can just start moving things over to the during physics.
You can, I say you don't need to, you can't write or read from transfers,
you can actually read from them.
It's just going to be the same transfer that were in the pre-physics
and before the end physics happened.
So it's just going to be like the data during that frame
and during the previous frame and not this frame.
Next check is to check out the chaos visual debugger.
You can actually view the complete physics scene state
and all the physics collisions and queries for each frame
during your recording.
It's amazingly powerful
because it basically shows you
what your game's hidden world looks like.
And I'm often looking at captures from clients
and the physics scene looks unoptimized.
And I'm like,
have you looked at the Chaos Visual debugger?
And they say,
we didn't even know it existed,
which is fair because it's new.
But I want to ask,
how many people in here
have actually opened the Chaos Visual debugger?
I see about seven hands out of 300.
I have a bullet point for that.
most of you haven't opened it and I know it
go in
like when you after Unreal Fest
go to your workplace or your home or whatever
open your project and just
chaos visual debugger
it's under I should have put it there
it's under tools, debug, chaos visual debugger
it's right there just open it
press record
you can do it also for a package game
and it's immensely powerful
and it shows you the hidden world
and there you can see like
oh the trees are a little complex
I can simplify them
and you can also
there's a show flag where you can switch
between simple, complex, or both.
By default, it shows both, which is a little bit confusing.
You should hide the one you're not actively looking at.
Better cooker logs.
This is actually from...
I'm reusing it for my presentation.
I did not have a lot of time to make this presentation.
I reused it for my advanced debugging talk.
But sometimes when you're cooking a game,
you'll get a warning like,
hey, your asset is unoptimized,
or this property has something wrong with it.
And it will show you a warning.
And it's like cooked packages, 2,887.
Hey, something's wrong.
and you're like, which asset is it?
And I was like...
But what you can do is that you can open Project Settings,
go to the cooker, and you can change the cooker display mode.
And this is actually two tips.
First tip is you can put it to names,
and then it will show the names of the asset
that is currently being cooked.
So right over here, it will say,
oh, no, something horrible happened.
But you know it was in the asset that is currently cooking.
Old unused blueprint.
I'm not even using that.
I'll just delete it.
easy fix. But also, the second tip is that it also has instigators. Instigators will show you
what pulled that asset into the cook in the first place. Wow. I know, right? Did you hear people
that I've known in Epic for years going, what? Yes. I noticed this and I was like, who added it?
And it was just a random change list. It was just like some guy in Epic was just like, I needed it.
so I added it and no word about it anywhere.
This is your word.
You can turn that on.
Insights task channel.
This is great.
Sometimes when you're profiling,
the thread just says wait until task is complete
and you don't know which task it's waiting on.
So what you can do is when you do the task trace,
it will say default comma something.
You can add comma task or in the channels view in the editor.
You can do it in the Unreal Editor
in the little button in the lower right.
You can turn on the channels,
turn on the task and now when you click it it's going to show these awesome arrows like here's
some task that was launched over here but it was waiting on this task before it could happen
and then eventually this task had this as a prerequisite so it's amazingly powerful for you
to kind of figure out why something was waiting on you don't have to go it was waiting on something
i don't know probably the gpu now you can see exactly which task as a programmer this is one
of my favorite tips, das beis dir.
You can see
some of my Icelandic accent.
So, sometimes
you have a build, and the build
is doing something weird, and you want to be able to
debug it, but maybe you only have a shipping build,
and it's on Steam, and you want to be able,
and it only crashes on Steam, and you're like,
oh no, I need to debug it, but I'm
already on the newest commit from main,
so I need to go to the commit that matches
the build
from Steam, and then I have to
cook it locally? No.
You do not have to cook them
if you already have them somewhere else.
So you can just tell the executable,
hey, your base directory is actually
in my Steam apps common, my game binaries,
VIN64 folder.
It's always in the VIN64 folder.
And then it will run just executable from Visual Studio
or wherever you're launching it from.
And it will use the cooked assets.
It will use the saved game.
It will use the logs directory and everything
from that base directory.
And you can even switch from shipping build
to development build or debug build.
and it still work with the same cooked assets It an amazing tip If you doing any sort of debugging this is going to be like a Hail Mary many times So like yeah really like try it out
A little bonus tip, if you download a plugin called,
in Rider it's called EZArgs,
and in Visual Studio it's called UnrealVS,
you can easily set any startup parameters
just there right in the editor,
and it will show you the last few ones.
This is a bonus tip, but I won't count it
unless I run out of tips, then I will count it.
Global settings for your INI files.
Any config files you put into my documents
slash Unreal Engine slash Engine slash config
will overwrite all indie settings for all editors,
all projects, and most importantly, in my opinion,
all games on your computer.
So if you have a favorite setting
that you want to be applied to every single Unreal game
that you play, even though it's on like Epic Games
or Steam or something like that,
you can overwrite it there.
just have it called user and then the name of the settings and then it will override it so here you
can see an example uh users me documents on an engine engine config user editor per project
settings i like to have the asset editor open location to be main window by default i like i
don't like to automatically hot reload new cpa plus classes because i'm going to edit it anyway
stop compiling it it's empty uh and also live code extension automatically compile new class
to false. You can even do
the user input so that
for example, my keyboard is
Icelandic. I don't have the tilde key. I have
the Ö key though. And the Ö key isn't
doing anything. So console keys Ö
opens the console. Ö.
And then for
debug exec bindings for the
toggle debug camera, I have I.
So whatever of your
weird characters you have for whichever country you're from,
you can actually put them to use.
Also,
sometimes I have more than one, sorry,
they're a bit programmer centric,
but I'm a programmer.
I'll try to vary them a little bit.
So when you generate Unreal Engine solution,
it's just going to be called ue.sln.
And if you have two folders
and you open another solution,
you're trying to tap between them,
they're just both called ue.sln.
And you're like, which one is which?
So if you go into your documents,
Unreal Engine, Unreal Build tool,
buildconfiguration.xml,
you can put their project file generator,
primary project name from folder equals true.
and then it will name your solution file
the same name as the parent folder.
So here I have Perforce Unreal Engine 5 main
and then I have another one called Perforce Unreal Engine 5 release.
So I always know which one I am just by looking at the top bar.
Oh, okay.
So I have to be honest.
I have two presentations at this Unreal Fest
and I put most of my time in the other one
and this is my last tip.
So I have a tip counter here.
okay it was only 10 i thought it would be more but it's okay i have some backups i have a lot
of backups okay okay um okay so i got one of my co-workers who actually also used to be an
evangelist to give me a video just in case i ran out of tips i thought i would have more
but it's okay i have a slide for him let me so his name is aaron langmay a new speaker he's not
here though in person because i didn't think i needed it uh but i've just been super busy so
because i'm doing a talk with matt austellate tomorrow about profiling with purpose you should
check that out because all my time went into that and this is just kind of like thrown together
but erin was going to help me so he used to be a european unreal engine evangelist in 2021 and
he's now a principal technical artist at epic games he works for the content team so when you
are launching unreal in a new project and you have the third person template he he and his team made
it. That's super cool. And he also does a lot of other sample projects. But yeah, he was not a part
of the original 100 Tips talk. None of us were, but he made some tips for me. Please, Aaron,
take it away with my backup video. Hey, Ari, I hear you're in need of some extra Unreal Engine
tips and tricks. So here are a couple that I've picked up over the years at Epic.
Whenever you're working in Unreal, make sure that you're targeting the right frame rate.
Usually in games we target between 30 FPS and 60 FPS.
In engine we're targeting these frame rates based on the high and epic settings.
So if you're ever targeting 60 FPS make sure that you set your scalability groups to high.
You can optimize your CPU render thread by disabling occlusion on many of the objects in your scene.
This one is a great example because it is a highly porous mesh
in that it has lots and lots of holes where we can see through it
It will never be a good occluder so we might as well just disable it
You can also do this for any decorator meshes that you have in your scene here
We can kind of see our main occluder which is this large cylindrical surface
but on top of that are these pillars
They're never going to occlude anything on their own
or they're very unlikely to occlude anything on their own
So we can just disable occlusion on that as well.
If you're spawning these through PCG, users occluder is almost always off by default unless you manually set it so.
So just make sure when you're marking stuff as users occluder, you're actually checking whether they would ever be occluding anything.
If you're running low on samplers or if you are trying to optimize your texture memory even more, you can always pack an extra channel inside your normal map.
The default normal map channel will mark out the blue and alpha channel so that you can use them anymore and it will also cause an increase in your resource size Rather than importing it in as a normal map you can import it in as a default compression which will reduce the amount of resources
And as long as you make sure that you use sRGB off, you'll be able to bring this in and then
convert it to a normal map afterwards. In order to do that, all you need to do is do
a bias scale to map this from a 0 to 1 value to a minus 1 to 1 value, and then append in
a flat color into the blue channel. You'll be able to see here, if I switch these out,
we have the exact same normal, we just have slightly worse compression. It's because we're
not paying for that channel slot anymore, but what it also means is that we now have
an extra slot in our blue channel for us to do something with. If we put this into our
metal channel you'll be able to see it just does everything as one but if we put our blue channel
in here you'll be able to see we now have a cool mask which we can use on our surface.
You can use the built-in modeling tools to generate mask data which can be really useful
for later use in materials. Just go to modeling head on down to bake, bake vertex and then you can
bake whatever information you want. You can either choose to use a texture which you can import in
or you can do per channel and set each RGB and A channel to output a particular type of mask like
curvature and ambient occlusion. You can modify the number of occlusion rays and change the color
range multiplier to allow you to have a higher or lower contrast. While this can be really good for
mass data, just keep in mind that this is entirely dependent on the vertexes of the object because we
are using vertex colours, which means that if you're using things like Nanite, then those will
change as the model streams in different resolution meshes. Here is how to make the most of runtime
virtual textures in your large open world. First, find your RVT volume, go down to streaming texture
and create an SVT. Then in your landscape, go down to your HLOD Material Override.
In your HLOD Material Override, add a Runtime Virtual Texture node and set it to sample the
same volume. Then set your MIP level to sample past the point that your Runtime Virtual Texture
would sample at. Now when you generate HLODs for your world, the landscape will no longer need to
build custom materials and textures for every single cell. Instead, it will just use this
single material which will be used across the entire landscape.
Oh.
Oh, that was it.
Okay.
What's the tip counter at now then?
I need more tips and I'm losing my voice for some reason.
Sorry.
so but it's okay we don't need me after all because i actually noticed something amazing i noticed
one of my choreographers here in this room i'm actually i'm wondering okay now okay let's here
take this mic take this hey jack oh hey everyone do you want to come up on stage and give some
tips you probably have some tips you've been working at it for a while right uh yeah i'm
gonna have to prepare them though can i bring my chair yeah bring the chair well actually i'll
Give it up for Jack.
Please, come here.
Come here.
Okay, wait.
I'll make a slide for you.
I'll take your Slack profile picture.
And I will...
How's this?
There we go.
A new speaker up here.
Jack Condon.
So you were actually an Australian Unreal Engine evangelist between 2021 and 2023.
And so, yeah, what are you doing now?
I am still based in Melbourne, Australia, helping out.
and I'm part of the tech developer relation teams with you now.
Oh, you're on my team.
You were not a part of the original 100 Tips talk,
but I hope you have some really cool tips for us.
So do you want to take over?
Let's see how we go.
Well, I thought because we were doing a talk
about recording lots of tips,
this is a really good one
if you need to record videos for onboarding.
And that is, did you know that the Widget Reflector,
which is a really common debug tool
when you're working with UI,
can change the UI application scale.
So this is super useful when you're needing to record content,
which is kind of what we're doing today,
but can also just be good from an accessibility level
or whatever you might do.
In fact, it's even got some extra features.
Like in the demo mode, you can turn on mouse click and keys.
And what that lets you do is,
hey, now I can see where my mouse is clicking,
but also as I type, we get a display of all the keys.
Now, if you listen carefully,
you'll notice that I left my microphone on
while recording this to increase the immersion.
Totally intentional, I assure you.
You probably know that we can obviously drag variables
into the scene like this and we can select, get, and set.
And probably you also know, but just in case you don't,
that if we hold Control or Alt,
we can speed up that process significantly.
So, we'll go through some very basic ones,
but I also wanted to point out that you probably know
that we can create an input variable on a function
just by dragging it in,
which is something I always want to do because I'm very lazy.
But sometimes you want to create an output variable, right?
And you don't have a return node.
And you drag it out and you go, oh, no,
I'm going to have to click buttons.
That's not what I want to do.
Well, did you know that if you plug it into the function input,
it actually creates both the return node
and the variable set up for you with that variable name,
but obviously with a little index to separate it.
I will go to any means possible to avoid extra clicks.
So, these are good ones.
Another one, did you know that you can override
the get and set node behaviors in Blueprint with C++?
So, this can be a really good trick
to kind of override hacky Blueprints in some cases,
but also can be useful for all sorts of things.
And to do it is really quite simple.
We just obviously, in this example,
I'm just adding a clamp to this variable.
Maybe there was some things that I needed to fix there.
But all I need to do is add the Blueprint setter
or get a specifier and then obviously point them
at a function that I'd like to use.
So, this one's interesting.
Did you know that you can make Sequencer call a function
whenever a variable changes?
So, in this example, this float value is updating
the color of this cube material in Blueprint.
And, of course, I've seen people do this with, say,
construction scripts, but this feels a little bit strange.
So, let me show you another way.
Basically, we can run a Blueprint function
whenever a value updates, for example, color shift here.
And all we need to do is we make a function
with set the variable's name.
And we're also going to want to make sure
call in editor is ticked.
And after that, that function will be called
whenever Sequencer makes a change to that value.
Did you know that we can put equations directly into Unreal?
And it works just fine, but what about the really tricky stuff,
Unreal? That's probably right.
right? Did you know that the editor has a camera shake preview mode to help you author your camera
shakes? This is really, really useful when you want to get a feel of your shakes, but also it's
able to apply multiple camera shakes so you can see when things get really turbulent if you turned
up your settings to 11 where it's just going to make everyone sick.
Like, I'm making you all sick now, so I'll move the slide on.
Did you know that we have a plugin for viewing all your plugins
and their dependencies?
It's called the Plugin Reference Viewer,
and it is really useful when you're using things
like modular gameplay features and you start stacking a lot of plugins
in your projects. For example, this is Lyra,
and you can see that there is a very complex web
that you can visualize very simply.
But of course, often people, when they're working on projects,
they're not going to look at your graphs.
They're going to create references and dependencies wherever they like,
and that can be terrifying.
It certainly keeps me up at night.
So did you know that there is a plugin
to stop people making references across plugins
that they are not dependent on?
This is, as we know, a very common scenario.
Even if you have all the graphs in the world,
there's just too many places to make a mistake,
especially when you're using things like the developer folder
or working on DLC.
And so, a quick example.
I'm going to try to drag this asset, this data asset,
into a file that I'm not allowed to
because there are cross-plugins in Unreal.
It's telling me absolutely no.
It's actually part of the Asset Validator toolset.
And so, it even is able to tell me kind of what I should be doing
and correct my behavior before I cause a problem for everyone,
as I'm like to do.
Did you know that metadata assets are a great way
of moving data from your DCC tools into Unreal Engine.
They're also just good genuinely if you want to save data to an asset.
But it's not really optimal for searching
because to load that information,
we need to load the whole asset, right?
So, in this example, I have some metadata associated
with some assets.
It's just some management information,
whoever made it and what status it's in.
I've made a cute little Kanban up there
so we can see that all.
I don't know if that's a good idea or not,
but I've made it regardless.
But without this data being the asset registry,
we can't actually use it in a way we'd want to,
say, the content browser,
to actually do filtering like this.
So, there is a little thing inside of our project settings
in the Asset Manager to promote metadata values
directly into the asset registry.
I think this is very abusable as well, though.
So, you know, great power and all that,
but very interesting stuff.
And so now I'm able to say,
hey, what are all the things that Jack's meant to be working on
that are currently ready for review or progress or whatever else?
And you can create your own filters
and obviously add all the kind of things you might want to.
So, if you find this metadata restricting
because it's essentially just handling strings
or you want to add other arbitrary data to an asset,
there is a great option that folks don't know about
called Asset User Data.
And let me play my little video.
So, essentially what I'm doing here
is I'm going to add arbitrary data to this asset,
this beautiful corn,
I going to add my user data which is essentially a gameplay tags container So I proposing here in a way a replacement to actor tags maybe right But you could do whatever is appropriate to your project
And to do it is really simple.
All we need to do is make a child of uAssetUserData,
and here I've just got my gameplay tag container.
It's probably worth making a Blueprint getter,
in which case I'm just using a static function,
and this is how we call that data from the asset itself to use.
So that's it from me.
Thank you.
Happy to help, Ari.
Oh, thank you.
I was hoping you would just finish the presentation for me.
Take a seat.
You can be there and be my emotional support animal.
Okay, how many tips are we at?
We're not close to 101.
But it's okay.
While Jack was speaking, I was scanning the audience,
and I did notice that another coworker of mine from my team is here.
Actually, I'm talking in both mics at the same time.
It's funny.
Hey, here you go.
So, Matt, it's Matt Ostile.
Matt, you have a bunch of tips in your sleep.
Do you want to come up on stage here and help me?
Come on.
I got three other talks at this show.
He actually has three other talks.
Okay, come on, everyone.
How about we get one from Matt?
Come on.
Fine.
Yes.
All right.
Fine.
I'll make a very special slide for you.
I'll make a special slide.
It will look like.
Oh, I get a special slide.
Look at this.
That's so nice.
A new speaker appears.
Who is it?
It's.
Oh.
It's Matt.
Yeah.
Okay.
Well, if you went through all that work to make a special slide for me, I will come and
save you with some more tricks.
But hold on.
Thank you.
I need to make the slides real quick.
Okay.
Just give me a second here.
This guy's got the best tips ever, so I'm really looking forward to it.
Google.com, Unreal Engine, tips and tips.
Oh, no, don't use the AI for this one.
Oh, okay.
Okay, no, I think I'm good.
Just do it.
Do what you do, guys.
Come on, you can do it.
So here we go.
I've got a few things.
So Jack was talking about when you're preparing videos for tutorials or something like that,
one of the tips that I really like to use is disabling tool tips
when you are recording these videos
because sometimes you're like trying to show a thing
and then the tool tip pops up
and covers the thing that you're trying to show.
So you can disable those tool tips, right?
That's pretty handy.
And also disable all screen messages
is going to get rid of that lighting needs to be rebuilt
in the top left corner.
If you could just make it go away.
The other thing that I see a lot of,
like when I'm looking at student projects
or something like that,
is they spam print strings to the screen, right?
we've all seen just constant blue text on the left side of the screen you
actually don't need to do that and there's a there's actually two tips in
here so first off we can format text if you've never seen this node this is
really handy so now instead of having to do like a bunch of append strings I can
just format the text and it'll plug everything in really nicely and I can
use the print text node with this key input and it's gonna put that value into
one spot on the screen it's not going to have to span the log really really handy for that also
when you're recording videos or you're working in the editor you can just press f10 to hide uh to
dock the details and and outliner panels it'll move that stuff over the top you can also press
ctrl shift t to hide the toolbar if you don't like the toolbar for some reason um this one
totally unrelated but if you want to if you're trying to do like a draw material to render target
and the textures aren't ready yet,
you can set force MIP levels to be resident.
So you don't have to like set the texture to never stream.
You can just tell the engine,
hey, give me this texture right now.
Also, if you're ever working with dynamic mesh,
this is kind of my like 101 for dynamic mesh,
which is first we need to get the dynamic mesh pool.
Then we need to request a mesh from it.
And that gives us the dynamic mesh object
that we're going to start working with.
um also this one has burned me in front of customers before uh post process volume settings
will supersede all console variables they're actually kind of lurped together and which is
which is fine for most purposes right i've got a bunch of post process volumes and they need to
kind of work with the uh the cvars that i've set in my device profiles which is normally fine
because most of the stuff we're working with are like floats right but things like reflection
method is not a float that you can linearly interpolate and so if you're ever say standing
in front of a customer and trying to figure out why you can't change the reflection method
it's because they had it set manually in the post this is a true story sounds like some
this experience this is this is trauma this slide is trauma um so right so if you're trying to do
stuff with your device profiles somebody might have like dropped a post-process volume in the
world and they're like, ah, I want to set the reflection method to screen space and nothing
changes. You're just banging away at the keyboard. That's why. That was a fun one. But speaking of,
device profiles are really, really handy. Everybody should absolutely be using them.
And if you ever want to test them really quickly, you can do dp.override and then pass in the name
of the device profile that you want to set. And it's going to set all of those console variables,
which is quite handy.
Also, as a side plug,
Lyra has a really good example of a system
to figure out what device profile should be applied at any given time Definitely check those out And if you ever curious about what a console variable does you can just ask it
You just say console variable question mark,
and it will print out the help text of the console variable
instead of what I used to do,
which was control shift F in writer for the console variable.
That one also I learned in front of a customer.
So that one's really handy.
And then the other one for console variables
is if you dump CVARS,
it will write out all of the values
of all of the console variables at once,
which maybe is going to be too much.
You can also filter that
and it'll dump all that stuff into the log.
Really handy.
But, Adi, I'm really sorry.
I only got you to 37.
Oh, man.
Well, okay.
Thank you so much, though, for those tips.
Yeah, I'm happy to help.
Yeah, you can keep this one.
No, I'm going to take this one.
All right.
No, I want that one.
oh you want this one okay it's totally unplanned by the way sorry man i it's only so much i can do
hey i actually am quite hopeful because while you were talking i was scanning the audience
and i noticed actually another co-worker of mine it's not in the same team though but actually
okay so
Sam
here take this
take this
okay
you actually
have
you've done a lot of presentations
you probably have a lot of tips and tricks
all so to show
do you want to come up on stage
and give some tips and tricks
for the audience
sure
yeah right everyone
give it up for Sam
all right Sam
I'll make a slide for you
I'll use your Slack profile picture
I'll use your LinkedIn profile
and here we go
so
oh hey it's me
yeah it's you
So you used to be a North American Unreal Evangelist between 2021 and 2023.
And because you were not an evangelist in 2019, you were not part of the original talk.
None of us were.
But tell us, what are you doing now?
So I work for the technical content team.
You may have seen Stackobot or Lyra or the various new templates that we did.
I worked on all of those.
Aaron, who showed up earlier, he's my boss.
So you have to applaud for all of his tips more than mine.
Otherwise, I'll get in trouble.
And I definitely have another 70 tips for you.
Nice.
You can help.
You can fill us up.
201.
So if you don't like the sound of my voice, I'm really sorry.
There's going to be a lot more.
It's going to be an hour of you.
I'm so glad you helped us out.
So, yeah, let's do this thing.
Take it away.
Woo!
Woo, me.
Okay.
So let's talk about the Acta Palette.
This is a plug-in that you should enable,
and that allows you to use a level as a palette,
meaning that you can set up a level with all your content.
This is one I made for Stackabot 2.0
and just drop all the content that you want to use
and then in the level you're actually working in,
you just open up the Actor Palette tool.
If you've enabled the plugin,
if you didn't enable the plugin, it's not going to work.
And then you can literally just click in the Actor Palette level
and then drop things directly into your level from there.
And that means rather than digging through,
say the content browser and then going which folder did I put that thing in is this the correct
version of that thing or even should I make a thing or does the thing already exist just use
the actor palette and you'll have all your stuff there and if you're say a designer and you have
this weird desire to make your own thing every time you can use the actor palette to circumvent
that behavior because otherwise you could be like me and make the same door 15 times across a project
and then suddenly you get your tech director going,
why are there 15 versions of a door?
And you're like, oh, well, I should use the Actor Palette.
So Actor Palette is your friend.
I thought that was such a common problem.
Yes, this is, I like to call it stupid designer tricks.
And I am definitely guilty of that.
So next up, let's talk about Blueprint Palette.
This is a feature that is in the Blueprint editor
that no one seems to know about.
But like the Actor Palette,
it's just a quick way to access a bunch of nodes.
And it is just a tab in the Blueprint Editor that no one seems to know exists.
But you can just turn it on.
It's in the window.
You can see in my little slide there that I magically generated from my mind in the last five minutes.
There is a, in the window menu, you can just turn on palette.
And not only does it list all your common nodes, but you can customize it.
You can add all the nodes that you regularly use.
And if you do a lot of Blueprinting, which I do, it will save you so much time.
It's much better than just right-clicking and starting to type and realizing that you mistyped the name of the node because your spelling is terrible
And so blueprint palette. It's your friend. You should use it if you don't use it
You're probably making the person who wrote it sad
So blueprint debugger
This is a thing that literally anyone who blueprints should be using and this is the thing where
When I was an evangelist, I worked with a lot of indie devs and there was a lot of print string abuse
and certainly when I was a dev, there was a lot of print string abuse
where instead of debugging a thing properly,
you're just printing a variable out,
and you can do all the nice things that Matt talked about
to make that print string really pretty,
or you could use the Blueprint debugger and just track the variable.
So Blueprint debugger lets you, well, debug.
You can watch variables.
You can watch node pins in real time.
It works really nicely with your breakpoints.
You can use the breakpoint and then check your variable call stack
or your Blueprint call stack.
You can see what is executing in what order and how.
So if you're getting those weird things where you're like,
my blueprinting looks fine why is everything executing wrong Am I getting weird race conditions You can use the blueprint debugger to do that you can check your execution flow and honestly when you doing a
really complicated project like when i worked on lara uh it saves you so much time so use the
blueprint debugger again someone worked really hard on it and if you don't use it you make them cry
and we don't want to do that we want happy devs you can take my print string from my cold dead hands
okay this is going to turn into pro wrestling isn't it i'm calling you out print string
meet me in the this isn't really an arena meet me on stage i guess um i don't think i would win
that fight but anyway blueprint debugger is your friend you know what else is your friend is diffing
your blueprints you may notice there's a lot of blueprint stuff here i am a tech designer this is
where i live my life it's in the blueprint editor so one of the fun things as a developer working on
a team is suddenly your thing breaks and someone checked in something and you're like why is my
thing not working and you realize something has changed but you don't know what and with
the blueprint diffing tool you can just literally go this is my version this is the older version
what is different it will color code your changes you can cycle through the changes and it is all
over the tool set it's all over the unreal editor you can use the content browser to diff against
another blueprint. So if, say, you have 15 doors and you want to find out how they differ, if at all,
you could actually diff your 15 doors and go, oh, Sam, why did you do that? This one has lock
functionality. This doesn't. This is an octagonal door for some reason. It's just a different mesh.
What is wrong with you? So you can do that. You can also diff against prior revisions in your depot.
so you can use the review tool under resource control uh you can do it directly through the
blueprint editor with diff against depot and you can diff against depot in the content browser
and it will show prior revision numbers so you can go okay let's diff against the version from
three revisions ago because sometimes you did something dumb and then you forgot about it and
you checked it in and you're like what did i do i definitely upset that person because they're
leaving now um i'm sorry you should diff your blueprints though i really are it will make your
life so much easier and i mean i work in a lot of collaborative projects and it does indeed make
your life easier if you're like me and randomly decide to check things in at three in the morning
and then go what on earth was i doing why so next tip but this has taught me a life lesson though
now whenever life closes a door just create a new door create a new door and call it door
DOR underscore new 03 final, and no one will know any better.
DOR underscore 15, why did I do this?
So next one, this is just basic blueprint housekeeping.
Align your nodes.
It will make your blueprints much easier to read.
If you're working collaboratively, one of the key things is other people need to understand what you did.
And so if you just have a mess of nodes sprawling around looking really weird,
Maybe you should use shift a w d and s to align them on cardinal directions.
Use q to align them horizontally.
There are a bunch of alignment options if you right select nodes and right click.
You can distribute them vertically or horizontally.
And it will just make your blueprints easier to read.
They will be prettier.
And you will like to look at them.
You'll open up in the morning and go, oh, look at that.
It's so nice.
And that's what you want people to think when they look at your blueprints.
So, next one, validated get.
So one of the things I see that is really common, and I'm certainly guilty of this, is I need to get something,
and then I need to make sure that it's actually valid because I'm going to do something with that data,
and if there is no data there, then I'm going to break my entire routine.
It's not going to work right.
So you can, when you do a getter, just right-click, select Convert to Validated Get,
and it will let you do the validation check right there in the node, so you don't need to do a branch.
You don't need to use a function to do it.
You can just right-click, use a validated get.
If you look at Stackrubot 2.0, I abuse the heck out of this.
Because sometimes you're like, oh, there isn't actually that value for me to check against yet.
I'm going to break everything when writing a custom camera, say.
So talking of custom cameras, Blueprint Update Camera.
So this is a fun one that I learnt after writing a custom camera and then going, oh, maybe I should have done it this way.
And so I rewrote it using this, which is you can create your own player camera manager.
This is the thing that not a lot of people seem to know you can do.
You can just inherit from the base player camera manager and create a custom one.
And then you can set your custom one in the player controller.
It's not set in the rest of the framework.
It is set in the player controller for reasons that I'm sure smart engineers will tell me why.
But it is set in the player controller.
And then there is a function in it called Blueprint Update Camera.
What does that do? It lets you update the camera.
What it does is it gives you a reference to what the camera is targeting as a variable,
and you should validate it when you get that variable.
Then you can take that target and go,
okay, so I want my camera offset from this, I want it facing this way,
I want to do all this logic.
Then the return node on that function lets you put in a location, rotation, and FOV.
and then there is a Boolean, you set it to true,
the camera will go to that, will be at that location next frame.
It will snap directly to it.
If you set it to false, it will use your standard camera logic.
So if you want to say do a secondary camera,
Stackabot 2.0 has a side-scrolling camera
that I definitely didn't obsessively work on for a very long time,
because I like side-scrolling games and forced it into Stack-A-Bot.
You can write it entirely in this function.
It works with the camera manager.
It updates on frame.
So you can write a lot of custom camera logic
and dynamically turn it on or off.
In this case, I created an enum with all the different camera types.
And so if the camera type is side-scrolling,
it uses that function to switch to a side-scrolling camera.
Key thing is the transitioning in and out of this.
You will have to handle yourself.
There are a lot of different ways to do it.
But if you want to see how I did that, download Stackobot and see what I did,
and you do it better than I did.
All right, next one.
Mesh to collision.
Okay, enough Blueprint talk.
Let's talk about one of those things where you have a mesh.
It's really pretty because every bit of art I make is gorgeous, I swear.
And the collision is dreadful or does not exist.
and in a lot of cases you like you get maybe you get something online and it
looks really nice but it just did not have good collision you can use the
modeling tools to have it make collision for you and one of the key things here
is we've added something called convex decomposition that builds out really
really clean collision geometry using very smart math written by very smart
people in geometry script essentially so all you need to do is go to modeling
mode attributes, select your mesh, and go to the mesh to collision option, select convex
decomposition as your methodology. If you don't do that, you'll get all kinds of weird stuff.
And then just hit a button, and magically you will get collision. This is how we did a lot of
the collision of Stackabot, just because we had all these meshes and we were working really fast,
and we didn't want to do it by hand because we're lazy. So mesh to collision is your friend.
Next up, StateTree for logic.
So this is one shout-out to the StateTree team.
I'm doing this one for you.
So you may know BehaviorTree, which is, you know,
really nice fallback state machine designed for AI.
We've introduced StateTree as the...
People think of it as the new version of BehaviorTree
because, yes, you can use it for AI.
We do use it for AI.
But it is a generic state machine with nice fallback logic.
It's very customizable.
You can do all kinds of stuff with it.
Anything you could do in Behavior Tree, you can do in State Tree.
But it's not just for AI.
You can use it for doors, say.
Doors, lights, all that kind of stuff.
So if you have any kind of State Tree logic, State Machine logic,
rather than just writing it in a Blueprint and creating an enum
and doing a case switcher and all of that, just use State Tree.
It'll do it for you.
It's really efficient, and it will make your life much easier.
And then when you go to debug it,
you can see the exact structure of your State Machine in State Tree
since it's all visual, and you'll be much happier.
Your engineers will like you.
Anyone who has to work with your stuff will like you
because it's easy to understand.
Okay, so my last tip, and this gets us to 101, right?
I think so.
Yeah, I'm good at math.
I'm not good at math.
I'm a designer.
Don't ask me to do math.
We have math people for that.
There's so many doors.
I just, yeah.
Yeah, so my last tip is, okay, this is a slightly esoteric tip,
but I work with indie developers a lot,
and a lot of developers are like,
we want to make a multiplayer game.
You can spend a year building your prototype,
writing the replication code,
writing the, you know, things like your client server management,
getting people to actually check in your game,
setting up EOS, all of that.
Your final game, if you want to do it in Unreal, you totally should.
But UEFN as a tool is inherently multiplayer.
So you can spend a couple days in UEFN
and knock out a rough version of your idea
and test it in multiplayer without working that hard.
And I'm lazy.
I don't like to work that hard.
So one of those things is you can spend a year
making your multiplayer prototype and go,
oh, wait, this sucks.
It is way better to spend a day and going,
oh, wait, this sucks.
Let's make it better and iterate it a couple times in UEFN.
And then you have a proof of concept
and maybe you make a little money on the side from it too.
Who knows?
And that gets us to 101 tips, right?
Let's check the counter.
It does it automatically.
Oh, no.
I'm so bad at math.
So bad.
Oh, no.
So we should end the talk, right?
No.
We should just go hide?
No, no.
I think I have a backup.
I have backups and backups and backups.
So thank you.
Okay, thank you.
Schemes.
I must admit, like,
so I said that all the original evangelists
are no longer working at Epic.
There is actually one ex-evangelist from 2019
who is still working at Epic,
but I didn't want to bother him
because he's a director level now
and he doesn't even use Unreal anymore.
But Desperate Times told for desperate measures
and I saw that he's in the audience.
And actually, I'm going to...
Okay, so over here.
Stuart, Stuart, hey.
So you're in the audience.
Yes.
And I was wondering if you want to give a few...
You still have some old tips and tricks, right?
Yeah, I use Unreal a lot to make slides
and spreadsheets and other things.
It's really fun.
I don't want those kind of tips,
but do you have some useful ones?
Come on, let's give it up for George.
Okay.
I'll make a slide for you.
I'll give a little special title for you.
So you are the OG UE Evangelist.
So you were in the European Evangelism team.
Actually, you were the team for a while.
2014 to 2020.
Can you tell us more about that and what are you doing now?
Yes.
So I started when we launched Unleon 4 shortly after.
So it been quite all right I visited nearly I think every European country I been in pretty much I visited so many students It was awesome Did that for six years Then COVID happened That a slight problem if this is your job So then I figured okay well we shift focus to doing this online
But then as I started looking at our online channels and our different websites and things,
I realized this is quite fragmented. We can probably do more with it. So my job morphed into,
okay, well, let's improve things. And that kind of took a dimension of its own. And now I'm doing
meetings, I guess, internal ones all day long.
So what I look after now is a lot of the things that surround the developer experience.
So not the engine itself, but stuff like the documentation, the sample project and the
template with the team, FAP as a 3D asset store and distribution mechanism, I'm working
on Fortnite creator communities that were just announced last week.
For example, what else?
The community overall, the Epic Dev community, the forums, the live streams, everything that
kind of surrounded, kind of looking at that.
So I ended up in that whole world.
But unfortunately, I never really talked to anyone anymore.
Well, my job before was talking to people, and now it's like talking to people internally to organize things.
Yeah, but I think maybe you could give some good old tips and tricks from when you were still in your prime, if I may say.
Also, I just got word from the tech team.
Can you keep the mic closer to the mouth?
Okay, great.
Take it away, Stuart.
Sure.
Okay, so one other story.
When we did this talk six years ago, we were meant to be the very last talk at Unreal Fest
back then.
We figured, okay, let's make a very fun talk out of it.
We added a lot of cats to it.
The day before Unreal Fest took place, they told us, well, actually, you're the very first
talk after the keynote back then.
We're like, hmm, we do have a lot of cats here.
So we started removing some of our cats.
So to fix that, so cats, we just had to fix that.
Let's start simple.
This is actually a way of zooming in more in the different graph editors we have.
For example in Blueprint or Material Editor, especially in the Material Editor, this is
quite useful because you can zoom in in the little texture samples or other previews that
you see in the notes in the graph.
If you hold control and you zoom, you can zoom more than the default zoom.
This is a really old one.
You may already know this or not, but it's really, really useful.
This was introduced in Unreal Engine 1.
This has survived all the decades of Unreal.
Stuff that you copy-paste, and it doesn't really matter where you copy-paste it from.
if it's like Blueprint or any graph editor or an actor in the world, it converts to text.
It's just text.
So you can save your clipboard for the next day.
You can chat with a coworker and just copy-paste them stuff, and they can continue from that.
And even on the Epic Dev community, we have a snippet section where you can do that,
but then for the wider community.
So you can just share setups that you've made as pure text.
It's just text.
There's also a way of launching the game.
So you probably are aware of the dash game parameter, right?
So you launch the game in game mode,
but you can also access that by right-clicking the project
and launch game from there.
And so it doesn't launch the editor, launch the game,
but without cooking it or anything like that,
just the game as you have it.
Oh, you don't even need to cook the assets?
No.
Oh, certainly.
Yeah, it's great, fantastic.
Also performance-wise, because obviously if you run the editor
and then you play an editor and all that,
you have the overrads from that.
If you run it like this, you get better representation of performance.
This view mode is very little known, I think.
You can do actor coloration.
Basically, there's a view mode that shows you the difference.
You can select a control-click a property,
set the view mode to the property coloration view mode,
and it visually shows you which actor in the world
has that property set as well.
You can very quickly identify, for example,
all meshes that have no collision set
or some kind of setting that you're after,
and just by browsing the level,
flying through, as you can see over here.
So it's fun to analyze what's where.
Also, when you create a new blueprint,
it will have a default scene root.
The default scene root will have that icon
that you see there at the top,
so you're always stuck with that icon there.
But if you create a new scene component
and you drag the scene component
on top of the default scene root,
you have the same setup, basically,
but the icon is gone,
so it kind of cleans it up a bit.
and it's real fast.
This one is also interesting.
It's a very different kind of tip,
but you can access the G-buffer.
So there's a G-buffer data interface,
as you can see over here.
So you access the pixels from the G-buffer
in a certain region on the screen,
and you can read that in a particle,
in a Niagara particle system,
and then use that to, in this case,
create this kind of cloud,
but other things you can do with it is,
for example, some kind of disintegration effect.
Things like that.
So it's quite fun to play with this as well.
There is a reload function built into the editor.
So if you're making changes to an asset,
you can, and you're not happy with it,
rather than restarting the editor or anything like that,
you could just do right click, asset actions, reload,
and obviously since it's unsaved,
it'll go back to what it had.
You have reverted the asset.
and this one I've used a lot myself in the past.
This is great.
There's a performance overhead to this,
but essentially you can create a volume material.
You can control the volumetric fog with a volume material,
and thereby you can control the color, the density,
and you can even add a volume texture into it
for a bit of noise and a bit of structure and all that.
and all that.
So essentially, you need to have your height fog
set to volumetric fog, it has to be enabled,
and then with the material setup that uses.
So you can essentially control,
here the density goes up here the density goes up et cetera you can control the color you get a lot more variation in there Again there is a performance overhead but you can really create awesome moods in an environment like this
There is autosave as you must have seen because it keeps popping up everywhere.
But what autosave actually does is it saves to the save folder and it saves different versions.
So it does 1, 2, 3, 4, 5, up to 9, 0, restart, so you have 10 of them.
And so you're always able to go back to one of those versions.
If something goes wrong, it doesn't auto-save your actual file, it saves to those 10 different
versions in that separate folder.
That also means that folder can get quite big at some point, so you may also want to
clean it up at times, because everything is going to be there 10 times, basically, everything
they've ever worked on.
But if things go wrong, you have around 90 minutes of steps to fall back to.
So I should stop smashing that cancel button, because it's not actually going to save my
asses.
Save the current state somewhere else.
Yeah, that's what I mean.
Because I'm not ready to save it yet.
Oh, okay, well, I've been using this wrong.
Yeah.
And then as a plugin, perhaps not that well known.
So there is a day and night cycle as a plugin
that's available called the Day Sequence Actor
that's available in the engine by default.
And so that creates a day and night cycle.
It comes with a skylight.
It comes with a directional light,
you know, the whole thing, the whole setup,
the, you know, volumetric clouds,
sky and atmosphere actor.
So it's a full setup to create a sky with an animation in there, with everything set
up.
There's an even better one called the Celestial Vault plugin, which is essentially the same
thing but it has starry heavens at night, so it also comes with a night setup where
you can see the Milky Way and the Milky Way, the procession of the stars at night is like
the accurate procession that you have.
So it's just really nice to quickly get awesome mood going on, awesome day and night cycle
going on.
Yeah? I think those were the tips I have.
So it's still not enough, is it?
Are we close to it?
No, I don't think we, so...
Let me check the counter.
It automatically calculates.
We're at...
Well, we made it more than half.
Well, thank you. Everything matters.
Thank you so much, George.
Something happened.
I put out a lot of feelers
before this presentation
because I wanted to reach the ex-evangelists
that aren't with Epic anymore.
I just sent emails like,
please come here on stage.
And like pretty much none of them replied.
But I just got a video now from Mario.
So Mario apparently sent me a video
because he can't be here in person.
But he's like, this might help you.
He's very cocky, but okay, let's do it.
I'm going to put it here.
So this is Mario Palmeiro.
He was actually a European Unrelenting Evangelist
from 2018 to 2022.
And he said in the email he's now the lead tech artist at Crema.
But yeah, he was part, like short, of the original 100 Tips Talk.
So I got two, I got two of the original Unreal Engine evangelists.
Let's see what his video is.
Let me just embed it and here we go.
Hola, my name is Mario Palmero and I'm one of the original speakers of the Tips and Tricks Talk at Unreal Fest.
I was technical evangelist for the southern region of Europe at that time for Epic Games.
but I went back to game development to work on some indie projects some years ago.
I'm nowadays lead technical artist at Crema, a small studio based in Madrid and responsible for the 1010 games.
I'm going to talk about some tips and tricks I use on my daily work. I hope that you find them as useful as I do. Enjoy!
My first tip would be to set up the shortcut for Convert to Paran.
This is going to be useful on the Material Editor, and it's as easy as let's go to our
project Editor Preferences, go to keyboard shortcuts, and here we can search for
convert to parameter. So let's type a new binding, in my case I use P, and let's go to
to the Material Editor once this is set up.
And now what we would do with the right click
and the context menu, convert to param,
is going to be achieved with the P shortcut.
So for example, I can press T and create a texture symbol,
or three and click, or one and click.
And all of these, just with selecting them and pressing P,
we are going to convert those to a parameter.
So as easy as that.
Next tip is about renaming.
So Unreal uses standard window shortcuts
for renaming and creating folders.
So we are going to have Control plus Shift plus N
to create a new folder, F2 to rename.
And we will have some very useful tools
to do batch renaming and renaming actors of the same class
as the selected actor.
So let's go to the editor to try that.
First of all, to create a folder without taking
our hands off the keyboard, we just
press Control plus Shift plus N, and we have our new folder.
Type the name, and with F2, we can rename it.
Besides that, we also have this batch renaming.
We can select several assets and press Shift F2 And we going to be able to use this tool to rename several assets at the same time being able to remove or add prefixes suffixes
numbering, et cetera.
But we are going to have the same functionality
if we select one type of actor
and press Ctrl Shift F2.
for every actor in the level that is of the same type.
As you can see, here we can batch rename all these actors
that are of the type text render actor.
My following tip is about changing
the field of view of the editing camera.
So this is going to be useful to check LOD behavior,
for example, or to evaluate how elements are behaving
when changing its screen size in the viewport.
So in the editor, while we are editing our level, we can just, with the right mouse button press,
press the C key to get closer to things, just narrowing the field of view, or open up the
field of view and curve distant away from from the elements so in this case you can see that
the landscape is changing its distillation behavior and we can see how it would be to be close to
to this area of the landscape without really getting closer to it in the moment that you
release the right mouse button everything is back to normal and the
field of view will reset. My next tip is about creating a timer for the next tick
so a timer that will be activated and will run a function or delegate in the
next tick. So we can achieve this in Blueprint delay until next tick. There's
a note to delay something until the next tick and this line of execution
will be executed in the next tick then we have set timer for next tick by event so this event
will be triggered on on the next tick of this actor and set timer for next tick by function name
so we will run this function in the next thing and we also can achieve this of course in c plus plus
both on on the world or in editor we can ask for the timer manager and the timer manager
has a method that is set timer for next tick and will ask us to provide a timer delegate
and the final one is also about ticking it's going to be about a command that allow us to
list every actor in our level that is consuming ticking time let's try this in the editor i've
cleared the clear log by right clicking and pressing clear log and i'm going to press play
go to the commands write down jump ticks
this is the command press enter and now we have a list of all the actors that are ticking in our
level so it starts right here tick functions and we have a list of every actor ticking and consuming
resources in in our level so very useful when we are trying to optimize when we see that the
us a spike on our ticking time to check what is going on and where our resources are going.
And that will be all on my part. Enjoy the rest of the presentation.
Oh, that was great. Thank you so much, Mario, for sending that. What was your favorite tip?
Because I did not know the BATS renamer that was just... Yeah, yeah, exactly.
Use the mic to your mouth if you want to talk. No one can hear you.
okay how many tips are we at now we are okay well we're getting there 62 out of 101 i'm
i'm needing so many so many backups but while this was playing i was scanning the audience
and i was hoping i was hoping that you know by just saying i was trying to announce this a lot
of socials like oh it's gonna be a reckoning we're gonna defeat the old the old record and i was
hoping some of the original speakers would come here from wherever they are because they didn't
really respond to my emails and i actually see in the audience one of the original speakers of the
presentation and actually he's over there it's christophe christophe here take this mic take it
oh no yeah so what do you think like you don't work at epic anymore but i would love to hear
about the things you've learned in your new company this thumbstick has been waiting you
have it on the thumbstick. Please,
come up on stage. That's an opportunity.
Bring a chair. I need to sit somewhere.
Screw it up for Christoph. Wow.
Okay, let me first make a slide
for you really quickly now. I'll use
your LinkedIn photo.
Christoph Patolsky,
you were the European Unreal
Elemental Elemental
2019 to 2023.
That's correct. It will be going for a little while.
Tell us,
what have you been doing since?
Funny you should ask, Cari. I joined one more level, the creators of Ghostrunner, on our journey to create a new title called Valor Mortis.
You can scan the QR code if you want. Shameless plug. There is a playtest that may happen at some point soon, so you can try it again.
Or you can watch the trailers or gameplays that are already out there.
Hey everyone, so
I was figuring out like what kind of tips I should share and
Mostly I figured okay
There is a few things that I notice every now and then when I see people using editor that
Don't necessarily help them make it like faster easier nicer. So I tried I'll try to bring you some of those tools
First of all control P you should all know it
But I'm not sure if you know that you can first of all not only open assets from that you can drag them into your scene and
Collect it less sorry connecting that to collections is like, you know, I only have my collection collections and this is my next as
Tool for browsing assets. I don't use the content browser
I mean like unless I have to do some operations on assets like move them around folders, but this rarely happens
so
I'm not sure if you read those tooltips in your context menus, you know, you have shortcuts.
And I noticed one day that copy and paste next to properties, it has like shift right
mouse button and shift left mouse button.
So I had no idea that you can actually, like any property, you can right click left click
with shift.
And it's like, you know, you right click to copy and then you just like spam your left
click whatever you want with shift.
Okay, so disabling blueprint nodes.
Oh, I have it here.
There is a few shortcuts.
I'm not sure if they're set in the editor.
They weren't for sure, like in the previous versions
of UE5, but you can see here, like,
there's disable nodes, enable nodes,
there's enable nodes always,
and there is enable nodes development only.
And you can basically switch your nodes,
like, there's no context menu action for that,
at least to my knowledge,
but you can set those things and you can disable
that blueprint node just so it's not being called
when you are testing a huge blueprint from hell
or whatever, it really helps disabling,
sorry, disabling parts of the graph.
But there is an important note,
please do not litter your graph with disabled nodes,
you know, like delete them later,
just use it for testing or something.
I didn't know that you can shift delete the nodes and keep the execution link connected.
Yeah, right?
That's one of my favorites recently, you know.
It's like you just click something, shift delete, done.
Still connected.
Okay.
One other thing that I use a lot, and it tends to work in most places in the editor, so control
E, especially in the level editor, reference viewer, size map, in the size map you just
need to scroll into the asset that you mean to use this shortcut on because there is no
context of clicking.
There's no selection in size map, right?
So if you select an asset, you can click control E and it opens this asset, like this asset's
editor.
It works also on the level.
If you have a static mesh actor, it will take the static mesh or stuff like that.
Shift E is also super useful in the level editor.
And it basically selects all the actors of the class that you have.
So like if you just want to delete all of the, I don't know, tests, some things, you
can get rid of them very quickly.
Or if you just want to, I don't know, move them around.
One other thing about like, you know, where things work, control B, which is open content
browser, it works almost everywhere.
So just use this.
I mean, like, even if you click on something, you know, in, I don't know, Niagara Graph,
you can probably open the module.
I'm not 100% sure, but it tends to work in many weird places.
Minus log, minus new console, especially if you're a programmer, tester,
it's super useful to have your console next to your, like, the game that you're running.
And I'm using it a lot with EasyArgs that Ari already mentioned.
There is also the other plugin for...
Unreal VS.
Oh, yeah, Unreal VS also gives you that, yeah.
So basically, you can just keep it there,
and whenever you run your game or the editor,
it works just fine.
And also, very nice thing.
Sometimes you run your editor,
and then the launcher window pops up.
In the past, sometimes when it just killed this window,
it wouldn't kill the editor opening process.
I believe it now does it.
but you can close the console window
and it's a parent to the Unreal process.
So if you close the console window,
it kills everything instantly
and then you can try again.
Super nice.
Okay, yeah, it has a lot of options, you can read it.
One of my favorites for programmers,
and not only, be curious,
but one of my favorites because I notice
not many people figured this out, right?
So you can basically take any text you see in the editor,
not necessarily copy it, like rewrite it,
you know, write it yourself,
and just Ctrl-Shift-F in source code,
and you can access things that were kind of like,
that you were trying to understand, right?
So this is very helpful if you want to,
I don't know, replicate some functionality from the editor.
Like, I don't know, I was using that
when you enable the plugin,
And I love the restart editor button in my file menu,
which was removed at some point from Unreal Engine 4 because you never need to restart the editor But I really like to edit back And to find it the easiest way was to just enable a plugin
take a look at what the tooltip was next to the Restart
Editor button that pops up.
And I was like, OK, yeah, I could find very easily
what it does.
Next thing about it is you can also search for logs.
And if you sometimes have a cook error
and there is no info, or like, you know,
of course you can use instigators,
you can show instigators in the log,
but if there is no info about the asset that causes the log
or you just are clueless at all,
you don't know nothing at all, I mean,
you can just copy the log.
Remember that some values in the log may be formatted in,
so like if there is a value like three assets or something,
just, I don't know, omit the three assets part,
and search for the longest part of your log you can,
drop a breakpoint, and you will be able to find it,
and probably also get more info about the asset
when it breaks again.
Just to quickly show you, yeah, like in this case,
I was looking for plain viewport.
You just find the references, you follow the tree down,
and yeah, you see everything that this function does.
And actually what is super nice here,
You also see what happened around this operation.
So you don't only call your Unreal
Ed request play session, but you also can realize, OK,
there are two functions.
Wow, maybe I need to also consider that when
I'm using it in my tool.
And one other one that I spent a lot of time,
I wasted a lot of time not knowing.
For example, you cooked your game,
you cooked content for your game in shipping,
because the tooltip says, right, cook the project
for the selected configuration and target.
At some point I was figuring out, like,
hey, I'm pretty sure cook doesn't really take
configuration into account.
Maybe some things are considered,
but maybe if I want to just debug it now,
I don't necessarily need to cook again, and you don't.
So basically the command that is being cooked,
sorry, the command that is being called by this button,
it doesn't even consider the configuration.
The only part that considers the configuration
is like some turnkey process that is going to run next
to this function.
But in general, the cook command is not as it says here.
Just a target platform.
Yeah.
So it's just a target platform, exactly.
And later, the difference is in packaging, most likely,
or staging and those kinds of processes later on.
One of my favorites also for working with testers
and getting tickets from testers as a programmer,
bug it and bug it go.
You basically just type bug it, and instantly you have,
in your clipboard, you have a line
that you can paste in another editor.
And whoever pastes this line, they
will be teleported directly to the same place,
looking at the same spot as you were.
So if you are, for example, reporting a ticket,
We use it in all of our tickets right now.
Whenever there is a bug, we just get a bug it.
We copy it, like paste it into the ticket.
Whenever I want to test the ticket to fix things and stuff,
I just paste it in.
I don't even need to write bug it go myself,
because this bug it go is being copied.
And it has also an option to, I don't know,
make a screenshot and do other stuff.
Probably you can also plug into it, I guess.
And one last thing, which if you're a larger studio,
you must be using Build Graph, there is no other way.
But I would rather, I would suggest everyone
get accustomed to it.
It's a huge XML file that you can basically call
with a command let, and it doesn't need to be cute
by the way.
But Build Graph basically is a way of telling Unreal
in which, it kind of scripts the build process for you.
So there is a huge Build Graph called, I believe,
build-and-test-project.xml, that is included in the engine.
It does everything that you would want to ship the package,
except bootstrapping your exe.
So there is a bootstrapping exe that allows you to help.
It installs the prerequisites if they are not there on the user's PC.
So you have this tiny little exe that points to another exe.
It doesn't do that, but you can edit
But other than that just understanding what what's happening here and what kind of options you even get while building
Like it's all there. You can really learn a lot. So I really suggest that you
I really suggest that you sorry
I really suggest that you get accustomed to build graph and it's super powerful by the way
Just one short little tip for the build graph. You can include full build graphs in another build graphs
and you don't need to really
you only need to provide the parameters
sometimes it will show you a warning
but you don't need to worry about it too much
thank you
thank you so much
wow
take your fetch
and you speak here with all the tips
just a real quick one on BuildGraph
if you want to see an example
of how BuildGraph can be used
and parented and all that fun stuff
Lyra Titan and CitySample in 5 all have this So you can go check out how to actually use it Use it as an example yeah All right we must be almost done now Okay we still need a few
We're still, okay.
But it's okay.
I have a backup.
Like I mentioned, I sent out email feelers
and I also talked on social,
so I was hoping more like Kristen would show up.
And actually, while you were talking,
I was looking around,
and I found another of the original speakers.
So we already have now like three out of five
and I have a fourth one here.
Actually, I see over there is Joseph.
Joseph, don't look away.
Come on, take this mic.
Take it, take it, take it.
I'm on vacation.
You're on vacation?
Yeah, sorry.
Oh.
Okay, so but like maybe the audience
want to hear what you've learned
since you left Epic.
Come on, what do you say? Should we get him off vacation?
Come on, a little overtime
doesn't kill you.
Bring your chair.
I'll even make a slide for you.
So, let me see. I'll get this from your
socials.
So, Joseph and Sam
I even put on vacation.
Come on, this is a good one, right?
Take it away, Joseph!
Bunch of workaholics.
Okay, fine.
Here's the clicker.
Let's see.
Okay, so yeah, so I was at Epic. I started in 2018, died in 2023.
Anyway, so then I worked as a senior technical artist at Romero Games, and I'm also president of Arab Games.
So if you're a game developer in the Middle East and you're looking for conferences, go for the website, arabic.games.
You'll find it very useful.
So my first step is the debug float values.
And this is quite useful if you want to have debugging text values in your shader.
But it's not just for materials.
You can actually pass that data from other systems like PCG or even Niagara.
Keep in mind, in rare cases, might suffer from a loading point imprecision.
So it might round a bit of the numbers, but that happened in isolated cases.
So an example is, for example, here in PCG.
For each point, I can actually print some of the information.
So rather than just look at a sheet, I can just individually look at all of them in the scene.
Another one is in Niagara. If you combine it with the slow motion, that's technically another tip,
you can actually visualize each particle and pass that data for each one of them.
So the next step is how to allow translucent selection or even disable it.
So sometimes when you're in your scene, you're trying to select something and there's a particle effect in front of it or some translucent material.
It's not going to let you select it. So by pressing T, you're going to be able to just select through it or enabling it.
And now you can select the particle.
Now, the Epic Games Store has been growing over the years.
It has a lot of games right now.
It has competitive rates as well.
It's giving out free games every week.
So this is how we disable it.
Wait, you can't put that in there.
It's my name on the line.
You go into the settings of the launcher,
and you click on hide game library.
And that's how you can keep your work environment
and gaming environment separated.
So the asset validation tool is such a powerful tool, but what most people don't know is how
easy to set it up.
So by just having a table with just the name of the classes, the prefix and the suffixes,
creating a validation asset, and this is the whole code for just implementing entirely
like enforcing naming convention across the entire project.
So first you just have to go get the asset from the data table, checking the class of
it.
Then using the node start with or end with, you can check if it has those things.
And then finally just say if it passes the test or it failed.
If you're using Blueprint, just make sure to get the generated class, not the regular
Blueprint class, because otherwise it's just going to say Blueprint, but we want more information.
Now in the original talk we showed this glitch, and this was a way to mess with your coworkers.
Now since 5.5, the show batching will only show a single color, which is still good enough,
but you can just use the other one if you want to.
I still don't know what this tool is made for, but I...
It's important to get draw calls with the UI.
Of course.
OK.
Sorry.
So I want to take it a step further.
So when you're making tools in Unreal, you can use Python.
I would highly recommend you make a script in Python,
because it's easier to hide in your project.
So this is the code that I used.
Then you want to set a timer.
So to make the glitch run at a random time.
Don't make it just run immediately.
Make it also stop after a certain time.
So just maybe for a split second to people get confused
but don't know what exactly is happening.
Rename the functions.
You don't want someone to accidentally look for a glitch
and figure out what's happening, so make it very anonymous.
Then you want to lock the script to only run at a specific date.
So now you don't have to submit this now.
Submit it weeks in advance.
It's enough to infect your entire company computer,
and everyone's already synced on it.
Now, place it in the asset validation tool.
So now every time someone saves an asset,
rename the asset or import an asset.
It might trigger.
You can even give it a random chance,
whether to trigger or not, some many weeks in advance.
And then submit multiple check-in for the same file,
just so they can trace it immediately.
Now, keep in mind that the console command,
it might dump something into console command.
So make sure not to have too much,
or they'll trace it back to you.
And yeah, so this is how to do it.
I definitely did not test it on my company,
not make everyone update their graphic GPU drivers And my lead was happy actually She sent me a laughing emoji So You know the original purpose of that was not for evil
It was for good, but you managed to...
I mean, laughing is not evil.
I guess, okay.
Yes, that's, yeah.
All right.
Okay, so using Niagara for more than VFX.
I did a presentation before on creating an army simulation
with a million units on YouTube.
But then I have a new presentation that I gave at Defcom at GIC. It's gonna find this way online later
It's also how to do it for footstep system because Niagara by default
It gives you a way to hide things at a distance show different
LODs have a lot of things running at the same time and being very performance and
Other things you can use it for is simulating vines and having physics interactable vines
So actually there is a talk at Unreal Fest tomorrow. It's by Quentin. You might want to check it out
It will go over how to use Niagara for doing exactly that and of course you can create texture
generation using simulation stages so it's not just VFX. Where's that army
gif from? That's amazing. It's on YouTube. It's just go for the Unreal Engine
official channel and look for Niagara Army and it's going to be the top result.
You can learn how to make your own million army. So I found this tip by
looking into the code my colleague Joe Greeny was writing and this is also
demonstrated in Lyra I think. So there's the async message system and it's a way
it's like event dispatchers, but you don't need to know the other blueprint to sign up for it. So
you're just sending, broadcasting all that information. And anyone who's listening to a
specific tag can just listen to that. So this is how you set it up and just use it. It's quite
simple. You enable the plugin. Then you go into the project settings and add a text specifically
for that one. I'm using it for the footstep system to send all that information. And then you can
just send a struct. So the top code is how you're just simply sending a structure. And the one at
the bottom is how you're receiving it.
And this is quite true, so if you're sending a lot of
information, you can control how much the frequency and
other things.
If you're making tools in the engine, sometimes you want
to have assets in the scene, but you don't want to really
ship them.
They just want to be there temporarily to store some
data in them.
Maybe even have some sticky notes that have some text
renderer that are only visible in the editor, but not
outside of it.
So make sure to just use that setting on every actor,
is editor only actor.
However, be careful not to have it referenced by other
actors because it might create errors
if you package something that's referencing it.
Caching.
I know this is a very common concept,
but sometimes I forget about it.
Like for example, in this case, I was searching a data table,
and it showed up on Unreal Insight as using
a lot of performance because I was getting a lot of data
from it.
But my table was actually static.
My first reflex was great.
I'll just move it to C++.
It's going to be quicker.
Then later, after spending maybe like 20 minutes making
that code, I realized, yeah, wait, I can just save it in a map.
So every time I get that data, I just put it in a map.
And next time I ask for it, if it's already in the map,
I don't have to go to the table.
Another use of that is some pure functions in Unreal,
they might trigger twice if they're
referenced by multiple things in the graph.
So saving it in a variable and using that directly
will save you from executing the function multiple times.
This one I learned it from James Golding.
And basically, a lot of functions in your scene
are dependent on location.
So if something goes wrong in your calculation,
it will just default to location zero,
meaning there's an Alibaba cave that
contains all of your mistakes.
And if the player gets access to it,
he's going to get all those weapons that randomly spawned
that didn't spawn the proper location.
So you want to hide it deep somewhere.
And finally, I would say maybe work smaller.
So instead of working in the whole project all the time,
if you can work in a separate project, separate level,
maybe even like separate gyms, the way Lira is doing it,
or even when building the game, you don't have to build the whole game,
just build the level you're working on.
That will save you a lot of time.
If the engine had to close or crash, you can easily reopen it,
and that will accelerate your development.
Let's see.
So we're at 84, but we have a problem.
I think everyone in the audience is on stage right now,
so I think we're enough people.
I'll have to figure something out.
Thank you very much.
Thank you so much.
Akshleem.
I do have a backup.
And my backup is getting a random audience member.
So to you, no, I'm kidding.
You should have seen his face.
We haven't gotten to that yet.
Don't worry.
But while you were talking,
I got an email.
It actually went into spam,
so I only just noticed it now.
and it's from the last evangelist, Andreas.
And he just told me, it was super vague,
he just said, I'm on a boat
and there was a video clip attached.
So maybe there's some tips in there.
I'm just going to embed it in the presentation,
we'll just see.
But I think it's like, I just saw it now, Andreas,
this is way too late to be sending me a video, please,
a few days in advance.
I'm so glad though you sent me something.
Okay, first let's make a slide for him.
There we go.
That's how fast I am.
made a few power points in my life.
So, Andrea Suka was a European Unreal Engine evangelist
from 2019 to 2022,
and actually just found out on Slack that he's back.
He just came back.
So he was doing something, then he came back,
and now he's managing the Indies program here at Epic Games.
And yes, he is the last, the last
of the original Unreal Engine evangelist
that I could get back for this talk.
Let's see what his video is all about.
My name is Andreas and I was Evangelist and Content Lead for Epic Games until 2023 and when Ari asked me
to come back for a sequel of a really cool talk we gave in prague 2019 i immediately said yes
but unfortunately life happened and i'm currently on the ocean explorer which is the most advanced
deep sea research vessel in the world and we were here with several experts
doing a hackathon about immersive media
in the last years i worked on installations and games and now i
take you on a deep dive into some tips and tricks I used in the past.
The first tip makes a splash by bringing back some color to this little pale fish friend.
You know you can use a desaturate node to well desaturate the color. But did you also know that
you can use negative values to saturate the little fish fellow and then we are back to a bright orange
color for him. In our next tip we drive the animation of this little guy via blueprint.
He has a control rig with a simple float that controls his spine and we have a blueprint with
a skeletal mesh where we calculate the bending with a simple sign node. So instead of making more
variables in the animation blueprint to put it into the control rig we only have a reference to
our little fish. So in the control rig node in the animation graph we can now use the binding
finding the fish and in that fish we will find our variable that is driven by the sign node.
So now it will connect the blueprint with the control rig and if I hit simulate you can see
that this little fish is now very happy. For the next trick let's move over to another famous sea
creature. He's a bit stiff. The trick is to use some simple nodes to animate him. First we create
a control for the first bone, rotate it and scale it to our liking and let's also change the shape
to be a circle. And then we will use a parent constraint to animate the bone with this created
control. So we select the bone and then on the parents we select the item. We also could
make other changes here but we keep it simple for now. So now this is done so we can at least move
him around still a little bit stiff. So we will use now a local chain dynamics node and we make
some changes here. So first of all we want to select all the bones we want to influence, which
is main most of the chain. We create an array item of all the bones, put it in, and then let's change
some numbers like strength and damping to get a nice movement. And with this done we can now control
the rotation for example and that will nicely contribute through the chain because of the
dynamics we put in. So last step is let's move this control we created with a harmonics node.
So let's put that in and as a target in this case we will again select a control and not a bone
and we will select our only control we have here and then you you see already it begins to do
something but it gets a little bit high wire. We will change the min and max to have a little bit
more control what what gets in there and then for the wave speed we don't want movement on x,
we only want Y and Z. And then let's also change a little bit the amplitude that's quite high.
We want on Y and 1 and on Z let's also take a 1 and maybe also change the wave ease and out with
the cubic. And with this done you can see now the control is moved by the harmonics, the parent
constraint moves the bone and the local chain dynamics gives us this nice movement. So with some
more tweaks. We have a sea creature that moves nicely and dynamically.
And as the movement of this creature is now hard to predict, the next tip is about keeping it in
camera focus. First we create a target point and now we add it to the sequence. Here we add a
transform and this we attach to our tentacle which we find here and here we choose a bone.
Now let's remove the offset so it switches where it should be.
And we switch the camera to look at the target.
So select the cinema camera and here we enable look at target location as as actor we choose
our new target point.
So the camera begins immediately to follow that.
That's already pretty nice.
With the camera now following we can go a little bit further than that and also add
its focal length.
So let's select the camera again, scroll down to where the focal settings are, go here to
tracking and again the actor to track in this case is the target.
So we change that and now with this done we can even when the camera moves around and
we positioning it, it keeps the tentacle in focus.
We can also, it will also work when we change the focal length for example here to 80, go
a little bit closer or zooming out and the moment we stop moving the camera around the tracking will
go in and do our work. My last tip is a quite small one. As a creature of habit it helps me a lot.
Did you know you can switch the toolbar to the old version by using the command tool
menus viewports toolbars and then zero. And for now you have your old toolbar back.
And now have fun at Unreal Fest in Stockholm. Goodbye!
Wow Thank you Andreas He also sent me this slide and said please embed this
So, yeah, if you want to join a hackathon aboard Ocean Explorer like they were doing,
you can actually apply at oceanx.org slash educations like hackathons or by scanning
this QR code.
All right.
We must be getting close now.
I cannot believe otherwise.
Oh, man.
And okay, but we're so close.
This is almost, okay.
I'm a little sad now.
I'm a little upset actually
because this means I have to go
for one of my last backups.
And that was actually asking
the tip master himself.
There is one person with an epic
that probably could have done
this whole presentation by himself.
He is known for his amazing tips and tricks.
And I already asked him like,
hey, just in case I don't do it,
can you save me?
And he was like, I got you fam.
and he sent me a video, but it was only for
backup and I didn't want to use it unless I really, really
needed to because he's the tip master.
But I think we need to do it.
I think we need to do it. I think we need to admit defeat
and just admit that we
needed the tip master's help.
It is
Chris Murphy himself.
He is right now in Australia.
I know he's amazing, right?
Let's hear it for Chris. He is
amazing. He is the tips and tricks
master. He has
been an Australian Unreal Engine evangelist
from 2016 to 2022,
when he's right now on my team
in developer relations at Epic Games.
He's a principal tech artist, a principal.
And he was not part of the original 100 Tips talk,
but it's fine because we've got everyone already.
But let's admit that we needed his help.
Let's see what he has.
Hari, you can't hit 101?
No.
Come on, man.
All right.
I've got five that I think will help you out.
Let's run through those.
So we're going to begin by going Edit Plugins and we're going to enable the Celestial Vault
plugin.
This is actually built on top of the Day Sequence plugin, which gives us a dynamic time of day.
So to begin with, I'm just going to go ahead and I'm going to delete my existing lighting
setup.
Once we've got rid of that, I'm going to drop in the Celestial Vault Day Sequence Actor.
Now we're going to see bright white initially, just as our eye adaptation kicks in, brings
in the sun, and you can see that we've got a nice setup here.
But if I click up top, I can actually change the time of day.
I can scroll through this at any given point.
Another really cool feature of this is not only can I scrub through the time, but if
I look around and see, I can see the moon.
If I keep staring at that for a second while I wait for the eye adaptation to kick in,
you'll see that we actually have a few stars appearing.
And those stars that appear are accompanied by the Milky Way.
So we end up with a really lovely night sky setup straight out of the box, as well as
a daytime setup that looks pretty good.
This is a really, really good starting point.
It's also a really good setup for realistic renders.
At any point you can change what the starting time of day is going to be or how many real
minutes mapped to game minutes.
And you can also set whether you want the time of day to sync from your current editor
when playing in Pi. It's a really, really useful setup. I strongly recommend folks check it out,
as well as just the general day sequence actor setup. Now, sometimes you end up in that situation
where you've got a pivot and it made sense when it was made, but you really want to put it in a
different location for the current operation. If you hold down Alt, middle mouse, then by pressing
that, it'll actually create a temporary pivot at that location. This is really, really useful when
you really wanted to make it look like this object was, you know, it landed on here and
it pivoted around the connection point.
It's really easy to do, just Alt-Middle-Click and you're cooking with gas and when you release,
it's going to go ahead and reset the pivot to the original position.
Now inside of your world settings, you actually have an option called Runtime Cell Transformer
Stack.
And this lets you run certain scripts just before Pi or during cook.
Now in this instance, what we're actually going to do is we're going to run a script that converts static meshes and partition actors over to instance static meshes.
You can write your own things here for optimization sake, but you can see that I've enabled this on those two things.
And that right now inside of the world, I have 166 actors.
But when I hit play, we have 128.
And that's because every static mesh was just converted automatically into an ISM.
This is a really powerful optimization that lets actors still be actors in the world,
but lets your optimization step kind of clean that up and put it into the best context it can be in.
The Advanced Water plugin is really powerful and it's super useful for making realistic rivers.
So if you add a shallow water river actor to your world and then set the source river water body to be one of your existing river bodies, click reset.
And you can see that it actually runs a Niagara simulation that kind of figures out where the water would go and what the flow would look like at that given location.
This gives you a really nice realistic flow.
It still works with buoyancy and everything else, but also it allows you to bake.
So you can not just run it live, which is expensive,
but you can also bake it down to be a water component
with a baked SIM applied.
So you can see here that that's been selected.
I clicked bake earlier.
And now it's actually really quite cheap.
And we end up with all the visuals and buoyancy interactions that we would expect from a nice water system And yeah if you looking at kind of not just having the stock standard water setup that we got this is probably worth looking into I could stare at this all day Honestly it
strangely satisfying. Now, the last thing I want to show you is what I think is one of the coolest
features in PCG that no one knows about, and it's called Shape Grammar. Shape Grammar allows you to
use plain language to explain how a series of points can be set up.
For instance, in this situation, I'm saying add a corner,
and then as many of these meshes as you can,
with the small one being scalable, and then add another corner.
And PCGs can automatically figure out how to do that.
I've used this for all sorts of generation.
I've used this for cities and for mines.
And I strongly recommend anyone investigating PCG
checks this out.
If you want more information,
check out the docs page that we have online.
And alternatively, just right click
and create a new PCG from the shape grammar template.
I love it.
I didn't know that you could bake the water simulation.
I also think the game industry is the only industry
where you can unironically bake water.
Let's see, did he manage to get us over the tip limit?
Wow, we're so close.
We're so close.
He was my last backup.
No, wait.
There is.
We did that.
Okay.
Actually, I had forgotten about this.
We did do one last backup.
A month ago, on my socials, I actually made a request.
This was just in case I needed some extra tips,
but I asked the community if they wanted to guess their manual first talk on presentation,
and asked them to send their best tips.
And I think for this one, for us to get over the 101 limit, we really need for the community to come together and help us with this.
So, I have the folder here. I haven't looked at it. Let's just see what we got.
Roll the dice. Here we go.
First one is from Einar Hallig or Einars Corp.
We noted that some of your functions that return a Boolean always require a branch note right after it.
Would be nice if you could combine them, right?
and the good news you can using this meta specifier you can do exactly that
okay i did not know you could do that next is from luke bothham who is a senior technical
designer at surgeon studios hey if you have a blueprint that has some functionality that you
don't want to run when you right click and play from here in the editor a way to get around that
is you can use a get all actors of class and search for a player start pie which is what it's
created when you right click and play from here you can then check the results of this check to
see if it's empty and change your logic based on that we use this at surgeon on tales against
ira's owl where i use this to basically create a checkpoint when you right clicked and play from
here so this was very helpful when we're testing things like hazards where you want to just kind
of quickly run into some spikes check that they're set up correctly and then the player would
respawn right next to it so you could test it all over again okay i did not know you could just do
that well and as we learned in your myth busting presentation get all actors of class isn't actually
expensive yeah it's super fast if the actors you're getting is a low amount because they're all
put into hash bucket so you can actually do this and also this is an editor-only feature anyways
and yeah usually when you right click and do play from here you want to do something specific you
don't want your gameplay systems to like to put the player to the beginning so being able to just
skip it by checking what is awesome all right uh next tip is from alexander ronkonen uh he is
actually uh from finland and i met him at the last unrelated finland meetup so this is small world
if you have an imported asset that you're constantly updating what you can do is go to
editor preferences and search for auto import settings and when you set these directories as
you want. What you can do is, for example, if you're editing an image, you can export it and
BeBaboo, you can see instantly how it looks like in the game. And it works even if you don't say
BeBaboo. But it helps. He actually sent us another tip. Blueprints, if you have a struct variable
and you want to change just one or two members, don't do this craziness where you split the struct
and connect all of these pins, instead use set members node.
It allows you to select the members you want to change
and then you just change them.
Yeah, okay, that's nice.
I always split it and connect everything except that one variable I want to change.
Oh man.
Okay, we have another one.
Manage your tabs with shortcuts.
If you want to open an asset in a new tab, press Ctrl P and search for the asset.
And swap between current and previous tab with Ctrl Tab, like this.
And you can press Tab multiple times to browse previous tabs.
To open a specific tab, press Ctrl Shift Tab and search for the tab.
And if you want to close a tab, press Ctrl W.
I did not know you could search for open tabs.
All of us professionals, happy people,
I don't know that either.
I work here.
Next one is from Amer Makes Games Oh thank you Thank you Find yourself continuously modifying some blueprint but you have to stop playing in
editor and get back to playing editor.
You can go to project settings and search for base classes to allow recompiling during
play in editor and add your class to this list.
And you now can compile it even while you are playing editor.
Oh, that's a very useful one.
okay and another one
after finishing your play in editor sessions
you're greeted with a lot of error messages
that you don't know where they're coming from
and what they are trying to say
you can instead enable blueprint break on exceptions
it will stop the game immediately
once an error is met
so you'll know where exactly it's coming from
and you'll probably fix it
probably
oh next one is from CobraCode
he actually helped me with the myth busting best practices
in Unreal Engine talk where he was talking about myth-busting
whether you can use 2D or not for Unreal Engine.
And spoiler alert, you can use 2D in Unreal.
When you create a Blueprint function
and want to use an input parameter
further down the line of execution,
the connecting lines can get very messy.
Instead, you can just right-click and type get
and whatever your input parameter is named.
Then you can copy-paste this node
and use it throughout your function,
making things much cleaner and more readable.
Oh, nice.
Speaking of Mike, can you...
Function inputs are local variables.
Yeah, oh.
That's good to know.
It's great.
Yeah.
Next one is Robin Jan Storm, who is a tool UX designer.
If you can't tell what an asset looks like in the thumbnail, easy fix.
Go into the asset browser to the gear icon over here, click on thumbnail edit mode,
and now you can click and drag to rotate them.
Set them however you like, and then go back here, turn them off again, and your thumbnails are set.
I thought these were images, but they're just small Unreal viewports.
They're all just little viewports, and they're all rendering.
Also, you should follow Robin Yon on LinkedIn.
He makes a lot of tips on UX.
He's really good.
Good to know.
And next one from Yon Rock, who is a UE5 gameplay and UI programmer.
You're doing some math in your blueprint.
You should use the math expression node instead.
Simply type your formula in the name field and look, it can transform this into this.
And you can always look at what's happening behind.
Oh, nice.
Very convenient.
Next one is from Adam Chiarelli,
who's a senior technical artist at Tanglewood Games.
My favorite tip is the Blueprint Debugger.
It lives under Tools, Debug, Blueprint Debugger,
and you can use it to look at Blueprint parameters
in real time while in Pi.
And it also has a call stack.
When you hit a breakpoint,
you can follow through how it got there.
Hope this helps.
Yeah, Sam, you also had that tip.
So this is just even better.
Should we count it twice?
No, actually, let's take my bonus tip
and make it an actual tip.
So the Unreal VS, that's not an actual tip.
Use it.
It's really good.
Okay.
We fixed it.
It's okay.
Let's keep going.
This is great.
How do you...
Ammar Esmail.
Thank you.
To find an asset in the contract browser, select it and press Ctrl and B.
And here it is.
Well, that was the shortest tip.
But yeah, Ctrl B and it'll go directly in the asset browser.
Awesome.
Salih Abdallah Sandeel.
Thank you.
MVP right here.
I'm gonna try this.
Hi, if you want to change the lights on the static mesh editor view, just press L key and left mouse.
And this is how you change the light direction.
I did not know you could change that. That is crazy.
We have Einar Holik again.
Have you ever made a function in C++? I don't get tired of putting self note into it everywhere.
Wanna have a function like the ones that come from the engine where it's automatic?
automatic, then add the simple meta specifier with the name of the parameter you want to
automate and boom, done.
Trying to see how many people are just going like, oh my god, no, this is a good one.
And then I think this might be the last one we have, again from Einar.
We just added new animations in a specific folder and want to work only with them, but
in the asset browser you see a lot of other animations, you can just filter them out using
folder filter.
Boom, now you see the animations only in that folder.
this was everything we had
everything we had
this is it
like I'm out of backup options
and I really really really hope
that we're over the counter
because also I think people
are starting to get hungry
we are now at
what does the counter say
yes
we went over
so it's going to be even harder
for someone who maybe works at Epic
who wants to top this
to do it in a single presentation
okay
I want to remember this
So all of you were now a part of history.
So can we put the lights on?
Because I want to get a selfie with the audience here also.
Can you guys all come over here?
Maybe stand like this.
I'll be on stage and we're going to take a selfie.
And we're all going to say, hi from Stockholm.
Okay, there are the lights.
Are we going to do this in five years again?
I guess we have to.
We have to beat the record.
Okay, so I'll go three, two, one.
And all of you are going to say, hi from Stockholm.
Let's practice it.
3, 2, 1
High from Stockholm
Great, a little bit louder
because I think Prague did it louder last time
so come on, you can do it, we can beat Prague
Are you ready?
Okay, we did it, 109 tips
3, 2, 1
High from Stockholm
Woo!
Thank you so much
Have a great Unreal Fest
Thank you, thank you
Thank you.