Glossy Shader Error on smoothing curved surfaces

I have noticed this on many objects that aren’t spherical but use the Smooth shading in cycles.

Example, if I make a plane, loopcut it many times vertically, then add a curve modifier to bend it to the shape of a curved wall. I then add smooth shading for the smooth curved wall look. When I add the glossy shader, it only reflects from certain angles. When I turn on flat shading, the gloss is fine.

I have attached some reference images where I single out a glossy shader to show the error. Shouldn’t glossy object reflect everything on the whole surface since its all glossy?


Attachments


My guess is there is some kind of problem interpolating normals of surfaces that start facing away from the viewer. The same problem also occurs with the glass shader. (And depending on refraction, it’s even worse.) It’s possible to help reduce it by loop cutting the model and sliding the edges towards the ends where artifacts show up. This means there are smaller normals to be interpolated in those areas and it reduces what’s visible of the artifact.

Interestingly enough, marking edges as sharp and splitting edges on the sharp creases of cylinders appears to stop artifacts as well. It could be there is some problem when interpolated normals start facing away from the camera on more than one axis.

I’m not a programmer, but I’d take a wild guess that the shaders are interpreting the interpolated faces generated by smooth shading as back-facing when they’re not. So the artifacts are same as those when normals aren’t facing the correct way in regard to the camera being able to calculate rays or whatever.

I’d also say it’s definitely a bug. I wonder if it’s listed in the tracker?

I found that by increasing the polygon count did help, subdivision, etc. I noticed the problem actually appears on spheres that are low polys as well.

I submitted the bug today.

Thanks for your reply!

I posted this on the blender bug reporter and they were quick to reply. A direct quote:

"This is not considered a bug at the moment. The problem is that the “fake” smooth normals don’t correspond to the actual geometry. This works ok in many cases but in this case the mismatch reveals itself.There are some ways that this can be improved but that’s on the todo list.
If you like to read the technical explanation for this it’s here: http://www.geekshavefeelings.com/x/wp-content/uploads/2010/03/Its-Really-Not-a-Rendering-Bug-You-see…pdf"A direct link to the post is here https://developer.blender.org/T39496

You can solve the issue just by adding an edge-split modifier, in this case, Cycles is trying to interpolate across an angle approaching 90 degrees. Either add an edge-split modifier or apply a rounded bevel to the sharp edges using the bevel modifier.