I have a hard time understanding the negative criticism for 3D performance that I've seen, and I don't understand what level of complexity I should aim for in my meshes. I've seen folks apparently making tiling ocean surface chunks that seem quite complex, but I've also seen others who post images of scenes appearing to be +/- 8k tris that they say run very poorly. In all of this, I can't find a great answer about general polygon count.

My meshes are all static/not animated. My first mesh is a little over 2k triangles and it seems fine, but now I'm creating textures and I'm determining what level of detail to aim for in the rest of my meshes, so I thought I would ask for advice.

Can I feel good about having 10k - 15k tris within a short distance of the player?

How much might be too much? I have no frame of reference for Godot's performance with relative polygon count, and I know that I won't be using any rigged objects or animated meshes, and I plan to use only one texture per mesh with no bump maps or supporting textures and minimal shading. Maybe I'm over-thinking it and someone knows off the top of the head from experience?

Thanks!

  • Megalomaniak and alfredbaudisch replied to this.
  • Usually a main player character can be around 10K polys (or up to around 25K or more if you need detailed cutscenes) and objects can be around 1K polys or less.

    However, poly count is not that important on desktop. For mobile and web you still have to watch out. But on a high end desktop machine, even several million polys for a whole scene is acceptable.

    I think if you use LOD and other culling techniques, and keep the entire visible scene to around 1 million polys, you should be fine.

    That said, the shader complexity is usually the bottleneck first, especially if you use things like parallax mapping or fullscreen effects like SSAO. So I wouldn't worry too much.

    Opinions can wildly vary on this but for me it depends entirely on your priorities and what you're designing for your game. Are you designing a game that features a lot of sea and water? If so, you could get away with throwing quite a lot of polygons at the problem because you want it to look impressive if that's the focus of the game. What you don't want to do is be wasteful. You don't want to for example throw 90,000 tris at one character because that would just be ridiculous.

    At the same time though again, depends on priorities, every gamer is different, but I'm somebody who looks at a 'high poly' 'AAA' title and I think it's immediately going to be garbage because they're inevitably going to be using some kind of third party assets for their generation and they'll just be churning out one title after another using generated human models. They're getting more and more blatant about that now with the release of Unreal 5. These days I'm much more impressed by hand crafted stuff even if it's low poly.

    There's also the magic of using shaders and well done textures to consider, procedural textures in particular I find produce very good results but can compliment art well with enough tweaking, these save a ton on performance but still look nice. It's not exactly the best answer in the world I can give, but the fact is it just depends entirely on the results you want. In terms of performance, lower poly is always best, but really if it looks good and runs well regardless on most machines people aren't going to notice much either way.

    Thanks!

    How about this--if I set up a test world using objects that reflect the polycount I'm happy with, then I test my game and walk around with a camera, will that be a reasonable indication of how the published game might perform? I guess I just need to try and test before making the rest of my meshes.

    Usually a main player character can be around 10K polys (or up to around 25K or more if you need detailed cutscenes) and objects can be around 1K polys or less.

    However, poly count is not that important on desktop. For mobile and web you still have to watch out. But on a high end desktop machine, even several million polys for a whole scene is acceptable.

    I think if you use LOD and other culling techniques, and keep the entire visible scene to around 1 million polys, you should be fine.

    That said, the shader complexity is usually the bottleneck first, especially if you use things like parallax mapping or fullscreen effects like SSAO. So I wouldn't worry too much.

    JoCaBark I have a hard time understanding the negative criticism for 3D performance that I've seen, and I don't understand what level of complexity I should aim for in my meshes. I've seen folks apparently making tiling ocean surface chunks that seem quite complex, but I've also seen others who post images of scenes appearing to be +/- 8k tris that they say run very poorly. In all of this, I can't find a great answer about general polygon count.

    Well no wonder if nobody has ever defined what any of that means, minimum spec people. Can't have a real discussion on this without it. Whats the hardware config you target as your minimum spec? Say Xbox one equivalent HW? Mobile phones? Latest and greatest?

    This is a good point, really it does boil down to what kind of hardware you're aiming to run it on as a minimum. Tech enthusiasts with mega rigs aren't probably going to care much if you go over the poly limit but if you're looking to sell to steam deck or low end owners you need to bear all that in mind.

    JoCaBark GPUs nowadays can handle millions of triangles per frame.

    The problem with too many polygons in Godot is when collisions are involved. So make sure you create separate collision meshes for your models, with primitive shapes, otherwise the game will stutter and FPS will drop like the video in this issue (still unsolved). In the video, I was colliding with a mesh with 1k tris. The mesh can still have as many tris as I need, but then I have to change the collision shape to a box or a capsule, for example.

    Wow, you folks are the best. I'm using collision primitives and I'm just targeting older PCs, I use an NVidia GeForce 9 Intel i5 so, nothing fancy. I'm testing a goal of <= 30k polys in view and I don't see any problems so far. Most objects will be fewer than 50 polys for me I think, but around 10 or so objects at 2k-4k polys each will usually be in view. I'll probably just have to try and test when it comes to shaders too then right? But it sounds like I might still have some room to add normal maps or bump maps. Cool beans, thanks a lot, those were really fast responses!

      JoCaBark For older GPUs the problem is not exactly the amount of tris, but in how you handle lighting, shaders and VFX. Of course occlusion culling helps a lot too (i.e. you can have 100k tris, but if 90k tris are occluded ones, there's no reason to keep rendering them, so make use of occlusion culling).

        JoCaBark Sorry forgot to say that also anti-aliasing, shadow resolution, AO and texture size also hugely affects performance more than tri count.

        JoCaBark NVidia GeForce 9

        Either you mistyped something or you use something veeeery old and you mistyped something.

          Megalomaniak Yep, GeForce 950, and that definitely factors in--I'll use Bethesda games as an example here because Oblivion runs really well for me but vanilla Skyrim tends to have my computer overheating, so I want to avoid too many bells and whistles such as alfredbaudisch shadows, particles and rays, although the the real culprit in that example was vertical sync but I'm still not sure whether I have to handle that in my game somehow. I would think there are still a ton of people using machines as old or older than mine so I guess mine is my target. While I get the Occlusion culling basic concept, I have no idea how to execute that and I only have three meshes at the moment that I'm duplicating to test things so, a goal for another day I think.

          Texture resolution is probably another question, for another thread I guess, but my assumption is that 1 mesh = 1 large texture would be better for performance than 1 mesh = multiple smaller textures (in the absence of shaders). But one large texture on a really low-poly mesh sounds like the plan.

            JoCaBark I would think there are still a ton of people using machines as old or older than mine so I guess mine is my target.

            Yeah, GTX 9xx or Maxwell(architecture code name) 2.0, is old, but not that old, as in it should support vulkan version needed by godot 4. I have another system with a 980Ti so I could test I guess, but I recon the issue for you might be more so that the 950 is a lower mid-end card of it's gen rather than that it's an old generation.

            JoCaBark but my assumption is that 1 mesh = 1 large texture would be better for performance than 1 mesh = multiple smaller textures

            In terms of draw-calls, probably. This might apply more to the OpenGL than the Vulkan renderer tho. Potentially.

            The GTX 950 supports Vulkan 1.2.142, so that shouldn't be a compatibility issue. However, it will be pretty slow, maybe comparable to a high end phone.