Blender
V4.5
intern
slim
intern
slim.h
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2016 Michael Rabinovich
2
* 2023 Blender Authors
3
*
4
* SPDX-License-Identifier: MPL-2.0 */
5
10
#pragma once
11
12
#include <Eigen/Dense>
13
#include <Eigen/Sparse>
14
15
#include <stdexcept>
16
17
namespace
slim
{
18
19
class
SlimFailedException
:
public
std::runtime_error {
20
public
:
21
SlimFailedException
() : std::runtime_error(
"Slim operation failed"
) {}
22
};
23
24
/* Compute a SLIM map as derived in "Scalable Locally Injective Maps" [Rabinovich et al. 2016].. */
25
struct
SLIMData
{
26
bool
valid
=
true
;
27
28
/* Input. */
29
Eigen::MatrixXd
V
;
/* #V by 3 list of mesh vertex positions. */
30
Eigen::MatrixXi
F
;
/* #F by 3/3 list of mesh faces (triangles). */
31
enum
SLIM_ENERGY
{
32
ARAP
,
33
LOG_ARAP
,
34
SYMMETRIC_DIRICHLET
,
35
CONFORMAL
,
36
EXP_CONFORMAL
,
37
EXP_SYMMETRIC_DIRICHLET
38
};
39
SLIM_ENERGY
slim_energy
;
40
41
/* Optional Input. */
42
/* Soft constraints. */
43
Eigen::VectorXi
b
;
44
Eigen::MatrixXd
bc
;
45
double
soft_const_p
;
46
47
double
exp_factor
;
/* Used for exponential energies, ignored otherwise. */
48
bool
mesh_improvement_3d
;
/* Only supported for 3d. */
49
50
int
reflection_mode
;
51
bool
skipInitialization
=
false
;
52
bool
validPreInitialization
=
false
;
53
double
expectedSurfaceAreaOfResultingMap
= 0;
54
55
/* Output. */
56
Eigen::MatrixXd
V_o
;
/* #V by dim list of mesh vertex positions (dim = 2 for parametrization, 3
57
otherwise). */
58
Eigen::MatrixXd
59
oldUVs
;
/* #V by dim list of mesh vertex positions (dim = 2 for parametrization,. */
60
/* 3 otherwise). */
61
62
/* Weight-map for weighted parameterization. */
63
bool
withWeightedParameterization
;
64
Eigen::VectorXf
weightmap
;
65
Eigen::VectorXf
weightPerFaceMap
;
66
double
weightInfluence
;
67
double
globalScaleInvarianceFactor
= 1.0;
68
69
double
energy
;
/* Objective value. */
70
71
/* Internal. */
72
Eigen::VectorXd
M
;
73
double
mesh_area
;
74
double
avg_edge_length
;
75
int
v_num
;
76
int
f_num
;
77
double
proximal_p
;
78
79
Eigen::VectorXd
WGL_M
;
80
Eigen::VectorXd
rhs
;
81
Eigen::MatrixXd
Ri
,
Ji
;
82
Eigen::VectorXd
W_11
;
83
Eigen::VectorXd
W_12
;
84
Eigen::VectorXd
W_13
;
85
Eigen::VectorXd
W_21
;
86
Eigen::VectorXd
W_22
;
87
Eigen::VectorXd
W_23
;
88
Eigen::VectorXd
W_31
;
89
Eigen::VectorXd
W_32
;
90
Eigen::VectorXd
W_33
;
91
Eigen::SparseMatrix<double>
Dx
,
Dy
,
Dz
;
92
int
f_n
,
v_n
;
93
bool
first_solve
;
94
bool
has_pre_calc
=
false
;
95
int
dim
;
96
};
97
98
/* Compute necessary information to start using SLIM
99
* Inputs:
100
* V #V by 3 list of mesh vertex positions
101
* F #F by 3/3 list of mesh faces (triangles)
102
* b list of boundary indices into V
103
* bc #b by dim list of boundary conditions
104
* soft_p Soft penalty factor (can be zero)
105
* slim_energy Energy to minimize
106
*/
107
void
slim_precompute
(Eigen::MatrixXd &
V
,
108
Eigen::MatrixXi &F,
109
Eigen::MatrixXd &V_init,
110
SLIMData
&
data
,
111
SLIMData::SLIM_ENERGY
slim_energy,
112
Eigen::VectorXi &
b
,
113
Eigen::MatrixXd &bc,
114
double
soft_p);
115
116
/* Run iter_num iterations of SLIM
117
* Outputs:
118
* V_o (in SLIMData): #V by dim list of mesh vertex positions
119
*/
120
Eigen::MatrixXd
slim_solve
(
SLIMData
&
data
,
int
iter_num);
121
122
}
// namespace slim
data
std::string data
Definition
BLI_set_test.cc:632
slim::SlimFailedException
Definition
slim.h:19
slim::SlimFailedException::SlimFailedException
SlimFailedException()
Definition
slim.h:21
b
b
Definition
compositor_morphological_distance_info.hh:24
slim
Definition
GEO_uv_parametrizer.hh:9
slim::slim_precompute
void slim_precompute(Eigen::MatrixXd &V, Eigen::MatrixXi &F, Eigen::MatrixXd &V_init, SLIMData &data, SLIMData::SLIM_ENERGY slim_energy, Eigen::VectorXi &b, Eigen::MatrixXd &bc, double soft_p)
Definition
slim.cpp:669
slim::slim_solve
Eigen::MatrixXd slim_solve(SLIMData &data, int iter_num)
Definition
slim.cpp:787
slim::SLIMData
Definition
slim.h:25
slim::SLIMData::avg_edge_length
double avg_edge_length
Definition
slim.h:74
slim::SLIMData::withWeightedParameterization
bool withWeightedParameterization
Definition
slim.h:63
slim::SLIMData::F
Eigen::MatrixXi F
Definition
slim.h:30
slim::SLIMData::bc
Eigen::MatrixXd bc
Definition
slim.h:44
slim::SLIMData::f_num
int f_num
Definition
slim.h:76
slim::SLIMData::v_n
int v_n
Definition
slim.h:92
slim::SLIMData::mesh_area
double mesh_area
Definition
slim.h:73
slim::SLIMData::weightPerFaceMap
Eigen::VectorXf weightPerFaceMap
Definition
slim.h:65
slim::SLIMData::Ri
Eigen::MatrixXd Ri
Definition
slim.h:81
slim::SLIMData::M
Eigen::VectorXd M
Definition
slim.h:72
slim::SLIMData::skipInitialization
bool skipInitialization
Definition
slim.h:51
slim::SLIMData::b
Eigen::VectorXi b
Definition
slim.h:43
slim::SLIMData::slim_energy
SLIM_ENERGY slim_energy
Definition
slim.h:39
slim::SLIMData::W_33
Eigen::VectorXd W_33
Definition
slim.h:90
slim::SLIMData::first_solve
bool first_solve
Definition
slim.h:93
slim::SLIMData::has_pre_calc
bool has_pre_calc
Definition
slim.h:94
slim::SLIMData::globalScaleInvarianceFactor
double globalScaleInvarianceFactor
Definition
slim.h:67
slim::SLIMData::Dy
Eigen::SparseMatrix< double > Dy
Definition
slim.h:91
slim::SLIMData::validPreInitialization
bool validPreInitialization
Definition
slim.h:52
slim::SLIMData::mesh_improvement_3d
bool mesh_improvement_3d
Definition
slim.h:48
slim::SLIMData::W_13
Eigen::VectorXd W_13
Definition
slim.h:84
slim::SLIMData::proximal_p
double proximal_p
Definition
slim.h:77
slim::SLIMData::weightmap
Eigen::VectorXf weightmap
Definition
slim.h:64
slim::SLIMData::V
Eigen::MatrixXd V
Definition
slim.h:29
slim::SLIMData::v_num
int v_num
Definition
slim.h:75
slim::SLIMData::oldUVs
Eigen::MatrixXd oldUVs
Definition
slim.h:59
slim::SLIMData::W_23
Eigen::VectorXd W_23
Definition
slim.h:87
slim::SLIMData::SLIM_ENERGY
SLIM_ENERGY
Definition
slim.h:31
slim::SLIMData::SYMMETRIC_DIRICHLET
@ SYMMETRIC_DIRICHLET
Definition
slim.h:34
slim::SLIMData::EXP_CONFORMAL
@ EXP_CONFORMAL
Definition
slim.h:36
slim::SLIMData::ARAP
@ ARAP
Definition
slim.h:32
slim::SLIMData::LOG_ARAP
@ LOG_ARAP
Definition
slim.h:33
slim::SLIMData::EXP_SYMMETRIC_DIRICHLET
@ EXP_SYMMETRIC_DIRICHLET
Definition
slim.h:37
slim::SLIMData::CONFORMAL
@ CONFORMAL
Definition
slim.h:35
slim::SLIMData::WGL_M
Eigen::VectorXd WGL_M
Definition
slim.h:79
slim::SLIMData::exp_factor
double exp_factor
Definition
slim.h:47
slim::SLIMData::W_11
Eigen::VectorXd W_11
Definition
slim.h:82
slim::SLIMData::expectedSurfaceAreaOfResultingMap
double expectedSurfaceAreaOfResultingMap
Definition
slim.h:53
slim::SLIMData::Dx
Eigen::SparseMatrix< double > Dx
Definition
slim.h:91
slim::SLIMData::W_22
Eigen::VectorXd W_22
Definition
slim.h:86
slim::SLIMData::Dz
Eigen::SparseMatrix< double > Dz
Definition
slim.h:91
slim::SLIMData::f_n
int f_n
Definition
slim.h:92
slim::SLIMData::valid
bool valid
Definition
slim.h:26
slim::SLIMData::W_21
Eigen::VectorXd W_21
Definition
slim.h:85
slim::SLIMData::W_31
Eigen::VectorXd W_31
Definition
slim.h:88
slim::SLIMData::weightInfluence
double weightInfluence
Definition
slim.h:66
slim::SLIMData::Ji
Eigen::MatrixXd Ji
Definition
slim.h:81
slim::SLIMData::reflection_mode
int reflection_mode
Definition
slim.h:50
slim::SLIMData::V_o
Eigen::MatrixXd V_o
Definition
slim.h:56
slim::SLIMData::energy
double energy
Definition
slim.h:69
slim::SLIMData::rhs
Eigen::VectorXd rhs
Definition
slim.h:80
slim::SLIMData::W_32
Eigen::VectorXd W_32
Definition
slim.h:89
slim::SLIMData::dim
int dim
Definition
slim.h:95
slim::SLIMData::W_12
Eigen::VectorXd W_12
Definition
slim.h:83
slim::SLIMData::soft_const_p
double soft_const_p
Definition
slim.h:45
V
CCL_NAMESPACE_BEGIN struct Window V
Generated on Fri Apr 3 2026 06:33:18 for Blender by
doxygen
1.11.0