Angle Based Flattening:

- There's an option to enabled ABF in the UV Calculation panel.
- ABF works with seams, pinning, live transform etc. UI wise it's pretty
  much the same as LSCM.

- ABF favors low angular distortion over area distortion, much like LSCM.
  It does however not have the tendency to "collapse" under high stretch,
  which basically means that it will be able to handle complex charts
  without pinning.
- ABF does however have on serious drawback: it is sensitive to degenerate
  geometry, especially very small angles. I'm working on this, but it seems
  to be quite difficult to improve the situation. There's still a bunch of
  ideas left to try, but I'll just commit this now as is. If ABF fails, it
  will fall back to LSCM, and there will be a warning print in the console.

- This implementation has the matrix tricks from ABF++ also. The second part
  of ABF++, simplification before unwrap, is being worked on. The current
- ABF is about 3-4 times slower than LSCM, which was to be expected. For
  live transform however, once the initial computation is done, it's just as
  snappy as the new LSCM code.


Results are quite nice though:
http://users.pandora.be/blendix/snurgle.png
http://users.pandora.be/blendix/snurgle_flattened.png

You may recognize the Snurgle model by Colin Levy there.
This commit is contained in:
Brecht Van Lommel 2006-02-05 15:32:19 +00:00
parent 469557f625
commit e46de9feb5

@ -3877,7 +3877,7 @@ static void editing_panel_mesh_uvautocalculation(void)
row-= 4*butHB+butS;
uiBlockBeginAlign(block);
uiDefButS(block, MENU, REDRAWBUTSEDIT, "Unwrapper%t|Conformal%x0|Conformal (Old)%x2",100,row,200,butH, &G.scene->toolsettings->unwrapper, 0, 0, 0, 0, "Unwrap method");
uiDefButS(block, MENU, REDRAWBUTSEDIT, "Unwrapper%t|Conformal%x0|Angle Based%x1|Conformal (Old)%x2",100,row,200,butH, &G.scene->toolsettings->unwrapper, 0, 0, 0, 0, "Unwrap method");
if (G.scene->toolsettings->unwrapper != 2)
uiDefButBitS(block, TOG, 1, B_NOP, "Fill Holes",100,row-butHB,200,butH,&G.scene->toolsettings->uvcalc_flag, 0, 0, 0, 0, "Fill holes to prevent internal overlaps");
uiBlockEndAlign(block);