vtkUnstructuredGrid Phong and Gouraud shading

Hi, I am new to VTK and try to figure out how to do Phong and Gouraud shading for a vtkUnstructuredGrid. I have tried vtkUnstructuredGrid --> vtkDataSetSurfaceFilter --> vtkPolyDataNormals --> mapper, but still cannot get a desired smooth shading.

vtkSmartPointer<vtkDataSetSurfaceFilter> surfaceFilter = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();
surfaceFilter->SetInputData(ugrid);
surfaceFilter->Update();
vtkPolyData* polydata = surfaceFilter->GetOutput();
vtkSmartPointer<vtkPolyDataNormals> polynormals = vtkSmartPointer<vtkPolyDataNormals>::New();
polynormals->SetInputData(polydata);
polynormals->SetConsistency(true);
polynormals->SetComputePointNormals(true);
polynormals->SetComputeCellNormals(true);
polynormals->SetAutoOrientNormals(true);
polynormals->SetFeatureAngle(10.0);
polynormals->Update();
mapper->SetInputConnection(polynormals->GetOutputPort());

And for the actor I set

actor->GetProperty()->SetInterpolationToPhong();