在现实中,当关闭屏幕光亮的时候,会看到屏幕反射到的一张帅气或者漂亮的脸,那么这个看到的物体就是从屏幕中反射出来,其实不光镜子,任何物体都存在反射,发光源发出光线,通过物体反射到人的眼睛中
这里要提出另一个概念,就是图形光栅化的流程没是将计算出来空间中的图形在计算机屏幕上面的每一个像素是怎么显示的,这个部分流程
物体有着人不同的材质,但绝大多数物体表面都是凹凸不平的,所以绝大多数物体表面都会发生漫反射
1979年,Turner Whitted提出了递归光线追踪算法,准确模拟了光线在场景中发生多次反射、折射的路径。就是这篇工作开创了光线追踪的想象空间
其实计算机计算光线追踪和现实中的流程在原理上是基本一致的,不过计算光线追踪是从摄像头发出的光线,整个过程类似于逆向过程,全部流程大概如下:
1.创建主射线:从摄像头的每一个像素点发出一条主射线,这里的摄像头可以理解为屏幕空间的像素点
2.投射射线交互:根据每一条主射线去和和场景交互
3.获取表面属性:根据相交的对象,获取对象的表面属性,法线,纹理坐标等,和表面的情况(有漫反射和镜面反射两种情况)
4.递归光线追踪:根据表面特性,去递归光线,比如光线接触到玻璃的时候,光线会分成两条,分别是反射光线和折射光线
以上四个过程的递归过程会消耗巨大的的,计算机的计算开销即为大,所以这种工作更适合GPU去计算,可以参考我的另一篇文章:
大量的光线更适合擅长并行计算的GPU去计算
可以看到有着开启光线追踪的《Minecraft》有着非常真是的光照反射,但是帧数大大下降
但是1999年的顶级游戏显卡GeForce到现在的RTX3090,计算力已经提升了10000多倍
面对未来,何不大胆想象一些呢