April 18, 2013 by jonmillymiles
I have neglected my 3D Level Design module of late, partially because I wanted to reach a point with my other module where I was happy to stop, but also because I needed to take a few days off.
I started working in earnest again yesterday, and had quite a productive morning knocking up some simple scenery for the pump-room and the warehouse. Speaking of the pump-room, as I have now called it, I took a few minutes, possibly a few more than a few actually, to create a fuel tank type of structure that I could use within the heavy machinery area. This was to be one of the more Steampunk rooms where the power for the Sparker Room is generated. I also wanted to include lots of pipes and cogs and pistons, and in all I don’t think it’s too bad but there are some niggles with it.
I’m having problems with some faces in 3DS Max, they’re not always working… as they should. It’s almost as if two or three pixels have been stretched across it in a line and I couldn’t for the life of me figure it out. Then it clicked, for the rounded ends of the tank I have used normal mapping, from top to bottom, thus effectively mapping the semi-circular face to a flat profile. This results in some faces losing resolution depending on the angle that they are facing as their faces are compressed by angle rather than by area. Relaxing the faces in the Unwrap UVW modifier helped a little but I am still not 100% happy with the results.
On a better note I have made some objects to scatter around the map to act as scenery and detritus: a simple box and a drum of cable. These can be resized to fit multiple uses and while the amount of variation in the level is still quite limited they serve to convey the feeling of clutter that I want in some areas.
With the introduction of these objects also came a revelation, one that started evolving with the fuel tank: my ultra-low poly count methodology was flawed. There was no way that I would be able to generate complex scenery, or even not too complex scenery, using very low polygon models and retain the vision that I had for the objects involved. This was due to a key misunderstanding that I had with the use of Normal Maps in UDK and a corresponding height map in 3DS Max. My new, revised and improved understanding is as follows:
- Height maps work by modifying the perpendicular elevation of a coordinate on a polygon with respect to the value of that coordinate on the height map. So the map actually deforms the surface of the polygon. This is what I thought a Normal map did in UDK – I now know that this is in fact a Direct-X 11 function called tessellation.
- Normal maps actually work by adding reflective data to a coordinate on a polygon based on the perceived angle at that pint and with respect to a light source. Most importantly: he surface remains flat and is not deformed at all. It adds the illusion of fine detail without the need to generate fine geometry or reshape objects in real-time.
So I made a decision: ignore the low poly count and work with a level of reasonable complexity where the objects were recognisable and had a suitable fidelity.
That may well seem like an ambiguous statement. How do you define reasonable? Suitable? Who sets the standards? Who judges the results? Who determines if there are too many triangles on the screen at once?
The answer to all of the above, thank God, is me.
When I started some of my objects last year, I initially made them incredibly complex, down to screws, nuts and bolts (I kid you not), and I learned to scale that back. But I went too far, and now I need to scale it up a bit. A good example of this is an early window that I made to form part of a façade and a corresponding box. The two could easily have been just two boxes, in fact that is exactly what the window is. Using my ultra low poly count methodology, my misconceptions and normal maps I generated the image below. I was blown away by how good it looked… well actually… I lie. It looked rubbish!!!
After I made the decision to lift the poly count the detail improved no end. It didn’t need too much, and by using the swift-loop and extrude tools in 3DS Max to create the lowered faces of the box. I then used a normal map to add texture to the surface to increase the fidelity. This provided good results while not increasing the number of polygons by a huge amount. This was important as in some rooms, such as the warehouse area, there would be numerous boxes of various scales and proportions and having too high a poly count would be detrimental to performance.
I then applied this same methodology to every object that I created. This has improved the overall quality of the level and has enabled me to use my objects in multiple areas, at differing sizes, with confidence. Two examples of this are shown below, the first inside the warehouse providing an area to explore. The second is by the players starting position and the objects form a barrier to prevent the player from wandering off map.
And with those images I shall bid you good night. I won’t let it be so long before my next post.