计算机图形学(光线追踪)


闫令琪教授计算机图形学

Why Ray Tracing?

光栅化很难表示全局的效果(软阴影、glossy reflection光泽反射(指有一定反射能力但又有其表面粗糙性的物体反射)、indirect illumination间接光照(光线传入到人眼前弹射了不止一次)等);其次光栅化虽然速度较快,但是质量却很低:
在这里插入图片描述
此外,由于光线追踪生成速度非常缓慢,一般用于制作动画视频时使用,而光栅化一般使用于实时场景渲染:
在这里插入图片描述

Ray-Tracing Algorithm(光线追踪算法)

Basic Ray-Tracing Algorithm

首先从相机出发遍历每一个试图的像素点(image plane),延伸出去一根直线直到最初接触到某个物体的表面,表示人眼是否能观测到这个位置:
在这里插入图片描述
之后将相交的这个点连接到光源,看是否处于阴影部分,然后在image plane对应的网格位置记录该点的颜色信息等,不断重复操作直到遍历完image plane中的所有像素点(实际上就是做了一个类似于光栅化中的深度图的操作):
在这里插入图片描述

Whitted-Style Ray Tracing(Whitted风格的光线追踪)

如下图,Whitted-Style Ray Tracing较好地解决了折射和反射相关的投影到视觉图上的效果:
在这里插入图片描述

实现

依旧是遍历每一个image plane像素块,primary ray打在透明球体上产生了反射光线和折射光线又形成了secondary rays;之后在各个光线与物体的接触面上形成了4个观测点,均与光源(这里视为点光源)连接形成了4条shadow rays;最后在红色箭头所指向的该处像素块中按一定的权重比例(如直射光线60%,折射反射光线占40%等)记录下颜色信息:
在这里插入图片描述

Ray-Surface Intersection(光线曲面相交)—如何求光线和曲面的交点

光线和球的交点
求光线和球的交点实质上就是求同时满足光线方程和球方程的点:
在这里插入图片描述
在这里插入图片描述
推广
定义某个点(P)满足某个函数,使得该函数等于0,表面该点在该图形的表面,同时该点在光线上,那么该点P一定可以写成o+td的形式:
在这里插入图片描述
如何做光线和三角形的交点
首先先做该三角形的一整个平面,确定一条法线(固定平面的方向)和一个平面必经的点p’(固定平面的大体位置),那么作该平面上任意一点和p’的连线和法线的点乘必为0,拓展可得该平面的公式:
在这里插入图片描述
同时,如果我想要确定点p和三角形的关系,首先可以明确的是p位于该平面上且光线必定需要经过该点,即满足二者的方程式,因此可以对其公式进行代换得出t的值:
在这里插入图片描述

Möller Trumbore Algorithm

特点 解出该点的在平面上的位置之后直接顺便判断了该点是否在三角形内。

思路 确定光线必定经过该点(P),同时沿用之前的知识(如何判断平面内一点和三角形的关系),即aP0+bP1+c*P2=P(其中a+b+c=1;P0,P1,P2是三角形的三个顶点;如果该点P位于三角形中,那么a,b,c均为正数),由此得出红框中的公式。而黄框中的内容是左侧计算方程式中的公式替代,三个方程三个未知数可以计算出这三个未知数(t,b1,b2):
在这里插入图片描述

Accelerating Ray-Surface Intersection(加速光线曲面相交)

简单光线场景相交:
•彻底测试每个三角形的射线相交
•找到最近的命中率(即最小t)
问题:
•朴素算法=像素⨉ 三角形 (⨉ 反射/折射)
•非常慢!
如下图中非常复杂的场景,由大量三角形构成且具备很多细节内容,如果每根光线都与所有三角形求交并找最小t,再加上图中有各种光线的反射和折射现象,将花费大量时间:
在这里插入图片描述

Bounding Volumes(包围盒)

以另一种方式去理解包围盒 :一个包围盒实际上是由三对平行面包围而形成的一个三维空间中的区域,所要描述的物体全部位于这个包围盒的内部,该盒仍然无限逼近于物体边界范围:
在这里插入图片描述
这样理解的原因
根据平面计算交点方程式中的t较为复杂,如下图中的靠上位置图片;而对于一对平行的面来说,比如下面的面为垂直于x轴的面,我只需要计算p’点的x坐标和点光源o的x坐标的差值,再与光源方程式中d在x方向上的投影作比值即可求出t,只不过需要作三次运算(x,y,z三个方向的分量)但是总体上来说比上面的点乘计算量要小很多:

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值