场景表示
数据集
images:[N, H, W, 3]。表示N张宽高为W,H的彩色图
pose:[N, 3,4]。表示N张图片的位姿
bds:[N,2]—>near, far 相当于光线的采样最近点与最远点(如下图所示,far和near根据真实场景的距离确定)
hwf:图像宽、高、焦距
如何根据数据集生成网络的输入参数
1、像素坐标与图像坐标转换
2、生成光线
- 相机坐标系下
光线原点:相机光心
光线方向:相机光心到图像中的任意位置方向(相当于光线方向与像素坐标有一个对应关系)
- 相机坐标系与世界坐标系转换
将光线的原点和方向转换到世界坐标系下
3、对光线上的点进行采样
- step1:把光源移到near点
- step2:对光线上的点进行采样
4、网络输入参数
输入:(x, y, z)表示了光线上的采样点,( θ , ϕ \theta,\phi θ,ϕ)表示光线方向
不同视角下观察同一个采样点,颜色可能不一样
输出:采样点的颜色(RGB)以及不透明度(
σ
\sigma
σ)
渲染
一个像素点对应了一条光线,该像素点的颜色可以根据渲染方程计算。
渲染方程的作用:对光线上的采样点进行颜色和不透明度累加,因此计算出其相应像素的颜色
也就是说,对于一张 400 × 400 400\times400 400×400的图像来说,可以形成 400 × 400 = 160000 400\times400=160000 400×400=160000光线,对条光线上的采样点进行累加,可以得到对应像素的颜色。
训练
每训练一次,使用一张图片,并且在一张图片上抽取1024个像素点,所以训练过程会相对快很多。优化过程采用随机梯度下降。
将光束作为一个batch,chunk是并行处理的光束数量
对于一张 400 × 400 400\times400 400×400的图片,总共有160000条光束。默认一次处理1024*32=32768条光束,可以根据内存大小修改光线处理的数量