刚推出来对3D顶点求导的矩阵形式,尽快记录一下以免忘记.
问题定义
假设有一个三角形面片,有三个3D顶点
V
1
=
(
x
1
,
y
1
,
z
1
)
V1=(x1, y1, z1)
V1=(x1,y1,z1),
V
2
=
(
x
2
,
y
2
,
z
2
)
V2=(x2, y2, z2)
V2=(x2,y2,z2),
V
3
=
(
x
3
,
y
3
,
z
3
)
V3=(x3, y3, z3)
V3=(x3,y3,z3), 其对应的顶点颜色为
T
1
=
(
r
1
,
g
1
,
b
1
)
T1=(r1, g1, b1)
T1=(r1,g1,b1), T2, T3.
后面为了表示简单只考虑一个通道 RGB 中的 R.
假设这三个顶点已经做过位置变换(R, T), 而且用的是弱透视投影,即顶点可以通过zbuffer生成图片某个三角形的颜色 (透视投影的话其实也类似,这里先不说)
记这个面片渲染在2D 图片上的位置为
[
a
,
b
]
T
[a, b]^T
[a,b]T, 假设其对应的图片的颜色为
T
=
(
r
g
t
,
.
.
.
)
T=(r_{gt}, ...)
T=(rgt,...)
那么损失函数的残差为
f
=
[
r
1
,
r
2
,
r
3
]
T
M
−
1
(
a
b
1
)
−
r
g
t
f=[r1, r2, r3]^T M^{-1} \begin{pmatrix} a\\ b\\ 1 \end{pmatrix} - r_{gt}
f=[r1,r2,r3]TM−1⎝⎛ab1⎠⎞−rgt
其中
M
=
(
x
1
x
2
x
3
y
1
y
2
y
3
1
1
1
)
M=\begin{pmatrix} x_1 & x_2 & x_3\\ y_1 & y_2 & y_3\\ 1 & 1 & 1 \end{pmatrix}
M=⎝⎛x1y11x2y21x3y31⎠⎞ ,
f
f
f的形式主要依据 重心坐标插值算颜色,重心坐标就是
M
−
1
(
a
b
1
)
M^{-1} \begin{pmatrix} a\\ b\\ 1 \end{pmatrix}
M−1⎝⎛ab1⎠⎞
这里如果是透视投影的话M就不是这样了, 最后一行应该是z. [我认为是这样]
对颜色的求导非常简单,那么对 顶点坐标呢?
对顶点坐标的求导
首先逆矩阵的求导为
有了这个其实就能求出来, 比如对M矩阵的
m
i
j
m_{ij}
mij求导
d
f
d
m
i
j
=
−
r
T
M
−
1
d
M
d
m
i
j
M
−
1
a
\frac{\mathrm{d} f}{\mathrm{d} m_{ij}}=-\mathbf{r}^TM^{-1} \frac{\mathrm{d} M}{\mathrm{d} m_{ij}} M^{-1} \mathbf{a}
dmijdf=−rTM−1dmijdMM−1a
上面的式子有些地方做了简写(r, a). 其中
d
M
d
m
i
j
\frac{\mathrm{d} M}{\mathrm{d} m_{ij}}
dmijdM
只有一个位置是1,其余是0. 一度让我感觉是不是能写成 Kronecker积的形式. (后来感觉不靠谱)
写成矩阵形式,直接对坐标的每个量求导
但是我想知道能不能直接写成矩阵的形式就是直接得到
d
f
d
M
\frac{\mathrm{d} f}{\mathrm{d} M}
dMdf
的形式, 经过长时间的思考后终于弄出来了.
其实也很简单就是
d
M
d
m
i
j
=
e
i
e
j
T
\frac{\mathrm{d} M}{\mathrm{d} m_{ij}} = e_i e_j^T
dmijdM=eiejT
然后知道
d
f
d
m
i
j
=
−
r
T
M
−
1
e
i
e
j
T
M
−
1
a
=
(
−
r
T
M
−
1
e
i
)
(
e
j
T
M
−
1
a
)
=
(
e
i
T
M
−
T
−
r
)
(
a
T
M
−
T
e
j
)
=
e
i
T
A
e
j
\begin{aligned} \frac{\mathrm{d} f}{\mathrm{d} m_{ij}}&=-\mathbf{r}^TM^{-1} e_i e_j^T M^{-1} \mathbf{a} \\ &= (-\mathbf{r}^TM^{-1} e_i ) ( e_j^T M^{-1} \mathbf{a} )\\ &= ( e_i^T M^{-T} -\mathbf{r}) ( \mathbf{a} ^T M^{-T} e_j )\\ &= e_i^T A e_j \\ \end{aligned}
dmijdf=−rTM−1eiejTM−1a=(−rTM−1ei)(ejTM−1a)=(eiTM−T−r)(aTM−Tej)=eiTAej
其中
A
=
−
M
−
T
r
a
T
M
−
T
A=-M^{-T} \mathbf{r} \mathbf{a} ^T M^{-T}
A=−M−TraTM−T
然而
e
i
T
A
e
j
e_i^T A e_j
eiTAej 这种形式的值有一个特性,就是
e
i
T
A
e
j
=
A
i
j
e_i^T A e_j = A_{ij}
eiTAej=Aij , 所以自然
d
f
d
M
=
A
\frac{\mathrm{d} f}{\mathrm{d} M} = A
dMdf=A