How impostors affect performance.
Posted: Thu Nov 29, 2018 6:11 am
Hi!
I am working on a small team developing a 3D game in Unity 2018.2. We are hoping to support somewhat low-end platforms (e.g. Nintendo Switch) and have been looking for ways to improve rendering performance. We view our levels from the top-down and have ~3000 small plant meshes (~200 tris) The plants eat up a lot of our rendering time so we were hoping to replace them with impostors. The Amplify plugin worked great to generate the impostors and they look great in the game.
We have one impostor per plant.
Bake Type: Octahedron
Texture Size: 1024 (we apply crunch compression to the textures)
Axis Frames: 16
This took the Tri count from 1,700,000 to 375,000.
But somehow this actually made our frame time slightly worse. On a computer with a GTX1060 we went from 6.4ms per frame to 7.3ms with the impostors. On our target hardware we saw a similar small decrease in performance.
This was surprising to me. I'm wondering if the problem is:
- fill rate, the impostor sprites take up more area on the screen than the meshes did.
- shader complexity, the plants used a relatively simple shader. Is the fragment shader of the impostors really costly?
- There is some extra cost per impostor I'm not aware of.
Do you have any suggestions for how I might improve the performance of my impostors?
Thank you!
I am working on a small team developing a 3D game in Unity 2018.2. We are hoping to support somewhat low-end platforms (e.g. Nintendo Switch) and have been looking for ways to improve rendering performance. We view our levels from the top-down and have ~3000 small plant meshes (~200 tris) The plants eat up a lot of our rendering time so we were hoping to replace them with impostors. The Amplify plugin worked great to generate the impostors and they look great in the game.
We have one impostor per plant.
Bake Type: Octahedron
Texture Size: 1024 (we apply crunch compression to the textures)
Axis Frames: 16
This took the Tri count from 1,700,000 to 375,000.
But somehow this actually made our frame time slightly worse. On a computer with a GTX1060 we went from 6.4ms per frame to 7.3ms with the impostors. On our target hardware we saw a similar small decrease in performance.
This was surprising to me. I'm wondering if the problem is:
- fill rate, the impostor sprites take up more area on the screen than the meshes did.
- shader complexity, the plants used a relatively simple shader. Is the fragment shader of the impostors really costly?
- There is some extra cost per impostor I'm not aware of.
Do you have any suggestions for how I might improve the performance of my impostors?
Thank you!