I am working on piece of software to deal with 3D meshes and I need to smooth some meshes. I have implemented MCF by using this formula $\vec{H} = {{t}\over{2}} \sum_{q \in\ link\ p} \vec{Ne} |e| \sin({\theta\over{2}})$ where $\vec{Ne}$ = ${\vec{N1} \vec{N2}}\over{2 \cos{{\theta}\over{2}}}$, $\vec{e} = q - p$ and $N1$ and $N2$ are normals to faces to whom edge belongs. $\theta$ is calculated by cosine similarity between $N1$ and $N2$
And I have tested my implementation with meshes like cube, cone, torus and it works well. But the problem is with more complex meshes, e.g. I tried to smooth Stanford bunny and I got smaller but bumper result instead of smoother! Below you can find examples which present bunny before and after smoothing. My question is if I forgot about something important or this is normal behavior of MFC for some meshes and I should forget about MFC and implement another flow(I will be grateful for any recommendations). I have to add that, for another problematic mesh I calculated some MFC vectors on paper and I got same results(up to floating point errors). At the and I want to add that, as probably some of you know Stanford bunny is not 2-manifold so I removed faces from problematic edges by using MeshLab's filters.
Thanks and happy math!