Skins and Shaders for Cars

Table of Contents

Part 1 - Skin Creation

Materials You Need To Receive From The Car Modelers

  • The devmode version of the car, to be loaded in the viewer (if without physics) or devmode (if with physics)
  • An export of the body in .3DS format/Max Coordinates, so that you can import the 3D model in Photoshop CC
  • A TIFF/TGA storing the UVW unwrap wireframe in native 4096x4096 px resolution.
  • A TIFF/TGA storing the Ambient Occlusion Baking to be mixed in the skin, in native 4096x4096 px resolution.

Software Requirements;

  • Photoshop CC
  • Illustrator CC (or any other vector graphic design software)
  • rFactor 2 DevMode to preview the output

Source File Requirements;

  • .PSD file @ 4096x4096 px / 72dpi
  • Any data you collected for the task (logos, stickers, fonts etc) stored into properly organized folders
  • Any font you collected for the task, if commercial, please, contact the Studio for approval

Destination File Requirements;

  • DXT5/BC3 - Interpolated alpha (.dds) – with at least 10 Mips levels

Collect the data for the task;

Usually a great skin starts from a good image/data gathering

  • Collect all the logos and decals image in a project folder for any future reference and usage
  • Prefer high resolution logos with transparency.
  • Prefer trustful sources, like original owner web sites
  • Be sure the logo you’re collecting it’s exactly the one used in the livery
  • Be sure all the RGBs colors are matching the original logo
  • Be sure your Logo sources are in RGB format. If not, proceed with a conversion
  • If you can’t find the Logo, you can build it from scratch, using vectors and fonts, in Illustrator

Maintain a stable pixel/texel ratio;

Another secret for a good skin is to maintain a stable pixel resolution between various elements

  • Prefer Smart Objects to Rasterized Layers for a nondestructive workflow
  • Never scale up a raster layer in the skin. Always starts from an higher (or same) resolution element.
  • When scaling down a raster layer, always use the Bicubic Sharper Resampling Algo
  • Always prefer to draw the main paint scheme in Illustrator (or any other Vector Graphics Software)
  • If you draw the paint scheme with vectors, keep a source file for that job, for any future usage

Work with Layers and Groups;

Always good to produce well organized PSD files. This helps any future usage and does improve any debug/update process.

  • You’ll be likely using lots of Layers so take advantage of Layer Groups, which act as folders for layers you choose.
  • Use a Group for any major aspect of your skin, like “Logo Decals”/”Common Stickers”/”Carbon Bits”/”AO Map” etc…

Always prefer Layer Masks to the Eraser Tool;

Always good to work nondestructive as much as possible. This helps any future modification and does improve debug/update process.

  • Instead of deleting parts of your elements to match the original skin, use layer masks
  • If you have a chunk of elements that needs to be masked all together, always prefer a Layer Group Mask

How to manage the Ambient Occlusion layer;

Current shader model does still require for an AO map (our car art team will be providing that map), baked into the diffuse map

  • Use the AO map in the Diffuse map only (remove from the reflection/specular maps)
  • Be sure the blending is a Multiply, happening on top of the stack (to be applied to the entire skin)
  • Depending on the AO strenght, keep a subtle presence of that AO map. We don’t want overdone presence of that map so typically a range between 20 and 40% it’s enough.

Always use extra padding around your islands for MIP maps;

Good and stable Mip Maps are requiring padding

  • Be sure that you have (at least) 5/10px of extra padding around color islands to avoid pixel glitches on lower Mip Maps

Check your Skin elements are all Albedo compliant;

The graphic engine and tonemapper, does require colors to be Albedo compliant to stay in the correct and available range

  • Normalize all your elements to be Albedo compliant
  • You can use the Photoshop Histogram to check that the Median value of your elements and colors it’s not exceeding the range
  • The RGB allowed range starts from 20,20,20 for pure Blacks to 200,200,200 for pure Whites. Exceeding the range will produce clipped colors and flat looking models
  • You can either pre-Normalize all your elements, prior placing those in the skin layers, or normalize when placed
  • Once you are sure all your layers/elements are Albedo compliant, you can add an overall Level Adjustment Layers, on top of the entire stack, so that you can fine tune the overall output
  • Instead of raster layers for base colors you could use a Layer Style – Color Overlay applied to those parts. This would allow you to choose and change the base color Realtime without any destructive process involved. Very useful for Albedo balancing in a nested stack of layers
  • For more generic information about albedo; GUIDELINES FOR ARTISTS - DX11 and PostFX Art Integration (ongoing wip)

