光线追踪简介

为了开始本课程,我们将解释如何将三维场景制作成可视的二维图像。 一旦我们了解了这个过程及其涉及的内容,我们就可以利用计算机通过类似的方法来模拟“人造”图像。 本章描述 CGI 的构建基础。

在本课的第二章中,我们将介绍光线追踪(ray tracing)算法并简要解释其工作原理。 我们收到了很多人发来的电子邮件,询问我们为什么专注于光线追踪而不是其他算法。 事实是,我们不是。 为什么我们选择在本入门课程中重点关注光线追踪? 该算法是模拟导致物体可见的物理现象的最直接的方法。 因此,在编写创建 3D 或计算机生成图像的简单程序时,光线追踪是其他技术中的最佳选择。

首先,我们将为光线追踪算法奠定基础。 然而,一旦我们了解了实现扫描线渲染器所需的所有信息,我们还将展示如何做到这一点。

1、图像是如何创建的?

图 1:我们可以将图片想象为金字塔的切口,金字塔的顶点位于我们眼睛的中心,高度与我们的视线平行

要生成图像,我们首先需要一个二维表面(这个表面必须是某个区域,不能是一个点)。 考虑到这一点,我们可以将图片想象为金字塔的切口,金字塔的顶点位于我们眼睛的中心,其高度与我们的视线平行(记住,要看到某物,我们必须沿着一条 将眼睛与该物体连接起来的线观看)。 我们将之前提到的这个剪切或切片称为图像平面(你可以将此图像平面视为画家使用的画布)。 图像平面是一个计算机图形学概念,我们将使用它作为二维表面来投影我们的三维场景。 虽然看起来很明显,但我们刚刚描述的是用于在各种设备上创建图像的最基本概念之一。 例如,摄影中的等效物是胶片的表面(数码相机的传感器),或者如前所述,画家使用的画布。

2、透视投影

假设我们要在空白画布上绘制一个立方体。 描述投影过程的最简单方法是首先从三维立方体的每个角到眼睛绘制线条。 为了在画布上绘制出对象的形状,我们标记每条线与图像平面表面相交的点。 例如,假设 c0 是立方体的一个角,并连接到其他三个点:c1、c2 和 c3。 将这四个点投影到画布上后,我们得到 c0'、c1'、c2' 和 c3'。 如果 c0-c1 定义了一条边,我们就从 c0' 到 c1' 画一条线。 如果 c0-c2 定义了一条边,我们就从 c0' 到 c2' 画一条线。

图 2:将正面的四个角投影到画布上

如果我们对立方体的其余边缘重复此操作,最终将在画布上得到立方体的二维表示。 我们使用透视投影创建了第一张图像。 如果我们对场景中的每个对象不断重复这个过程,我们就会得到从特定有利位置出现的场景图像。 十五世纪初,画家们开始了解透视投影的规则。

3、光与色

一旦我们知道了如何在二维表面上绘制三维物体的轮廓,我们就可以添加颜色来完成图片。

快速总结一下我们刚刚学到的内容:我们可以通过两步过程从三维场景创建图像。 第一步是将三维物体的形状投影到图像表面(或图像平面)上。 此步骤只需要连接从物体特征到眼睛的线即可。 然后,通过返回并在画布上绘制这些投影线与图像平面相交的位置来创建轮廓。 你可能已经注意到,这是一个几何过程。 第二步包括向图片的线框添加颜色,这个过程称为着色(shading)。

在场景中,对象的颜色和亮度主要是灯光与对象材质相互作用的结果。 光由光子(电磁粒子)组成,换句话说,光子具有电成分和磁成分。 它们携带能量,并在直线传播时像声波一样振荡。 各种光源都会发射光子,最显着的例子是太阳。 如果一组光子撞击一个物体,可能会发生三种情况:它们可以被吸收、反射或透射。 反射、吸收和传输的光子百分比因材料而异,通常决定了物体在场景中的显示方式。 然而,所有材料的一个共同规则是,入射光子的总数始终与反射、吸收和透射光子的总和相同。 换句话说,如果有 100 个光子照射物体表面上的一个点,则 60 个光子可能会被吸收,40 个光子可能会被反射。 总数仍然是 100。在这种情况下,我们永远不会计算 70 个吸收和 60 个反射或 20 个吸收和 50 个反射,因为透射、吸收和反射光子的总和必须为 100。

在科学中,我们只区分两种类型的材料,金属,称为导体(conductors)和电介质(dielectrics)。 电介质包括玻璃、塑料、木材、水等。这些材料具有电绝缘体的特性(纯水是电绝缘体)。 请注意,介电材料可以是透明的或不透明的。 下图中的玻璃和塑料球是介电材料。 每种材料都以某种方式对某些电磁辐射透明。 例如,X 射线可以穿过人体。

物体也可以由复合材料或多层材料制成。 例如,可以有一个不透明的物体(例如木头),其顶部有一层透明的清漆(这使得它看起来既漫射又闪亮,同时与下图中的彩色塑料球一样)。

现在让我们考虑不透明和漫射对象的情况。 为了简单起见,我们假设吸收过程决定了物体的颜色。 白光由“红”、“蓝”和“绿”光子组成。 如果白光照射红色物体,吸收过程会滤除(或吸收)“绿色”和“蓝色”光子。 因为物体不吸收“红色”光子,所以它们被反射。 这就是该物体呈现红色的原因。 我们之所以能看到该物体,是因为该物体反射的一些“红色”光子飞向我们并撞击我们的眼睛。 照明区域或物体上的每个点都会向各个方向辐射(反射)光线。 每个点只有一束光束垂直射入眼睛,因此可以被看到。 我们的眼睛由感光器组成,可将光转化为神经信号。 然后,我们的大脑可以使用这些信号来解释不同的色调和色调(我们仍在确定如何确定)。 这是描述所涉及现象的非常简单的方法。 关于颜色的课程中对所有内容都有更详细的解释(你可以在计算机图形学数学部分找到该课程)。

图3:Al-Haythamis 模型

与透视投影的概念类似,人类也花了一段时间才理解光。 希腊人发展了一种视觉理论,通过眼睛发出的光线来看到物体。 阿拉伯科学家伊本·海瑟姆(Ibn al-Haytham,约 965-1039 年)第一个解释说,我们之所以能看到物体是因为太阳的光线。 沿直线传播的微小粒子流从物体反射到我们的眼睛中,形成图像(图 3)。 现在让我们看看如何用计算机模拟自然!


原文链接:Introduction to Raytracing: A Simple Method for Creating 3D Images

BimAnt翻译整理,转载请标明出处