计算机图形学理论(6):光线追踪

发布时间:2024年01月10日

本系列根据国外一个图形小哥的讲解为本,整合互联网的一些资料,结合自己的一些理解。

什么是光线追踪

该方法是通过跟踪穿过图像平面中每个像素的光路来生成图像。

在现实世界中,光从光源出发,然后到达我们的眼睛。然而,我们在光线追踪中以相反的方式做到这一点。
image.png

为什么要用光线追踪?

通过光线追踪渲染的场景比扫描线渲染更加真实,它还可以模拟多种光学效果,如反射、折射、阴影、散射、焦散等。
image.png

光线追踪的基本思想

从根本上说,它是基于几何光学的数字模拟。光线追踪使用向后映射的方式,从观察者到物体,然后从物体到光源的有限数量的光线。
image.png

光线追踪算法

  1. 假设场景已经转换到图像空间,假设观察者位于 z 轴正方向
  2. 生成初次光线,每条光线从屏幕像素传递到场景
  3. 沿着射线路径找到最近的物体(找到光线和物体之间的第一个交点)
  4. 计算光采样点,应用光照模型来确定光源的直接贡献
  5. 递归生成二次射线

image.png

光射线生成

生成射线遵循两点之间的直线方程。
image.png
通过这种方式,我们可以从视角产生初始光线。

但有一个问题。我们的场景中通常存在很多几何图形,计算它们的所有反射成本太高。我们可以根据包裹子网格的新网格(边界体积层次结构)来计算它,而不是再次计算基元

计算光线交点

交点在球体上

我们有两个方程。一个是关于射线的,另一个是关于球体的。然后,我们可以通过线性求解方程来求根。
image.png
得到交点 P 后,我们需要找到该点上的法向量。
image.png
它与从球体中心点到P点的矢量方向相同。我们只需要将其归一化即可。

交点在三角面上
  1. 检查射线是否与包含目标三角形的平面相交,平面方程表示为平面上任意两点及其法线的组合。

image.png
2. 如果满足条件一,则检查三角形区域内部是否存在交点。
首先,使用两条边 (V1, V2) 计算法线向量 (N1),然后我们在 (p-p0) 和法线 (N1) 之间进行点积。如果结果为负,则表示交点在三角形之外。
image.png

优化

关于求交点,单纯地计算所有交叉点太费力了。我们可以使用包围盒层次结构来加速该过程。

与三角形相交类似,我们首先检查光线和包围盒之间是否存在相交,如果它相交,我们就进入包围盒的子节点,然后不断重复该过程!
image.png
让我们来看下面的例子。在此图中,光线进入包围盒1,与包围盒 2 相交。然后,我们需要进入包围盒的下一个深度,计算出也与包围盒 B 相交。像这样,我们重复这个算法,直到它击中最后一个子节点。
image.png

文章来源:https://blog.csdn.net/u013929284/article/details/135501159
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。