光栅化的问题
- 软阴影
- glossy反射
- 间接光照
- 速度快但是质量较低
光线追踪问题
- 光追更加准确但是很慢
- 往往是离线的生成图像,而光栅化是实时的
- 光追的假设:光线延直线传播、光线不会发生碰撞、光线从光源出发到达人眼(光路可逆性)。
Whitted-Style光线追踪
- 几个shadow rays的着色结果都会加回到image plane上
- 光线方程表示:
- 求光线与隐式表面的交点:将光线方程与隐式表面表达式联立,然后解出t,t必须为实数并且t>=0。
- 求光线与显示表面的交点:求光线与三角形面的交点
- 求光线和三角形交点:首先求三角形所在平面与光线的交点,然后再判定光线与三角形的交点。
- 平面上的点的定义方式(点法式):
- 计算光线与平面交点:
- 另一种光线与三角形求教的方法:
最后验证t>0,b1>0,b2>0,1-b1-b2>0。 - 加速光线和表面求交:包围盒
- 求包围盒与光线交点方法
首先我们需要检查t是否为正,如果t_exit<0说明盒子在光线背后,如果t_exit>=0&&t_enter<0光线在盒子里面。
如果光线和AABB盒子有交点那么t_enter<t_exit&&t_exit>=0 - KD-Tree:(所有的三角形都存储在叶子节点上)
- KT-Tree的问题:很难判断包围盒与哪些三角形有交集、一个物体有可能存在多个叶子节点里
- 物体划分(BVH)
- BVH的问题:如何将让两个子集之间的交叠尽可能的小?
- 如何划分一个节点?(1.总是划分最长的那个轴 2.在第(中位数)个物体的位置划分)
- 空间划分与物体划分
辐射度量学
- Radiant Intensity:单位立体角上的功率
- Irradiance:单位面积上的功率(面与光线垂直)
- Radiance
- Radiance与Irradiance和Intensity的关系
- 各个方向上的Radiance之和等于Irradiance。
BRDF(Bidirectional Reflectance Distribution Function )
- 反射方程:
- 渲染方程:(加上了自发光)
蒙特卡洛积分
- 用一个长方形的面积近似当作积分结果,多次采样求平均得到最终结果。f(x)是求积分的函数,p(x)是采样的函数
Whitted-Style 光线追踪的问题
- 无法判断Glossy材质光线反射的方向。
- 漫反射材质之间没有反射。
路径追踪
- 只考虑直接光照
- 支持全局光照
- 上述算法的问题:(1)光线数量增长会爆炸增长(解决方法:每个着色点仅打出一条光线,N=1就叫路径追踪),(2)递归算法没有停止条件。
但是上述算法会产生噪声,因此每个像素进行多次路径追踪求平均
让递归停止的方法:俄罗斯轮盘赌(间接光照)
- 路径追踪问题:低效(低效原因:有太多光线不能打到光源上)
- 解决方法:在光源上采样,把渲染方程写成对光源的积分。