JAKOB KEUDEL: Hi there. My name is Jakob and I'm an
environmental artist for Quixel here at Epic Games. In this video, I'm excited
to share my approach to constructing the destroyed
buildings for this particular scene. In a previous tutorial,
my colleague Wiktor Ohman went over using the
modeling tools displacement features to create unique
geometry from scan data. If you haven't already, you should
go watch a Wiktor's tutorial, as I'll be glossing over a few details
regarding displacement techniques that he touches on in
greater depth in his video. We'll be leveraging this
technique and integrating it with some more involved
steps to build pieces for these damaged buildings,
all in Unreal Engine 5. Specifically, I'll be
taking you through the step by step process on how I
created these broken floors. So without any further
ado, let's jump in. I start with identifying the
pieces that I need to build. In this case, I'd be mainly
looking at variations of ground floors, walls, and support columns. Most of the other pieces
I should be able to source from the MegaScans library. The floor module variations
are a wonderful example of the different
techniques we'll apply. Usually you don't want to work in the
level that you are set dressing in. Things can get messy, so
having an isolated environment in which you can build
things is always a good idea. Therefore, in a clean
new level, I start by opening up the modeling tool
shelf and creating a new box. After scaling it to my
liking, I use the various poly edit tools to create something
that has a slightly more interesting shape than a simple box. While I'm not touching on all the
cool features of the modeling tools, I would highly recommend checking
out the State of Unreal video Blockout and Asset
Production in Unreal Engine 5 with my colleague Arran Langmead,
as well as the inside Unreal Livestream, Exploring Geometry
Tools in Unreal Engine 5 to get a more detailed look at
the individual tools available. In this case, I can simply
use the mesh bool operations. I'll also make use of
the Material Edit tool, selecting the top
faces of my new mesh and assigning a new
empty material slot. This will allow me to use a
different material on these faces, making it easier to give this
asset the look that I'm after. I'm not going for super accurate
remodeling of actual construction pieces or even accurate
snapfit modular assets. Rather, something that
does the job artistically, but won't cost me too much time. From here, we can
already prepare our mesh for adding detail using vectors
displacement methods by tessellating our mesh using the Remesh tool. The main goal is to create even
topology throughout the mesh, otherwise our displacement
will create unwanted results. Sometimes Remeshing might create
UV pinching or distortion, but if you notice these at this
point, don't worry about it. We'll fix that in our next step. Depending on your model
and how you created it, it might already have generally
accurate UVs and perfectly usable UV seams, as is the case here. In this case, using the Unwrap tool
instead of completely rebuilding UVs is a valid and usually
quicker option. I have a few concrete materials
that should work well on this asset, making use of the second
material slot added to the top faces in a previous step. But I'm noticing that the
tiling is way too low. Instead of increasing the
tiling in our material instance, let's make sure that the object
UVs are correct to begin with. X Form UV is an
incredibly useful tool that allows me to select individual
UV islands to then move, scale, and rotate them. Here I am looking for a tradeoff
between good texel density, detail, and readability
versus visible repetition. For this particular, mesh I'm not
worrying too much about relatively obvious repetition in our tiling. We'll be breaking
this piece up, which will allow us to simply
hide occurring patterns while getting surface details
that show up well in camera. To add a bit more
fidelity to our assets, I'll displace them
just like Wiktor did. The thing to note here is that
we are displacing our mesh twice to capture details from
both materials used. While this step displaces
the mesh in areas where we don't have any
corresponding textures, the amount we are displacing it
with and the destruction added in later steps will nicely hide
any inconsistencies, while also adding more detail to catch
the light in interesting ways. It is worth highlighting that
what we are doing here and taking for granted for this entire
workflow would have been outright impossible previously. We are making the most
out of Nanite, which allows us to use lavish amounts
of polygons in a pretty loose and worry free way, throwing
geometry at our assets for nice and crisp
details instead of having to go through the trouble of
setting up complex baking pipelines. However, while Nanite can
handle millions of polygons without any issue, I do
not want to slow down the editor more than
necessary, so we'll try to stick with polygons
that yield nice detail, but won't impede my workflow
during the next steps. Our displaced mesh has some
super nice surface details. However, I feel like the
edges are simply too crisp and the entire object
a bit too uniform. To very quickly stamp in some nicer
edges, I'll just duplicate my mesh and use the mesh bool tool to
knock off my corners, essentially beveling them. This is a very quick
and dirty example of using predisplaced geometry
based on scan surfaces to add more realistic
wear and tear, saving me huge amounts of time as an artist. We want to be as
transparent as possible, so I do have to slightly
caveat this workflow by saying that I'm building this
particular asset for the strict use case of a cinematic in which I
can control what the camera sees. This mesh isn't perfect, and
probably would not hold up in close up shots or gameplay. However, making this asset
for gameplay purposes, or even just different
camera work wouldn't differ from what I'm currently
doing in any major way. The real key would simply be me
spending more time on the asset, polishing the look
to a higher degree, and going through multiple passes
of weathering and detail work. In this instance, however, I
focus on working smart, not hard, using the tools at my
disposal to my advantage to get something that works
perfectly for my intended use case, with very little effort compared to
more traditional asset pipelines. Generally happy with
the look I achieved, I'll use the simplify tool to
knock off some unneeded geometry. The next steps will
become increasingly slow with ludicrous
polycount, so this step will make my life a bit
easier while also reducing the memory footprint of this asset. And even after I knock
down the target polycount to 25% with the default Unreal
Engine reduction algorithm, the resulting mesh still has
all the detail I could ask for. Now the actual fun begins. To create our broken concrete
pieces, we need to break this mesh. Now to do that, I'll go over
to the fracturing tool set by either clicking on it or hitting
Shift-6, select my base flow mesh, and create a new Geometry Collection
by clicking on New at the top here. This will allow me to leverage
the various sub tools to create several layers of broken chunks. I do like the cluster fracture for
concrete, so let's go with that. I make sure to tweak my noise
amplitude and seeds along with the other available settings to
get nicely varied chunks of debris. Usually this would be set up and
used for in-game or cinematic destructables, but for this I'm
not interested in using them dynamically. So instead of keeping them
as a Geometry Collection, let's create a new static mesh
from that by clicking on To Mesh. After making sure that the Per
Bone and Center Pivots options are disabled, I can hit Convert. As you can see, it seems like
nothing here really happened and we are left with a single
pretty useless chunk of geometry. However, this mesh is all of our
previously created chunks combined into one single mesh. Opening up the modeling
tools again, I'll click on Group Generation and
auto assign new polygroups from connected triangles. Now in my Triangle Selection tool,
I'll specify my selection mode to all in group and
all of a sudden, we can paint select our
now visible pieces. As soon as I hit Separate,
my just selected pieces are saved as a new static mesh. This is fantastic because it allows
me to make my fractured model and apply artistic control over
what debris pieces I want to have, even allowing for multiple
variations of the same model. Even better, once I exported
pieces for my entire model, I can simply hit Cancel and my
original fractured static mesh is fully restored,
allowing me to create more variations in a non-destructive way. Now because I made sure to
keep Center Pivots disabled, I can drag all my individual
pieces into a new area without having to reassemble it since
they all share the original object's pivot location. While doing so, you probably notice
that our broken edges don't quite look right with the current material. However, the fracturing operation
created a new material slot tied to those newly created faces. Using another material
instance of some rough gravel, we can get this to look
much more appealing. From here, it is a matter of
deleting and moving individual pieces to get the look you're after. Once happy, you can
add finishing touches by set dressing additional
details, such as rebar pieces and steel beams. But how do we use these
pieces in our seam now, which is in a different level? My favorite solution are
packed level blueprints. Now these allow me
to non-destructively wrap my individual assets
into a separate actor type that I can use as a prefab
in whatever scene I want. To make correct use of their
streaming capabilities, make sure that World Partition is
enabled in your project and seams. While it is possible to use level
streaming without using World Partition, level instances
do not automatically have streaming management or
streaming strategies outside of a World Partition main world. For more information, we
also made sure to link to the official documentation on
that topic in the description below. So I start by adding
a new empty actor. This will be my new pivot
for the prefab I'm creating. Once I'm happy with
its location, I can select all the assets
of one of my assemblies, right click and select level,
and create packed level actor. After specifying that
my previously added empty actor should
be used as a pivot, it will now ask me for
the name and location for the new level in the blueprint. I'll give them a unique location. And that's it. Let's jump into the original level
and drag in our floor prefab. The same approach applies to brick
walls, broken windows, pillars, and much more. Both the modeling and fracturing
tools can be extremely powerful. A quick bonus tip, just
because I have you here, try using rocks,
boulders, or other meshes to add subtractive
detail to your seeds. Using the Boolean operation
in the modeling tools is a great way to add another
layer of destruction detail. With all that said, I hope you
found this small tutorial useful. I had a blast discovering
this technique, and I'm sure that you
will find it useful too. If you discover more ways
of utilizing the modeling and fracturing tool
sets in Unreal Engine 5, make sure to add your insights
to the comment section. We'd love to hear from our
community about their approaches. Now, thank you so much for watching. I hope you enjoyed it. And as always, I cannot wait
to see you in the next one.