Download

Best practices for using a HUGE mesh?

Can anyone tell me tips for using a really huge mesh?

This mesh (a 200m tall statue) will be large both in terms of size and polygon count. On PC, I estimate it may need 2m triangles at highest LOD. Because it will be an important focal point of the scene, I would like it to have a fairly high poly count to capture all of the detail. It is a statue, so it will be static. Also, it will be one consistent material (reflective bronze) across the entire surface.

Should the statue be broken into multiple smaller meshes (i.e. head, torso, arms, etc.)?

I was thinking that when viewing at the highest LOD, only a small portion of the statue will be visible at a time. So by using multiple meshes I could reduce draw calls, correct?

But, if the component parts are not welded, how difficult will it be to hide seams? And will it be slower because the same (rather complicated) material will be applied to several smaller meshes instead of one large mesh?

Thanks for any help.

Consider whether you actually need that many polygons, unless it actually has a lot of detail if there’s lots of smooth surfaces then it doesn’t need a lot of polygons.

As far as breaking it up, doing that will increase the number of draw calls (more objects/materials = more draw calls). As far as hiding seams, there may be natural locations for seams where it won’t be a problem, but the main difficulty with seams is that the normals will change at the edges when you separate them, but you can fix that by using explicit normals–which are normals that can’t be changed, doing that would mean that the normals around the seams would stay the way they are as if they were connected. I’ve used that method when splitting an airplane hull down the middle to make sure it looked like it was still curving.

But again, if you don’t actually have detail for the polygons, keep the poly count low. Another option is to use tesselation–it can subdivide the mesh based on distance so that as you get closer it can have more detail, and then you would use a displacement map to actually push the geometry around and create more detail.

Well the number one reason to break huge models down into smaller components is so sections that are not visible in the rendable view port are culled and not rendered behind other elements. 2M tris is a lot and more than what I think you would need, with out seeing the actual model, and if a finger is spotted through some trees then the entire model will be rendered along with everything in front of it.

Since it is a statue I would not worry to much about seams as the material will hide them and if not even then it’s not like a seam would be unnatural on such a hard body object.

If you really want such a high count then breaking it down, in my opinion, is not an option but a must do to even have a chance of maintaining any kind of performance.

That’s good. And I’m just thinking that if it is broken into multiple meshes, I can bake some pretty high-res normal maps on each part to add some of the detail and reduce the polygon count.

But only a part if I split the mesh like you suggest. Also, if I have my LODs set up well, I am thinking this wouldn’t be a problem.

Buddha-Statue.gif

This image is of a 128m tall Buddha statue in China. While I am NOT recreating this statue, it is rather similar in size and detail to the statue I am creating. Especially the way in which some pieces (like the head in this instance) will require far more geometry to achieve than other pieces.

Off topic: Since when did Buddha become a nazie? (look at the chest).

Back on topic:

I think splitting up the model and setting up several LOD levels would be the way to go. The only problem you would have would be hiding the seams where the different bits meet.

You could also cut it up like a pie and set the really close up LOD models to not have a back side. Your not going to be able to see anything on the other side anyway, right?

Off Topic: It is not the nazie cross, but a very ancient symbol also seen in Roman mosaics. The cross that Buddha wears in his neck rotates counterclockwise, nazi cross (inspired on that) rotates clockwise.

Back on topic:

I suggest to use a external software, like 3DSMax to obtain the normal maps for the statue and then optimize the mesh to get a low poly one. Apply the normal map obtained from the high poly model to the low poly model in a material in UE4 and you will get the appearance of a very high poly using a low poly mesh. It is a classical approach for making very detailed characters as well. 

Resuming. Learn about the use of normal maps. It is the solution to your problem.

2m Polygons! Wow. Crysis only had 2m polygons on screen at a time! That’s WAAAAAAY too big. Get down with some normal maps man!

Thank you for the advice, Kenny, but here is some additional info:

  1. Because of LODs, there would never be 2m polygons from the statue on the screen at the same time. If you are far enough away to see the entire statue, then the LOD meshes would be much lower res.

  2. Crysis was like 100 years ago (or 7, which is 100 in game engine years.) There has been a lot of talk lately about the PC game called Star Citizen. The big ship they have been using in the demo has 7m polys. In Forza 3, the cars in the showroom have about 400k polys, and they are one mesh, up close, with dynamic lights.

  3. You are technically correct… but if I use one huge mesh, then the normal map will be too low resolution to add fine detail. Maximum normal resolution is 4096 x 4096, which is about 16m pixels. The statue will have a surface area of about 16,000 square meters. So even if my normal projections were absolutely perfect without any gaps, I would get 1000 pixels / m2, which is about like Minecraft resolution I think (slight exaggeration). But, if I break it up into smaller meshes, I think I can use normals to drastically reduce the polys.

Anyway, thanks for advice, everyone. This is a hobby project for me, but I have started blocking out the statue this evening, and it has even started to take some shape. I am building in pieces, so I will see how that works.

Em, if you think that you need 2m polygons then you doing something wrong and should learn a little bit more about game technologies

Star citizen use 350k polys as a standard for finished ship with rooms, corridors, funitures, details and etc. In game you can see only ~10% from 350k polys at the same time. I will repeat - 350k polys not for single mesh, but for an array of multiple little high detailed fully animated meshes. And if you ship is far away - it just enables another LOD.

Heck no, do you aware of tiling? You can use 512x512 texture resolution to get great details at any real sized objech mesh because you can change “density” of texture, for example same texture will be repeated over 10 times and you will see exact 0 streches and distortions. You can use different masks to fight repetitiveness and create some variety in your textures.

Believe me, 2m for single statue is enormous overkill.

You can also use multiple Normal maps that appear as the player gets closer to the statue (learned that trick on UE3). In other words from far away you see one map but as you get closer you see others.

I’m sorry, but I’m not sure you know anything about what you are talking about, zeOrb. Here’s some info to enlighten you a bit:

Um, from the Star Citizen Kickstarter page, see this quote: "In Star Citizen, the characters are detailed at 100,000 polygons, the fighter at 300,000 and the Space Carrier 7 million! " Also, I have talked about using LODs in every single post above, obviously it will need several LODs.

Dude, I am talking about using NORMAL MAP BAKING to add detail to the mesh and reduce polygons. This detail, obviously, is of the one-of-a-kind variety, and cannot be tiled. How exactly do you propose doing normal map baking with a tiling normal?

So anyway, I now know what I need to do: Break the mesh up into smaller components, bake a lot of the fine detail down using normal maps, and properly set up LODs.