epic games unreal engine This is a topic that many people are looking for. bluevelvetrestaurant.com is a channel providing useful information about learning, life, digital marketing and online courses …. it will help you have an overview and solid multi-faceted knowledge . Today, bluevelvetrestaurant.com would like to introduce to you Getting Started With Procedural Mesh Generation | Inside Unreal. Following along are instructions in the video below:
On this episode of Inside Unreal, our Technical Artist and UK Evangelist Arran Langmead will explore the procedural mesh component and how it can be used to build art tools in the engine. He’ll demonstrate an example of this with a stylized tree generator that uses a mixture of splines and random mesh generation to create foliage elements. These elements can be snapped onto one another to create fully animated trees and foliage assets.
01:14 Demonstration breakdown
02:00 Use cases
03:00 Geometry blueprint
18:13 Increasing max loop count
18:43 Project component breakdown
26:50 Component blueprints
36:30 Benefits of use case
40:31 Benefits of Procedural Mesh Component
42:21 Performance impact
45:53 Duplicated Vertices
48:30 Component to static mesh for large scale uses
50:00 Base code concerning components
51:08 Materials & textures
1:08:23 Export workflow
1:06:34 Using Quixel Mixer in use case
1:07:20 Evangelism Overview
1:13:04 How to use the project file & plugin
1:18:57 Future use cases of this tool & plugin
1:20:10 Blockout use cases
1:20:45 Stream wrap-up
Yeah this is a demonstration of just some of the procedural mesh tools that you you can use inside unreal so it uses the procedural mesh component that you can of add to any blueprint that you’re doing and in most of the instances that we’ve seen. It’s kind of been used for doing lots of kind of slicing. So there’s another function that lets you break up a mesh into multiple pieces.
So you can do that kind of fruit ninja style. Cutting items in half. So what i’ve been kind of doing is doing lots of experiments with the procedural mesh component and yeah these are kind of some of the results that i’ve come up with so i’ve ended up using it to kind of build kind of a stylized tree generator.
So that it basically lets you create these things inside engine. Which is useful because it means that you can actually see what it’s looking like in engine. As you’re building it and it just kind of gives you a way of kind of building these tools easier.
I’ve always found that this kind of stuff is a bit of a pain to do inside things like 3ds max and blender. So yeah it seemed like a good use case to kind of get this thing going so. What i’m going to do is kind of run through some very kind of easy starter content for getting to grips with the procedural component.
And then do a bit of a walkthrough of how these particular assets were made and then talk about where the plugin could go and kind of if you want to download it and add to it then that’s cool so am. I okay to start off with the intro content. We all good victor we are good sound good looks good arran awesome so i’m starting off with a triangle because that is it’s probably the easiest shape you can do it’s kind of the basic bare minimum that you need in order to get some geometry rendered on your scene and i’ve got this little kind of example blueprint here that lets you pick between a few different kind of key shapes.
So we’ve got a triangle. We’ve got a quad. We’ve got a cylinder.
We’ve got a cone and then we’ve also got a custom mesh as well so. This blueprint is kind of like just that nice base starter. And it all operates inside the construction script right so all of these assets are running entirely inside the construction script.
Which means that you can edit and build stuff without having to go in and play in editor or anything like that you can just do it straight in the editor. So starting off with a triangle. This one is super super super simple right all i’m doing is i’m specifying some vertex positions and then i’m getting the triangle order.
And then that gets fed into this bad boy over here. The create mesh section. And all this done is it takes in arrays of data.
So we’ve got vectors. We’ve got integers and we’ve got kind of uvs as well so it’s a vector 2d and then it uses that array information to build the mesh so inside my component here i’ve got a procedural mesh component and if you want to kind of build this stuff yourself that’s super easy you can just kind of go in and add the procedural mesh component as you need and then all you need to do is figure out where those points go and then build your assets. So the easiest thing.
I would say to do is actually building your vertexes that one is not really that much of a problem. The thing. That’s quite difficult to do or can be quite difficult to do is figuring out how to build your triangles.
Because you need to figure out how to sort those things sort that order out so that it’s drawing correctly. And that’s kind of why i stuck with the foliage aspect of it because actually foliage. It’s all simple shapes.
It’s just about the placement of those simple shapes. As they kind of stack forward. So with almost all trees you’re only ever really dealing with cylinders and cards and that’s kind of all you really ever have to worry about and it can get more complex than that and we’ve got a few demonstrations of how you can get a bit more complex that that but for the most part it doesn’t get past kind of those cards and cylinders.
So once we figure out how to draw a card. We can figure out how to draw a cylinder quite easily after that and then once we’ve figured out how to do those two things. All we have to do is start stacking them on top of one another until we get a tree so my draw triangle again really simple all we’re doing is we’re specifying three points in space.
So that’s going to be my vertex positions. So the first one is 000. So zero access and then we’re doing one of set up in 200 and one asset in x200.
Which gives us our two points on either side and then all we need to do is have our triangle build around that so i have my triangles sort order and all the integer is doing here is it’s specifying. The vector position in order to make the triangle so here i’m specifying 210. Which is going to equate to 210 inside the vertex array and then it will build a triangle based on those particular points in space.
So once we have a triangle. It’s not a difficult step to build a quad and in this case. I want to build a grid of quads right because we can step up from there quite easily so in this particular instance.
I’m doing a nested loop. Please forgive me. And we are basically getting an x length and a y length.
Which is going to be our in this case. Our number of vertexes in the x and y coordinate and then we’re looping through and we’re adding a vertex in x. And y.
So getting these particular coordinates multiplying. That by 50. Which is going to be our gap between our vertexes and i’m also doing a uv position as well.
Which is basically normalizing my x length. So the max number of vertexes that i’m going to have in my x and max. Number that i’m going to have in my y and then dividing that by the current number that i’m on to give me a normalized value and that means that when i create my material.
My uvs will be correctly scaled across the x and y access for my grid. Now. If you’re doing a basic grid.
We actually have a function built in called create grid mesh triangles. What this will do is it does all of that kind of difficult triangle calculation work for you so you basically just put. In the number of x and y coordinates that you’re going to have and then you set the array of triangles and it will output those triangles for you in this particular array here and then we also have a function for generating your tangents and normals.
Which are important for giving you an accurate tangent and normal facing shape for your faces and that’s just done in the calculate tensions for mesh and what we need to do there is input your vertexes and your triangles and your uvs and then it will output the normals and tangents for you so all of that stuff is quite easy so with draw quad. We get all of our vertexes. We get all of our uvs.
We get all of our triangles and we get all of our normals and tangents and then that gets plugged into here. So. The grunt of the work is all done in figuring out where all the vertexes need to go.
And where all the triangles need to go once you’ve got this kind of basic information. The rest of it will kind of fall into place quite nicely. So once we have a quad.
It’s a fairly easy step to turn that flat quad which. We’ve got over here . And i can kind of show you the y frame of this as well so you can come see the shape.
So you can see we’ve got that x and y coordinate going in there. Which gives us our grid pattern. And then all we need to do is wrap those vertexes because our triangle calculation doesn’t need to change all we need to do is wrap those vertices around a point in space rather than just doing it on a single axis.
So if i switch over to this one. Here. You can see that that’s all we’ve done right instead of doing it on the quad.
We’re basically using our axis here as a center point and then expanding out from that shape radially to give us our final object so if we take a look at the draw cylinder.
We have a rotate about vector. Which is how i’m doing that kind of simple axis around our vector and for the x. All i’m doing is getting the number of components.
Again. So that’s just the normalization of x multiplying. That by 360.
So i get my coordinates correct for the 360 degrees. And then i rotate my forward vector around my up vector right so if we’re thinking like that that’s my up vector that’s my forward vector and all i’m doing is i’m just twisting that round and then putting a point in at those kind of increments as they go around. I’d have to break my hand to show you properly so you’ll just have to take my word for it and then we’re multiplying that value up by 100 because the forward vector is still just a vector.
So we want to increase the scale of that particular vector and then that gets plugged into my add value. And then by z is actually exactly the same so. It’s just z.
Times. 50 right. Which is just my vertical increment and then my uvs are the same my triangles are exactly the same and so are my tangents and normals so that basically gives me my cylinder shape and then once we’ve got the cylinder shape.
It’s a fairly easy step to then modulate the width of that cylinder over the height of that cylinder right and this is where the cone shape comes in so if we switch over to this one here like so you can probably guess how we’re building that particular shape. So all we’re doing is instead of multiplying it up by a single value. Which was 100 in the cylinder.
We’re now taking into account. The normalized z value. So the normalized height of our cone.
Sorry and then we’re inverting. It as well so instead of it going between kind of zero and one it’s going between one and zero. So we add the base that scale is going to be at one which we can multiply by 100 and then as that value goes down.
We can then multiply that down so it becomes smaller. Until you reach nothing now. This is just one way of doing it you can also then multiply this by a curve value over time as well so you can control exactly how you wanted to do this or you could do it by something like a spline if you wanted to expose that value out and create kind of a lathe approach and then you can see here all of the other code is still exactly the same we haven’t changed.
We haven’t changed any of this stuff. It’s literally just changing how we calculate that initial outward value so that’s quite a bit of information. I don’t know if there’s already questions or not or if i can carry on going victor do you want to victor i think you can keep on going for now we’re collecting all the questions and arran keep on going.
Victor yeah. Yeah we’re still good arran cool. So once we’ve got our cone shape.
That’s kind of like the basics of generating our mesh data inside our procedural mesh function there’s one extra one that i want to show you which is really useful if you want to grab anything that’s more complex. So. This is called the get section from static mesh.
And what that allows you to do is it allows you to specify a static mesh that you want and then it will output all of that data for you the vertex triangle normal data. So if you want to start adding in more complex shapes into your procedural generation. But you still want to be able to get the normal data or the vertex color data and specify that then you can still retrieve or set that particular data using this function.
So for that final demo this one here. I’m actually getting a mesh that already exists and then just replicating that to the procedural mesh component let’s close out all those so there’s one extra function in here that i haven’t covered yet and that’s just clearing the mesh data. So this is a really important step that you do need to make sure you’re doing as you’re going through and building your content.
I’ve run into this quite a few times. Where i forgot to clear my vertex data and then all my triangle data and i was trying to figure out what was going wrong for ages. My computer was getting slower and slower until i realized that i had just been stacking my vertex data on top of one another until i ended up with just an insane array size that was making my computer.
Very sluggish. So the first thing i do when i start building these components now i’ve learned through hindsight is i just build a function that clears all of the relevant data that i’m going to be kind of setting and updating you might notice as well for the eagle eyed viewer that i’m not clearing all of my data. And that’s because some of this data is set manually so for these two data sets here normals and tangents.
I don’t need to clear that data because i’m setting it manually in here so it would get overwritten anyway so that’s the very very quick basics of the procedural mesh component so that gets you from going from a triangle all the way up to a cone. Which is the magical world victor hey. Arran arran.
Yes. Victor do you want to go and hide the grid. We’re getting some flashy artifacts here.
Arran oh. Yeah sure sorry i did have that hidden but it. Has victor thank you arran clearly come back yep.
Thank you so once we’ve done those particular sets. We can start building some more complex data. So i’ve got a few different tree examples over here and i’m going to try not to edit them because i’ve got quite a lot of examples in this project open and if i make any changes to anything it’s going to have to rebuild all the trees now for this particular project.
If you’re interested in downloading and trying it out just a few quick notes they are all inside the trello plugin. The trello doc. So make sure you go through all of that stuff first.
But just in case. It’s all inside the plugin. So you do need to put the downloadable content into a.
Plugin folder it will work in. 425 even. Though we’re on 424.
Here. I have tested it it’s a content. Only plugin and none of the content that we’ve been building is experimental.
So it should be reasonably stable kind of fingers crossed going forwards. I have run into a few issues with building out the final asset. So one thing that i recommend doing is actually going into your project settings or your editor preferences and just increasing.
The max loop. Count for your project. Just for this.
Obviously you don’t want to really do that for any game projects. Because you don’t want your loops to be getting that big because you’ll end up with some frame hitching. But for this where we’re just kind of playing around in editor.
And it’s never going to see the end consumer. It’s absolutely fine to kind of whack that number up so the project itself is a number of blueprints. Which are kind of snappable onto one another so there’s three in total there’s a trunk.
Which has a base spline component. Which you can kind of go in and tweak and edit. So i’ll do that on this one here because it’ll be a bit quicker.
So it kind of uses this spline shape to build its geometry.
Then you can kind of go in and you can edit that and make it look kind of ridiculous. Then there’s a branch component. Which is built on top of that so for this particular one if i just hide.
These leaves. There’s these kind of branches procedurally placed on top and they can stack right. So.
You can put a branch blueprint on top of a branch blueprint on top of a branch blueprint. And that will be fine. Though you will get into scaling issues because it will put x number of branches on each layer of branches.
As you do it so that does get exponentially more expensive. Very quickly. But this will basically take in either your branch or your trunk data and then it will spawn other branches along that particular point.
So you can kind of see i’ve got my trunk. Here. I’ll just get rid of that bark as well i’ve got my trunk here and then off of that i have my next layer of branches.
Which i’ve got a set number of so if i go down. Here you can see the spawn count is set to five and i can increase that if i want to so i get more and then off of that i have more branches. Which are spawning off of those branches.
So for this particular one i have five branches that spawn off those branches. Now the way this works is that it’s going to spawn five branches on each branch. Which is again why it gets exponentially more expensive as you build and then finally i have my leaf layer.
Which actually uses the static mesh to build so for this particular one it takes in a mesh or an array of meshes so in this case. I’ve got this little thing here. And it will then scatter that mesh across whatever its parent is in the hierarchy.
Whether that’s the trunk or the branches itself. So for this one the leaves sit right at the end of the hierarchy. Right so we’ve got eight branches spawned across five kind of times six branches.
So that gives you all of the kind of leaf cards that you’d need on top of that so you can kind of turn these on and off and kind of the reason. Why i broke this stuff up was because i wanted this tool to be componentized right so you could build multiple trees and i could copy and paste this particular leaf setup over to another tree and it would just populate that other tree so you can kind of try this out with the plugin when you get it so each of these sets has a load of different setting. That you can apply to it so if i start back off with the trunk.
I’ve got the number of length and radius segments. That you can add to it and how thick that branch is so i can make this trunk much thicker if i want to and it would just kind of update. And you’ll see that that information actually propagates across so even though these are different components.
They still interact with one another just going to make that thin again i’ve got some material settings. Which again we’ll dive into because the material is doing some interesting stuff as well i. Actually have got a displacement texture implemented in though it’s still it’s not particularly performant.
So that does still need a fair bit of work and then i have my references. So you can kind of see here. That this has a reference to a parent and a root and then it has its child references off this so this is how i’m updating all of the objects inside this particular tree.
Even though they’re separate components because they’ve got these references to that class and then finally. I’ve got some exposed buttons on top of this here. So it let’s you add particular components to this so.
If i want to add another branch layer or a leaf set. I can do so just by pressing one of these particular keys and then the same with the branch data. I’ve got some variation controls that give you some curl and some just shape controls that you can get some nice variation.
Some length control for that as well again spawn count length and radius. A lot of this data is shared and then some location rotation and scale parameters to allow you to control how those objects are doing and if those objects have a parent. Then you can modify the range of that as well so for this particular one.
I have a parent range. So it basically clumps the spawn location for all of those. Branches so at the.
Moment this is at 04. So the branches only start spawning about halfway up the tree. But i can have that happen way lower so if i set this down to 01.
Then these branches will start spawning much lower down on the tree actually it looks quite good i quite like that. Anyway let’s pop that back up to 02. Just so we don’t get any clipping and then finally on the leaf component.
That has again very similar data. It’s got location rotation and scale. And my location has gone up there a little bit for some reason.
It has its references as well. But what it also has as well on the mesh side is an option to render as instances now. I added this as i was running into some performance issues.
Because this is running all on construction and that loop count can’t get quite large. Which means that you can end up with a fair bit of pausing and freezing as you’re tweaking and changing those values. So i’ve got this brilliant option here you can see it kind of stops.
The foliage from moving let’s go back to that but this is really useful because i can actually set my spawn count much higher without having to worry so i can set this up something like 100 or something that might have been a bit high but. I can set it victor it looks great arran it looks amazing doesn’t it victor that’s the alien world right arran. I think my computer might be dying.
It might by dying. I’m just going to knock that down a bit that might have been a bit mean victor take everything by 30 percent less because this already eats up 30 percent of your gpu for streaming high quality arran. The stream has already tanked.
But yeah so i can control that and that’s really useful if i want to just see what it looks like without having to worry about it having to recalculate all of that geometry every single time. What did i have it on before i.’ll just put it back to six just so it’s keep it reasonable just for this stream.
So yeah and that’s the basics of it so i’ve got these individual components. And then i can slap those onto one another just as i need so let’s open up the blueprints and let you take a look at those so i go back to my construction script all my construction script. Does is run a function called draw me.
Which is how all of that stuff is calculated and draw. Me is an exposed function as well so you can call this manually. And that’s actually how the updating children works.
So. If i go into the draw. Me function.
And call update. Children. You can see that all it’s doing is it’s getting those child references and then looping through and telling them to redraw.
So it’s telling them to call draw me so even if you’re editing.
One step lower in the hierarchy. It will work and again this is another reason. Why i can broke these up into separate components because i didn’t want to have to redraw the entire tree if i was editing things that were higher up in the hierarchy that wouldn’t get affected so the benefit of having this broken up again is that i can edit my leaf blueprint.
And it won’t have to redraw any of this stuff underneath because. None of that data has changed so if we go to my construction. My correct blueprint you can see i’m calling that function that first thing.
That’s clearing all my data that i don’t need so in this case. I’m clearing all of this stuff and then i build my branch data. Which is this thing and all i’m doing here is i’m checking to see if there’s a parent.
If i have a parent then i need to modify my workload because. I need to account for the fact that we’ve got it could be just a single trunk that these branches are spawning on. But it could also be the case that it’s spawning across multiple branches and at that point.
I need to be able to identify that so the parent will get identified. First and then i have this thing called my tease array. Which is basically just an array of transforms and scales.
Which will allow me to get that particular data and then i look through and i build all of my branches. So all of this stuff in orange here that’s just figuring out the spawn point of my branch so. As i’m building this let’s just hide these so what i’m doing is i’m finding my parent in this case.
It’s the trunk and i’m grabbing the transform data the transform array data of this thing of this trunk and then i’m scattering spawn points onto that based on data that i’m setting and then once i have that transform i can make my branch. So all my branch is doing is again it’s figuring out where it needs to spawn so using that base location and then it’s drawing that radius. So if we go to the radius.
That’s going to look the most similar to you as we were looking at before so that’s where we’re building our vertices and building our triangle data and then also building our uv and our vertex color. I am working on getting pivot painter working as well that’s still a big of a work in progress so you’ll see a lot of stuff on pivot painters. That’s just tucked away.
That’s not working. Yet so you’ll have to wait for that one. I’m afraid i need to get some more help with jonathan lindquist to get that one working.
I think so once we have our branch data. We can create our mesh. So again that one is quite simple all we’re doing is we’re grabbing that data that we’ve calculated and we’re feeding that through to the mesh section.
Setting our material for that procedural component. And then setting that to this standardized data set that i’m using to pull data back and forth between lots of different blueprints. It’s probably going to be a little bit easier to see so this is the trunk script.
So what i’m doing here is again it’s the same thing. I clear that data. I calculate my segment distance so this is going to be the scale that i’m going to be offsetting along that spline and then i do the if you’ve done anything working with spawning stuff.
Along splines. Then this will be fairly familiar to you all i do is i find my points on that spline so i get the transform at that distance and then my draw radius does exactly that same thing as we were doing with the cylinder. So we have our radius segments over there and we just go through so again getting my vertex data getting my triangle data my uv data and vertex color data and then for my leaf.
I think this one is actually the easiest one of all because we actually don’t need to do much of that calculating the mesh. Because i gives it to us. So all i’m doing here is i’m getting that mesh array variable which just defaults that to this cube here.
And it gets that triangle data and vertices data. All that good stuff. And then it sets it to a data collection.
So i’m just grabbing all of this information. Here and then i can go through and build that mesh so again clearing my old data because i don’t need it anymore. Finding my parent and finding the transforms for that parent.
So this is my tease array here and then i have to do that nested version again because i might have multiple branches that i need to spawn across then i figure out my location. Exactly the same and then go through and this is where i’ve got the branch. Here so i can choose between rendering instances or rendering.
The mesh calculation and the mesh calculation is again. It’s doing pretty much the exact same thing except in this instance. I’m offsetting my vertex data so that i can stack it all together and that gives me the tree component.
So if you’re going through building. Some of this stuff yourself the hardest thing to actually get working is stacking. This data.
So that it works with the create mesh section. So in order for this to work. Properly you need to be able to offset all of your data.
Correctly. And this is why the create grid triangles doesn’t work so the grid mesh triangles because this needs an offset in order to work properly so this data output doesn’t work so you actually have to build that function yourself. When you’re going through now i’ve built it so you can technically just grab it from here so if we go to my branches and go to my construction script and make my branch data and drop my radius.
This is the function that basically does that so this is all i’m doing. It’s really really dumb and really really simple so all i’m doing is this is creating a quad. So this is my first triangle and this is my second triangle and yeah.
It’s pretty simple. But the main reason why i had to build that was because i need that initial offset because otherwise the triangle data won’t match up with the vertex data that you’re trying to build so just keep that in mind when you’re trying to build your content. And that’s the basics of it so we can go into a bit more detail into how this stuff works.
I can give you an overview of the upcoming features of the things that i victor can we tackle a couple of the questions first just to sort of go over arran yeah absolutely victor sweet sweet sweet so in general there’s a little bit of conversations in chat around so specifically for trees. What’s the specific use case for doing this in engine and could you maybe also talk a little bit about the possibilities. Why would you do it this way instead of using houdini or just model the trees yourself arran so absolutely you can do it any way that you want to do it.
There’s no reason why this is any better or worse than the other tools available. So houdini is great because you can export that out to an engine plugin and then bring that into engine. The main reason why i built it in here is so that i can see the content live.
So how it’s actually going to finally look inside the engine. So. If you’re building it inside.
Something like blender or 3ds. Max. Then you have to approximate what you think the tree is going to look like and this is quite difficult because 3ds max’s viewport especially is not very good at rendering this kind of geometry in real time.
So it’s quite difficult to get an appreciation of what this tree is actually going to look like until you’ve actually done it so on the building. It manually front. You’ve got that as an advantage.
It also takes a lot of time as well this stuff is quite annoying to build because the tool set doesn’t really exist to make these trees particularly nicely. You have to go through and do a lot of finicky work and a lot of cleanup in order to get it working and this plugin will do a lot of content for you so. If we take a look at this one here.
This actually an exported mesh and one of the benefits of doing it this way is that you get all of the vertex color assignment done for you so for this particular tree.
If we look in the paint view don’t want that one give me red. So i’ve got a red channel. Which is a gradient that works outwards from the radius of the base of the trunk.
So what this will do is it allows you to control the wind strength. If you’re doing anything of that stuff in shader and then in green. I’ve got another variable that will color these outwards from the spawn point that they’re coming from so you can see that starts black.
And then it comes out to green and then i’ve got a blue channel. Which gives me a random color gradient and this stuff is really difficult to do inside something like 3ds max you’d have to go through and manually repaint that stuff for you so that’s quite tricky and then going through and actually painting these foliage sets on and seeing how it looks is quite a pain to do so victor and if you have 30. Different trees.
You have to redo that right arran. Yeah. Yeah.
Absolutely. So you’d have to go through and manually edit. It whereas.
With this one it’s all seed based as well so once i’ve made my tree and i’m happy with that i can export it and then i can duplicate it out and then do it where i could just make a new instance or a new seed off of that base data. So i could go in go to my random seed and then just change this value victor and so there are essentially two different use cases for this one is to actually export. It as a static mesh and that’s possible with the tools right arran that’s the only really intended purpose you’d always want to export it out as a static mesh.
Victor. What you could also do is essentially modify that run time which is something that you wouldn’t be able to do with a pure static mesh right arran yeah. Absolutely victor just talking a little bit more in general about the procedural mesh component and the idea of why you might want to use that for other purposes than just trees so in case.
You wanted it to grow in very dynamic ways that you can’t really do with bones or vertex. Offsets etc. You have that power prior to exporting it right arran yeah absolutely so the procedural mesh component works in game as well as at the editor level so it would be work.
But it would be reasonably easy for you to take this base code and have that run over a tick. So that your tree was growing over time so you kind of start at that trunk and then build out into branches. Which build out into leaves.
So you could definitely build this as a procedural tool and there’s lots more that you can do with this as well one of the other benefits of it being built inside your level is that you can expand this tool set so that it works it takes into account the world around it as it’s building. So if you wanted it to build up against the side of a building or the side of a wall or something like that you could add line traces in to do checks. And let this thing grow out a little bit more intelligently rather than how it’s doing at the moment.
Which is just based on random data. Victor let’s do a few more of the questions and then we’ll dive into the rest of your presentation. Makuzmakuz asked and then the follow up question was arran in terms of performance it completely depends on the size of the asset that you’re building.
If you’re doing it every frame. Yeah. It does completely depend on how big a mesh you’re trying to make you can see even when i was rendering this as instances.
It took quite a while for it to process it so as you’re getting up to those large scale objects like trees you might run into performance issue as those things get larger victor. As it does when you’re playing with a lot of instructions at one time arran yeah. It’s all about how many loops you’re going through to build this thing.
Victor ylly was asking and i’m not entirely sure what this is but arran yeah. I don’t know what that means either victor i’m not entirely sure if you want to go ahead and clarify that we’ll try to answer your question tluisrs asked arran. Oh.
I need to double check. I don’t think it is victor i think it might say in the list of plugins arran yeah. It would say on the docs page.
So you could have a look at it there victor tluisrs also asked leds for procedural meshes or this is handled automatically by the engine and i think we can dive into that a little bit of sort of how you would we touched on it briefly. But how would you go ahead. And do that arran yeah so for this particular instance when you build out your procedural mesh component it’s only making one static mesh.
I’ve got a billboard component which has just gone white but that actually does the demo of how you can also generate a billboard for it which you could then export and then assign that to be allotted for that particular instance so you can see this version here is just a static victor impostor. Very sus arran if i just take that leave it off to the side. So this is doing a live capture.
Which is why it’s moving you obviously wouldn’t get that in the captured view unless you stored it as a flipbook. But this will do a capture to a card which you could then do it. And you could also use this to pair it with ryan brucks’s optree capture to give yourself more faked 3d sprite for this particular effect victor and then onnion dev.
Asked arran. I’m not sure what you mean by that either so do you mean when we’re spawning. Multiple meshes like i’ve got here.
I’ve got 12 instances of the same mesh. I’ll just assume that and then i’ll answer that one and if that’s wrong victor go ahead and with that please let us know if it’s wrong arran . We’ll find out so the way that this works is that it gets the base data for that particular mesh so in this instance.
It’s this palm frond mesh type and it gets all of the vertices and triangle data for that particular asset and then when it wants to make them it will use the transform of the spawn point to offset those vertices and then add them to a new loop. So inside my make mesh. This is getting my transform so i figure out where i want to spawn my palm frond and then once i’ve got that i can use the transform location from that base to offset my vertex spawning and that then gets added into my new vertex count and the way that that avoids they don’t overlap.
They have to basically add one on top of the other so my array has to store. The vertex data for every single instance of this particular one so it will go through each count. And it will do it each time for that so here.
I’m getting the vertices for this particular. Mesh and then i’m looping through and transforming it so it’s transformed to a new position and then that gets added to the new vertex data and then i have to do the same with my triangles as well so that’s done here so i get my triangle data from my mesh. And then i have to add it including the offset.
So this is where it gets to be a bit of pain because. You can’t just otherwise i could just duplicate this data and it would be much easier. But i can’t do that i have to account for the offsets as i’m storing it into a single array victor someone.
Else asked arran. I hoped that answered the question victor if it didn’t please let us know arran. Yeah.
Victor someone else asked to use for foliage in a large area or should this be limited arran. So you should use it if you use it at all to generate single assets. Which you convert to static meshes and then once they’re static meshes.
They’re the same as any other mesh. You’d have in your game. So you can use them.
However you want so for some of the image content we. Had that island scene and. That’s built entirely using all of the foliage in that is built entirely using this so i build each component.
I export them out so you can see my palms. I’ve got a few different examples here that i’ve gone through and created and those are all just normal static meshes like anything else. Victor.
And then you can use the autoled tool to generate new leds arran you can you can yeah you could use it to generate those though i don’t think it generates a card in this unless they’ve updated that which would be awesome victor all right we have a few more that came in but why don’t you continue with what you were planning on continuing and then we’ll get through questions that are coming in later on okay arran oh okay victor and i’m still going to be live.
But i need to go mute. My fire alarm that’s been beeping for the last 25 minutes. So please go ahead arran.
The floor is yours arran sure. So i’ve got a load of these examples here and this stuff can look really complex. But the main thing that you’ve got to keep in mind is all it is this data.
It’s just these quads and these cylinders just stacked on top of one another so i think the main thing i want to get across is even though this might look like it’s really complicated all this stuff this looks terrifying spaghetti code. Though i have tried to clean it up as much as possible i’ll just move that out the way all of this stuff is still doing that same base component. It’s just figuring out its vertexes figuring out its triangles figuring out its uvs and its vertex colors and then it’s passing that data through so i would if you’re interested in trying this stuff out just take it one bite at a time.
And you’ll get through it i promise so next up. I wanted to cover the materials. So for this i’m heavily using the material.
Instances feature. Which is really useful for this kind of data. So i have my base tree type here and this script basically represents every single material type that you’ve got here so for absolutely everything.
And it gives me quite a lot of power in what i can do so i can choose whether this thing is masked or opaque. I can choose background and two sided tinting normal data and most importantly getting some reasonably nice foliage wind for this particular object. So you can see i’ve got this little wobbly animated ball and this is my base type so when i’m going through and creating a new tree.
The first thing that i do is create a new instance off of that kind of base parent. So this kind of base material and then from that all of my other kind of material types that i’m using inherit from that instance right so we have a hierarchy of instancing and what that means is that i can share my wind data across all of my instance types without having to redo it every single time so if i open this one up again you can see i’m kind of setting the parameters pardon me for my leaf wind and my wind layer one and two and this is all derived from a custom function that i’ve built called tree wind. Which basically lets me kind of turn on and off these particular functions.
So i’ve got some static switches as well. Which lets me control the particular strength of whether i use each of these layers and then i set up these parameters on that kind of base material. Instance and then from there i inherit from that and you can see that this data.
I’m not overriding with anything. It’s just kind of being left as its original and then all i’m doing is overriding. My data so i set my diffuse texture.
I set my normal texture. I set my opacity mask texture and then i override my material properties so that it’s masked rather than opaque. It uses the two side foliage model rather than the default lit.
And it’s listed at two sided. As well so i get it two sided and that way even though. I’ve got a really different material for both of these particular types.
It’s using the same base material parameter and the way that that benefits. It that i get that kind of propagated data. So that’s all kind of really really useful stuff for me.
As i’m kind of going through so the wind itself is again quite a simple thing. I’m just using world position offset. It’s not doing any of the kind of smart pivot painter data that’s one some of the other examples so if we kind of open that up i can show you that material just open up that tree base and open up tree wind.
You can see that it’s just feeding straight into world position and offset and i’ll start with wind layer one so i have the texture sample here. Which is just some kind of simple turbulence and that’s in world space. And it pans so that gives me some kind of nice kind of cheap noise.
That’s kind of moving through the world. And what’s also nice about this is because it’s world space. When i place my trees around the world.
It’ll have that kind of unified wind movement that kind of moves through it that gets multiplied by a wind direction parameter. Which is basically giving me a vector direction and then that kind of gets multiplied by the alpha. Which lets me control the strength of that particular value and then that gets multiplied with a power of to kind of give me some control of the fall off by the vertex colors green channel and then inside my blue channel that’s my random variation.
I have kind of an offset to that as well and that gets multiplied in now. My finally parameter here is the red channel and that was that gradient that you saw. And what i’m doing here is i’m kind of using that red channel to control the fall off of the wind.
So at the kind of the base trunk. I don’t want any wind movement at all right because the base of the trunk. Shouldn’t really ever be moving unless.
It’s been uprooted which we’re not accounting for in this so i use that gradient that i have created for the tree to control the strength of the wind over time and then i use the green channel and the blue channel to allow me to control the turbulence that we’re going through here so you can see my kind of leaf wind layer one and two that’s using that red gradient to control the strength and then as i move to leaf wind. I’m accounting in for some extra turbulence. Which uses that kind of green gradient.
So if we go back onto here and just do the color preview you can see that gradient again so we have that black to red which gives me kind of the base wind control and you can see that some of these things are just rendered in black and that’s because i don’t want any of that kind of wind movement on it at all to start with so these little kind of bark peel meshes are rendering in black. So that they don’t kind of animate then that green channel is controlling the leaf. So you can see that’s kind of where this comes in here we have that kind of leaf wind property which we can control and then we have our blue channel.
Which gives us that random variation and you can see that’s kind of coming in here and that’s what gives each kind of leaf instance or leaf mesh. Instance its own turbulence so you can get some nice variation there so it’s not kind of repeating every single time. You have it.
So you can kind of see on that one you get that nice kind of variation. So it doesn’t look like every single leaf is moving in tandem. It looks like they’re each being impacted by their own turbulence.
Now this is reasonably nice. But as i said it’s not the same as pivot painter. So you don’t get the advantages of pivot painter.
Which is that kind of individual movement that is something i’m working on and if you’re interested in checking that particular element out you can go to the root blueprint tool. Where i’m kind of working on that particular type so this script is basically running through and grabbing all of that stored data that i’m building as i build each of my components and then it builds a pivot paint texture which i’ve got an example of in here so if we just zoom in to this little texture. Here this builds a 16.
Bit location for my pivot points. And then this forward vector builds. A vector position.
So in theory. I should be able to render out these textures and use them to generate the pivot paint material data. But as i said i’m still working on getting that one working so it’s going to take a little while victor.
You’ve come a pretty long. Way though i did find your article from 80lv. I should share that as well if you’re interested arran yeah.
So go on victor i was going to say if anyone is interested in being able to share this in a little bit more concise. Form there’s also an article that arran wrote for 80lv. I’ll go ahead and paste that arran yeah.
The article covers all of this stuff right and it covers it in a way. Where you can probably digest. It a little bit more easily it kind of goes through each of these steps so same as kind of building that triangle quad cylinder and cone and then it kind of goes on to explain how some of this stuff.
As well so you can kind of go through and build that stuff yourself. And yeah. That’s kind of the big stuff.
I’m happy to go through some other bits again. I realize we kind of ran through that particular stuff so we can re cover some bits. If there’s any confusion.
And i can answer some more questions victor flowerhat had asked do you have to export them first and reimport also do they keep all the vertex data that you’d shown earlier perhaps could you show the export workflow arran. Yeah. Absolutely so that’s a great question so the root.
Which is why the blueprint is called root of each of these trees. I have kind of a base component. And what you do in here is you specify the components that you want it to build.
So here. I’m specifying kind of the trunk and the palm bark and fronds that are coming off of that and then you press the collate and build button and what what will do is it will build a single mesh version so it takes all of these individual components gets all of the data for them. And then it rebuilds all of that data into a single set and optimizes it so i kind of had envisioned that there might be multiple instances.
Where you’d use the same material. And i wanted to make sure that that would still work so. Even though i.
‘ve got two separate components here so let’s just turn on these so these two components are both different. But they use the same material right so they need to be collated into the same instance so in order to fix that i have to go through each one check to see if the materials are the same or different. And then i can build a different index so once you’ve pressed that collate and build button.
We’ve got our single static mesh and then you can click on the procedural mesh component and press create static mesh specify your location so i’m just going to drag this to my content folder example live and then you press. Okay. And that’s it it’s done.
It victor and that’s just the built in function in the procedural mesh component itself right that wasn’t anything custom that you implemented arran yeah no i haven’t done anything to make that happen that’s all done inside. The script and all of that data is shared so you can see all of my vertex colors information is preserved i get some super funky trees from that victor there you go ship it it’s done arran and then you can do whatever you want with it right because it’s just another static mesh. This is now a uasset so like victor said.
I can tell it to generate lots if i want to so i can tell it to do some custom or generate it some other way i can change these materials if i want to i can drag it into the scene. I can drag lots of them into the scene. And there’s no performance issues with this at any point right now because these are just normal meshes just like anything else victor you can pop them into the foliage tool painter and arran.
Yeah. Absolutely so we can go into the foliage tool. Just drop them in and then paint them out victor as you can see.
Though it runs just fine arran. Yeah. Once you’ve kind of got it out it’s just another static mesh right so it’s not having to calculate anything live or at any point.
It’s just another mesh just like any other victor marc j. Asked to make your own tree assets arran. So yes absolutely i would add some caveats into that though that this is more aimed for kind of stylized foliage generation.
And the reason that it is that is because it can’t support or it gets very slow very quickly. If you’re dealing with very dense geometry. So very complex geometry.
So the quixel assets tend to be very very high detail. Which means they’re super high quality. But if you kind of took the leaf examples that they have in there and used that to build your own tree.
Then you would probably find that you’d run into some performance issues. Quite quickly if you were doing it that way so. That’s why this is kind of more intended as more of a stylized tool where the geometry count can be kept kind of relatively low that being said the materials you could apply them to any of these assets.
It’s just because you’re just making another material. But in terms of actually generating kind of more realistic assets. This is probably not the best way to go and actually you probably wouldn’t want to build these in this way anyway.
Because it’s just using randomized data in order to get it to kind of look right whereas if you wanted to build really realistic trees you probably want to do some kind of simulation where you’re getting the kind of slightly more accurate result victor you could still use some of the textures and mixer to sort of stylize the textures arran yeah all the materials would be absolutely fine because again the complexity doesn’t come from the material. With this particular thing right i could swap this material out with anything so. If i had a realistic palm frond or even a stylized one that was built in quixel mixer.
I’d just apply that just like i’d apply anything else in the world. Victor nice well since that was sort of the end of your presentation. We haven’t gotten too many more questions in chat.
We have a little bit more time so if you have any other questions for arran please let us know. But until then is there anything else in sort of the evangelism world that you want to share with the audience arran. Sure so on the evangelism side.
We’re kind of scattered all over the world and we’re here to kind of build cool content that kind of shows off what you can do in the engine. But also to help developers kind of with their projects that they’re currently working on and just kind of helping them navigate the epic ecosystem and help them out in any way. We can so.
If you’re not in contact with your local evangelist. Then i would recommend you do so. If you’re an indie developer and you’re working on a game or you’re working on a cool project you should get in touch with either me.
If you’re in the uk and ireland or with all the other evangelists that we have over there if you go to the unreal indies section. We actually have a list of all of the evangelists who are kind of operating and where they’re operating and you can e mail. The indie evangelism e mail address as well and basically say and you’ll get hooked up with the right person.
We’re really useful people to know a lot of the time. We almost all have very techy backgrounds. Whether that’s on the art side or whether that’s on the code side.
So we can often help not just with that kind of ecosystem navigation. But also with any kind of techy dev question so if you’re kind of banging your head against a particular thing and you want to talk to someone then you can talk to us and we’ll try our best to help you out. Victor yeah.
And that also comes especially when it gets time to ship your game. There are things that you might not have come across until that point sort of in terms of finding. A publisher all kinds of questions in terms of royalty.
Which at this point is fairly easy if you’re a small indie studio. Because you need to make up to 1 million before you owe epic any money. But even then there might be questions and we want to help you making sure that you can ship your games not only develop them.
But also ship them that’s an important step for all of us. And so. The evangelists are a great resource that you can reach out to in terms of those questions.
And just awesome people in general. I know i’ve had a few of you here on the livestream and i hope there will be more of you to come. I know i have one planned with sjoerd in a couple of months arran.
That’s going to be a good one. I think victor yes. It is going to be a good one no spoilers anyway.
Let’s see here arran. I’m just going to zoom in on my mushrooms. Victor well i didn’t actually see them they’re fairly new to the project.
Right arran so they’re not actually in the downloadable sample. I need to update. It so that they get added there.
But it’s one of the benefits of just using a mesh right is that i can throw any mesh. I want in there so i built just a little mushroom in blender. And then threw that in and then i did a little bit of scattering underneath.
So these are kind of two separate components. So i can kind of exclude them move them away. If i don’t want them and then these get kind of scattered onto that mesh.
I’m working on a few extra bits actually so this is probably worth mentioning victor yeah show us arran the leaf tool. I’m also working on a scatter tool as well so this kind of tree is actually built using not the leaf component. But the scatter component.
So the leaf component is used here. Which generates a shape and i’ll just get rid of this material. So you can kind of see it a bit better ooh.
It’s having a think. Victor oh. Having a think arran.
There. We go so. This is using kind of these little meshes here which i wouldn’t actually include in the build.
But i just use them to create volume and shape. Which i then use to scatter these cards over it and then these cards have got some different properties on them. So i’ve got kind of my base input going in here and then i can specify how many i want so i’m scattering 1000.
Cards across all of these leaves and i can change kind of the world axis as well so if i want this to be a specific axis. Only i can switch that out see what it does there or i can change it to just be local and let that build victor speaking of arran. So it’s using all the same kind of base stuff.
It’s just using some extra properties to kind of build some stuff so i’m kind of tinkering away at different bits and pieces to try and make this a bit more useful to more people victor not bits and bobs arran bits and bobs as well victor all right then speaking of the sample flowerhat is asking. But how do i get it into engine could you walk through just real quick how to use the project file that is available for download. Arran yeah sure so all you need to do is make a folder in your project.
I can do it over. Here tree. Gen.
Demo and this one is actually nested a few times by accident because i kept on unzipping it into it so you only need to this once. But you make a folder called plugins inside whatever project. You want to put this in and if you want to it into the engine.
Then you can put it into the engine plugins folder. As well and you basically just export. The zip file into this folder and so it’ll go to there.
And then you get your tree. Gen folder. And then inside your plugins.
You just need to enable it and you might need to restart it though you shouldn’t have to in theory. But you might need to restart. It and then once you’ve done that inside your content.
Folder. You’ll get a plugin folder. Called tree.
Gen content. You might need to enable your show. Plugin.
Content. For that to work and sometimes. You also need enable show engine content for it to work as well so if it’s still not showing up turn that one on as well and see if that works and then inside tree.
Gen content. We’ve got the example map. Which is this map here.
Which has all of the kind of examples that you can use to kind of start picking up the tool inside example. I’ve got all of the kind of the static meshes that you can use all the kind of textures and meshes that i’ve built that you’re free to use. However you like and then inside the components that has all of the blueprints to kind of get all of this that kind of consist of all these bits.
So the tree parent has the kind of base blueprint type that all of these things are instanced off and then you’ve got branch leaf and trunk. Which are kind of the blueprints that we’ve already covered you won’t have scatter in there yet because that’s not been uploaded. Because i’m still working on it and then all you need to do when you want to start building your own tool is you just drag and drop this root blueprint type into whatever project you’re working on so you won’t have anything show up straightaway.
But you do get these buttons. When you click on it so you can then add a trunk and that will give you this trunk that you can then start working from so you can kind of start building. This up and you can kind of scale up and down.
As you want to as well. So you can kind of start building these cool things and then off of that you can then build a branch and you’ll then get branches as well so you can kind of see these branches have spawned here and then you’ve got all the different properties for that as well so you’ve got how many branches you want to spawn whether that’s eight or three or two or however. Many and then you can control all of the parameters for these particular ones so a nice simple one to get started is rotation per index.
I always recommend setting that to 137 that should be the basic number and that will give you nice rotation around your branch. And then you can also do your rotation along parent as. Well so this will sorry let’s not do that let’s do some minus 60.
And then i’ll set my range up as well so that lets you kind of control. How these branches are spawning and the. Angle that they spawn at let’s see if we do some 09.
Okay. So you can see we get these nice branches and then we can increase the length of them let’s increase that a bit more something like that and then what else can we do if i increase my number of length segments. We can add some curl to it as well so if i start putting some numbers into these curl values you can get some kind of interesting shapes and patterns.
Appearing victor so i think it’s worth perhaps clarifying that it is a content plugin and not necessarily a project that is available on the trello for download. Arran yeah. It’s just the plugin file and the plugin file will give you all of this content.
So you can add it onto whatever project you’re currently working on it’s just a plugin and then build your foliage as you need victor that’s super neat that’s a really nice way to share assets like this because it is just like you said you can just use the plugin inside your project.
You don’t actually have to merge or migrate or do any other form of asset migration to take assets from one project into another arran mm hmm. Yeah and if you put that plugin into the engine folder. It will just be there for every project.
That you have that uses that particular engine version as well. So that’s really nice if you just have anything like this where you might want to use it across multiple projects. You can just have the plugin work and anything you add to that plugin it will again propagate to all of your versions.
So it’s quite useful for that created a bit of a monstrosity here victor works for me there you go arran that.’s inaudible call. It a tree.
There we go done. Victor ship. It let’s go ahead and go through the two last questions and then we’ll wrap up the stream bobsdefinitelynotyouruncle asked how far will we be able to push it in creating even more procedurally driven scenes arran.
So this tool was created as just a bit of an experimentation for me i was really interested to see what kind of procedural content. I could build so in terms of updating it this is definitely a pet project of mine. It’s not an official unreal project.
That’s going to be shipping with engine versions or anything like that it’s just a bit of fun that being said. I’m going to try and keep working on it and keep adding to it so. If you’ve got any kind of feature requests or anything you’d like to see or if you want to do some work on it as well and add to it then that would be really cool.
I might push this to git and make it public. Just so people can sync it and makes changes and things like that so yeah. It’s a personal project.
But it’s a useful one if you want to learn. The procedural component and kind of pick up that kind of stuff. Victor bobsdefinitelynotyouruncle.
Asked another question out of level in some way perhaps in order to create more varied dynamic block outs arran. Yeah absolutely again you could even use it as a way of just quickly making the right sized placeholder meshes. And it would work fine for that it is literally just a way of generating these kind of stacked meshes more quickly.
So yeah. Victor and with that we are going to wrap up the stream. But not just yet because i have my little spiel that i go through at the end of every stream and arran you’re going to have to sit through it just like all my previous guests before us arran yay victor.
If you’re watching from the beginning of the stream. Thank you so much for hanging out today. We hope that you’ve learned something even perhaps you knew almost everything.
But perhaps. You learned something if you are new to unreal engine. And you would like to get started in game development go ahead and go to wwwunrealenginecom.
And you can download the epic games launcher and from the launcher. You can download the latest version of unreal engine and there are plenty i should remember these stats. But i think there are 160 hours of content on unreal online learning on unreal online learning you can find courses related to different aspects of developing games.
And other things in unreal engine. You can go ahead and sign up and then start teaching yourself through the help of our instructors of how to became proficient at using unreal engine and oh look at us now there’s two of us in the stream room. But i do know that arran wants to see me.
While i’m just sitting here talking no no no you’re good you’re good you’re good. I can just go ahead and close your stream down. If i’m able to apparently not stop watching there it is right there apparently that doesn’t work anyway.
It will have to be doubled. We don’t have any in person meetups going on in the world right now because of the pandemic. But that doesn’t mean that the meet up groups are.
Not active if you go ahead and go to communitiesunrealenginecom. You can see if there’s a meet up group close to you in your area. And some of them are throwing virtual events on discord.
Which is nice to join get an opportunity to talk to fellow devs potentially in your area. See what they’re working on some of them even let you do your own presentation at least. That’s what we used to do back in seattle.
If you do not have a meetup group close to your area you can go ahead and blah blah blah. Refuse to talk now you can go ahead and hit the become a leader button and with that you will fill out a form that goes to us and we will check it out and then potentially help you spin up a meetup group in your area. We all hope that this is going to be over and then we can all go back into seeing each other in person and talk about these amazing things face to face rather than virtually like this perhaps.
We’ll even be back in the livestream studio. One day that would be nice. If you have seen us from the beginning.
We do a community spotlight as well as our countdown these are assets that we find around the community. But you can also go ahead and add us on our forums on twitter discord unrealslackersorg. Great discord community.
If you are new to the community and you would like to talk to more devs little bit more broadly globally other than specific to the virtual community groups. The community. Sorry.
The countdown video specifically is 30 minutes of development fast forward that into 5 minutes. And send that to us together with your logo. And you might go ahead and be featured at the beginning of our livestreams.
If you stream on twitch make sure that you use the unreal engine tag as well as the game development tag. That is the best way to showcase your content for people who are interested in seeing specifically unreal engine development on twitch that’s what we do you can see the tag down here below. If you’re watching this on twitch.
If you’re not watching this on twitch you are probably seeing this on youtube. If you do make sure you hit that notification bell. So that you can see all of the latest updates that come from the unreal engine channel.
We not only do these livestreams. But there are also plenty of virtual events that are all now being put on youtube. The last one being unreal build virtual production.
Very exciting. If you haven’t seen that yet make sure you follow us on social media and next week. We do not have a stream.
Because we are observing thanksgiving here in the us. But the week after arran what’s happening the week after arran. We’re going to be doing some stuff on accessibility.
So all of the cool engine built in tools that you can use to make your game more accessible. We’re going to be covering along with some extra theory on how you can kind of build some content or change your game content. So that you can make it more accessible for more people victor.
And who’s going to present this arran it’s going to be me victor yeah. Damn right it is arran you’re stuck with me victor awesome and with that arran thank you so much for coming out today showing off your procedural tree generation tool if you want to know more about the procedural mesh component you can go ahead and go to our documentation. I also believe there are quite a few community tutorials or tutorials made by the community around so you can go to youtube and search for some of that with that said thanks to all of you for watching today.
I hope you have a good rest of your week and rest throughout the weekend and then we will see you again in 2 weeks take care everyone. .
Thank you for watching all the articles on the topic Getting Started With Procedural Mesh Generation | Inside Unreal. All shares of bluevelvetrestaurant.com are very good. We hope you are satisfied with the article. For any questions, please leave a comment below. Hopefully you guys support our website even more.