Sebastian Zapata talked about the production of the photorealistic Parking Lot, his texture workflow, and the render engines Cycles and Corona.
I’m currently the CEO at Friendly Shade, which is a company I created two years ago that’s dedicated to creating 3D scans for digital artists like myself. I come from a music and art background because it’s what I’ve seen in my family, mostly from my father who’s a graphic designer and painter and he’s been a great reference for me since a child. I started with Blender 7 years ago with the idea to be an animator and I got the chance to do relatively simple animations while I was a freelancer. That changed, however. In the last couple of years, I’ve seen how important is having quality textures and materials for achieving realistic renders and in 2015, I got obsessed with studying how to improve the way textures were captured. That’s why in 2016 I started to work hard on Friendly Shade.
Here are some of my other projects:
I have to say I’ve always got strongly inspired by others’ art and games are not the exception. I’ve been playing all Grand Theft Auto series back from Grand Theft Auto 2. My favorite ones are GTA IV and V because environments have become very complex and realistic there, so you can really feel the mood of the city while you play. That’s made me want to recreate one of its environments but I never had the time until now. I had to stress-test some of the textures I’ve recently scanned for Friendly Shade Bundle 02 (which is going to be released on May 13th by the way) and I thought it was a great opportunity because they are pretty similar to the textures used in my favorite locations of GTA V.
One of the main things I took as a reference from the game were object scales and textures. You might notice it in the objects like columns, windows, and walls. Of course, it was not the only source: last year when I scanned some textures on the parking floor, I took some pictures of the concrete ceiling, curb, and the whole place as references. These shots helped me with the colors, tweaking the bare concrete to achieve the look of a painted gray wall and other things like the mossy bottom on the walls and dust accumulated on the edges of the floor.
Below you can see the references from the game and my pictures taken with my phone (you will probably notice that my renders look mostly like a blend of both):
I used this picture as an inspiration for the camera angle of the first render:
That’s the original floor:
I wanted a more clean look though, so I made the walls kind of brand new, without all that humidity.
Everything, even the smallest details came from the scanned data. Displacement map was very detailed and it’s one of the most important features here! There’s not much I added besides all the seamless work on the texture maps. Materials are very simple, to be honest, just a CoronaMtl (regular dielectric material). I just plugged all maps I created into this Corona Material. Some of the key aspects of quality textures are:
- Displacement and normal maps should be sharp enough to hold the necessary amount of detail required by the camera position and the final render resolution. If the maps are just slightly smooth or not high enough in resolution, they will immediately break the illusion.
- A clean albedo map is important: color maps with shadows, ambient lighting or even worse, glossiness on them will break the illusion as well so it’s always important to use albedo maps carrying only the necessary color information. Then, every other feature like a gloss map should be with the material set-up.
- A gloss map that is been carefully created trying to match references is very important because it will partially contribute to how the material will react to the light. Some of our maps have been even extracted from the actual scan data using special equipment because it’s more close to reality, hence it will make the material creation process way easier. It’s still more time-consuming than our regular scans though so we don’t always do this. But we will eventually get there and we will be able to deliver this kind of gloss maps more often!
- And of course, it’s always important to have enough texture resolution depending on the final render resolution. I think the sub-pixel rendering is very important. If you have a 4k render showing a 4k texture it won’t probably look as crisp as if you would use an 8k texture. I even found it necessary to use textures x4 times as big as the final pixels that will be actually “rendered” in the final image. For instance, in this case, I would use a 16k texture for a 4k render. Things get a bit more complicated when it comes to close-ups because you will need even more pixel density, so that’s why I always strive to make high-resolution textures for Friendly Shade!
I didn’t use the same texture resolution in all the renders. For instance, for the floor in the more zoomed out renders, I used 16k texture maps “Parking Floor 01” (the parking slots), “Bare Concrete 02” (the rest of the floor without lines or numbers) and “Bare Concrete 03” for the ceiling. When I worked on the mid-level close-ups I realized 16k was not enough anymore so I started using “Parking Floor 01” and “Bare Concrete 02” at 32k. I reduced some other textures like the ceiling because it was no longer necessary since it was not visible in the shot and was only contributing to the light bouncing. For the closest renders, I used 65K versions which were showing only about 16K because they were just crops of the actual full-res textures. Otherwise, the renders would be unnecessarily long and use a lot of memory. Not to mention TIFs that can hardly carry 16K at 16-bit and would have required a different method for texturing.
To be honest, I only used one HDRI as my light source (credit to HDRI Haven and Corona for making my life easier) and it’s funny because it’s the first time I managed to get good lighting with the first HDRI I tried! However, I had to spend some time on tweaking the rotation for a good balance between the background and lighting. Sadly, I didn’t get a perfect balance, so I had to “cheat” a bit by rotating the HDRI seen on camera independently from the HDRI lighting actually affecting the scene. Luckily, they still matched and it was not noticeable.
Render Engines: Cycles & Corona
Render engines are really hard to compare since each tool always have quite many different pros and cons. If I were to compare two software solutions though, I would say it always depends on a specific case, the way you are going to utilize the tool and your personal feeling as well. For example, I’ve used Cycles and Blender for 7 years now and when I switched to Corona I found it way faster when rendering with CPU. Since Corona has only a CPU rendering mode I can’t compare GPU, but with 4 Titan XP, Cycles renders at a similar speed than Corona using only an 18-core processor so you can imagine the whole picture. Besides, we normally have access to more RAM than VRAM, so that’s another advantage. On the other hand, you have access to Cycles from Blender and I personally find Blender more practical than 3ds Max in some aspects like modeling and navigation (it’s more intuitive for me but that might be just a personal preference).
One of the artistic and at the same time technical things I really love about Corona is how every camera setting is tied to each other. For instance, if you change your bokeh shape, it directly affects the vignetting of your lens by making it bigger, stronger or even by changing its shape. So, the final image feels more natural from a photo-realistic point of view. And the bokeh Corona renders are unique, they feel very accurate and real.
I also find very valuable the flexibility Corona gives to users in production and post-production stages. First of all, interactive mode lets you work very quickly on changes while seeing fast previews. Being able to customize your bokeh shape, change the color balance, add vignetting on the fly and use GPU denoiser are some of the features I find the most useful. Cycles in Blender also has an “interactive mode” feature but you can’t do much post-process in this mode and, it tends to crash when the scene is too complex (except if you optimize everything manually but it’s still a pain). In Corona, everything is automatically optimized: you see a faster preview at the cost of lower quality displacement, textures, details, etc. And won’t have crashes that often!
Compared to other render engines like Octane, Corona has a better quality of the displacement maps and material nodes. You could have super high-resolution maps for very detailed renders but Octane still doesn’t let you use more than 8k!
Another good thing about Corona is that you don’t have to care about too many settings before rendering the most basic material. Just tweak the subdivision quality in the screen pixels and there you go!
One last thing: I compared Cycles and Corona in terms of lighting (with just a very basic clay render of my scene when it was being built in blocks) and I found both pretty similar, probably because most render engines are often based on the same equations.