Creating game assets - only quads and tris?

I always read that good topology is important, certainly when something needs to be animated or has a smooth surface. But what about static assets, like rocks.
I’ve made rocks following the tutorial of a basic mesh, subdivision modifier, displace modifier (Voroni texture) and then decimate it once or twice. Because this rock is going to be copied many times to make cliffs and such, I want to keep the poly-count down as much as I can. So after I applied the modifiers, I go in edit mode and dissolve vertices and edges that aren’t needed for the look. So this breaks the flow of quads and tris and end up with faces that have 6 to 10 vertices.

Since it is a rock and just a static asset in the environment, do I need to worry about their topology?


If the only thing you will do with it is render it in Blender, then there is not really any issue with doing it that way, especially with a rock which is quite a simple thing.
I have a question with your need to use such low poly rocks. Is it necessary? You might be saving a few faces, but is it enough to improve your performance? Using a particle system makes this almost worthless as this is a very efficient way to place huge amounts of objects without impacting performance.
There are many reasons you would not want to do this. It’s up to you if they don’t matter. First off would be how they look. Having faces with more than 3 vertices are subject to becoming non-planar. The method you explain make it seem like that is what’s happening. Non-planar faces make it a bit messier as a single face tries to warp to fill what is supposed to be a completely flat plane between the vertices. It can cause some issues in how meshes look.

Edit: I noticed that your title is asking about use in games, I believe?
If so, then it would be best to not have n-gons. Triangles are the best option for this as it is ultimately what would be drawn.
I have a suggestion. Could you make different LODs for the rocks if being used in a game? That way, you can have high poly rocks for close views, but switch to lower details as the camera moves away.

He gave a pretty good explanation. I would add that anyway, when you import into game engines, they normally convert to triangles. There are now options to keep quads though.
But here the interest of keeping quads and triangle is to keep control of the direction of the edges. Even in quad, if it is not fully planar, you may have weird faces, because the edge is not always following the flow of the mesh.
But optimisation wise, i don’t think that does much difference.

I mostly model hardsurface, so i have a lot of planar faces, hence i can use ngon to ease editing, but that’s definately to avoid on non planar surfaces

1 Like

These are actually my first steps into game-development and I always tend to go “let your imagination take you were you want to go and learn the hard way along”. Also because you mostly can’t find decent tutorials that address these problems. I just recently found 1 or 2 Youtubers that provide tutorials for modeling game assets.
And on forums and such, there is never a straight answer to what your target should be. Fully being aware that it isn’t a straightforward answer either. And I’m using Godot game engine, not really knowing how much it can handle, but seems to love Blender :smiley: .

I’m not yet familiar with particles and such. I’m sticking currently still with box-modelling and using modifiers. Since I need my rocks on certain places, for now placing them manually is the way to go for me.
Since after a while I want to get VR functionality in my game, that’s why I was certainly aiming for a low poly-count. But I don’t want to have a low-poly game. More of a mid-poly.
I notice already it’s very time-consuming to remove vertices you don’t need. Especially like @Darknoodles, you get weird faces then. So I start manually moving the vertices around to make sure they don’t look that weird anymore.

I’l show an image of what I have at the moment. Where you can see 3 cliff “planes” (consisting around 7000 faces each), and individual rocks on the left and in the center (the ones you see are the ones where all the modifiers where applied on, then decimated and manually (re)moving the vertices).
The only things in that images that have the “correct way” of topology are the car and the road :slight_smile: ). The car has around 4600 faces, but still need to model the interior.
I haven’t textured yet (that’s also something I need to learn in the process) and I also read that for performance, it’s better to have textures than materials. So I’ll probably need to texture-baking aswell.

But that is what this personal project is for… learning and getting all these great advice in the process, pointing me in the right direction. That last part is mostly the problem :sweat_smile:.

Here is how they look in the game.

This is a view you never going to see while racing:

1 Like

I followed your advice and did some retopology of the rock, just for learning purposes (could’ve easily created a new one from scratch I guess).

So I ended up with:

But there is one important thing I wanted to ask. It’s in a similar way as that particle system. I don’t want to bother yet with materials and textures at the moment. I want to create around 5 rocks which I can copy, scale/rotate to make it look different and place them in the environment.
But just copying them probably disconnects them from the original one, thus when I finally texture the rocks, I’ll probably have to go over them one by one. So I actually want instances of the original rocks. But instances which I can still scale and rotate around without effecting the other ones. Without particle-system, because I kinda want “creative control” of where and how certain rocks are set. (Maybe I’ll create a new topic for this, as it’s about something else than the title of the topic)

Instancing is a good idea where it is possible. I haven’t got an extensive experience with game engines, so I cannot help further with the process of instancing there, but I am sure documentation already exists for such things.

Also, nice picture you included of the rock process.

Thnx… I thought it was good for beginners who at first are maybe a bit stubborn, but then getting the evidence right in the face :sweat_smile: .

