How to have split normals on the boundary of a contour?

Here’s the issue, and an image:

My pipeline is vtkImageConstantPad -> vtkContourFilter where the padding is used to add a cap on the open ends, to hide the interior sections of the contour. vtkContourFilter generates normals but by default they are smoothed, giving the black rings visible at the right of the image.

I could pass the surface through vtkPolyDataNormals and set a splitting angle, to fix the problem, but this would give me occasional creases inside the contoured surface, which I don’t want. Also some of the caps would still get smoothed normals where the angle was below the threshold.

So I want split normals where the contour surface joins the caps and smoothed everywhere else.

Is there a different way to do the capping that would avoid this issue? Is there a way to tell vtkPolyDataNormals to only split normals on the boundary of the volume?