I think people are starting to argue some semantics, which while having truth in them, are kind of not the point. Shaving vertices off by culling is not something an artist making a model can do; this post is about LOD generation, and is fueled by simply how many times I go into someone project and notice it being done completely wrong.



This is one of the things I kind of hate about optimization discussions, because while the answer is always "It depends", the guidelines that 99% of the people doing the actual work of making the art are under are usually wrong, and the actual answer is far too nuanced for them to understand. And so instead of fixing those guidelines we all start talking about execution cases, niggly cases like how to format code to help the compiler use MULADD instructions instead of the bigger pictures stuff, like why are you fetching memory from everywhere and destroying the cache.



If you are at the point in which tweaking instruction generation is your number one source of performance gains, you're either in a very, very tight inner loop of extremely well optimized code, or you have better places to look, like a more performant architecture. Like wise, using my original example:



1000 rocks in scene

900 in last LOD (250 * 900) = 225,000

30 in second to last LOD (30 * 500) = 15,000

30 in first LOD (30 * 750) = 22,500

40 in no LOD (40 * 1000) = 40,000



Those two LODs which consume more memory that the first and last and cause all kinds of ugly popping? They are saving you 13% of total vertices. Meanwhile, if you're getting bad micro triangle issues, they could costing you an order of magnitude of your potential performance. Do you want them focused on potential win of 13%, or that potential loss to 1/10th the speed? Should I maybe, as a coder, put in an imposter system and save them from having to do any LODs to those models, while also saving 75% of my vertex count in the process? Probably.



So you can argue about vertex count, MULADDs all you want, pull out all the algorithmic optimizations, talk about how great OO is, and getting gains in the 10% kind of range from that stuff. I'll be organizing my memory into cache coherent structures, designing efficient pixel sampling culling systems for my shaders, and seeing gains in the 300-3000% range. After that point, I might care about MULADD's and shaving off 13% of my vertices, but only once everything else is blazingly fast. Usually you never get to that point, and if you artists are spending a ton of time trying to help you save that 13% of vertices at the cost of twice as much memory and a worse looking game, you're wasting their time..

Click to expand...