5光线追踪
5光线追踪
5.1占位
和光栅化是两种成像的方式
光栅化不能很好表示全局效果,包括
软阴影
光泽反射mirror(相对模糊反射glossy而言)
间接光照
光栅化的特点:快,近似
光线追踪:慢,精确,适合离线offline
光线定义
三个假设
直线传播
不会碰撞
光路可逆光线生成
让光线从眼睛发射出去,形成眼睛-像素光路
连接像素-光源光路,看有没有物体阻挡
此时只弹射了一次,因此用Whitted-Style光线追踪,递归算法
光线可以继续折射和反射
1979年要74min,2006年要6s,2012的GPU只要1/30s
求光线和物体表面交点
隐式表面,求方程的解
显式表面
求光线和三角形交点:MT算法,利用重心坐标求解
要计算三角形数量的次数,太慢
解决办法:计算光线和包围盒的交点(本质是剪枝)
光线进入盒子时:光线进入了所有对面,进入时间取最大
光线出盒子时:光线离开了任一对面,离开时间取最小离开时间<0:盒子在光源背后,无交点
离开时间>0,进入时间<0:光源在盒子里,有交点
总结:如果有焦点,则进入时间<离开时间,且离开时间>0
利用包围盒加速
- 均匀格子:把包围盒划分成一个个格子,光线与格子求交很快
- 空间划分:根据物体疏密更合理的分格子
Oct-Tree八叉树
KD-Tree,xyz轴轮着切
BSP-Tree
KD-Tree
划分节点方法:
划分轴:x还是y还是z
划分位置:在哪划分
物体不存在中间节点,存储在子节点
划分后再进行求交
空间划分缺点:
1不知道三角形和aabb是否有交集
2一个物体被存储在好几个叶子节点中
- 物体划分&BVH
物体划分是先分两半(物体),再求包围盒,直到包围盒内三角形小于一定数量
空间划分是先求包围盒,再分两半
划分节点方法:
确定划分轴
找中间物体:例如按x轴将三角形重心坐标排序,找中位数n/2
辐射度量学
给出实际光的物理量
radiant energy类似能量
radiant flux辐射通量,类似功率Φ
radiant intensity光源某一方向多少功率I
功率除以立体角,相当于单位方向的功率
立体角w:表面积A/r^2,空间中一个角有多大
微分立体角dw=sinθdθdΦ
Irradiance单位面积接收的功率E
radiance光线传播过程的能量,单位立体角单位面积L,注意这个立体角和表面需要垂直
BRDF双向反射分布函数:表述单位表面把一个方向接收的能量反射到其他方向的分布
fr=反射方向能量L/入射方向能量E
反射方程:好多个入射方向叠加后的反射方向能量Lr
渲染方程:反射方程+自身发光能量
全局光照:渲染方程可以按弹射次数分解(为什么不按能量分?镜面材质可以弹射好多次)
0次:光源本身
1次:直接光照
2次以上:间接光照
光栅化只有0次和1次
Whitted遇到漫反射/模糊反射就停止了
蒙特卡洛路径追踪——解方程
蒙特卡洛积分:计算定积分
在定义域内随机采样,当作长方形求面积
路径追踪
间接光照怎么办?递归
①光线数量爆炸:蒙特卡洛积分从P点一下子发出N根光线,变成N次发出1根光线(一个像素采样N次)
本质是递归函数内不能有for循环
②递归停止条件:俄罗斯轮盘赌RR
③光源小的情况下算法低效:分直接光照和间接光照两种情况。
直接光照:积分换元,在光源上直接蒙特卡洛积分,不需要递归和RR
间接光照:如果从P点随机打出的光线打到的不是光源,递归和RR
仍然存在的问题
如果对函数采样
蒙特卡洛概率函数的选择,重要性采样
低差异化序列
radiance和颜色的联系,伽马矫正