So I’m currently fiddling around with some models for a building, and although the models are really low-poly, in order to give it more juice I decided to make high polygon models from the low-poly ones to round up the edges and stuff like that. It looks pretty decent in the engine that way, much better than without a normal map, but with each one being 1024x1024 (instead of 512x512 which I find to be lowres) I tend to end up with like 40-60mb in total size meshes and materials included for just one building.
The thing is, the high-poly models that I used to render out and bake the normals map were around 1.5k to 2k polygons (as opposed to their lowpoly counterpart being 64 to 140). So now I wonder, what is the best choice, use the ‘high-polygons’ without a normalmap as quite frankly that polycount is low, or still use a normal map anyway to have the absolute lowest polycount in the game?
Another question also, what is most expensive? I’m knowledgeable enough that generally the more complicated models that end up hitting 20k - 200k plus in high-polygon version absolutely need a normal map, but what about this situation instead (like is the normal map more expensive here compared to the polycount)?
This can be a very subjective question based simply on the fact that there is no information about target platform. This can be a big factor in how to answer this question, and even my answer will not necessarily fit all needs, but may help in offering some thoughts on the subject.
Platform considerations with Polycount vs Texture res with normal map.
For Mobile you have to be careful with texture sizes because of memory limitations and you have to be careful with poly count because you can only have a max of 500k tri’s per view.
On PC the only real limiting factor is the hardware specs of the computer running the game.
There are a lot of optimizations built into UE4 from the get-go that help to keep FPS up. Such as texture streaming is on by default to help reduce the memory hit. This can be turned off and tweaked via the texture assets settings to get better results as well.
In regards to polycount vs using a normal map. Personally I’d say 1500k to 2k tri count is OK on average, depending on the asset and its size. Personally my take is, if you can get away with it in the model and keep the fps and everything else running smoothly do it. If it’s something like a floor panel that the player will never get close enough to see that it’s a normal map vs modeled geometry then go with the normal map. The whole point is being able to create the illusion of reality (in most cases) with your mesh. If you have a normal map that has a lot of detail, but it’s a flat surface and the player can get the camera close enough to see that normal not hold up next to actual geometry then that can break the illusion, in my opinion.
I would think the biggest thing here to take away when using modeled geometry with your asset that you setup LODs. This can really help performance in a heavy scene. I would use the 2k model as the base and have a short distance between LOD1 that would be about 50-75% of the meshes original tri count, and then take that further down to 50-25% for LOD2 and LOD3 if you need that many.
In regards to your question if Polycount is more expensive than a normal map. Possibly yes. If you have a scene with dynamic lighting casting dynamic shadows, that possibly hurt fps more since the shadow is taking into account the polycount of the model. If you have a normal map the size of the texture can be a hit with your memory usage. It’s a balancing act here that you’ll need to set up some tests to really see what hurts or helps more. Using profiling methods for draw calls can really help show where issues hurting in your level.
This was an amazing answer! I’ll test both methods as soon as the scenes become more complicated to see what hits the most in performance. I hadn’t thought about those LODS (I come from CS:GO which removed that option so I was used to not utilise those anymore), they might the best option in a scene without too much dynamic lighting.
If you run into any issues or need clarification feel free to ask. I certainly don’t mind helping. There are definitely some tricks to keep performance up and get the most optimized scene. With UE4’s profiling it can definitely help see where the bottlenecks are happening. There are a few other ways to optimize with dynamic lighting and such to get good results.
Keep at it, and let me know if I can help further.