Creating detailed urban scenes
Linden Stirk's Kowloon Alley is a meticulously detailed image inspired by the streets of Hong Kong. Here he shows us the process behind it, from the initial block out to the final render...
Discover how Linden Stirk created this vivid street scene
Step 1: Block out
This project started as an assignment for a college class. The main requirement was to create a 3D render of an alley. I used Maya, Mental Ray, and Photoshop.
After collecting reference images online, I was ready to start the block out stage. I referenced several pictures of alleys and streets in Hong Kong to use as a base for creating this environment. I modeled the basic forms with enough detail to see what was going on, and I experimented with the layout, different camera positions, and the overall composition. I did not worry about UV maps, the topology of the geometry, or lighting.
Step 2: Modeling
I needed to save time by making the various wall sections modular. I made sure that each section was the same size with their UVs in the same position. This way I could move around different pieces and they would fit into place. The only problem was maintaining a seamless texture join between the upper and lower floors of the building. If there was a little discrepancy between the various textures, I made a best guess in Photoshop and tweaked the position after seeing it in Maya's viewport.
Since this scene was so large, adding smooth bevels around edges created too much detail which slowed rendering considerably. My solution was to use the Mental Ray RoundCorners node which was applied to the bump input. This node simulated bevels to the geometry during the render.
Step 3: Texturing
As with the geometry, I also created several different versions of the wall textures for more variation. I created over 200 materials using Mental Ray's energy conserving mia_material_x shader. For each material, I created a diffuse, bump, and specular map.
All of the objects have UV maps. I used a combination of planar mapping and automatic mapping, but I sewed the edges to minimize or eliminate seams.
Step 4: Lighting
I used Mental Ray's Physical Sun and Sky as a starting point. However, since the two walls were so close together, I had trouble getting light inside of the alley. I decided to treat the scene as an interior environment. I linked the directional light via a portal light node to area lights on the top and the sides of the alley to force light inside.
A mib_cie_d3 color temperature node was attached to the Color Multiplier on the area lights, and an exposure node was linked to the camera's Lens Shader.
Step 5: Linear workflow
It is important to make sure that the scene is setup with a linear workflow. Usually, textures files are in the sRGB color space with a gamma of 2.2. However, Mental Ray expects these files to be in Linear sRGB with a gamma of 1.0, and so it will apply a gamma correction of 2.2 on the final render. If the scene is not setup properly, renders will look washed out because the textures are in effect being gamma corrected twice.
There are a few ways to maintain the correct gamma. The first way is to enable Color Management, but this requires adjustments in the render viewer and any exposure nodes as well. My preferred method is to apply a gamma correction node to all textures and set the gamma to 0.4545. I like this because there are no other settings that I need to alter. I use a script called JJJ Gamma Tools that allows all gamma nodes to be added or removed automatically.
Step 6: Importons sampling
Instead of traditional photon mapping with Global Illumination and Final Gather, I used Mental Ray's importance sampling technique with Importons (virtual particles) and Irradiance Particles. This drastically improved render time and allowed a 4K image to render on an older computer without crashes or extremely long delays, and without sacrificing quality.
In a pre-render stage, Importons are fired from the camera and gather illumination information in the form of Irradiance Particles. These particles are sampled based on how important certain areas are, with brighter areas receiving more rays than darker areas. This makes sampling more efficient and can significantly reduce render times for large, complex scenes. This method also tends to reduce noise and splotchy patterns on the rendered image.
Step 7: Rendering
After experimenting with the indirect lighting parameters, I was ready to render the final image. For anti-aliasing, I used the Lanczos filter with the legacy sampling mode with a minimum 4 and maximum 64 samples per pixel. I needed to make sure that the wires, antenna, and corrugated metal were sharp.
Step 8: Compositing
I wanted to make the final image brighter, more vibrant, and visually appealing. I was going for a more stylized aesthetic, rather than trying to aim for photorealism. Therefore, I took the same liberties with the compositing as I did with the signs and lanterns.
I started by adding a simple curves adjustment for contrast and color. I added some depth of field, grain, a vignette, and a tiny amount of chromatic aberration. I applied the Z Depth pass with a Soft Light blending mode to add some atmospheric lighting farther down the alley, and I used a soft brush to paint in some adjustments. Finally, I put a subtle lens flare at the top around the foreground lantern to add a little more glow. Done!