Interesting post from AnswerHub on how to setup a Layer Car Paint shader

Stimpanzee, thank you for tutorial. Material looks great! But i have some trouble with reflection after packaging. I found nodes, that give this problem. I am asked this question here but dont have any answer. Have anybody tried to package this(or material that using cubemap generated by SceneCaptureCUbe) material in 4.9 (in another version i don’t tried to package)?

Hey Stimpanzee I think you will enjoy this.

For an epic friday project a couple months ago I added a new secondary bottom normal map input to the clear coat shading model so you can get accurate shading for carbon fiber substrate as well as attempt to create metallic flakes using a noisy normal. It is not checked in yet (it needs to go through code review as I am not a full fledged coder) but there is a chance this will make it in by 4.11 or so. Currently this is implemented as a project setting that has to be enabled since there is some rendering overhead any time you introduce more dynamic branching into the deferred rendering path.



quick attempt at flakes with a normal map (tempAA is off since tempAA kind of removes the sparkles unfortunately):

The basic gist of how its done:
-New normal map input via “Custom Output” node (same system used for landscape grass)
-Normalmap is packed into gbuffer using vector to octahedron since we only have 2 spare gbuffer channels to store in (custom data had a single channel left and opacity). Note that this packed normal is 8-bit which is why I chose to make the bottom normal the secondary rather than the top (top requires full precision for smooth vertex normals).
-Still in the bass pass, the clearcoat mask value is packed as 7-bit and if there has been a custom-output clearcoat bottom normal node placed, write a 1 into the free bit in CC mask, else write a 0.
-Then its a branched IF inside of the clearcoat shading model that unpacks the bit from the clearcoat mask. If the bit is 0, do the standard clearcoat shader. If the bit is 1, do the extra work for the bottom normal.


I actually was going to request this feature be added to clear coat, but I thought you guys had more important things to do (this was back around 4.5’s release). Thank you so much!

Out of curiosity, how much overhead are we talking?

I have not had time to test it for performance since messing with it. It can be difficult to say though since this kind of overhead cost can be very platform specific. Sometimes the overhead is merely from having more temporary variables in the overall shader file which even if many of them are not used (due to branch always being disabled etc), can cause the GPU to process things less efficiently. But sometimes that cost may only show up on ps4 for instance. In practice on PC with a decent video card it is probably hard to measure the cost since it will be very small. But when enabled, it makes all clearcoat materials go up in instruction count a bit. I can’t remember exactly how much but it wasn’t double or anything crazy. If you enable it in project settings but don’t use the bottom normal, it will still add some cost to the clear coat deferred shading since it has to check if the pixels encoded the bottom normal mask. For materials that do not use it, it will not really do that much extra work but the extra variables in the shader may cost something small.

GPUs try to parallelize things they will ‘make room’ for variables they don’t know they won’t need which is why unused extra variables can hurt in some cases.

This is fantastic, Ryan! You are the man!

This is exactly what I was hoping to see one day. The cost of running a scene capture has always been the biggest drawback of my system, but it was impossible to achieve the subsurface details without the multi-layered approach. Replacing the scene capture with your new method will cut performance considerably, and retain the eye candy!

I will have to revisit my materials and incorporate your method for the standard reflections model. Your results already match the quality I was able to achieve! Whatever performance hit it brings will certainly be less of a blow than rendering a separate 360.

Your solution is very clever, but it’s a little over my head! haha. I need to buckle down and get back into advanced material creation. Still lots to learn!

Hey Cyber Katana,

I believe the issue you are running into has to do with the Scene Capture Actor, within your scene. By default the actor is set to “Capture Every Frame.” You can find that check box within the details panel.

After you have built your project, and the surface turns green, it means that the scene capture actor is not running. The “Cube Render Target” texture is returning a null, which in this case is green.

There are two solutions:
#1 - If you want the scene capture actor to render reflections for every frame - make sure the check-box for “Capture Every Frame” is checked on.
#2 - If you would like the reflections to be static, you can right click on the “Cube Render Target” and select “Create Static Texture.” Then all you need to do is replace the Cube Render Target in your material with the new static texture.

**Note: **Scene Capture Actors are extremely expensive to use realtime (capture every frame) but there are ways to improve it’s performance cost. Check out the video I have here for more info on optimization:Youtube Video

You are right! After making static texture material not green anemore. Thank you very much!

Thanks for the Great material, I followed your tutorial and made the entire material from scratch, Even though it took me two days for it, I learned a lot!
But inbetween, I got an error saying Warning: Compilation errors in this material “*the current material has compilation errors, so it will not render correctly in feature level ES2. Are you sure you wish to continue? *”

