Constructing Destroyed Assets: Creating ‘Ninety Days’ in Unreal Engine 5

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
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.
Info
Channel: Quixel
Views: 281,021
Rating: undefined out of 5
Keywords: Unreal Engine, Tutorial, ue5
Id: TABymp8AzMY
Channel Id: undefined
Length: 13min 24sec (804 seconds)
Published: Wed Jun 01 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.