计算机图形学的基本任务就是将在3D世界中的几何物体以某种特定的视角,在2D平面上以像素的形式渲染出来。
一般来说,渲染可以分为两种思路:
object-order rendering 每个object会逐个考虑,在考虑每一个object的过程中,判断哪些像素被它影响并进行更新。
image-order rendering
每个pixel会逐个考虑,在考虑每一个pixel的过程中,判断共有哪些物体影响这个像素,并计算这个像素最终的值。
这类似两重循环的不同的循环顺序。
相比之下,image-order rendering会更加简单粗暴,也更加灵活,只不过需要更大的计算量,但是效果也往往比较好。
ray-tracing 就是 image-order rendering中的基本思想。
光线追踪考虑从像素射出的一条光线。一个物体能被这条光线看到的前提是这个物体表面与光线有交点。
对于简单的光线追踪,我们往往需要在意光线第一次hit的物体表面,因为后面的交点都会被遮挡。
通过交点的位置,法向量,观察光线的方向,光源的类型和位置等因素,我们就可以计算这个交点的颜色,从而计算像素的颜色。
所以一个基础的光线追踪器分为三个部分:
接下来会分别介绍这三个部分,而这就能构建出基本的光线追踪器。
对于绘画和计算机图形学来说,一个标准的从3D世界投影到2D平面的方式是linear perspective.
3D Objects are projected onto an image plane in such a way that straight lines in the scene become straight lines in the image.