Laplace Smoothing: Linearly interpolate point with average of its neighbors. This neighbor averaging forms a very simple low pass filter, but the averaging tends to eat away at all parts of a mesh, not just the small ones. Taubin calls this effect "shrinkage". Here, I take 70% neighbors, 30% point, or a lambda of 0.7. |
[Taubin1995] Smoothing: Perform one pass of Laplace smoothing with a positive lambda, then another pass with negative lambda. A negative-lambda Laplace is actually a sharpening pass; for middling freqencies, this more than compensates for the shrinkage of the first pass. Here, I use a first-pass lambda of 0.6307; the second pass factor is -0.6732. (Values from [Desbrun1999]). |
Laplace-smoothed Unit Step: 1000 passes. |
Taubin-smoothed Unit Step: 1000 passes. Note the ringing artifacts (Gibb's phenomenon). |
Laplace Frequency Response: 1, 100, and 1000 passes. Note the only non-attenuated signal is at 0 (DC term)--everything else vanishes. |
Taubin Frequency Response: 1, 100, and 1000 passes. Note the amplification of the midrange. |
The unit steps were written into a 300-cell array, then filtered.
The frequency responses were computed by writing a unit-amplitude linear frequency ramp into a 100,000-cell time-domain array and then applying the filter.
C++ source code and gnuplot script.
Taubin works for IP juggernaut IBM, so his shrinkage-free smoothing algorithm is restricted under patent, US Patent 5,506,947.