Ronan Mahon shared a lot of details behind his texturing and lighting of the car within X-TAON Art Car competition organized by Allegorithmic.
My name is Ronan Mahon and I’m a freelance artist working on video games.
I was trained in classical 2D hand-drawing and 3D animation and spent a few years in my home town of Dublin, Ireland working in architectural visualization as a 3D artist. What started as a small group of graduates inside a builder’s cabin inside a jam factory (no joke) became a decent studio with a legit office (not in a jam factory). However, it had always been my dream to work in the video games industry and so after 3 years, I made the leap from Ireland, where there was little or no perspective for AAA artists, over to the UK to work as an environment artist.
I worked as an environment artist in Free Radical Design on TimeSplitters 4 and Star Wars Battlefront 4 until the studio unfortunately shut. After the studio closed I moved to Oxford where I had the good fortune to meet my wife and also work at Rebellion Developments. While at Rebellion I met some great artists and worked on Aliens vs Predator, NeverDead and a few other titles.
I have spent the last 7 years working in Rocksteady Studios in London on all things Batman Arkham related. I was fortunate enough to work on some really beautiful video game moments with an awesome team. I was entrusted to create some really iconic environments, places such as Oracle’s Clocktower, the Mad Hatters popup book and classic moments such as recreating The Killing Joke to name but a few.
Working at Rocksteady was a dream that came true. Everyone in the studio, artists included, is expected to bring ideas to the table and then entrusted to follow up by gathering the people and the effort necessary together to see those ideas brought to life. It’s a special studio filled with world-class talent and directed by Sefton Hill and Jamie Walker, two of the most genuine, hard-working and approachable people I’ve ever had the pleasure to work for in my career.
London is like most major cities, however, expensive and a difficult place to raise a young family. My wife and I made the tough decision after 7 years to move to Germany to bring up our two young children and to have more family support around us. I’ve been working freelance as a 3D Artist for the games industry for the last six months and it has opened up a whole new challenge and excitement in my work. My office isn’t quite on par with Rocksteady’s Batcave though!
With a young family and a freelance business to run I wanted to enter the X-TAON Art Car competition because I’ve not had the chance to create car artwork before, plus the car model Allegorithmic provided looked like an awesome canvas. I was late to the party but I still had two weeks left in the 3-week deadline. Competitions provide a great learning opportunity and a good atmosphere to push yourself and get inspired by other artists as well as making new contacts. Whenever I’ve had the spare time to enter one I’ve always gotten a lot out of the experience.
The requirements were to create an Art Car textured in Substance Painter. From the entry form: “The art car is a collaboration usually between a car constructor and a famous artist. One of the most iconic art cars was the 1979 BMW M1, painted by Andy Warhol.” The emphasis was on being creative and the theme was wide open to the artist.
I recently completed a scanning project (Substance Designer and Power Tools) and had really enjoyed getting to know Substance Designer better. My theme for the art car entry was based on the node graph in Substance Designer – how any one node in the graph can be used to create an explosion of art and creativity. My aim was to portray the node graph in a number of ways. Firstly by showing the car transform from something understated and sleek to something loud, neon and colorful. I knew I would be depicting the node graph in an abstract way and I felt like the Outrun/Synthwave mood and aesthetic would really compliment that look. Finally, I wanted to give the car life, a character and a short story to hang the project on so that I would have direction in my thinking beyond the mechanics of making nice materials.
I knew that for Midnight I wanted to shoot a short video of the car in Unreal 4 to show its story so getting everything set up in the engine was where I started the project, even before starting to texture. Substance Painter can live link to Unreal 4 so you can paint in Substance and see it instantly update in the engine. With this set up I could see my artwork on location both in iRay and Unreal at the same time and tackle the project from a good vantage point. I feel by viewing your artwork in its final format you end up with fewer surprises and the end result is a more focused and polished piece.
As I mentioned the wrap on the car is an abstract representation of the node graph in Substance Designer in an 80’s Synthwave/Outrun style. There are two focal points that represent a “node” on the car. One is the Substance Painter hood logo and the other is the sunset in the abstract city on the roof. Each of them is an origin point on the car from which everything else explodes and flows from. With that in mind, I started drawing lines over the car from these points in order to portray the connections between nodes in Substance Designer.
I soon found, however, that these lines quickly clashed with the inherent shapes and flowing design of the car, or even worse the dominated the car’s beautiful form and became distracting like dazzle camouflage (see early concepts and test renders). After a few attempts of drawing on the car, I went back a step and ended up embracing the forms the car was giving me by running the car’s thickness and ambient occlusion meshmaps through Edge Detect in Substance Designer.
I created a filter which fed either the thickness or AO meshmap into a Posterize node (free on Substance Share by “SomeGuy”) which separates the greyscale gradient of the map into a number of steps, followed by an edge detect node to create lines on the meeting points of the steps. This produced an effect like contour lines running over the car. These lines were nicely concentrated around points of interest and were less present on the bigger, flatter surfaces. I felt like this represented the connections of a Substance node graph well while still being sympathetic to the car. You can download “Contour Lines” for free for Substance Painter and Designer on Substance Share.
The rest of the texturing was a combination of hand-painting in details like the sunset city graph on the back of the car and using generators and masks to build up wear and rain on the bodywork. I didn’t want the car to be a super pristine showroom car – I wanted it to feel like it had just been out for a ride that night and that maybe the owner couldn’t help but take it out again. Building up material layers in Painter is best done chronologically. In Midnight’s case for the bodywork from bottom to top the layer structure was:
- UV emissive paint
- Dust/dirt and any scratches/weathering
- Rain and wetness
For the rain and dirt, one of a number of masks I used was a black mask with a “Light” generator shining down the car from front to back. This helped isolate surfaces that would get hit head-on by dirt and rain as the car moves forward and occlude surfaces which weren’t. Another mask I used was a world space normal map to mask. With this, I could mask a small round stationary droplet sitting on an upward facing surface, a rivulet like a streak running down the side of the car as gravity took over and little to no wetness on the undersides of the car surfaces.
From working in the video games industry and on environments I’m using as few texture sets as possible for performance reasons, however, the XTAON model came with 6 sets. I wanted to maintain a high enough resolution for the close-ups I had in mind and I didn’t want to resort to shader detailing techniques as the competition is judged predominantly based on your work in Painter. For that reason, I needed to keep each of these 6 texture sets. Having these 6 texture sets to manage was a new challenge for me as I like to work in a way where I have simple single points of control for key aspects of my artwork. This is why I always use Master Materials and parenting in Unreal or instancing in Painter and 3ds Max. If I decide to change the base coat material for the car, for example, I don’t want to have to juggle 4 other sets and change it in each and have them out of sync. I want to change it in one place and have it update the whole car.
I needed about 5 days of texturing the car to realize that my organization had gotten away from me and I was drowning in confusing and out of sync layers across multiple texture sets. I stopped, did a little research and then threw away my scene. Why? I came across this great article on Substance Painter organization by Manuel Armonio.
He makes a couple of really great points – read his article as it explains in more detail. Use groups instead of layers as the equivalent of materials, for example, a group called BaseCarMetal. This allows you to build the detail into the “material” as a group in a much more controlled way than relying on a single fill layer. Here is a key one: instantiate these groups across your texture sets, do not instantiate a single fill layer from within the group. This was one of the mistakes I was making. By Instantiating the group it allows you to keep adding lots of nice detail in your parent texture set and see the result update across the child instances in other sets. Just instantiating a single layer is much more limited in its use and you end up needing to create and maintain a lot more individual instances.
When Painter creates a new instance in another texture set it just puts it on top of the stack of the child texture sets, so you can end up with strange results if your layer hierarchy is out of sync across texture sets. The less individual instances you have to manage the better, and instancing groups helps with this. With Midnight, I probably had 5 or 6 instanced groups across the whole model.
Unfortunately, one of the current limitations of instances in Substance Painter is that you can only hand paint on the Master Instance. However, a trick if you just need to hand-paint a mask on the child instance is to drop the child instance into a new Group on the Texture Set in question. You can now happily paint and mask this new group – or you can add Generators and the usual great Substance Painter masking features and it will mask the child instance. The child instance will still inherit all of the changes from the master. Once I had started again with these organizational best practices in mind it all went a lot smoother and I quickly caught up to where I had left off.
There are a couple of little easter eggs in the texturing. The license plate is a replica from the DeLorean in Back to the Future and reads “Generator” – named after the power that Substance generators bring to your texturing. The car’s name “Midnight” is embossed on the tires and so called after the band “The Midnight” that I was listening to so much during this project. I had an idea to turn a sound wave from one of the songs into a pattern but never got the chance to try it! My wife and two little ones’ names are on the car too.
I find music also inspires me a lot while I work. I’m the happiest when I have a great new album to listen to and a challenge or idea in mind. I try not to get too caught up in technique or the mechanism of making art, but instead focus on the story I’m trying to tell or the mood I’m trying to make the viewer feel. With the art car Midnight, I was unsurprisingly listening to The Midnight – their music is beautiful 80’s Outrun-esque nostalgic Synthwave and it perfectly captured the mood I was going for.
I remember during the project I was working on the car late one night – the golden hours when you have little children and a business to run. I had reached my limits of concentration and just as I fell into bed I posted a work in progress render to Twitter. Cut to 2 AM night feed for my new baby son, I was bleary-eyed and worse for wear only to see The Midnight (the band) see my tweet. They said the car looked awesome and shared it with their followers on their Instagram. Being exhausted and having listened to them on loop for the last few hours – I have to say that was a really surreal but perfect moment!
The car comes to life under UV light. I found lots of nice reference for people wearing body paint and blacklight usage and this is the look I went for with the glowing patterns. I wanted to give UV paint a bit more depth and the car to change and morph as you looked at it. To achieve this I multiplied the emissive texture of the materials by a Fresnel node in the material. This makes the glow strongest when viewed faced on and softly falloff as the normals of the surface face away from the viewer. The emissive texture is made up of three layers: a soft and flame-like base (generator and procedural noises), next layer is the hand-painted nodes, pattern and the contour lines (filter) and finally over the top is a blue wash that hides and reveals parts of the pattern (generator and procedural noises).
Midnight features two main base materials: regular car paint and chrome for accents. Early in the project, the car was made of metal but I found that even though it looked great in some angles the car was more difficult to light and that I would lose the highlights and shapes of the car easily. Adding the colored emissive of the UV patterns over the top of the metal would often give a confusing look when transitioning between the metallic and non-metallic parts of the PBR material. In the end, I created deep charcoal with blue mixed by generator car paint. I used the nice Car Solid Paint material that was given out for free by Allegorithmic during the competition – it’s a good idea to pick your battles and the materials in the Painter shelf provide great starting points. Chrome, rubber and a little carbon fiber were used to highlight and accent details in the car. I also added little details like frit around the windows and used the 3D Distance mask to fake a soft gradient like the interior of a car on the opaque windows. Binding it all together is some subtle wear and tear and the rain over the top.
The headlights are relatively simple and clean. The lights themselves are a glossy milk-white surface with a slightly blue emissive and a subtle fresnel falloff. I added a dark matt plastic to the light housing so that the lovely square shape of the emissive bulb would stand out from its base. Finally, around the edge, there is a reflective mirror-like material to catch highlights and reflect the light from the bulbs. I added some facet lines with height driven by the Tile Generator to add detail and a rubber trim where the light it meets the glass.
What I realized early on in the project is that lighting the cars is difficult! Initially, I tried lighting the car as I would normally light any scene. I’ve always enjoyed lighting, in most companies I’ve worked the environment artist usually gets to set the initial mood lighting. After stumbling around a bit and not really understanding my lighting issues and getting mixed results I stopped messing around. I realized I didn’t know what I was doing and did a bit of research. I watched some great videos and articles on how real cars are photographed and because I’m working PBR – most of the real world rules apply.
The main takeaway I learned from lighting a car is that you don’t light the car – you light the environment around it. A car is a shiny chrome ball and shining light directly onto it just gives you really bright specular spots and not a whole lot else!
What I found from my research was that to light a car well your key lights should generally be large soft gradient light sources, that you should pay attention to lighting what the car is reflecting and not the car itself. You should then control these lights and what is reflected in the environment in such a way as to bring out the important curves and the best details of the car. This process is called light shaping by car photographers. As 3D artists, we also have it easier than the real world photographers because we can make anything emissive or bend the world or environment map into any shape. We also don’t cast a reflection on the car, some of the car photography articles I read mentioned having to hide the cameraman’s reflection in the door creases!
Here are a few links I found helpful:
- How to Light a Car by Bruce Logan
- Bill Bennett, ASC, Lighting Cars and Other Shiny Things – DCS 2015 Lighting Expo
- Tutorial: Basic Studio Lighting for Automotive CGI Artists by Apex Automative
I started with big flat reflectors (nearly white static surfaces) positioned above the car in Unreal to bounce indirect light from spotlights down onto the car. This worked quite well but I started to run into issues with having large cones from the spotlights intersecting the scene in a poor way. I made the switch to an emissive material with soft gradients driven by a mixture of linear gradient nodes in the Unreal material editor. Don’t try to make soft gradients like this with a texture as you will always get banding when you play with the emissive intensity later. As well as that your texture would have to be massive and 16 bit to achieve a gradient nearly soft enough. I set the emissive meshes to “use emissive for static lighting” and put a lightmass portal around each. The lightmass portal will stop you getting splotchy artifacts from photons and Lightmass will treat these surfaces as a source of light.
As reflection quality is important for a good looking car I bumped the reflection capture cubemap resolution up to 1024 and set the car mesh to “Use High Precision Tangent Basis”. Turning on this option stores the mesh tangents as 16 bits per channel vectors so you get a much more accurate reflection, important for some of the really close shots with dense mesh such as the lights and the subtle plane changes in the bodywork surface.
I also built a 3D “Cyclorama” in Max which is a stage which photographers often use to give a lovely soft infinite horizon to a scene. It also allows you to make it the scene small enough to bounce lots of indirect light around where needed. Think of it as an inside out chamfered box with large soft fillets so that you don’t end up with any harsh lines or shadows in your backdrop.
Although I would be making static still renders, I also knew I was going to make a video so I had to keep this in mind when lighting the Midnight. It’s more difficult to light a car for video than a still image because large light sources and reflectors can end up in the frame while you move the camera around the car. These light sources and reflectors don’t always look appealing and can be a distraction from the car. I was using a combination of screen space reflections and reflection capture actors in my scene. To supplement the visible reflectors/light sources you can use “invisible” ones like an HDRI reflection cubemap (there are several great free HDRI cubemap sources online such as hdrihaven.com) or in my case I used the light shape parameters on spotlights in Unreal.
With the shape parameters on lights, you can give your light source radius and length as well as control the softness of the source. This was great for running a large stripe of the reflected light source along the side of “Midnight” and accentuate the shoulder of the car nicely. These light source shapes are then either picked up by your reflection capture source if the light is set to static or dynamically visible on the car if stationary or movable. Once again you seeing the source of the light reflected in the car’s surfaces and so are concerned about the lighting the world around the car and not the car itself.
Shooting the Video
The second success for me was shooting the story video completely in Unreal. I wanted to make a video to convey the story better than just a still render could. I’ve done a bit more video work recently (see my Fabric video here) but I would usually record individual shots and then edit them together afterward in a program like Adobe Premiere.
This time I wanted to stay in Unreal and so embraced sequencer and learned camera cut tracks, transitions and improved my camerawork. I even named my cameras something other than CineCamAsdf111Final_the realOne! I used 3ds Max to create a looping Handycam effect to layer on my camera’s in Unreal so that they wouldn’t appear too perfect. The effect was made by applying a looping noise to a transform in the curve editor in Max and importing it as a camera anim asset. The Handycam effect is quite strong when initially applied but this allows you to control the effect on your camera keyframes in Unreal by adjusting the Play Scale and Play Rate to something quite subtle. Just remember to deactivate the Handycam camera anim track if you change your camera transform keys as Unreal goes a bit loopy if you don’t! I enjoyed being able to show the story and character of the car coming to life. Because time was short I used whatever was to hand and only worked on what was in the shot – the Unreal mannequin was playing his jump anim while getting into the car (with his head smashed through the roof).
My scene ran at 120fps real-time in Unreal on my 1440p monitors but I wanted to export my video at 4K. In the end, I used the render to movie feature at 30fps in sequencer with the frames rendered as images because for some reason I would get the odd stutter if I rendered to an AVI. I had the music I was using ( “Lake George” – by Will Rosati free from the Youtube Audio Library) on a track in Unreal so that I could compose my shots, however, Unreal doesn’t seem to export audio very well. Instead, I put the image sequence to audio in Adobe Premiere and exported the final movie in 4K from there. After struggling with the right export settings for 4K I came across this awesome playlist of Premiere export settings by Matt Johnson. He does a perfect job of explaining everything in just a few short tutorials.
For me, there were three biggest successes of Midnight. Firstly there was what I learned about how to light a car or shiny object. Secondly, it was telling a story through the short video shot in Unreal. Finally, I learned a lot about my Painter workflow and how I could improve it.
Regardless of the outcome of the competition, I feel like it was such a great project to work on. It was short and small enough to be manageable for me while still learning lots of new skills. I came across plenty of great new artists through their submissions – you should check out other cars on Artstation. Big thanks to the guys at Allegorithmic for organizing the competition, car designer Takumi Yamamoto and 3D modeler Frédéric Gasson for creating the car and 80 Level for the honor of a feature.