I still went a different root with creating stones, which gave me the control I wanted. Just starting from either a cube (subdividing in several times), a UV-sphere or icosphere, go into sculpt mode and using a few “brushes” to bloat or flatten. After that, decimate if started with to more faces you where aiming for.(and noticed that it is sometimes better to not decimate too hard, apply it and throw in another decimate-modifier). That way, I had 8 rock in 15 minutes I liked more and had better control over, with only quads and tri’s.
So spending a few days to create rocks and cliffs, but learned a lot by it.

Speaking of cliffs. Because the tutorial I followed and the scale of the cliff I needed, that cliff-mesh ended up being over 200.000 faces for one portion of the cliff. And currently I have 5 of these planes to make up the cliff. So I decimated it 'till I got around 11.000 faces per section. But the “rocks” in the cliff ended up looking a lot softer then the rocks I’m spreading manually.
So for the cliffs, I went for your solution regarding particles-system to distribute the rocks (on a plane). Don’t know the poly-count yet, but it’s a lot crispier that way and since I got around 300 faces/rock, probably a lot less faces. With being on a plane, I can create the shape of my cliff that way. Don’t yet know about performance though and still figuring out a bit of the controls of the particle-system.

Here comparison of the 2 cliffs:

Thanks, these conversations are very helpful in pointing me in good directions :+1: :wink: :sunglasses:

1 Like

You can make a linked duplicate with Alt+D, this way, if you modify the data of the mesh, the others are affected, but you can still change their scale, rot, pos independently in object mode.

Is that regarding the particle system? But that alt+D seems good for the ones I want to manually place around. Gonna try it soon.

Now I do wonder about the particle system. I removed one rock because I didn’t like how it looked with autosmooth normals when I set the angle down ( I kinda want a semi-polygon look, yet not too “polygony” ). So I wanted to replace that one with another one. And I have set them all in a collection and chose to emit that collection. But I can’t seem to get the new rock I created, into the existing particle system. I thought the + in the Collection Emitter setting with add new objects, but it just duplicates the one selected in the list.
Or do I need to “refresh” the Collection or something?

Edit: Never mind that last bit, there indeed seems to be a refresh button :sweat_smile: :grin: :blush:

You may want to try the scatter tool.
It might also be useful :slight_smile:

Saw something like that too. Going try it with that aswell… seems more hassle beforehand in comparison with the particle system, but you got more control afterwards, if I don’t like where certain rocks end up. And the particle system seems a resource hog (not really trouble for the game, since I always choose to apply the modifiers when exporting.

For the particle system, if you are really happy with the result but need to remove only a few rock, you can “make real” the particles. This will create linked instances of all the instanced objects, you can then manipulate them one by one

Ah ok… but it will also “delete” the particle system in a way. You can not single out a particle probably?
But good to know. That way I can lower the amount of particles, because now I have it higher because there where still gaps here and there which I don’t want.

No, you can’t single out a particle without making it real. But you can define spawn areas with vertex groups and weight

Ok, now I’m trying to get that cliff into my main blend file, by appending the objects/collection I need. All the objects go in, the plane that is the emitter goes in, even most of the particle settings. But the particles don’t show up anymore, just seeing the blank plane. And yet, when I do the same in a newly created blend file, it appends in full without any trouble.
Is there something I’m missing here?

Ensure the objects you use as particle have been imported as well.
Also, make sure you have no conflict in collections naming.
Otherwise, maybe it’s your render settings or particle number that got screwed up.
Other than that, it’s quite difficult to narrow down the problem without having the file itself, so i don’t really know :confused:

I ended up opening a new file, append the objects from the cliff-emitter file and append the parts I need from the track file and saving that as a new one.
Probably something with object/collection names conflicting… although when I checked, it renamed everything correctly.
In the new file also, although it is working, looking at the names of my objects, which are still the same and looking at that section where you can set the count of each object, it has different names (numbering) of the rocks in the file. Though everything still works, it’s just difficult now which rock I’m giving a higher count.

Still not hassle free, but I’m getting much better and much cleaner results.
Tried scatter tool too, but was limited in how large I could get the rocks to go to. I ended up using 3 different emitter settings. Instead of making a cliff with one plane, I just use smaller parts of planes and that way I can choose which of the 3 emitter settings I need, so I have more control over which part of the cliff has the larger rocks and which the smaller one.
It’s a huge cliff :slightly_smiling_face: :sweat_smile:

Once I’m satisfied with the setup, I’m going to copy them all and make them real so I can start deleting rocks that are in the way of too much. Because every time I change a bit of the plane, the rocks change aswel.

Nice !
If the size limit was due to the scatter property, you can override the limit by entering the value instead of using the slider. It’s here to prevent unwanted behaviors.
Remember, when sliders stop… feed them with higher values :smile:

Oh, didn’t know that… I thought that was the max they could go.

Just 5% of a project and I’ve already learned so many new things :blush: