Wednesday, March 13, 2013
Brightwall - Blocking in the terrain
I've spent several days examining all the details of the terrain withing the walls of the village. As a first step, I began drawing over it, looking at how the curves behave and what direction they are going in. I've did this a couple of times, redrawing and getting familiar until I could imagine it in my head. It was important because I only had this concept image, which is quite hard to read. This is because the sizes and the ratios change as things are further from the viewer. Distortion had to be taken into consideration.
After a couple of failed attempts, I've began producing terrains that resembled the one in the concept.
Here is the final blockout, along with placeholders for the buildings:
The terrain was taken into ZBrush to go over it by hand and adjust the details according to what felt right. After it was polished up, I had to go into a very technical phase of the work, which involved creating a HeightMap. Why is this needed and what is in the first place?
The answer lies in how the UDK game engine handles terrains: UDK has an in-built "Landscape" tool, which generates landscapes. These landscapes are extremely well optimized and have a very important characteristic. As the player moves further from the terrain, the distant parts begin to use less polygons, less resource. The program takes away detail from the distant areas, but since the player is so far away, it will be completely unnoticeable. This saves a large amount of resource.
The "Landscape" tool also has sculpting features, similar to that of ZBrush, so if I place an asset on the terrain, but the ground is not flat enough to sustain it, then I just go in and sculpt away. This, again saves a huge amount of time, so I don't have to jump back to ZBrush all the time.
That said, I had to create a Height Map which is a 2D image using only grayscale values. These values contain height information. Black pixels are the lowest points of a terrain, whereas the white ones are the highest. The inbetween values generate the desired landscape.
The next step is to take all this into UDK to see whether it's going in the direction I want it to.