Create the reflection map;

Our car shader is requiring for a reflection map, which is defining how much the different bits are reflecting the cubmap/environment

  • White is producing a 100% glossy part
  • Black is producing a 0% glossy part = Matte
  • Create a specific Layer Group to host all parts of the mask composing the Reflection Map. This does give you total control on fine tuning the map during the various stage of the development and testing
  • Follow the Carbody Shader guidelines for that specific task; (Part 2 of this document)
  • Copy Merge and Paste the Reflection Map into the Alpha Channel
  • Remember to save the Skin in DXT5/BC3 - Interpolated Alpha, to store the Alpha in the final .dds texture

Create the specular map;

Our car shader is requiring for a global specular map, which is defining how much sun reflection the car body has

  • White is producing a 100% sun specular strength (glossy shiny)
  • Black is producing a 0% sun specular strength (totally matte with no sun)
  • Create a specific Layer Group to host all parts of the mask composing the Specular Map. This does give you total control on fine tuning the map during the various stage of the development and testing
  • This is a GLOBAL map, not linked to specific liveries/skins, so it needs to host only common parts
  • Follow the Carbody Shader guidelines for that specific task; (Part 2 of this document)
  • Save the specular map in DXT5/BC3

Part 2 - Body Shader

Basic Terminology and practices

  • Reflection Map; a raster image (image, texture and/or alpha channel in a texture) which is used to drive specific pixel information to the shaders. This kind of maps should not have any overbaked shading, baked ambient occlusion etc. because each pixel color it’s being used by the shader to render a material reflectivity, and the baking it’s affecting the correctness of the material simulation (see Pict. 1a). Car Normal maps, Reflection maps and also Specular maps (with some exceptions) are in fact more Data than art. From this concept depends the 70/80% of the final quality of the simulated material so they are an aspect to care about, especially to achieve constancy in the material simulation. For these reasons, most of the time, cars reflection maps, should be just a gray-scaled set of flat colored islands and masks, describing the various section of the main car body livery (see Pict. 1b). Also no dark areas (background) should be present between the different islands, because this could be a source of jaggies for lower MIPs, especially when not enough edge padding has been rendered around the UV map islands. Because of that, always use a flat colored canvas and then mask the areas you want to be different from the main color, in terms of pure cubemap lerp (reflectivity). Example: High Gloss body; All flat white, no UV islands, and masks for those bits you want to be less reflective. It’s also important to avoid dark reflection maps for high gloss bodies, as this means overdoing with multipliers in the Fresnel section. It’s always better to keep the higher values at the top of the chain (maps), and then use multipliers and final shader settings, to control and fine tune the final output. If we start from dark maps we’ll be forced to use too high multipliers and exponentials which usually it’s the main cause for dull looking car bodies other than a possible cause of jaggies because of the clamped output.



1a; Not ideal Reflection Map; the AO/Shading bits are not a good idea in the reflection map as well as the black background. Also the main reflection pixel color is too dark for the goal.



