Smoothing Algorithm Based on Element Geometric Deformation - Paper Implementation

Stanford Dragon, Buddha and Bunny demonstrating iterative application of the smoothing algorithm. Triangles are coloured based on their quality from red (bad) to purple (good)

Bordeaux Alter Cast and Portrait of a Man models demonstrating iterative application of the smoothing algorithm. Triangles are coloured based on their quality from red (bad) to purple (good)

Stanford Buddha model, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Stanford Buddha model, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Stanford Bunny model, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Stanford Bunny model, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Stanford Dragon model, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Stanford Dragon model, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Portrait of a Man, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Portrait of a Man, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Bordeaux Alter Cast, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Bordeaux Alter Cast, original on the left, processed on the right.
Triangles are coloured based on their quality from red (bad) to purple (good)

Realtime showcase of the node performance and capabilites in Houdini 20.5.

Houdini implementation of the 2015 paper "Smoothing Algorithm for Planar and Surface Mesh Based on Element Geometric Deformation" (https://onlinelibrary.wiley.com/doi/10.1155/2015/435648).

I was working on a personal project and while looking at ways to improve the topology of a triplanar-projected mesh I found this paper proposing a highly parallel way of improving topology quality. The algorithm approach extends naturally from triangle to quad and n-gon, allowing for mixed mesh processing. I've first implemented it in vex (one primitive wrangle and one point wrangle, as per the paper approach) and then ported the code to a single OpenCl node (the first kernel operates on primitives, the 'writeback' operates on point) to improve performance. It has been quite a challenge but had tons of fun! It was also a good excuse to learn a bit of EEVEE for the showcase renders.

Made in Houdini, rendered in Blender EEVEE. Code libraries available on my GitHub (https://github.com/a-riccardi/ar_tools)