Black material artifacts on flat-angle surface areas


I have a problem which I’d like to solve.
I made a metal material as shown in the Videos by CynicatPro:

As you can see on my images on a flat-angle view there appear some black artifacts. That’s the same problem I had with the Velvet shader before - but now I just used the Fresnel node. Do you know how to get rid of it?

If necessary I’ll post the node tree as well.

Thanks a lot!

try to change the Fresnel value !

show nodes set up

happy cl

Attached is a node setup that can modify bumpmap information so as to ‘carefully’ remove the information that causes the black artifacts (which is normal data pointing away from the camera).

Cycles_Mbump.blend (620 KB)

See if this helps.

A “Layer Weight” node might work better on a rough surface like that, than a “Fresnel” node. Try using the “Facing” output of “Layer Weight”, and see if that works better.

How does other software handle these “normals facing away from camera” when bump mapping effects on glossy surfaces get high? Not that it even looks that high in this case (might be because it still have a significant diffuse contribution, don’t know).

Do they “go black”, obtain from environment, or some other trick? I can’t recall having had to deal with this stuff before, but I’m not sure how real stuff were back then, or if any trickery was used.

Looks like a problem with normals to me. You often get artefacts like this is the bump or normal map is set too strong.

I would actually make the argument that Cycles by default has poor handling of bump information at glancing angles with some shader types.

The reason why is that with some textures, even a modest bump value may be enough to produce artifacts at very high angles. Other engines meanwhile have bumpmap code that can handle this kind of situation without artifacts, so it’s not impossible.


sorry for not responding immediately. I didn’t have much time left. :confused:

At first I want to share my node setup.

As you can see I didn’t use any normals or bumps but only the the displacement output. But of course it affects the normals as well which apparently doesn’t make any difference for what happens if the angle of the rays relative to the surface exceed a certain threshold.

I have no idea what could work best to remove the artifacts. I could experiment with it but I thought you might know a straight forward solution for this.

You are a genius this is awesome and doesn’t seem to cost that much performance. They should think about adding an option for something like this to the bump node.

There’s much simplier node setup. But it works only if you have a bump map as input, not normal map. It could accept a normal map if i figure out how to make a bump map out of a normal map via nodes

Hi, I just wanted to apply a normal map for my new material and of course, I also faced these very annoying artifacts. So, I tried to make a simplified node setup that would work also with normal maps.

Thus, I calculate the dot product between normal and incoming vectors and when they are orthogonal, the result is zero (black). Then, I use the dot product value to attenuate the normal’s strength in an another Normal Map node (the ramp node is just a try to make it “smoother”). And so far it works very well for my materials :slight_smile:


is not the fresnel, the glossy has this problem.

There is a way to fix this, but have some caveats:

  1. It only works for still images.
  2. It only works for bumpmaps that depicts random bumps/normal changes.
  3. I haven’t figured out how to make it yet :smiley:

So imagine a tiled floor. Each tile has a completely random color generated. This random color is then used to modify normal directly (not bump), which gives the impression of each tile being slightly inaccurately laid down (each tile not 100% planar). For the faces that face towards the camera, all is good. For the faces that face away from the camera, you can get black spots due to reflected normal now pointing into the object. “All” that is needed now is detect which normal component (one or both) causes this to happen and correct it/them.

This won’t work for most animations because normals would suddenly flip during camera movement.
It also won’t work if there are distinct areas in the normals that are supposed to cause indent which suddenly cause outdent. So would work for non ramped noise and other even random phenomena, but not voronoi or your “typical” normal maps.

Would it be possible on Cycles code level to dictate a robust detection model, and a selector to select how it would treat it? Like “trace ray to world”, “ignore first ray hit”, “ignore self object only”, “trace to selected object”, “smooth/nullify until legal normal” etc? Since normals get pushed into illegal territory also by regular smoothing, it gets kind of annoying also for basic smoothed lowpoly work. I know high glossy roughness can counter/mask some of it, but I often use sharp reflections for speed reasons.

How does other software actually solve this problem?