Flatten shading on cylinder This image shows two of the same curve, one beveled into a cylinder, and one extruded into a flat plane. The material is a Diffuse mixed with glossy at .1 fac.

The top cylinder gets a strong highlight down its length and visible shadows at the glancing edges due to it's curve. The flat one's gloss is much more spread out due to it being flat.

What i want is to render shading like the flat strand, but on the cylinder. It seems this should be possible with some sort of normal changing or the like? I want the effect of the flat ribbon, but if I actually use flat ribbons then they disappear at certain angles, whereas the cylinder always has the same thickness.

If I were working directly with the mesh, then I'd scale it on the view axis till it was flat. Can something like this be done to the normals within the material?

UPDATE:
Here's a picture showing the difference better. This is just the gloss, and I bent the bottom ribbon more to emphasize the difference.

The ribbon gets full lighting on it's whole surface because it is flat. The cylinder is less lit at glancing angles. I want to get the same sort of shading on the cylinder that I have on the ribbon.

This is gloss only with Incoming plugged into the normal socket. It is flattening things out, but has also fundamentally changed how the shading is working.
I believe you are after this shading effect:



It is possible with some vector math on normals. The goal is to change normals to be pointing towards camera, but the Incoming output from Geometry node will override all normals equally, ignoring in which direction the curve is heading. Luckily we can determine the local vector of the tube's direction:

Can I color a curve in Cycles by the direction it&#39;s running?

The rest is a matter of 2 vector cross products to get a vector incoming to camera but also orthogonal to the curve's direction:



If you want to do this on meshes, you will have to write your own OSL shader.