3D渲染图片求导

刚推出来对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]TM1ab1rgt
其中 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} M1ab1

这里如果是透视投影的话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=rTM1dmijdMM1a
上面的式子有些地方做了简写(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=rTM1eiejTM1a=(rTM1ei)(ejTM1a)=(eiTMTr)(aTMTej)=eiTAej
其中 A = − M − T r a T M − T A=-M^{-T} \mathbf{r} \mathbf{a} ^T M^{-T} A=MTraTMT
然而 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值