I have been playing around with procedural textures for a project and started wondering how much difference the shaders and vertex count make in a project for armory (and possibly any other game engine.
With tools like HardOps, Boxcutter and the like all over the market now you can get some great looking meshs pretty fast but they can be really heavy on the vertex count. I have always been told that you need to make the mesh simple and but your complex items in the texture. However when looking at the complied folder for a past project I find the largest mesh to be 343 KB, the largest shader to be 31 kb and the largest texture to be over 5,000 kb.
So how does this really translate into performance. If I can make a mesh that complies to 2,500 kb with only a shader (procedural texture) added as opposed to a very simple mesh (cube) with 3 or 4 2K maps to add detail, which actually performs better.
I hope this question makes sense to everyone.
I’m definitely no expert on the subject, but I’m pretty sure that it is correct that it is still more efficient to use larger textures and simpler meshes. Even though the textures take up more memory, the calculations required to render a complex mesh is much more time consuming than it is to load a large image into memory and render it on the surface of a simple mesh.
To help with designing assets, I think it might be possible to take a high resolution mesh with lots of details and bake its details down to a texture for a simpler mesh, but I haven’t done it myself and I haven’t done a lot of research, so I’m not sure.
@zicklag Thank you for the answer. Would love conformation of this too. The real issue come in when the baking of the maps just doesn’t cut it. Right now I have been able to bake inside of blender a bunch of maps that are working well. This way (if what you are saying is acurate) I can replace the complex models with similar ones and add that maps, which will work in both Armory or any other game engine. It take some time and a bit of set up but it is working well.
Then the question is how simple of a mesh? How much difference would a cube (8 verts ) make in comparison to a beveled cube make? Depending on the bevel it sometimes just doesn’t work with normal maps. There is trick with using split edges but again that can only go so far.
I think a beveled cube would probably be fine. As a general rule I think that you make your mesh as simple as possible while maintaining the right silhouette. So if a cube is beveled, then you can probably bevel the edge one or two vertices depending on how closely you will see it in the game.
It might be helpful to try to look at commercial games. When I look close on some games I play, I have found that things are much lower resolution than I thought, but the normals and textures are so good that you can only tell when you look at the edges of the mesh where you can see the hard edges from the low poly mesh.
Like most mobile or triple A games; you need to retopology and make low resolution mesh and bake normal map.
They will look identical with a normal map, but the low poly will save you lot of performance.
On top of that you can make quick LOD with decimation plugin and use Armory LOD.
They don’t look Identical. That is my issue. Many triple A game look like shit. Coils of rope that are obviously octagons and the like. I am trying to understand why this is the way and what make it so. Normal maps can only show minor insets and outsets on a mesh. They can not handle deep cuts or any real extrusion.
I am trying to understand what is happening under the hood so I can find the right balance of Mesh and Shader.
Another possibility is tessellation, but I don’t know what the performance balance of that is. Tessellation should be faster than using higher resolution meshes because it is calculated on the GPU and it doesn’t have to load the high resolution meshes into memory. Tessellation can created real extrusions of the mesh unlike normal maps.
Here is the Armory tessellation example:
It only runs on OpenGL at the moment.
Hard Ops is for concepting, movies, renders.It has never been intended to make models for real time games, you must use decimate and retopo tools.
You are on your own, make some tests, and decrease polygons if frame rate is not good enough.
Less polygons and textures to draw is more performance.
Can you show a picture of your 3D model ?
no comment lol
A “complex map” looks great to the eye but is cheap to the computer. A “complex mesh” is expensive to the one thing which affects “FPS.” But still it’s a tradeoff because you want to be very sure that the viewer not only “doesn’t see how the trick is done,” but, “never sees the existence of a trick.”
If your object is close to the camera, might need to make small moves that reveal much detail, or is “the star of the show,” then you might need to project that texture upon a complex mesh. But, thankfully, there are an awful lot of practical cases where you simply don’t. (The world is full of “forests” full of very-convincing “trees” that turn out to be nothing more than billboards.)
@zicklag - can you show the material for this example?
Here is a link to the blend on GitHub:
I’ve always gone with a workflow of model complex, retopo, bake normal map.
I am wondering though with tesselation if it’s now possible to get something more realistic looking by also baking to a tesselation map. It would be cool if it’s possible to bake a tesselation map for the bigger mesh differences, and then bake a normal map for the small differences between the tesselated mesh and the high detail mesh.