Solving Math, Coding, Debugging and Rendering
C++, Eigen, libIGL, CLion, Blender
Myself
April - May 2019
I first wrote the C++ implementation of the algorithms, before applying it to a few open-source OBJ models I found online, such as the infamous Stanford Bunny, horses and teapot.
The algorithm calculates and produces the relief versions of those models as matrices, and I then used libIGL to write the vertices into OBJ files.
The output relief models are exported in OBJ format, and I used Blender to render these OBJ models using colors and textures that mimic porcelain.
While searching for ideas for my final project for the Geometric Modeling class at NYU, I came across an interesting paper about generating Bash-Relief from 3D models, written by my professor during his postdoc.
The technique reminded me of Jasperware from the 18th Century and their subtle yet vivid decorative style. I wondered if I could implement the paper in such way that generates Bas-relieves not just on flat surfaces, but on curved surfaces as well.
After closely reading the original research paper, I looked for ways to replicate the authors' constrained convex optimization algorithm by using C++ and Eigen.
While the paper discussed the high-level mathematical principles of the algorithm, not a word was mentioned about how they coded it in a finite state machine. It was my job to figure out how to process the mesh, allocate memory, work around rounding errors of floating point numbers, avoid mesh intersections, etc.
* Source code for this project can be found at: https://github.com/yuepingwang/relief/tree/master/src