Matte-painting in Blender
In this article I'm going to show you my workflow, from the 3D idea received from the client to the post-production of the image, which is the main part of my process.
About the project
The architect's main idea of the project was quite an original one. The kindergarten tried to expose the art of graffiti to really young children, creating a learning and exposition site. I was quite excited about the theme as I knew it would lead to some original-looking images.
The client sent the model in a 3ds Max file, and I exported it out in an FBX format. The new FBX importer in Blender worked flawlessly but I know OBJ would have worked equally well.
The project is located in a suburban area of Alicante, southern Spain. The architect wanted an aerial view and I knew it was going be a challenge to hide the ugly tall brick buildings and centre the attention on the low modern kindergarten.
I decided to make a late sunset view so I could have all the tall façades in shadows and light the interior of the main kindergarten. The intention was to show the mood of the place rather than being just descriptive about its shape. I wanted to have lots of children playing, graffiti, and parents chilling around in the image.
The first step was to do some online research for hi resolution pictures of aerial sunsets so I could see the real behavior of the light, shadows, reflections, etc. I always do this to analyze the different elements and make an interpretation of them.
Camera and lighting
I had to show a lot of the context so I used a wide 25mm Focal Length. The final image had to be printed in A1 size so the final output image was 6000 pixels wide. I used Cycles as the main render engine.
I have an Nvidia GeForce GTX 670 along with a GTX 770, but after several tries I found that my workstation with double CPU (Intel Xeon E5) rendered faster, so later in the project I decided to forget about the GPUs and use the CPU instead. The final render took about three hours and used 1,5 GB of VRam (when using the GPU).
For the lighting I used a HDR background along with a Sun lamp to pump up the shadows (Note: I recommend reading this Ben Simond's post to view other advanced ways to solve this without the need to add a Sun Lamp).
The other main light source is an Emission Shader I used for the interior of the kindergarten.
The HDR map was called Barcelona Rooftops from Hdrlabs. For the lights configuration I did nothing complicated, just reduced the strength of the HDR to 0.75 and raised the strength of the Sun to 3.
As this job involved a lots of different 3D elements I decided to split the scene in different files to keep it all organized: I had different files for the main building, context, cars, people, and linked all those files to a main file that had the lighting, camera and render passes. This way of working also allows me to have more people working at the same time in different files of the project.
I worked with Groups and linked those all to the main file. I set the Outliner to display Groups, which allowed me to work in a similar way to the layers, but with an infinite number of them.
I strongly recommend using the script Edit linked Library to as it speeds up the process of editing linked files a lot.
The materials in the scene are quite easy as I like to keep my node trees simple. Almost all the materials in the scene are Mix Shaders (Diffuse/Glossy) with Bump Maps.
The deadline for the project was quite short, so I didn't have time to UV map anything. I used Object in the Texture Coordinates for all the materials in the scene.
Most of the images are from cgtextures.com, later modified to make them bigger and with a less repeating tileable pattern. I kept the main textures at 2000 as I didn't want to overflow the VRAM.
This was one of the important steps as my workflow relies heavily in postproduction.
The color pass
The only pass missing was the color pass without textures. This is a pass that renders the Viewport color of the objects in the scene without shadows or any other details. It is really useful as it allows you to quickly select any element by color in Photoshop. Unfortunately there is no way of rendering without textures in Cycles (as it was possible in Blender Internal) but there is a quick hack to do this.
First you need to apply different viewport colors to all the materials in the scene Material > Settings > Viewport Color (Note: You can use the script Random Material Viewport Color to do this automatically). Switch to Blender Internal and in Render options > Shading, un-tick Textures button; then go to Render Layers > Passes and tick Color pass.
Rendering the color pass
Now if you install the Convert Materials to Cycles add-on you can go to Material > Convert All Materials to Cycles > Reset All to Non-Nodes, to quickly turn all your materials to non-nodes and render the texture-less Color pass with Blender Internal.
Remember to leave this as your last step and not to save your scene after turning your materials to Non-Nodes as this step cannot be undone!
Post-production: base render
In this step is where the magic begins. I use Photoshop as my main matte-painting tool, but with a few tweaks you could probably use Krita or Gimp.
I will try to make this part of the tutorial as non-software-specific as possible, so you can follow the quick breakdown of the image step by step.
First is the base render.
Post-production: sky and people
I replaced the sky, added people and interiors and overlaid textures for the facades. I also overlaid textures for the grass, trees and ground and added details like graffiti, chalk drawings, hanging ropes, etc.
Here, I painted light and haze to add depth to the image, and added highlights and burn areas directly hit by the sun. I also painted shadows and vignette to frame the image, and added a lens flare and bokeh to the scene.
Post-production: Color correction and final touches
In this final stage, I worked on the color correction using Color Balance, Selective Colors and Curves. I also added final filters like Sharpening, Bloom and a bit of Chromatic Aberration.
Hope you liked this tutorial and don't hesitate to contact me or ask in the comments!