What am i missing? and how to rectify this error?

Hey ifthikhar,

Usually I see this error when there is something wrong with the texture parameter, or texture sample node. But it’s possible that your error might be coming from somewhere else.

When you see the error, does the material editor point out a particular node which is causing the error?


I am interested in your material but I would like to know if it works on 4.12. I understand that there are many changes in 4.12 that impact the material, from the dual normal clear coat shading model to the custom resolution of the reflection captures … what are your plans for the material?

Hey rranon,

There is a big update coming soon!

-New optimized variants of each material (Unique VR ready materials)
-Support for multiple normal maps, thanks to the improved clear coat method
-New video tutorial explaining the new clear coat method and getting the most out of it, including the improved reflection capture actors.
-Finally, a new tutorial on practical applications: A comprehensive walk-though of my techniques for matching reference and achieving photo-realism.

I’m currently wrapping up my own VR automotive project, but I should have time to update the marketplace package this weekend. (fingers crossed)
The tutorials should be ready the following week.


I could need your materials for a project I am doing now, so the sooner you update to 4.12, the better :slight_smile:

I noticed you updated the materials to 4.12 and I bought them.
A few questions:

  • what are the differences between the VR and the non VR materials?
  • what are the differences between e.g. car_paint_s and car_paint_s_s?
  • have you tried using your materials on mobile? if yes, which ones would you suggest?

Thanks and big ups for the very nice work!


-The VR materials have had a majority of the parameters removed for the highest level of performance. Car paint materials are inherently complex because of the multiple layers in real world car paint, but the VR versions of these materials have the fewest operations to achieve the result.

-The first S in the name denotes that the material is part of the “standard reflections” group. Those materials are fully PBR safe and take advantage of UE4’s built-in reflection systems. CarPaint_R is in the “Reflections” group. It uses a complex masking system and scene capture cubes to render the top clear coat layer in the paint.

The second “s” in car_paint_S_S stands for simple. Those materials are simplified versions and have had the complex masking and rust systems removed. car_paint_s_s was built because, more often than not, developers don’t need rust or pin stripes. If you create a material instance from one of the “simple” paint master materials, you will notice a reduction in parameters. I haven’t counted, but the simple versions of the car paint have somewhere between 20-40% fewer parameters to adjust.

-The car paint materials only take advantage of the standard set of inputs: BaseColor, Roughness, Metallic, Specular, Normal, Emissive
All of the materials are relatively expensive in compute performance, but they will all run in ES2. I would recommend using the VR versions of either the “R” reflections or “S” standard car paints. Because the VR variants offer the best performance, you won’t have to sacrifice many other features to get it running on mobile.

Let me know if you have any more questions! The tutorials are still coming along and should be out soon!


It has been a long time since I’ve created the car paint materials but I have not had the chance to show off how I use them! In the past year and a half I’ve used my paint system for projects and VR configurators for the likes of Porsche, Alfa Romeo, Audi, Volkswagen, and most recently Toyota.

Now you can see my latest work in video form! For this piece, I was responsible for: rendering/editing, materials, and a good majority of the lighting. Rendering 360s out of Unreal has been a fun challenge. Just another example of how versatile it is.

Is that Michio Kaku, the physicist?!

Sure is! I didn’t get to meet with him, unfortunately.

Not Dead Yet

Hey Devs!

Sorry it’s been such a long time since I have had any new useful information on car paint. Thankfully, Epic has put out a new shader pack which includes some car paint materials. They look pretty good and it takes a totally different approach to do it! The pack has a ton of other stuff too: paint, leather, metals, and others. If you haven’t checked it out yet, you can download it now for free!

The car paint materials use some clever functions to boost the visual “glint” effect of car paint. If I can get some free time soon, I would like to put together a video which deconstructs the materials. Keep an eye out for that.

Also, new news for my material pack on the marketplace. The price has been reduced!!! To stay competitive with Epic’s own content, I decided to lower the price of my materials after more than a year on the marketplace. I still guarantee the materials are worth the cost. Their versatility and visual quality are still unmatched, but you can’t beat free, so I did my best to get closer to it. Of course you can always check out my tutorial on building a basic version of the materials. (for free)

And because eye candy is fun, I thought I would throw some new images up. Enjoy!


you mentioned a tutorial a while ago on matching reference materials, did you release it?


I have not recorded one yet, but I would be happy to whip one up. What kind of car/paint style would you like to see?