6
$\begingroup$

When I scale a cylinder from one side and then do Shade Smooth and Auto-Smooth some shading issue are still visible in the image. I tried to increase the Auto-Smooth, value but it doesn't give the desired result.

enter image description here

enter image description here

enter image description here

$\endgroup$
2
  • 1
    $\begingroup$ hello could you please share your file? pasteall.org/blend $\endgroup$
    – moonboots
    Commented Oct 26, 2021 at 6:51
  • 1
    $\begingroup$ Can you share additional infos like used modifiers, picture of wireframe, angle in auto-smooth? $\endgroup$
    – Der_Fab
    Commented Oct 26, 2021 at 7:20

4 Answers 4

12
$\begingroup$

This looks like a natural consequence of the way smooth shading works. I think you have to subdivide your cone vertically.

A renderer will:

  1. Triangulate your mesh.
  2. If it's asked for 'Smooth Shading', for every shading point, it will calculate a normal by linearly interpolating between the vertex-normals at the corners of the triangles, using barycentric coordinates.

In your truncated cone, the triangles are very long and thin. The only data points the interpolation of normals around the circumference has to go by are right at the top and bottom of the triangles. In a cylinder, that produces a good guess. The radial normals at top and bottom are parallel, so there's no interpolation in those dimensions. Not so for a cone:

enter image description here

The top row shows triangulation. This shader is the dot-product between True Normal (flat, geometric), and Normal (smoothed). It shows how much smoothing has shifted the normal of the underlying geometry. On the left, the cone is not subdivided in its height, and you can see how jaggedy the interpolation is: how irregularly it represents the radial normals of the surface.

On the right, the cone has been subdivided vertically, and the interpolation has more vertex-normals to go by. The linear interpolation across the triangles matches radial directions around circular cross-sections more closely.

$\endgroup$
4
$\begingroup$

Not a new answer, just a comparison between the two methods shown here (by Robin and Chris, the answer by Der_Fab is simply put what Robin explained more detailed). You should open the images for full resolution to see the effects better.

On the left is a cone with a standard resolution of 32 vertices for its profile. It has added vertical edge loops as Robin described to avoid your shading issues. On the right side is a cone with a higher resolution of 128 vertices in the profile.

shading without terminator offset

What you can see here on the right is that because even with 128 vertices the problem of long and even thinner triangulated faces remains, the shading still is not really smooth - the banding just gets finer so it becomes less visible.

On the other hand the left side shows a very harsh and not smooth shadow terminator edge from top to bottom.

Now for this harsh edge there is a solution, under Object Properties > Shading > Shadow Terminator Offset you can enter a value higher than the default 0, something low like 0.01 already works in most cases. This way the terminator line gets smoothed out while the shadow grows into the lit side - but not very much with a small offset.

shadow terminator offset

The problem of the Shadow Terminator Offset is, it doesn't help much with the banding on the cone without vertical edge loops. It will still be visible.

shading with offset

If you want or have to keep the polycount low you might think 32 vertices is better than 128, but as soon as you add 6 vertical loops the polycount is quite similar on both objects, but with the better result I would go for the edge loopps.

If you don't care about high resolution meshes and their polycount, then a combination of both answers will give the best result. Many vertices in the profile with edge loops for increasing the vertical resolution. As stated before, generally higher geometry resolutions produce smoother shading than low resolutions.

$\endgroup$
1
  • 1
    $\begingroup$ Interesting comparison! $\endgroup$
    – Robin Betts
    Commented Oct 26, 2021 at 15:07
3
$\begingroup$

I think this is the normal result. If you want to prevent that, increase the vertices to 128. (i took the default settings for my test) Then choose shade smooth and autosmooth.

enter image description here

result:

enter image description here

$\endgroup$
3
$\begingroup$

Go to edit mode and add some loop cuts (Ctrl + R) on the Z-axis, maybe 3 - 5. More geometry helps with shading issues.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .