找回密码
 立即注册
首页 业界区 科技 《Fundamentals Of Computer Graphics》第四章 光线追踪 ...

《Fundamentals Of Computer Graphics》第四章 光线追踪 总结

匝抽 2025-6-7 10:14:57
开篇

  在学过上一章光栅图像后,第四章“Ray Tracing”,就说明了如何运用基础的光线追踪算法来生成一张计算机图像。计算机图形能完成的基础任务之一是渲染Rendering)三维物体,即利用在三维空间中排布的物体所构成的场景,计算出场景在某一视点Viewpoint)观察得到的二维图像,这实际上和数世纪以来一些建筑师和工程师使用绘图与其他人交流他们的设计一样。
  从根本上来说,渲染是一个接受一系列物体的输入然后产生像素阵列输出的过程。不管怎么样,渲染涉及到考虑每个物体对每个像素的贡献,而且可以被分为两种一般方法。第一种是物体顺序渲染Object-Order Rendering),这种渲染方法以每个物体为中心,为每个物体找到它能影响的像素并且更新像素值。第二种是图像顺序渲染Image-Order Rendering),这种方式以每个像素为中心,为每个像素找到能影响到当前像素的物体并且计算像素值。你可以用嵌套循环来思考这两种方法的区别,在图像顺序渲染中,for each pixel在外面,然而在物体顺序渲染中,for each object在外面。
  使用这两种方法实际上能计算出完全一样的图像,但是由于它们的区别导致了不同的计算效果,从而造成了截然不同的性能特性。在我们讨论完这两个方法后,我们将在第九章探索方法的比较优势。但是广地来说,使用图像顺序渲染更容易得到能用的结果而且在能产生的效果上更加灵活,不过通常要花费更多的执行时间来得到相似的图像。
  光线追踪就是一个用于渲染三维场景的图像顺序算法,我们首先考虑这个,因为开发一个能用的光线追踪器相比于物体顺序渲染而言,不需要开发额外的数学工具。
基础的光线追踪算法(The Basic Ray-Tracing Algorithm)

  一个光线追踪器通过计算每个像素工作,对于每个像素来说,基础的任务就是找到在图像中的当前像素位置能看到的物体。每个像素会往不同方向“看”,任何被看到物体必定会和视线Viewing Ray)相交。看到的应该是和视线相交并且距离摄像头最近的物体,正是因为被看到的物体遮蔽了它后面的物体。一旦找到了目标物体,接着就要利用表面法线等交汇点的信息进行着色Shading),从而计算出像素的颜色。下图是个比较形象的交汇检测的例子
1.png

因此基础的光线追踪器应该包括三个部分:

  • 光线生成:它基于摄像头几何为每个像素计算视线的起点Origin)和方向Direction
  • 光线交汇:它为视线找到最近的物体
  • 着色:它基于光线交汇的的结果为像素计算颜色
基础的光线追踪程序对每个像素的计算流程应该如下:

  • 计算视线
  • 找到视线击中的最近物体和表面法线
  • 基于击中点、光源、法线计算并设置像素的颜色
透视(Perspective)

  在计算机之前的数百年间,一些艺术家一直在研究使用二维绘画来表示三维物体或场景的问题,照片也通过二维图像表示三维场景。对于制造图像来说其实有许多不一般的方式,从立体派绘画到鱼眼镜头再到外围摄像头。对于艺术和摄影还有计算机图形来说,一般途径就是线性透视Linear Perspective),在这个途径中,三维物体通过在场景中的直线在图像中依旧是直线这种投影方式被投影到图像平面Image Plane)上。
  最简单的一种投影类型就是平行投影Planar Projection),如下图所示
2.png

三维点通过跟随投影方向Projection Direction)移动,从而被映射到图像平面上。视图是由投影方向和图像平面的选择决定的,如果图像平面和观察方向垂直,那么这种平行投影叫正投影Orthographic),否则就是斜投影Oblique)。
  平行投影通常用于机械以及建筑绘图,因为这个方法可以让相互平行的直线投影后依然平行,还能保留大小以及形状当平面物体平行于图像平面时。但是它的优势同时也是它的劣势,在我们的日常生活体验中,远离我们的物体看起来会更小,因此在空间中平行的直线由我们观察可能不会平行。这是因为人眼和摄像头不会从一个方向收集光照信息,反而是通过从某个位置观察,收集四面八方来的光线。早在文艺复新时期艺术家们已经认可使用透视投影Perspective Projection)来生成看起来自然的视图,使用这种投影方法只需要让三维点跟随过视点的直线移动,如下图所示
3.png

这样离视点越远的物体在投影后会自然地变小。一个透视视图是是通过视点和图像平面的选择决定的,和平行视图一样有斜角透视视图和非斜角透视视图,它们之间的区别就在于图像中心处的投影方向。
  你可能已经了解了艺术中使用的三点透视Three-point Perspective)规则,不过我们只需要遵循这之下的数学规则,就能实现透视投影效果。
计算观察光线(Computing Viewing Rays)

  在上个部分,生成光线基本的工具就是视点和图像平面,有许多方法能得到相机几何的细节,在这个部分我们介绍一个方法基于单位正交基,支持正平行、斜平行、正交投影视图。
  为了生成光线,我们首先需要光线的数学表达。一条光线仅仅是由一个起始点和一个传播方向构成。我们可以使用三维参数直线描述光线,即

\[\mathbf{p}(t)=\mathbf{e}+t(\mathbf{s}-\mathbf{e})\]

这个参数直线可以理解为从\(\mathbf{e}\)点出发,沿\(\mathbf{s}-\mathbf{e}\)方向传播,从而找到点\(\mathbf{p}\)。对于给定的\(t\),我们就可以知道\(\mathbf{p}\)点在哪。在这个参数方程中点\(\mathbf{e}\)为光线起点,\(\mathbf{s}-\mathbf{e}\)为光线方向。下图是个形象的例子
4.png

  这里要注意的是\(\mathbf{p}(0)=\mathbf{e}\)还有\(\mathbf{p}(1)=\mathbf{s}\),如果计算出两个交汇参数\(t\)且满足\(0
您需要登录后才可以回帖 登录 | 立即注册