Microscratches / Swirl marks / Spiderwebbing

Circular ‘spiderweb’ around bright highlights in the reflections, caused by microscratches catching light at different angles. We see this effect quite often on real world surfaces that have been scuffed, scratched and worn out for a while.

Over the years, I’ve tried to achieve this effect in VRay for quite a few times… unsuccessfully

After finding some leads on how to approach this on VRay forums, finally I think I’ve got a method that gives good looking results, naturally I also made a tutorial :)

First of all, forget about using a regular Bump map, it simply doesn’t look right in my experience. You need to use a Normal map to simulate those extremely tiny scratches.
This sort of map is best hand drawn in Photoshop, since you can easily make it tileable. Draw a bunch of scratches in the center of the image, making sure none of them approach the borders. Then, use Offset filter and draw a few more in the white areas. Keep doing until everything is well covered up in scratches.

Here’s a quick video on how I do it and my resulting map.

Now using the NVidia Normal Map filter, generate a Normal map.

Ok, now that we got the map, we can create our shader.
The shader we are creating is going to be pure reflection. So start with a Vray mat with pure black Diffuse, pure White Reflection and no Fresnel.

Add Normal Bump to the Bump slot and load in the map. Make sure it’s Gamma is set to 1.0 and filtering is disabled. I’ll use the strength of the Normals at 1.5

Now convert the material to VrayBlend and duplicate this first layer a few times.
For each subsequent coat layer, lower the Normal strength a bit. This will create a more gradual falloff around the highlights.
So in my example I used 1.5 for the first layer, 1.0 for the second, 0.5 for the third, and finally 0 for the fourth. This last layer gives pure, smooth reflections, without the scratches. You can adjust the blend amount of the last layer to control the strength of the scratches. Just make the pure reflection stronger to make it less worn.

So far the result looks like this:


This is basically our completed Reflection coat.

If you want to add these scratches to a material like polished plastic – it’s easy.
Create a new material, set up your diffuse color/etc and use it as the base layer in a new VrayBlend.

Now add our scratched reflection shader to the Coat slot and use a Falloff map in the blend amount slot, set it to Fresnel (1.4~3)

Ta-da! Your plastic now has a scratched up clear coat.

plastic microscratches

Same technique can be used to add these scratches to any other material. Just look out for the ones that already have strong glossy reflections – it’s best to disable them altogether and just use the coat.

Obviously there are still some things to tweak, like adjusting the normal strength in different layers or increasing the number of layers and so on, but I think this is a pretty good starting point!

Perhaps you use a different method to achieve this result? If you do, please share in the comments!

Modeling the ONYX sofa

My site keeps going down for some reason, I had to restore a backup so the comments are, unfortunately, gone.

I really love this sofa from Peugeot Design Labs. It’s a cool combo of rough, natural volcanic rock and sleek, modern carbon fiber.
Obviously, I had to try and model it in 3ds max.
I also recorded a tutorial video so you can see how I approached this subject, check it out below!

NOTE: I was not 100% satisfied with the result at the end of the video, so I went back to the save before cutting out booleans and did some quick sculpting in zbrush. Nothing fancy, just 5-10 minutes with clay brush. As you all know, 3ds max sculpting tools suck when compared to zbrush, so sometimes the model needs a little help.

Here is my final render (click to enlarge!)


Making sense of textures in Gamma 2.2 workflow

I’m pretty sure that at least 90% of you guys are using Gamma 2.2 workflow, just as you should be :)
It offers many advantages and works very well with pc monitors and human eyes.

There are a couple of problems that can arise, and quite often they are not very well explained or even mentioned.
Most of these concern the use of bitmaps and colors in materials.

The way it goes down is like this – once you set up to Gamma correct the Input, all the textures you load into max are corrected with the gamma curve.
3Ds max 2014 doesn’t even give you a choice, it does this automatically.

With most of the images this is absolutely fine, since photo-sourced textures should have the gamma correction applied…
however, there are a few special types of bitmaps that need a setting of 1.0

These are :
– B&W Maps where you want correct pixel values
– Displacement Maps
– Normal Maps
– Linear 32bit images like EXR or HDR (max 2014 takes care of these automatically)

How do you change the gamma? Simple, when loading in the bitmap, just set the Gamma to Override and input 1.0

Why should you care?
Here’s an example. In a Bump map, the middle grey value stays in it’s place, while lighter values move up and darker values move down.

So here is an example image, created in photoshop. Bump should be equally strong in both directions, right?
With the default gamma of 2.2, the result looks unbalanced, making the light tones stronger and the darks weaker. The image and the render do not match in a predictable way.
With the override set to 1.0, the result looks ‘exactly’ as you would expect.

Similar results can be achieved with normal maps, displacement maps, gloss maps, etc as well as any modifiers that use b&w maps to drive their values.
Using Gamma 1.0 for these maps is a MUST to get predictable results, where the pixel color values match with values they input in 3ds max.


The second problem is COLOR.
If you want to accurately reproduce the color from external application in 3Ds max (match a color from a photo, pantone palette, photoshop swatch, etc) this can be difficult, since the Gamma correction will wash out the color and produce a modified result.

For example, here’s a comparison of a Violet color [60;0;150] in photoshop, 3ds max material editor and render.
As you can see, these do not match at all!

To fix this, we must un-correct the color.
There are currently 2 ways to do this:

VrayColor map – set the Gamma to Specify and input 2.2

ColorCorrection map – in advanced settings use inverse Gamma to remove the correction 1/2.2=0.454

Both of these methods work, just use whichever you find easier to set up.
The result in Photoshop and render now matches perfectly!

I know this tut is a bit more technical than the others, but I believe that knowing how to fix little annoying things like these can help avoiding a lot of wasted time.