计算机图形学:光线追踪原理(ray tracing)

现实中的光学模型

在现实中,当关闭屏幕光亮的时候,会看到屏幕反射到的一张帅气或者漂亮的脸,那么这个看到的物体就是从屏幕中反射出来,其实不光镜子,任何物体都存在反射,发光源发出光线,通过物体反射到人的眼睛中

计算机图形学:光线追踪原理(ray tracing)_第1张图片

这里要提出另一个概念,就是图形光栅化的流程没是将计算出来空间中的图形在计算机屏幕上面的每一个像素是怎么显示的,这个部分流程

计算机图形学:光线追踪原理(ray tracing)_第2张图片

物体有着人不同的材质,但绝大多数物体表面都是凹凸不平的,所以绝大多数物体表面都会发生漫反射

计算机中的光线追踪基本方案

1979年,Turner Whitted提出了递归光线追踪算法,准确模拟了光线在场景中发生多次反射、折射的路径。就是这篇工作开创了光线追踪的想象空间

计算机图形学:光线追踪原理(ray tracing)_第3张图片

其实计算机计算光线追踪和现实中的流程在原理上是基本一致的,不过计算光线追踪是从摄像头发出的光线,整个过程类似于逆向过程,全部流程大概如下:

计算机图形学:光线追踪原理(ray tracing)_第4张图片

光线追踪全流程

1.创建主射线:从摄像头的每一个像素点发出一条主射线,这里的摄像头可以理解为屏幕空间的像素点

2.投射射线交互:根据每一条主射线去和和场景交互

3.获取表面属性:根据相交的对象,获取对象的表面属性,法线,纹理坐标等,和表面的情况(有漫反射和镜面反射两种情况)

计算机图形学:光线追踪原理(ray tracing)_第5张图片

计算机图形学:光线追踪原理(ray tracing)_第6张图片

4.递归光线追踪:根据表面特性,去递归光线,比如光线接触到玻璃的时候,光线会分成两条,分别是反射光线和折射光线

计算机图形学:光线追踪原理(ray tracing)_第7张图片

以上四个过程的递归过程会消耗巨大的的,计算机的计算开销即为大,所以这种工作更适合GPU去计算,可以参考我的另一篇文章:

GPU逻辑管线工作流程_星空_MAX的博客-CSDN博客

大量的光线更适合擅长并行计算的GPU去计算

非光线追踪与光线追踪对比图:

 

可以看到有着开启光线追踪的《Minecraft》有着非常真是的光照反射,但是帧数大大下降

但是1999年的顶级游戏显卡GeForce到现在的RTX3090,计算力已经提升了10000多倍

面对未来,何不大胆想象一些呢

你可能感兴趣的:(图形渲染)