1b
; A correct Reflection Map; the brighter pixels are for the hi gloss parts, the darker for the vinyl stickers and the carbon bits.


  • Specular Map: this is VERY like the Reflection Map, and sometimes may sounds like a bit confusing and redundant, but we have two maps for a reason. While the Reflection Map does control the cube map lerp on the body, defining the “mirror” reflections, the Specular Map does also control how much Sun reflection you have on the body of the car. Brighter pixels will result in more highlight spots and shining edges, darker will make the spots duller and the entire shape less shiny. Remember this map it’s also affecting the Cube map reflections, and for a Hi Gloss material they both (spec and ref) should use very bright pixels as a base. Specular Map in a Car Shader is also useful to add a bit of tight AO inside the various cuts (around bonnets, doors, vents, etc) to avoid generating strong highlights along very thin edges, which usually does produce jaggies around the car. The Specular Map are also important to enhance the scratches and damages on the Damage Specular Maps, or to modulate the dirt parts and any other effects we want to be “obscuring” or “removing” the main car glossy coat. As you see this is again a Data map, but some bit of Art it’s welcome to trick the eye with some nice effects but overall, the Specular Map should be consistent with the Reflection Map. For an Hi Gloss car body they should be very similar.
  • Specular Light: is the bright, shiny spot, that appear on smoother surfaces. Usually they are the color of the light, but occasionally will take on a component of the material they are reflecting. Most of the time, white it’s the color. See Specular Color and Power.
  • Diffuse Light: the light which is reflected uniformly in all directions. Defines the base shading of an object. Approximation. Must be white most of the time.
  • Ambient Light: the overall lighting of a scene. Approx. Must be white in the shader, most of the time.
  • Reflection Fresnel: Low reflective materials can show mirror-like reflection at near grazing incidence, even if that given material it’s a poor reflector at its Normal incidence. A high reflective (high gloss) car body has near-1 reflectance, which means the reflection is working very similar at all view angles. Important aspect when setting up car materials to avoid the “milky” look at near-grazing POVs. In general, the term defines how reflective a material is, depending on the angle between the surface normal vector and the view angle. Typically, the larger the angle, the more reflective a material becomes (this generally occurs on the outline of objects).
  • Specular Fresnel: This is multiplying your Specular highlight by the Fresnel calculation, so it’s important you are using all Spec Map, Spec Color and Spec Power in a correct way (as explained) before using the Fresnel variable to improve the final effect. It’s a common mistake to use dull values (dark maps, low power etc.) and then overdo with Fresnel numbers to bring back some effect. This is a wrong approach which may introduce a long series of unexpected output in the various light conditions and camera angles. (see Pict 2)

2; Various Light Components in a Rendering Engine

The Car Shader basics – Concepts & Ranges for Spec/Ref/Fresnels

  • Specular Color: Is the color of the reflected light. For a glossy car body, this should be white in the range of (200,200,200) and (180,180,180). This is technically a pure albedo number, so never exceed the (200,200,200) to avoid producing more energy than the one hitting the surface. Darkest colors are describing Non-Gloss surfaces, or dirty parts if needed.
  • Specular Power: this value does control the sun reflection spot power. Higher numbers will result in a tight and shiny spot, Lower numbers will soften the effect, producing wider and duller sun spots. High Gloss materials should be in the range of 250/350, with very bright Pixels in the Spec Map. Never use dark maps and then pushing on Spec Fresnel to bring back some highlight. Always start from a proper amount of power in the maps (brightness) and then control with Fresnel multipliers, not the opposite. Always remember the correct output starts from correct maps.
  • Specular Fresnel Minimum: this is defining the “base” amount of the sun reflection strength. For Hi Gloss surfaces (bright pixels in the Spec map) should be set between 0.01 and 0.05, if using a white base in the ref/spec maps. Be careful with this number as may easily produce clipped pixels outside the Tonemapper capabilities (clamped white spots).
  • Specular Fresnel Max (Fresnel Intensity): from 1 to 4, depending on the material (vinyl to glossy coat). A range from 3 to 3.5 it’s usually ideal for high gloss (based on white ref map)
  • Specular Fresnel Exponential: Should be 5 as per equation
  • Reflection Fresnel Minimum: from 0.01 to 0.1. This is controlling the final reflectance (based on white ref map). A range from 0.08 to 0.1 for hi gloss (based on white refmaps)
  • Reflection Fresnel Max (Fresnel Intensity): Max 0.1 for realistic looking car bodies. More than this number, will start making them “milky”.
  • Reflection Fresnel Exponential: Should be 5 as per equation. 

Shader settings in 3D Studio Max

  • Use Car body paint + damage + rain shader from gMotorMaterial list
  • Assign textures as following :
  • 1 : diffuse color ( texture map showing default paint when there is no skin loaded, alpha modulates reflections)
  • 2 : damage map (this texture blends with diffuse based on local body damages)
  • 3 : specular map (highlights, do not use fake AO, stay below 190 190 190 grey RGB value)
  • 4 : bump map (if needed, normal map overriding 3D normals. If not needed use small flat 32x32 map with ALL pixels set to R129, G128, B255).
  • 5 : cube map (set as live mapper, see settings below)
  • 6 : damage bump map (this texture blends with bump map based on local body damages)
  • 7 : this slot is used by rain fx on body, let default settings, just load a small 32x32 map so the slot doesn't stay empty. 

    Main settings for WCCARBODY material using Car body paint + damage + rain shader :


    Cube map settings :