Making Of 'SLS AMG'
I've spent a lot of time creating boring automotive commercials, and I tend to produce the same kind of work using the same approaches, day after day. They look like old black and white photos and lack originality. I'm tired of this monochrome world and the formulaic light processing, not to mention the boring doctrines of creation and so I wanted to break all these rules and create a really personal piece of work.
At the time that I created this piece, I felt helpless and lonely because I was far away from home, living under the haze and dark clouds of Beijing. I wanted my work to have colorful and brilliant lights, strong exposure and beautiful clouds to contrast this.
References and Textures
When starting any new piece, it's very important to find some high quality references that can have instructional influences on your work. A good reference should do two things: match your ideas and give you ideas. Fig.01 shows a small number of my references.
It's also important to prepare textures so that you can use them at any time. I always prepare high quality textures according to the general idea as much as possible during preparation for a project. Libraries on CGTextures of 3DTotal are a good choice, as well as Evermotion. All the skies in this work are from Evermotion's Landscape section. Here are some of them; they were not all used in my work, but having the option to use them was useful (Fig.02).
The main model of the SLS AMG came from an old work - a high quality poly model - that I made to complete my graduation design. There are already too many tutorials that cover creating a car, so I'm just going to talk about some skills, to reserve space for more important subjects like lighting and rendering.
To start, I used a real-world size to model. This is very important for physically corrected rendering. In addition, it helps to enhance your model management. For vehicle modeling, I always use the CM-CM unit (Fig.03).
I set the wireframes according to the object's structure. Poly wireframes will be arranged in accordance with the shape and structure of the target object. First, you should build the construction lines, then build the other lines. The red lines in Fig.04 are construction lines. They decide the object's structure and surface, so I made sure they were right first. After determining the structure line, I arranged the other lines (shown in blue) according to the direction or the surface (Fig.05).
Sometimes you can't make detail in normal ways, so you should find an easier way: collapse it (making sure you reserve a copy before the collapse). For example, modeling the radars would have been hard using normal methods (Fig.06).
When I had made sure the main surface was nice and clear, I collapsed it. This gave me a subdivided mesh (Fig.07 - 08).
Doing this allowed you to cut the radar easily (Fig.09) and put in the radar cover (Fig.10).
Shaders, Lights and Rendering - Basic Theory
Linear Work Flow (LWF)
The LWF is an efficient and excellent work flow, especially for team work. Gamma Correction is the most special feature of LWF obviously. Although it is hard to get started with it (or learn it), it's worth it. You should know that whatever the com
It should be note that whatever a computer's capacity, it will always just compute (1 + 1 = 2, 2 x 2 = 4). When you look at a light, if the brightness increases one level, the energy increases one level too. We call this Linear Exposure. But your eyes are like a camera lens; when you increase the brightness by one level then you also need to double the energy - it is Logarithmic Exposure.
Gamma is a word that confuses people. It's used in so many places to describe a lot of things. But here, gamma is a bridge between the computer's linear exposure and man's logarithmic exposure. It is an important role in texturing and rendering, attenuation of light, HDRI, post processing and so on. There are many theories about LWF; if you want to learn more, I recommend the HDRI Handbook by Christian Bloch. Personally, I think LWF is the best way to render an IBL scene (Fig.11).
Color Depth is a complex concept. To understand it more easily you can say it is the number of color. An 8-bit image (like a JPEG) can describe 2^8=256 colors every channel. A 32-bit image (like an HDRi) can describe 2^32=4294967296 colors every channel. The more colors and details you have, the more room for post-processing. I use a 16-bit PNG image usually. It offers a good balance of quality, file size and soft support.
It's important to note that the depth is per-channel depth. When I say "a JPEG is an 8-bit image", this means that every channel of this jpg is 8-bit. A 32-bit TGA is an 8-bit image too, because a TGA has four channels, and each channel is an 8-bit channel: 4 x 8=32. It is just a different count method, so don't be confused .Usually, HDR and EXR format are the real 32-bit images.
Usually we use R/G/B 0-255 to describe all 256 colors, as it is enough in normal situations. But if you want to get a color between 254 and 255, this method won't do anything. Float could be helpful in this situation as it allows you to get any color you want. And in fact, float has a important role in the compute and HDRI.
In laymen's terms, float is decimals. If you want to describe a color between 254 and 255, you can mark 254.50. Of course this is an inexact sample; in fact, the range of 0 (black) and -255 (white) in float is 0.00 (black) to 1.00 (white), and the range of 254-255 (one grayscale) in float is 0.004. So, the color that you want is 0.998; you can get a nonexistent color in common 0-255 colors.
We can get a greater range of accuracy of colors by using float, which is its main advantage. You can also describe a color that is brighter than "White (1.00)" by setting the value to more than 1.00. This is a secondary advantage and it is very useful in HDRI and composite.
Have you ever noticed that the default value of a default light is 1.0? It is a float value. It means that a 1.0 light and a 1.0 object will output a 1.0 result. Float can be anywhere (Fig.12 - 13).
I use an undemanding LWF as this makes practicing easier.
First I set the 3ds Max gamma. I set the display gamma to 2.2 then changed Input Gamma to 2.2, because most of my textures were 8-bit images. Then I set Output Gamma to 2.2, because my composite work flow is not a linear one and I use Photoshop (Fig.14).
Then I set the V-Ray Gamma, enable the VFB and activated the sRGB button (Fig.15).
I set the color mapping values to the settings you can see in Fig.16. The Don't affect colors setting is a partner of the sRGB button; they make sure that we can get a gamma corrected image in VFB, but in the system memory, the image is still a linear one. (If you disable the sRGB button, you will get a linear image).
Now I'd finished the gamma setting, I could render in a linear space and composite in a nonlinear space. If you want a linear composite work flow, just set the 3ds Max output gamma to 1.0.
The ground was my first material; the key of this material was composite texture. You can composite your textures in the Photoshop, but I always use the composite texture, because I can adjust the textures directly and easily in Max.
First I created the diffuse map, taking a ground texture as the base layer (Fig.17).
Then I added a more complex texture as the second layer to add more details on the ground. I set the map channel to 2 and the opacity to 40, with the blending mode on Darken. For easy adjusting, I added a color correction node to the bitmap (Fig.18).
Then I added the white line on the ground. I download a road texture from www.cgtextures.com, and opened it in Photoshop (Fig.19).
I used a tool to clean the road part, leaving me with Fig.20.
Then I got the final texture by adding a black layer (Fig.21).
Using this texture as the third layer of the composite texture, I set the map channel to 3 and disabled the V-tiling. Then I added a color correction node to adjust the white line, which made the line darker. I set the blending mode to Screen and the opacity to 80 (Fig.22 - 23).
Once the diffuse map was finished, I went on to adjust the UV of the ground object. The ground object was a simple plane. As the composite of diffuse map, I needed three UVW map modifiers to control the scale of the textures.
The first UVW map was easy to set; I just had to make sure that the texture was clean. The Bitmap Fit button made things better (Fig.24).
For the second UVW map modifier, I set the channel to 2 and renamed the modifier to C2 (Channel 2). As I needed to add more "noise" to the base, I set a bigger gizmo (Fig.25).
For the third UVW map modifier, I set the first channel to 3, and renamed it C3. Then I adjusted the white line's position and scale (Fig.26).
After finishing the settings for the basic diffuse map, it was time to set the other maps.
First I needed to copy the second diffuse texture to the reflection node, and adjust its brightness and curve (Fig.27).
Then, for the bump map, I linked the first diffuse texture to the bump node directly!
Now I had all the map settings done, with some simple material settings, I went on to create a good ground shader.
Tip: Strictly speaking, you could choose not set the bump/glossiness/normal etc., textures to gamma 2.2, but I find these tech details make things boring, so in shader testing I set all textures to a default gamma of 2.2 (Fig.28).
The material parameters can be seen in Fig.29.
It looked like the diffuse map was too dark. So I needed to adjust the brightness of the composite texture, add an output node, and set the output amount to 1.5 (Fig.30).
Fig.31 shows the final ground shader.
You can see the white light, which doesn't look good. But thanks to the camera angle, it wasn't a problem at all. In fact, when I tested my scene, I ended up adjusting these parameters again and again. If you want a good result, patience is your partner. So, be patient please.
Before I get into what I did in the software, I'm going to talk a little about real car paint. There are many kinds of car paint in this world, but the basic ones are always non-metallic paint (Fig.32) and metallic paint (Fig.33).
Metallic paint is a multilayer material, which has two layers at least. For a high-quality result, you can create a complex shader, maybe three or four layers. At the bottom of the metallic paint, there's a glossy paint, and it decides which color the car is, like blue or red. At the top of the metallic paint, it's a thin, glazed and colorless paint; the beautiful reflection of a Ferrari comes from this part.
There are two special characteristics of the metallic paint:
• Multi-specular. The specular of the bottom part is bigger than the top part, so it will be very beautiful and charming under a powerful illumination (as shown on the tail of Fig.33).
• Flakes. There are many metal flakes in the bottom paint, which will flicker around the highlights.
In most projects, the key point of a metallic paint shader is the multi-specular (Fig.34).
In this project, I wanted to create a clear, silver metallic paint. It didn't need to be photorealistic, but it did need to be very shiny. I didn't use the common shellac material or blend material, but the new V-Ray car paint shader, which is very easy and good.
There were three main layers in this shader: bottom, flakes and top part.
The basic reflection controlled the power of the bottom paint's reflection, 0.5 suited for most of the scene. Basic glossiness controlled the spread of the bottom paint's glossy reflection; 0.72 is a comfort value. In fact, the basic layer was a simple vraymtl with a ward shader, which simplified the parameters for the car paint effects.
The flake layer can be used to create the flakes effect. I didn't use this function in this project, so just set the common values to 0.00 and the flake map size to 64, to save system memory.
There was only one parameter in the coat layer that I needed to adjust: the coat strength. The default value of 0.05 means a common car, 0.08 means a good car. Here, 0.12 was a very shiny car.
At last, I was able to remove most of the noise by setting the subdivs to 32 (Fig.35).
After setting the material's parameters, I could give a color to the paint. I added a falloff map in the base color slot, set the far side to black and the near side to a bright gray (75 x 75 x 75 - this is "bright" because I used the Gamma correction). Then I adjusted the curve, as shown in Fig.36, and got a nice, silver car paint.
This is typical car paint. Because of the LWF, I was able to use this shader everywhere; it just needed a little adjusting.
The main difference between a car's glass shader and some archviz shaders is that you need to make sure that the glass object is solid. By doing this you will get a correct refraction result. In Fig.37 you will see the terrible result I got because the object has only one surface.
As you can see in Fig.38, I got a correct refraction just by adding a shell modifier.
I needed to enable the refraction "effects". If you wanted a better effect, you could also enable the Reflection on Back Side option. This will compute reflection on the back side of the surface normal, which means that you will get reflections appearing inside the glass object (Fig.39).
To change the color of the glass, like a shell of a tail light, I didn't adjust the refraction color, which is used to control the power of refraction, but I adjusted the fog color and fog multiplier (Fig.40 - 41).
The other materials are not very complex, so I will not introduce them one by one. If you want to learn more about the V-Ray's materials, I advise you to read the content of www.spot3d.com.
Environment and Lighting
In outdoor scenes, I like to set up a basic render environment first, then add some auxiliary lights. In the very beginning, I wanted to create a backlighting scene, but then I got a problem that every backlighting scene has. Look at Fig.42 and you will see a bad dark area on the side of the car.
To avoid this problem, you can add a light in the real world, as shown in Fig.43.
But this is an artificial style. If you want a natural result, you need some other ways. CG is a way to create a hyper-real world; I will introduce this way later.
Now I will introduce you to IBL and HDRI loading - the core of environment setup.
Usually, I used Image-Based Lighting (IBL) to build the main environment. It's very easy to set a V-Ray IBL, which just adds a HDRI to a V-Ray dome light. I set the dome's multiplier to 1.0, which is a standard work habit. I also disabled the Affect Specular option, because I could use standard lights to control the specular manually, and this was faster and easier. Finally, I enabled the Spherical option to create a full spherical environment.
Compared with Vray GI override, IBL is a better choice if you don't have much bounce light, like with an outdoor car scene. It's easier to use and doesn't need many parameters to test, and it doesn't even need GI to lighten the whole scene.
Tips: Using a small and blur HDRI to light up a scene (reflection still needs alLarge HDRI) will reduce render time. But I didn't do this here because I didn't have the time and I was a bit lazy (Fig.44)!
I used a VrayCompTex as the dome's texture, which I used to composite HDRIs, and solve the dark problem which I mentioned before (Fig.45).
Next I needed to load an HDRI. There are two ways to load this: bitmap node and VrayHDRI node. The VrayHDRI node is easy to use and has good compatibility with V-Ray, but the bitmap node can adjust the image delicately. Usually I use the VrayHDRI node, but if the HDRI has a large dynamic range, I prefer to use the bitmap node to avoid bad blooming. As my sunset HDRI had a small dynamic range in 0.00-2.00, I used VrayHDRI here.
It's very easy to use a VrayHDRI node - just look at Fig.46. Then you need to set a suitable overallmult. The word "suitable" means that a white object will be white when it's rendered.
I paid attention to the VrayHDRI gamma. As a LWF standard, a HDRI's gamma should be 1.0, like the default setting. Because the HDRI is the original data of real brightness, it won't be corrected by gamma 2.2, like a JPEG file. But we can use a different gamma value to get a different HDRI performance. In laymen's terms, a gamma value of less than 1.0 makes an image darker and increases the contrast (in fact, it`s a sunken gamma curve). And a value of more than 1.0 makes an image lighter and decreases the contrast (so, it's a convex curve)(Fig.47).
I named the HDRI "Env_Main", rotating it to get a nice angle, which will decide the main light. When doing something like this, ActiveShade is your good friend (look at the top left corner window) (Fig.48).
I had a dark problem here, so I used raycomptex to save, copy the Env_Main and rename it as "Env_Side", set Env_Side as the second subtexture of the vraycomptex, then rotate the HDRI to a right angle (Fig.49).
By doing this, I had solved the dark problem. Once I was comfortable with the angle of my HDRI, I adjusted the overall mult and gamma one by one to create a beautiful environment. This is a useful skill, especially in outdoor scenes (Fig.50).
So, I had finished the environment now and it was time to start setting the lights. Lights are used to enhance the performance of an environment (look at the surface near the tail light; it was too dark at this point). Because I had created diffuse illumination and environment reflection by IBL, I only needed to create specular illumination this time. I made a special script to do this job; it's a standard direct light that had the highlight place function.
The first job in the specular process was to match the environment highlight. To create a specular light, I clicked the target position in camera view, so that the light would find a proper position (place highlight). Adjusting the light's position and scale helped me to get a better view (Fig.51).
I then created more specular lights, to make the tail light area better, before getting a final render. In the Render Elements, Reflection, Specular and Refraction were the basic channels (Fig.52).
I saved the main render elements as 16-bit PNG files, and rendered the assist channels like AO, mask, shadow, etc. Now it was time to start the post-processing.
I used Photoshop to composite this work, where I mainly used layer blending modes and made local adjustments. Masking and adjustment layers are your good friends at times like these.
The sky is the most important part of this work. I used two high resolution panorama parts to composite the sky, using different masks in different layers to get a good result (Fig.53 - 54).
Then I added the ground and car (Fig.55).
Compositing car paint was another important part. Besides Curves or Level tools, reflection and specular channels are good tools to adjust car paint. For example, using Softlight or Overlay to composite the specular channel will increase the structure's construct, and using the refract channel will make the car's lights more beautiful (Fig.56).
Now I needed to do something to make the sky better. To create the sun, I used two glare textures to create the sun's glare. One was powerful and the other weak, so I could adjust the halo and temperature accurately (Fig.57).
Using a mountain texture to create the distant mountains, I paid attention to the blur effect. With decreased saturation, I got a "fog" effect (Fig.58).
To get a better result, I used another layer to adjust the details of the sky carefully (Fig.59).
I added more layers, carefully adjusting the image, until I had the final results and SLS AMG was done (Fig.60).
As this wasn't a commercial piece of work, I had a lot of time to test different skills and techniques. I think personal works are a great way of improving your skills, because you have the time and energy to get everything perfect!
Finally, thanks for the help from my brother Fei; he gave me many suggestions and a lot of help.