Vertex Deforming, Overdraw & Particle Improvements
This past week I began work on one of the final environments for Retrovirus, the caverns. This environment demanded a radical new approach to achieving organic and realistic looking cave systems. A new set of tools were developed that expanded the ridged Minecraft style editing system that had been used to produce the majority of Retrovirus (Our level designer has posted numerous development videos using this system, check them out here at own3d). Prior to these tools, curves in macro level geometry had been accomplished by splines, the use of cylindrical surfaces or the placement of large props. Our level editor tools were expanded to include a vertex manipulation tool, allowing for the movement of hard edges, corners and other features that conflicted with the organic nature of caves. Mousing over the image bellow reveals other enhancements to tool set as well. The projection based materials system, for props and pasted tiles, was updated to allow for the dynamic blending of floor, wall and ceiling based materials allowing for relatively seamless blending between macro level geometry and placed props. As the vertex is moved from one position to another the slope influences the blending between a rocky wall and a sandy floor texture. Props, such as these immature speleothems & rocks, also have this new materials system applied. Using the same prop, you can gain a huge amount of traction. By rotating the prop slightly the texturing completely changes and conforms to the new rotations and translations. The blending is enhanced greatly by reading in the height maps of each of the materials and blending them more realistically based on their own height maps.
Matt Enright posted an article titled, Lowering Detail Without Lowering the Experience which I'd like to touch on. While Matt has been working on improving performance on the code side of the project, I've been active in reducing the negative performance hits from areas like particles and lighting. Many of the properties of the lighting and particle system have been exposed to the art team so we can do some of the optimizations without degrading the intended visual target. The following location in this cave system was not very performant initially. Excessive overdraw, was the cause of the low frame rate. We have a visualization mode that helps me determine the overdraw in a scene and diagnose problematic lights, particle systems, etc. When using this mode green to yellow represents acceptable amounts of overdraw while yellow to red colors are not very good, especially when covering a large portion of the screen.
I determined the primary issue was with a particle/prop flow. To achieve the visual target I created a PropFlow, a node based path which I can attach particles, lights and props. I had created VERY large particles, attached a volume & point light and added in a small emitter responsible for the thousands of glowing particles. After reviewing the overdraw in the scene (mouse over image bellow) it was clear that a refinement pass was needed.
After diving into our particle system and reduced the large particles from 5/second to 1/second you can see what a difference that made to the usability of this particle system in our level. You can see the particles in the particle editor. I've optimized the hover-over image.
This shows the same particle systems and the overdraw prior and post optimized.
Once this system had been optimized, introducing it to this particle waterfall was not an issue at all. After a few more adjustments, such as enabling GPU physics based collision… this scene turned out looking spectacular!
If you don't already have an overdraw visualization mode implemented, DO SO, it will help lighten the load on programmers and empower your artists.