14、计算机图形学——whited-style光线追踪

一、为啥需要光线追踪

以往的Blinn-Phong光照模型在渲染场景时,对于光的漫反射和镜面反射都只会计算一次,但是实际上在一个场景里面,光有可能既存在反射也存在折射,而且,反射次数和折射次数并不只是一次

因此,Blinn-Phong在精确计算光照强度的时候是不太准确的,而光线追踪渲染方式,就是为了解决Blinn-Phong光照模型存在的问题

二、光线追踪的三个假设

在光线追踪渲染模型中,光是沿着直线传播,光线和光线之间不会产生碰撞,所有的光路都是可逆的

三、光线追踪的过程

首先从人眼或者相机发出光线,穿过每个像素,打到物体上,并判断光线与物体的交点,该过程如下图所示

如果一条光线可以穿过多个物体,只记录第一个被照射到的物体,后面的物体就被遮挡上了,就形成了阴影,如上图虚线所示

接着利用Blinn-Phong光照模型计算每条光线的照射点的亮度,将所有光线都计算一遍,就能得到所有像素的亮度

然而,这样做得到的结果与Blinn-Phong光照模型得到的结果一样,所以,要在此基础上添加一些额外的东西

添加的东西就是光线的反射和折射(反射和折射不是无限次的,需要指定反射或者折射的最大次数。),当光线打到光滑的物体表面时,会同时发生折射和反射

根据之前的三个设定中的光路的可逆性可知,此时,眼睛与球的交点的光照亮度不仅仅是由Blinn-Phong光照模型定义的,还包括了三角形和四边形的局部关照所产生的光照以及四边形的折射点所产生的的光照

然后,将上述四个点分别与光源连接。计算这四个点的局部光照强度,然后,将其他三个点的光照亮度加权累加(因为要考虑光线反射或者折射时的能量损失,所以要加权累加),最后与眼睛与球的交点的光照亮度进行求和,得到的就是最终该像素点的颜色

四、如何计算光线和物体表面的交点

知道了whited-style光线追踪的过程,那么,该如何计算光线和物体表面的交点呢?

4.1、光线的表示

上述光线方程的最终表达是一个向量,由起点,方向和时间构成

4.2、光线和隐式曲面的交点

以球体为例,将下面两个方程联立求解时间t

结果如下

最后,根据一元二次方程来判断由0,1,2个交点

4.3、光线和显式曲面的交点

思路依然是相同的,将光线方程和平面的点法式方程联立

求得t之后,带入光线方程,就能得到交点了

得到了交点之后,就能进一步判断该点是否在三角形内了

上述过程判断点是否在三角形内较为麻烦,所以又有了直接计算出三角形与光线交点的算法了

上述推导过程如下

交点可以通过光线来表示,也可以通过重心坐标来表示,将上式整理可得

则,整理后的表达式可写成

上式又可以写成

通过克拉默法则可解得

分子分母的行列式可以分别通过向量来表示

其中分母可以表示为

分子可以表示为

所以,t ,b1,b2可以分别表示为

参考

GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili 

克莱姆法则_百度百科 (baidu.com)

Möller-Trumbore算法-射线三角形相交算法_zhanxi1992的专栏-CSDN博客

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值