2
\$\begingroup\$

I have been thinking of using level of detail to make rendering crowds easier. The idea is to replace a group of meshes with a single one representing a group.

For example, you have 1 individual cube mesh. If you get 100 cubes together in a close space, replace all of those with a generic "blob of 100 cubes" mesh, that would be simplified and hopefully have a lower polycount than the sum of all 100 cubes. If 100 "blob of 100 cubes" meshes are together, then replace them with a simpler "blob of 10000 cubes" mesh. And so on.

There are many different challenges in doing this. Such as how to detect the objects are close? How to render the blob so it looks realistic enough? What to do about each object's metadata (physics, game variables)? etc So before I delve too much into it, I would like to see what is the current state of this technology and how people have been using this.

But I cannot find anything related to it. I've been looking for it for days, but every search I do about "LOD" and "crowds" only returns things about how to simplify each individual mesh of each game unit (ie. replacing a high poly count character, with a low poly character). Instead of replacing many game units with fewer ones, which is what I want to do. I've obviously played many games, and I can easily tell when they're using LoD for simplifying individual units. But I don't remember a single game that would replace groups. Am I looking it up wrong? Is there a specific term for this thing that I should be looking up for instead? Do you guys happen to know some case study examples of games that do this that I could check? Or maybe this isn't done at all?

Any help to point me in the right direction would be appreciated. Thanks.

\$\endgroup\$
  • \$\begingroup\$ You sure you are not underestimating the computer then? Replacing many meshes at once with low poly count versions for optimization rather than replacing multiple at once might not gain extra performance since you are either checking all the meshes before replacing them or checking each individually before replacing it. \$\endgroup\$ – OmniOwl Aug 16 '13 at 18:50
  • \$\begingroup\$ I'm not really sure if, all things considered, it would be a performance boost or not. That's why I would like to know what is the current research on it before building it. But I imagine it might be worth it because checking if you should do the swap could be really simple depending on the game. For example, if you have more than X objects all on the same tile on a grid game, that could be enough to decide to swap. \$\endgroup\$ – VIBrunazo Aug 16 '13 at 19:04
1
\$\begingroup\$

LOD on individual meshes is still your best bet, IMHO. It's very well studied and works well for crowds, especially if they are animated individually. At the extreme, you have a single quad (or triangle) with a pre-rendered sprite that's appropriate for the camera angle. This is called impostors in the field. Since we're talking about extreme levels of simplification, you can get away with very few sprites to minimise on the texture memory required. For somewhere to start, here's a paper on 3D impostors which uses an interesting technique to address popping artifacts when changing camera angle: http://users.soe.ucsc.edu/~davis/papers/yee_masters_project_paper.pdf impostors

As for simplification via merging individuals into groups, the nearest thing I can think of is Stochastic Simplification, used for foliage and hair/fur mainly - it was used by Pixar in Cars for the bushes and Ratatouille for the fur. Check out these slides which get the general ideas across:

  • Stochastic pruning - randomly remove strands from the bunch
  • Area preservation - thicken the remaining strands to compensate
  • Contrast compensation - to remove the blurring effect

stochastic simplification on a bush

I have no idea whether this will work well for crowds; you may run into too much artifacts after an order of magnitude of simplification. If you do get it to work well, it will make an interesting paper.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.