NeRF中使用的相机模型:
- 世界坐标系
- 相机坐标系
- 归一化坐标系
- 像素坐标系
CG中更常用的变换:
-
观测变换(世界坐标系到相机坐标系)
“横看成岭侧成峰,远近高低各不同”,实际上是仿射变换 w=Ax+b
-
投影变换(从相机坐标系到2D的空间):
3D到2D,正交投影与z无关,透视投影与z相关 -
视口变换
-
光栅化
可参考《GAMES101-现代计算机图形学入门-闫令琪》
正交投影:
- 立方体: [ l , r ] × [ b , t ] × [ f , n ] [l, r]\times [b,t]\times[f,n] [l,r]×[b,t]×[f,n]
- 平移到原点
- 立方体缩放到 [ − 1 , 1 ] 3 [-1,1]^3 [−1,1]3的正方体
- 仿射变换
透视投影:
- 远小近大
- 先把锥体压成立方体
- 再正交投影
问题:
- 透视投影是非线性的,即非仿射变换
- 我们希望高斯椭球一直进行仿射变换
不管是正交投影还是透视投影,最后得到一个单位正方体,下面要把它拉回最开始想要的h,w
进行拉伸:
- 和z无关
- 将 [ − 1 , 1 ] 2 [-1,1]^2 [−1,1]2的矩阵变换至[0,w] x [0,h]
光栅化:
定义:
- 把东西画在屏幕上
- 连续转离散
- 使用的方法:采样
3D高斯的观测变换
物理坐标系(世界坐标系):
- 高斯核中心 t k = [ t 0 t 1 t 2 ] T t_k=[\ t_0 \ t_1 \ t_2]^T tk=[ t0 t1 t2]T
- 高斯核: r k ′ ′ ( t ) = G V k ′ ′ ( t − t k ) r^{''}_k(t)=G_{V_k^{''}}(t-t_k) rk′′(t)=GVk′′(t−tk)
- V k ′ ′ V_k^{''} Vk′′是协方差矩阵
相机坐标系:
u = ϕ ( t ) = W t + d u=\phi(t)=Wt+d u=ϕ(t)=Wt+d
- 高斯核中心 u k = [ u 0 u 1 u 2 ] T u_k=[\ u_0 \ u_1 \ u_2]^T uk=[ u0 u1 u2]T
- 高斯核: r k ′ ′ ( u ) = G V k ′ ′ ( u − u k ) r^{''}_k(u)=G_{V_k^{''}}(u-u_k) rk′′(u)=GVk′′(u−uk)
- 均值 u k = W t k + d u_k=Wt_k+d uk=Wtk+d
- 协方差矩阵 V k ′ = W V k ′ ′ W T V_k^{'}=WV_k^{''}W^T Vk′=WVk′′WT
投影变换:
投影变换矩阵:
x
=
m
(
t
)
x=m(t)
x=m(t),非线性
- 高斯核中心 x k = [ x 0 x 1 x 2 ] T x_k=[\ x_0 \ x_1 \ x_2]^T xk=[ x0 x1 x2]T
- 高斯核: r k ( x ) = G V k ( x − x k ) r_k(x)=G_{V_k}(x-x_k) rk(x)=GVk(x−xk)
- 均值 x k = m ( u k ) x_k=m(u_k) xk=m(uk)(一个点可以用非线性变换)
- 协方差矩阵?
为什么要引入雅克比矩阵?
协方差矩阵可以直接使用投影变换吗?
- 不可以
- 从透视投影到正交投影
- 非线性变换,非仿射
怎么办?
- 引入雅克比近似矩阵。
雅克比矩阵
keywords:
- 泰勒展开
- 线性逼近
坐标变换:- f 1 ( x ) = x + s i n ( y ) f_1(x)=x+sin(y) f1(x)=x+sin(y)
- f 2 ( y ) = y + s i n ( x ) f_2(y)=y+sin(x) f2(y)=y+sin(x)
雅克比矩阵: J = [ d f 1 d x d f 1 d y d f 2 d x d f 2 d y ] = [ 1 cos ( y ) cos ( x ) 1 ] J=\left[\begin{array}{ll} \frac{d f_1}{d x} & \frac{d f_1}{d y} \\ \frac{d f_2}{d x} & \frac{d f_2}{d y} \end{array}\right]=\left[\begin{array}{cc} 1 & \cos (y) \\ \cos (x) & 1 \end{array}\right] J=[dxdf1dxdf2dydf1dydf2]=[1cos(x)cos(y)1]理解:对非线性变换的局部线性近似
协方差矩阵: V k = J V k ′ J T V_k=JV_k^{'}J^T Vk=JVk′JT (用雅克比矩阵代替仿射变换矩阵)
再结合观测变换: V k = J V k ′ J T = J W V k ′ ′ W T J T V_k=JV_k^{'}J^T=JWV_k^{''}W^TJ^T Vk=JVk′JT=JWVk′′WTJT
J = ∂ m ( u k ) ∂ u J=\frac{\partial m(u_k)}{\partial u} J=∂u∂m(uk) (求导)
此时均值和协方差在一个坐标系里吗?
均值:在NDC坐标系,范围[-1,1]的立方体内
协方差矩阵:在未缩放的正交坐标系里,不需要再做视口变换,范围是[l,r] x [b,t] x [f,n]
投影变换的雅克比矩阵
所以通过投影变换,原来的
[
x
,
y
,
z
]
T
[x,y,z]^T
[x,y,z]T 变成了 :(n=near, f=far)
求导得到雅可比矩阵。
视口变换:
像素坐标系
-
对高斯核中心进行平移+缩放
-
足迹渲染:离散计算
距离均值越近,值越大。
G ( x ^ ) = e x p ( − 1 2 ( x − μ ) T V k − 1 ( x − μ ) ) G(\hat x)=exp(-\frac{1}{2}(x-\mu)^TV_k^{-1}(x-\mu)) G(x^)=exp(−21(x−μ)TVk−1(x−μ))
Code:
3D高斯中心的变换:
3D高斯协方差的变换:
mean:世界坐标系的中心点
下一步,需要计算雪球的颜色。
Reference:B站UP主 SY_007 视频讲解内容
A u t h o r : C h i e r Author: Chier Author:Chier