April 06, 2022
Created and written by Pierre Bournigault. Edited by Leif Pedersen.
During my 3rd year at the ESMA of Nantes, we were asked to create a vehicle. It turned out to be a challenging exercise from which I learned about the creation of complex assets. I felt that the best way to bring the Falco Rosso to life was to make its function clear, so I took inspiration from the incredibly aerodynamic Formula One vehicles and mixed it with the aesthetics of films such as Redline or Blade Runner.
Oh … and make sure you download the look-dev project to follow along!
As basic as it might seem, modeling is always a crucial step for a project. Even when you are aiming for stylized aesthetics, it remains important to take the time to ensure your modeling looks functional or at least believable when viewed from different angles.
This is even more important for hard surface projects such as this one, as render artifacts will appear due to bad topology, or you will make your life difficult when doing UV maps. However it is up to everyone to find the right balance between useless detailing and under detailing.
If possible, a useful trick is modeling for your final camera angle to make sure you’re spending your time wisely.
When creating dense polygon models, try to avoid using the Maya viewport subdivisions (pressing 3 on your keyboard) and instead enable the RenderMan Catmull-Clark Subdiv Scheme in the model’s shape node. This will give you improved viewport performance and will convert the polygon to a Pixar OpenSubdiv at render time.
To apply the Subdiv Scheme to multiple meshes you can use Maya’s Attribute Spread Sheet which can be found under Windows > General Editors > Attribute Spreadsheet. Find the RenderMan Subdiv Scheme Attribute then select the column and press 1 on your numpad (second item in a list) to have it applied to your meshes.
Also, since this is a large asset (about 26 meters long), you’ll probably run into wireframe GL rendering artifacts, which will make your modeling experience less than ideal. This is because the default near clipping plane is 1 millimeter...which is way too small for the scale of the model.
This can be fixed by going through the camera’s attribute editor and increasing the clipping plane values, allowing a much more pleasant display. Reasonable starting values are 10 and 10,000 respectively.
Many times, similar models look too perfect and industrial. With this in mind, we’re looking to improve the look of the vehicle by giving it “life” in order to try to avoid a dull and plain aesthetic. A more specific example is the recurring issue of flatness, meaning, when rendering a model it might have a hard time reacting to your lighting, making it look boring.
To overcome this, try modeling slight imperfections or in our specific example, let’s give our model some curves! If you look closely at the wings on most planes, you’ll notice they are actually curved, not flat.
This is why with two bend deformers, we can create a slight wing curvature that will communicate more realism and add much more dynamism to your modeling, and ultimately your lighting and posing.
Once we’re happy with our model, it is time to move on to the UVs. While this is far from being the most creatively exciting part of this project, it remains a crucial step as it will make or break your texturing process.
Since this is a reasonably heavy asset, it's better to split it into several Mari Projects for performance reasons. Make this choice based on your available computer resources.
These are some questions you could ask yourself when determining a project structure:
From now on, your UV layout will depend entirely on the answers to these questions…so...no pressure!
Despite being an awesome texturing software, Mari does not support overlapping or reversed UVs very well, so make sure to layout UVs with this in mind.
When dealing with a lot of meshes and UV shells, using the Maya Layout Tool will be a great timesaver (To open its settings, Left Click + Shift on it). You’ll notice there is a value called Shell Padding which is the number of pixels by which it will space each one of your shells while taking the map size into account. 10 pixels is usually a pretty safe value while allowing the shells to make up most of the tile.
Since this is a showroom project with several close ups, many UDIMs were used for micro detail.
A quite common way to work in Mari is to start by laying out the diffuse color by using masks and applying the textures for each material. As you do this, you will build up a useful base for the following steps especially when using Mari’s nodal workflow, which gives us room for creative changes down the line.
It's worthwhile to spend time on this first step as it makes your work easier later. However, always make sure you are viewing your texture through your channel node (here, the diffuse channel), since it may not have the same color space as your base texture. This will avoid any unnecessary surprises.
For example, this is how the peeling paint was created on the sponsoring logos:
1) First of all, simply lay out the zones for each material. The Paint Through Tool comes in very handy for projecting precise designs onto a mesh. So far there is absolutely no wear, so the paintwork is simply too perfect to be real.
2) Adding some wear to the edges of the logo is a good way to start getting rid of that decal perfection.
3) Combined with a peeling paint tiled map, we’re starting to get something a bit more grungy…but it’s too exaggerated. It’s also inconsistent with the physical way the car would show wear and tear, since it’s most likely caused by debris hitting it from the front, not the side.
4) So we come up with a correction to make the wear more subtle and consistent, by simply erasing it from the middle of the logo and reducing any excessive grunge patterns. Finally, adding some color variation will make the look more believable.
5) Once we are happy with our Diffuse Color, we can now look into setting up EdgeColor and Roughness, making choices which reflect what we’ve learned above about wear and tear and the physics of a car.
Before creating your EdgeColor and Roughness channels, make sure you are working in a scalar color mode to ensure more predictable painting and color interpolation results. Your Diffuse color can be converted to scalar using a Color to Scalar node.
Mari’s viewport will give you a rough idea of how your shader is going to react to light, however it’s not a physical and raytraced result. To make sure we’re satisfied with our textures, we can expect some back and forth between Mari and RenderMan until we find the right material settings.
When your project reaches the point where it gets laggy, hard to navigate, and the map Export takes ages, you should look into making a Bake point Node placed just before your channel.
By pressing the Bake button, you allow Mari to cache all the work you have made in that node network, which will greatly increase the global performance.
Thanks to the time spent back and forth between Mari and RenderMan, we only have to do some finishing touches at this point, such as tweaking the strength of the Bump Nodes or the Fuzz Cone Angle used to simulate the dust.
Rendering realistic glass can sometimes be a struggle because its transparency makes your hard detailing work disappear. However there are a couple of tricks to make the most out of your creative choices...
1) By default, a basic glass shader can appear extremely boring…
2) To start, create some light color variations in your glass, and use this to bring back some slight amount of diffuse to your glass material, which will simulate worn glass.
3) When working with coloured glass, iridescence is always something worth experimenting with, for example, some cars ship with slight tinting, which over time give out slight color gradients when the light distorts as it refracts. Here, very little amounts of iridescence (physical mode) have been used to create some interesting colors in the reflections.
4) And finally, some work with the Bump Nodes allows you to break the perfect smoothness of the glass. One bump node into the Glass Bump Normal channel and a Bump Roughness usually improve the glass realism by creating surface imperfections and scratches.
5) However, you always have to look out for the values used since a glass shader can easily end up with an overpowered Bump ruining the whole shader.
Below is the pattern network used to make the glass shader:
When it comes to lighting, it is always worthwhile to take the time to look for references. Even when RenderMan produces very physically accurate results, the lights need to be set up in a coherent manner or the overall photography can get very messy and unpleasant.
Since this is a Vehicle Showroom project, the main inspirations were car ads and HBO’s Westworld opening credits:
To get started, it's much easier to light a scene with a neutral gray PxrSurface with a bit of Specular Edge. This helps visualize values, silhouettes, and the specular reflections produced by the lighting you’ve set up without having to judge competing color or texture values.
An important thing to do when blocking your lighting, is to define the lighting direction and color for the key light. This light will give the primary shape to our car.
After this choice has been made, we can set up an Environment Light to bring some color to our reflections. This is a good starting point to later refine and discover what can be done to enhance our image.
One thing which helps bring realism in a lighting setup is to use IES profiles. These are photometric data distribution maps…or realistic light distribution patterns from real light bulb manufacturers.
Note that lighting intensity will change with different IES profiles, so think of this before you start lighting.
There’s an IES profile pack ready to go on the RenderMan website, check it out:
The classic RenderMan RectLight simulates a traditional softbox rectangle, which is more than enough in most cases. However when a light is going to be seen in a reflection, it can be interesting to use an HDR texture map in your light’s Color Map channel. This will greatly improve that infamous “perfect rectangle” in reflections.
In lighting, cheating is allowed and often highly endorsed… as long you don’t get caught!
It can be a dreadful struggle to produce appealing images if you remain entirely physically accurate, so to give ourselves some creative freedom, we can use light linking, light refining, and light filters. All these non-destructive techniques are very common in film production, where a director will ask you to remove a certain reflection from the shot, color a light, or reduce the lighting intensity in an arbitrary corner of a room ... and most importantly without affecting other artists working on the same sequence.
Now that we’ve set up our key light rig, we have something that looks like this:
The kicker lights are doing their job, outlining the most interesting shapes of this angle of the Falco Rosso. However, if you watch closely under the vehicle, you’ll see very sharp shadows indicating an upward light source which completely contradicts our visible light source.
This shadow is being created by our cheat lights and thankfully their unwanted presence can be easily fixed using light linking…
In Maya’s very handy Light Linking Relationship Editor you can toggle which light does or doesn’t illuminate an object of your choice. However when your scene gets a bit complex, the panel struggles to refresh, so don’t hesitate to close and re-open the panel when things are getting unpredictable.
Now that we have unlinked our bounce lights from the ground, the Falco Rosso will no longer cast unwanted shadows. When we are finally happy with the tweaking of each light, we can re-activate the whole lighting rig to understand contrast patterns, highlights, and the overall storytelling of our image.
Once the lighting and the shaders are good to go, it’s time to dive deep into rendering our final images, which we hope to refine in Nuke for the final look.
Making sure we’re using reasonable sampling settings is crucial to keeping rendering times efficient. These settings worked well for this project:
Because this scene is very dark, the adaptive sampling in RenderMan was struggling to properly sample the darkest areas. This was exacerbated by using small cone angles in our back wall rect lights, which resulted in artifacts.
To clean things up, the most significant changes we made were:
The compositing was straightforward and photographic effects were added to simulate a real lens and camera sensor. One of the nice tricks is adding a bit of grain to avoid color banding when color grading. This is better than color dithering if we want a natural film aesthetic...but don't overdo it!
Another very interesting thing to do when having such strong highlights is to experiment with photographic aberration effects. One of them is the halation of the highlights which can bring back some color in completely white highlights.
This effect can be achieved by using a soften Node that is only applied to the red layer, but this is one of those effects that should be used with moderation and remain subtle:
After a bit of flaring and glow to appreciate those highlights ... voilà! We're all set!