学习MIT6.837光线追踪总结
2012-09-16 13:31 crazyxiazi 阅读(918) 评论(0) 收藏 举报光线跟踪是指从观察者的视点出发(两种不同的观察方式就是透视相机和正交相机),投射光线,得到所观察的点在3维场景中的位置。这个点的颜色则是由很多因素决定的,例如:
1)这个点与光源的是否直接相连(阴影),如果和光源之间没有物体的遮挡的话,则光源对物体的最终颜色有贡献;
2)这个点的材质。如果具有反射,折射的特性,则从其他点反射或折射的光线也会对最终颜色形成影响;
但是在课程中实现的方式即单纯计算场景中某一点与光源之间是否有物体并不能正确处理阴影,因为遮挡所得的物体可能是透明的,在这种情况下光源任旧产生作用。如果使用单独的函数来判断遮挡物体是否透明,然后将这些物体的transparentcolor与光源颜相乘在与物体材质作用,任然是无法正确模拟的。因为光想经过透明物体,必然要发生折射,而从3维中的一点发射到光源的光线是无法表示光线的正确走向的。因此从视点出发的光线跟踪似乎无法模拟出透明物体所产生的光斑的这种感觉。
在此之后,AssignMent6为加快算法的运算速率使用grid来进行加速。其原理是将整个场景空间分为同样大小的cell,光线沿着cell前进,每次求交只局限在这一个cell中存在的物体,这样减少了求交次数,加快了速率。这个算法的问题在于,在场景中本身物体较少的情况下,有可能使得求交次数增加。
在AssignMent7中提出了超采样和反走样,就是利用在原本基础上,每个像素点区域内,多投射出几条光线来获取多个样本,使得最终颜色更接近与事实并减少了由于浮点数计算精度问题造成的一些噪点。此后的AssignMent8则是利用Bezier曲线和Bezier patch来构建3D模型。AssignMent9则是实现了一个粒子系统,其组成由计算粒子受力的field基类,计算粒子位置如何更新的integrator类和生成初始粒子的 generator 类构成。值得一说的是integrator类,它的实现精度和使用的计算方式密切相关,在受力不断变化的力场中,所采用来解常微分方程的各种方法,误差越小,越精确。
浙公网安备 33010602011771号