Here, you can see a mesh smoothing approach depending on Manifold Harmonics [Vallet et al. 2008] which smooths the mesh by decreasing number of eigenfunctions in use.

You can check this document for theoretical concept of the approach, and refer Matlab and C++ codes for the implementation. Also, at end of the page, you can see the results of applying this idea to ambient occlusion:

Matlab Script

Output:

Smoothing process of bumpy cube with 1250 (original), 300, 26 and 5 MH bases respectively.

Smoothing process of bumpy cube with 1250 (original), 300, 26 and 5 MH bases respectively.

C++ Code Snippet

Output:

Smoothing process of Stanford bunny with 3485 (original), 1024, 97 and 6 MH bases respectively.

Smoothing process of Stanford bunny with 3485 (original), 1024, 97 and 6 MH bases respectively.

Ambient Occlusion Results:

Knight mesh with 502 vertices.

Knight mesh with 502 vertices.

Bunny with 3485 vertices

Bunny with 3485 vertices