In the course of my bachelor thesis I get to implement a new parametrization algorithm into Blender. The Algorithm is described in this paper:
Compared to the current LSCM algorithm it works by minimizing a different energy which results in considerably less stretching. It works in several iterations, which allows for early termination if good enough (Can potentially be done similarly to the current "minimize stretch" GUI interaction), see UV sample:
Two things need to be figured out:
- The algorithm only works on disk-topologies (Should i simply close all holes except the biggest one as part of initialization? What size-measure?)
- When to terminate (Will a global energy-threshold do? User set? Always interactive to be ended by satisfied user?)
I'm developing on MAC OSX with XCode. The Algorithm has already been (relatively cleanly from what I've seen so far) implemented but it requires C++11. I've therefore run into compilation issues on OSX.
After i get an initial implementation working, I will try to improve some parts. I will try different solvers in the local stage of the algorithm. Namely, we try to switch from a direct to a iterative approach, hoping for a considerable speed up. After that we will try to use momentum functions to improve the local stage.
The Algorithm uses two libraries apart from EIGEN. One is from IGL (Interactive Geometry Lab ETH). It uses a GPL License. The other one is Pardiso. It contains a apparently vastly superior solver. The algorithm works just fine with just EIGEN, but it is considerably slower. However, pardiso uses a commercial license i think and is only free for students or educational institutions. We'll probably have to do without it. It's not that big of a deal though unless you unwrap geometry whichs number of polygons is in the millions.
The Thesis ends on the 21. of September.
I would like to get an initial raw implementation working soon, preferably within the next week. A more refined implementation with decent GUI interaction I plan to have implemented until the end of April. After that come the already mentioned improvements.
I am grateful for any help and inputs!
- The following is the diff of the code i have so far: