Poly Reduction Prioritization

I recently published a tool for Unity that exposes additional settings for UnitThe central environment in RedFrame is a large mansion. While developing the 3d model of the house I didn't pay much attention to its total resolution; I wanted to see how far I could push mid-range hardware and didn't want the design of the environment to be influenced by technical considerations. To our delight the house runs completely smoothly on an ATI Radeon HD 5770 with a gig of video memory. Although this video card is no slouch, it's also not a high-end gaming GPU.

The resolution of the house model was originally 1,371,298 vertices. We're going to expand the environment quite a bit and will need to keep the game playable on as many systems as possible, so I've started the process of reducing the resolution of the Maya model as much as possible without negatively affecting the way it's perceived by the player. I realized that a lot of our detail was unnecessary; some of the tight detail even detracted from the image by causing flickering when anti-aliasing was disabled.

The scene is quite large, so prioritizing my time is a little difficult. My first thought was just to go through each room looking for objects that are more detailed that they need to be, but this is somewhat arbitrary. My second technique has been to print a list of all objects in the scene and then order them by how much resolution they have. It is still arbitrary in a sense, but it has been a nice weapon with which to attack the problem.

Because I'm more comfortable programing in Unity than in MEL, I wrote a C# script to sort models by resolution. It's my first time using Linq, which I still need to wrap my head around. You can download the script here - just import your model into Unity, drop it into a new scene, and attach the script to the model's root game object.