CHRISTOPHER EVANS: Hi, my name is Christopher Evans.
And I am the Lead Technical Animator on the Digital Humans
Team here at Epic Games.
I wanted to take a couple of minutes
today to go over some of the hardware settings in Unreal
Engine and some of the new features
that allow MetaHumans to really work well on different hardware
platforms.
So from day one with MetaHumans, the goal
was to not just make really high fidelity digital humans
that kind of everybody expects from Epic,
but enable anybody to make that kind of democratized
the creation of that, but also allow
them to run on multiple hardware platforms
and really make usable characters that
can be used in games and have all of the features
that a triple-A game studio or an indie game studio
expects in order to use those characters
in a real-time application, whether it
be on a virtual production stage or on a Switch or an Android
device.
So that's a really tall order.
I don't know of anybody that's really done that before.
It means getting the same assets working with levels of detail
across many different hardware devices.
So the MetaHumans have eight levels of detail
and you can kind walk through those different levels
of detail depending on your current context.
So the kind of easiest way to do that
is to go up here and tweak the Engine Scalability settings.
This is kind of analogous to in a video game,
where you kind of set different rendering characteristics
based upon how beefy your PC is or whatever.
For those of you who aren't aware,
you can type stat space FPS down here in the output log.
And this will kind of tell you what the current frame rate is.
If you're not sure where the output log is,
you can go down to Window, Developer Tools, Output Log.
And I've always got the output log open here on a tab,
just so I can kind of see what's going on.
I refer back to it later.
You can get quite a bit of feedback
about what's happening with the Engine and stuff
from down there.
So if I go to the Settings, Engine Scalability settings,
I can walk from low to high to medium to epic to cinematic.
And as I'm clicking these, I mean,
you can see the image changing in the background.
But you can also see all of these different CVars being
set that are changing different features in the Engine.
They're turning off hundreds of different features
in the Engine and changing different scalability settings
in the Engine.
So I mean, you can see how it kind of affects the frame rate,
but it also, you can see all of those different CVars that are
being changed under the hood.
So with all of these different logs that I had mentioned,
one thing I want to talk about is a new feature
called the LOD Sync Component.
And if you select the character's Blueprint here,
you'll see this LOD Sync down here.
And there's a lot of different components syncing
and a lot of different custom log mappings and things.
But the TL;DR here for this feature
is that in order to make really high fidelity human characters
and have them kind of walk right up to you in a game
or in a cinematic-- and then the cinematic is over,
and you're right back into the game,
right back into the story, or whether it's
virtual reality or some kind of live experience.
In order to have characters look the best they can,
you have to be able to turn off certain features
as they recede away into the distance.
So the LOD Sync Component, what it does
is it essentially creates different buckets.
And you can sync many different parameters and meshes
across different LOD levels.
So here, you see that it says, we have eight LODs.
That's because the head, which drives
a lot of the LODing, it has eight levels of detail.
The body has four levels of detail.
And what the LOD Sync component can
do is it can say like, hey, every two levels of detail
of the head, I want to change one level of detail the body.
And why that's important is because when
you're changing mesh levels of detail
and they're seams involved, you really
want to make sure that you always
have head level of detail two with body level of detail one
or whatnot.
Because you need the vertices to line up
the, skin weights to line up, the blend
shapes to line up.
Why I'm also pointing this out is, let's say,
that you're on a virtual production stage,
or you are kind of game location scouting,
or you're making you're doing a layout pass,
and you're dropping a lot of different characters
into the level, you can go ahead and you can do--
you can force the LOD Sync component to be like LOD 4.
And as you saw, the face, the vertices,
and geometry on the face got a bit faceted.
The hair is now a card representation and not
a strand representation.
But you know now the character is a lot more performant,
and you can drop a lot more down.
You can LOD all the way down to level seven.
And there's eight levels, but it's zero index,
so it's zero through seven.
And as you navigate the LOD levels,
we are dropping joints, a hundred different poses
of anatomical joints that keep volume on the character,
and certain rigging shaders and the strand-based hair
to card-based hair.
There's a lot of different-- it's not
just geometric complexity.
There are a lot of settings that are
associated with these different buckets, if you will.
If I set this back to the negative one, that
means I want it to be automatic, and with it on negative one,
I can go in
and you can see exactly when the hair
pops to a card representation.
The hair strands are not actually polygonal,
so they don't right now render when we go to wireframe view,
they're actually real strands on the GPU, which
is this pretty awesome.
So that is the LOD Sync component,
and while I'm on hair strands, I wanted to mention,
there is a CVar that, even in LOD 0
you can go ahead and disable hair strands.
And you saw that little pop, and what
this did is it blended to a card version of LOD 0 hair.
We understand that even on some current-gen consoles,
having multiple characters on screen
with very, very feature film fidelity hair,
it can be taxing on the GPU if you're
doing other operations like have AI or Physics running.
So we are shipping MetaHumans with a LOD 0 set of card hair,
and that's what you see here.
I can go back, and I will turn on the wireframe again.
So this is the high-fidelity hair cards.
I will mention that when you're in this mode right now,
it appears like the lashes are gone.
The lashes are actually there.
It's just when you pop into the game--
the game's not evaluating right now.
As soon as the game is evaluating,
you can see that they popped on.
So that's a setting that if you never
wanted to have strand hair and you always had strands
disabled, you could put that in your ini file,
and you could set the shader to always be there.
We have to manage that shader relationship
because when the strands are rendering,
we don't want you to see the card-based eyelashes.
But they are there, and that's how you can turn them on.
I'm going to go ahead and turn the hair strands back on.
So one other thing would be ray tracing.
Let's say that you don't feel that you need ray tracing.
You have DirectX 12.
But you can go into the Project Settings,
and up here, if you just search for "ray tracing,"
you can disable ray tracing.
And that is going to require an engine restart,
but already your character should
be quite a bit more performant if you disable
ray tracing in this scene.
One of the last things I wanted to touch on
would be DirectX 12 versus DirectX 11.
Now, some people were having issues
where they have Windows 7 and they don't have access
to DirectX 12.
So you can go into your Project Settings,
and if we go down to Platforms, Windows,
we can set the default RHI.
And I can set that to DirectX 11.
And now when I restart the Engine,
I'm going to start in a DirectX 11 mode.
RHI, I believe, is the Rendering Hardware Interface.
I'm not a graphics guy.
I'm not a graphics engineer, but if you just wanted to know.
So I'm going to leave it in DirectX 12
right now, and the way to query that-- you can type r.rhi.,
and there's only CVar left.
It's name.
And if I query that, it tells me I
am in D3D 12 hardware interface right now.
So you're on Windows 7, and you can't even
load the Engine because it requires
being loaded in DirectX 12 in order to set it to DirectX 11.
That's a challenge, so I'm going to show you how
to kind of go into the project.
So here is the Project folder.
It's going to be in your Unreal Projects folder, MetaHumans,
Config.
Then there is a DefaultEngine.ini file.
You can search in here and find Default Graphics RHI.
That is the project setting that we had just changed.
If you go ahead and just delete that,
save the file, that's going to set you back to Default,
and what Default actually is DirectX 11.
So if I close out the Engine and I reload that project,
we will again query the RHI name.
And I believe it will be running in DirectX 11 mode.
So CVars are persistent across sections, which is awesome.
So if I query the RHI name, you see it's D3D 11.
So that is how you can load up the project
if you don't have access to DirectX 12,
and the stuff still looks pretty high-fidelity, DirectX 11.
You just won't have access to some of those DirectX 12
features.
And if you are just mousing around the demo
and you didn't know, you can press G,
and G removes those game meshes.
So that's about it.
I briefly went over all the different scalability settings,
all of the LOD levels, how LOD Sync works,
how you can use Forced LOD to drop
a bunch of different MetaHumans into the level.
If you're a triple-A developer, really look at LOD Sync.
LOD Sync is really awesome.
It was developed by Lina Halper here at Epic,
and it really allows you to make the highest quality
characters that you can on any given hardware that you're on.
But you'll also see how we use it
to drive different LOD levels.
The characters have very complex rigging and different things
that kind of slough off as the character
walks away on the face and the body.
So then we talked about how to disable the hair strands
and that there is a LOD 0 representation of cards that's
in there, and how to disable ray tracing,
how to go to DirectX 11 RHI mode,
and how to boot the Engine into DirectX 11
if you can't open it on your current hardware platform.
So as I said, it was very important to us
that these characters can scale and be used
in many different situations.
This is about all telling your stories.
We can't even come up with the different situations
that you're going to want to be using MetaHumans.
We're really looking for your feedback
when it comes to those different hardware platforms,
and from now until release we're really
going to be working to try to get the characters looking
as best as they can, regardless of which hardware platforms
they're running on.
But that's a real challenge because we're not
going to make characters specifically just
for a particular hardware platform.
The goal is to make scalable characters that
work on a wide array of hardware platforms.
But thanks for taking the time to listen to me ramble on,
and we really hope that you guys are enjoying
this sample of MetaHumans and can't
wait to see what people will do with the tools
once we release them later this year.
Thanks a lot.
Bye.